`
sunli_qun
  • 浏览: 13693 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习java&XML第二天熟悉一下DTD

    博客分类:
  • java
阅读更多
DTD(Document Type Definition)文件类型描述

第一点要注意的:DTD中的关键字必须全部大写!

一、DTD的位置
      
DTD可以放在xml文档里面:

出自《XML入门》
<?xml version = "1.0" encoding="GB2312" standalone = "yes"?>
<!DOCTYPE 联系人列表[
        <!ELEMENT 联系人列表 (联系人)*
>
        
<!ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)>
        
<!ELEMENT 地址 (街道,城市,省份)>
        
<!ELEMENT 姓名 (#PCDATA)>
        
<!ELEMENT ID (#PCDATA)>
        
<!ELEMENT 公司 (#PCDATA)>
        
<!ELEMENT EMAIL (#PCDATA)>
        
<!ELEMENT 电话 (#PCDATA)>
        
<!ELEMENT 街道 (#PCDATA)>
        
<!ELEMENT 城市 (#PCDATA)>
        
<!ELEMENT 省份 (#PCDATA)>
    ]>
<联系人列表>
...................................

放在里面的时候,应该注意“standalone = "yes"”
也可以放在外面,放在外面有两种形式,一种是引用本地文件,如:

<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 联系人列表 SYSTEM "fclml.dtd">
<联系人列表> 
..................

引用的格式是:<!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL">
另外一种是引用公共的文档定义,如:
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
格式为:<!DOCTYPE 根元素 PUBLIC "DTD名称" "外部DTD的URL">
其中DTD名称解释为:
这个DTD标识的命名规则和XML文件的命名规则稍有不同。具体地说,DTD名称只能包含字母、数字、空格和下面的符号:_%$#@()+:=/!*;?。同时,DTD名称还必须符合一些标准的规定。例如,ISO标准的DTD以“ISO”三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。
所以说struts的配置文件就是“未被改进的非ISO标准的DTD文档”

二、DTD的内容
DTD文档的内容总结下来有几个比较重要也比较常用的:参数实体定义、元素定义和属性定义
1、参数实体定义
   实体实际上在XML当中充当宏定义或者别名之类的意思,也可以理解成public static String......
   参数实体是专门用在DTD当中的,你可以在下面两项元素定义和属性定义中引用参数实体。
   其定义方式如下:
   <!ENTITY % 实体名 "实体内容"> 注意,在XML中的实体定义是没有%的
   或者是:
   <!ENTITY % 实体名 SYSTEM "外部文件名">
   引用方式:
   %实体名
    例子:
   <!ENTITY % Boolean "(true|false|yes|no)">表示定义了一个Boolean 的参数实体,值是"(true|false|yes|no)"
   在struts的配置文件的DTD中有如下描述:
   <!ATTLIST form-bean      dynamic        %Boolean;       #IMPLIED>
   也就定义了form-bean这个元素的dynamic属性可以取得值是true、false、yes、no其中之一。

2、元素定义
   用来定义元素的格式以及元素的子孙等。
   定义形式:    
   <!ELEMENT 元素名 元素内容描述>
   元素定义这里由于篇幅有限,仅列几个例子
      1、<!ELEMENT 联系人列表 ANY>表示联系人列表这个元素的格式及其子孙都不受限制。
      2、<!ELEMENT 姓名(#PCDATA)>表示姓名这个元素只能包含文本数据
      3、<!ELEMENT 联系人(姓名 EMAIL)>表示联系人这个元素只能包含姓名和EMAIL两种子孙,顺序不限,并且姓名只能由一个,EMAIL也只能由一个。
      4、<!ELEMENT 联系人(姓名,EMAIL)>表示联系人这个元素只能包含姓名和EMAIL两种子孙,有顺序的限制,并且姓名只能由一个,EMAIL也只能由一个。
      5、<!ELEMENT 联系人(姓名,EMAIL+)>表示联系人必须有且仅有一个姓名子孙,有一个到多个EMAIL子孙,其中,如果+换作*,则表示零个或者多个。
      6、<!ELEMENT 联系人(姓名,EMAIL)+>表示联系人有一组到多组子孙,每组中有且仅有一对姓名和EMAIL
      7、<!ELEMENT 联系人(姓名,(电话|EMAIL))>表示联系人有一组到多组子孙,每组中第一个元素一定是姓名,第二个元素要么是电话,要么是EMAIL,两者选一个。
      8、<!ELEMENT 联系人 EMPTY>联系人这个元素不包含任何子孙,也不包含文本。

3、属性定义
      格式:
<!ATTLIST 元素名 (属性名 属性类型 缺省值)*>
      例子:
      
1、<!ATTLIST 页面作者
        姓名 #CDATA #IMPLIED
        年龄 #CDATA #IMPLIED
        联系信息 #CDATA #REQUIRED
        网站职务 #CDATA #FIXED "页面作者"
        个人爱好 #CDATA "上网">
      其中,定义了页面作者这个元素的属性可以有“姓名”,“年龄”,“联系信息”,“网站职务”和“个人爱好”
      并且,姓名和年龄是纯文本,可以没有,联系信息必须有,网站职务一定是“页面作者”,个人爱好如果不填,则默认是上网。

      2、<!ATTLIST 肉 类型( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">元素肉可以有“类型”属性,类型属性可以选择 鸡肉 | 牛肉 | 猪肉 | 鱼肉其中一个,默认是“鸡肉”
      3、<!ATTLIST 联系人 编号 ID #REQUIRED>联系人元素有且必须有编号属性,其类型是ID型的,ID型或者是IDREF型的属性值必须是一个有效的XML名称,它由字母、数字或下划线开始,名字中不能出现空白符。类似Html中的ID。
      4、另外类型NMTOKEN和NMTOKENS还有NOTATION类型我还不是太明白,那位明白的不妨给出^_^。
分享到:
评论

相关推荐

    XML和Java解析技术

    - 第二天:XML - 第三天:DTD - 第四天:命名空间与XML Schema - 第五天:XPath与XSLT - 第六天:Java与DOM - 第七天:Java与SAX、XSLT #### 四、课程组织 - **讲座**:涵盖理论知识和概念介绍。 - **演示**:展示...

    SSH框架知识总结

    此文件需要遵循DTD规范,可以通过本地拷贝DTD文件并设置Eclipse的XML Catalog来避免网络加载问题。 ```xml &lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" ...

    JBPM、OSWORKFLOW分析报告

    3. **学习成本**:相比于其他工作流产品,JBPM的学习成本较低,特别是对于已经熟悉Java的开发人员。 4. **用户和角色整合**:为了确保流程的流转和任务的分派完成是由用户控制的,需要将用户、角色和权限整合到JBPM...

    spring quartz定时器的简单配置和使用

    - 第二位(分钟):`*` 表示任意分钟。 - 第三位(小时):`*` 表示任意小时。 - 第四位(月份中的日期):`*` 表示任意日期。 - 第五位(月份):`*` 表示任意月份。 - 第六位(星期中的天):`?` 表示不关心...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    第二章 系统设计 2.1. 系统分析 在整个blog进行开发之前,要确定出整个项目的整体架构,包括系统的选型、运行环境的确定及系统结构设计。下面对这进行详细介绍。 在进行软件系统开发的最初环节,一般都需要进行...

    Spring中Quartz的配置

    #### 二、Quartz简介 Quartz是一个全面的、开放源代码的作业调度框架,它可以被应用在J2EE和J2SE应用程序中,用于处理定时任务的调度需求。它提供了强大的调度功能,可以实现复杂的调度策略,同时具有高度的可靠性...

Global site tag (gtag.js) - Google Analytics