一,什么是DTD?
1,XMl是一种元标记语言,是描叙语言的语言,定义标记的语法结构,从而生成新标记。而DTD则是为新标记建立文档并进行规范说明。
也就是说XML定义标记的语法结构是通过DTD来定义,并指定文档结构的规范,而XML文档来使用标记。
2,自描述数据的规范。
二,DTD的作用
1,DTD定义了文档中的元素(标记和属性)和实体,以及相互关系。数据和结构分离。
2,通过DTD验证XML文档的有效性。DTD为解析器提供了解析XML文档的依据。所以每个XML文档必须指定对于哪个DTD有效。
三,DTD的结构
1,元素的声明:使用元素声明来声明XML文档中的元素
⑴,带有数据的元素:
数据类型:
#CDATA:指元素包含不通过解析器解析的字符数据。特殊字符和保留字不需要转义。
#PCDATA:指元素包括解析器可解析字符数据。特殊字符和保留字需要转义才可以通过解析器。
ANY:元素可以包含任何声明类型的子元素和字符数据。
⑵,带有子元素的元素:
多个子元素用逗号隔开。
在文档中的顺序和定义中的顺序一致。
子元素可以有自己的子元素。
①相同元素只出现一次:
②相同元素至少出现一次:+
③相同元素出现零次或多次:*
④相同元素出现零次或一次:?
⑶ ,空元素:
空元素可以有属性
⑷,混合声明
组可以是序列或选择子元素和/或子组:
①序列
: 元素A由单个子元素B组成.
:元素A由子元素B和C组成.
:元素A由子元素B ,E和选择子组(C或D中之一)组成.
②选择 子元素和/或子组
:元素A由子元素选择子组(B或C)组成.
:元素A由包括序列子组(D和E)的选择(B或C或D,E之一)组成.
2,属性的声明
⑴空属性
⑵非空属性
属性值:
①,Default属性值:指定一个默认值
DTD示例:
XML示例:
<售价 货币单位 = "人民币">10.90售价>
②,Implied属性值:可以不提供该属性,该属性也没有默认值。
DTD示例:
XML示例:
<售价>10.90售价>
③,Required属性值:必须提供该属性,但可以没有默认值。
DTD示例:
XML示例:
<售价 货币单位 = "美元">10.90售价>
④,Fixed属性值:使属性具有固定值,不可以更改。
DTD示例:
XML示例:
<售价 货币单位 = "人民币">10.90售价>
属性类型:
①,Enumerated属性类型:使默认值成为一组固定值中之一。
DTD示例:
XML示例:
<售价 货币单位 = "欧元">10.90售价>
②,ID和IDREF属性类型
1,ID:用于搜索某个元素的特定实例,每个元素都可以具有ID类型的属性。
DTD示例:
XML示例:
<售价 ID = "BOOK1">10.90售价>
<售价 ID = "BOOK2">10.90售价>
<售价 ID = "BOOK3">10.90售价>
2,IDREF:指向一个元素,引用其他元素中的一个元素。
DTD示例:
XML示例:
<售价 ID = "BOOK1" 货币单位 = "人民币">10.90售价>
<售价 ID = "BOOK2" IDREF = "BOOK1">售价>
③,IDREFS属性类型
指向多个元素ID,用空格分开。用于指向XML文档中的相关元素列表。
四,使用DTD
1,内部DTD
XML声明后在XDOCTYPE声明中编写内部DTD。
元素声明
。。。
]>
2,外部DTD
编写DTD文件,扩展名为DTD,在XML文档DOCTYPE声明中添加DTD引用,告诉解析器外部DTD信息,
3,DTD中的内部实体和外部实体和
参见:XML系列:XML文档结构 中的实体;
4,DTD中的参数实体
先用内部DTD声明,把参数实体设置为元素名 ,在XML文件中引用 外部DTD验证。
DTD文件
...
...
XML文件
...
]>
...
例子:不同元素的XML共同关联一个DTD文件
DTD文件
...
...
XML文件1
...
]>
...
XML文件2
...
]>
...