3.3 DTD文档的结构

从前面的介绍可以看出,DTD文档并不是XML文档,而只是为XML定义语义约束的文档,因此DTD文档的语法非常简单。大致上,DTD文档有如下结构:

alt 第1行是DTD声明部分,该声明与XML声明的语法相同。

alt 0到多个注释部分,DTD注释与XML注释的语法完全相同。

alt 0到多个<!ELEMENT…>定义,每个<!ELEMENT…>定义一个XML元素。

alt 0到多个<!ATTLIST…>定义,每个<!ATTLIST…>为XML元素定义一个属性。

alt 0到多个<!ENTITY…>定义,每个<!ENTITY…>定义一个实体。

alt 0到多个<!NOTATION…>定义,每个<!NOTATION…>定义一个符号。

上面的语法中,<!ELEMENT…>定义最复杂,XML文档中可出现的每个元素都需要使用它进行定义。

上面的<!ELEMENT…>、<!ATTLIST…>、<!ENTITY…>和<!NOTATION…>4个定义彼此完全独立,无须相互嵌套,因此语法非常简单,读者只需分别掌握4个定义的语法细节即可。

3.3.1 验证XML文档的有效性

为XML文档提供DTD约束之后,使用EditPlus等文本编辑器无法判断该XML文档是否有效,使用Internet Explorer、Firefox等浏览器也不会判断其是否有效。


alt提示

对于Internet Explorer、Firefox等浏览器而言,只要是格式良好的XML文档,即可正常浏览。至于这些XML文档是否有效,浏览器并不关心。


为了验证一份XML文档是否有效,通常可采用如下两种方式:

alt 利用专业的XML编辑器进行验证。

alt 利用专门的XML解析器进行编程验证。

上述两种方式中第1种方式简单易行,例如编写了如下XML文档:

程序清单:codes\03\3.3\valid.xml

alt

并为该XML文档提供了如下DTD文档:

程序清单:codes\03\3.3\book.dtd

alt

当使用XMLSpy编辑上面的valid.xml文档时,按F8键,即可在XMLSpy窗口的下方看到图3.1所示结果。

alt

图3.1 使用XMLSpy验证XML文档的有效性