3.3 DTD文档的结构
从前面的介绍可以看出,DTD文档并不是XML文档,而只是为XML定义语义约束的文档,因此DTD文档的语法非常简单。大致上,DTD文档有如下结构:
第1行是DTD声明部分,该声明与XML声明的语法相同。
0到多个注释部分,DTD注释与XML注释的语法完全相同。
0到多个<!ELEMENT…>定义,每个<!ELEMENT…>定义一个XML元素。
0到多个<!ATTLIST…>定义,每个<!ATTLIST…>为XML元素定义一个属性。
0到多个<!ENTITY…>定义,每个<!ENTITY…>定义一个实体。
0到多个<!NOTATION…>定义,每个<!NOTATION…>定义一个符号。
上面的语法中,<!ELEMENT…>定义最复杂,XML文档中可出现的每个元素都需要使用它进行定义。
上面的<!ELEMENT…>、<!ATTLIST…>、<!ENTITY…>和<!NOTATION…>4个定义彼此完全独立,无须相互嵌套,因此语法非常简单,读者只需分别掌握4个定义的语法细节即可。
3.3.1 验证XML文档的有效性
为XML文档提供DTD约束之后,使用EditPlus等文本编辑器无法判断该XML文档是否有效,使用Internet Explorer、Firefox等浏览器也不会判断其是否有效。
提示
对于Internet Explorer、Firefox等浏览器而言,只要是格式良好的XML文档,即可正常浏览。至于这些XML文档是否有效,浏览器并不关心。
为了验证一份XML文档是否有效,通常可采用如下两种方式:
利用专业的XML编辑器进行验证。
利用专门的XML解析器进行编程验证。
上述两种方式中第1种方式简单易行,例如编写了如下XML文档:
程序清单:codes\03\3.3\valid.xml
并为该XML文档提供了如下DTD文档:
程序清单:codes\03\3.3\book.dtd
当使用XMLSpy编辑上面的valid.xml文档时,按F8键,即可在XMLSpy窗口的下方看到图3.1所示结果。
图3.1 使用XMLSpy验证XML文档的有效性