DTD 验证学习笔记

什么是 DTD?

DTD,全称为 Document Type Definition,即文档类型定义。它是一种用于规定 XML 文档结构和元素的验证方法。DTD 定义了每个 XML 文档可以包含哪些元素、元素的顺序、元素可以包含哪些属性等信息,这样就可以确保 XML 文档的结构是正确的。

DTD 的语法

DTD 语法定义了多种组成元素,包括标签、元素、属性和实体。下面是一些常见的 DTD 元素:

标签

标签是 DTD 中最重要的元素之一,它表示 XML 文档中的元素。DTD 中标签的语法如下所示:

Copy Code
<!ELEMENT element-name (child-element-name*)>

其中,element-name 表示元素名称,而 (child-element-name*) 则表示子元素名称可重复出现多次。

元素

元素是 XML 文档中的一个基本构建块。DTD 中元素的语法如下所示:

Copy Code
<!ELEMENT element-name content-definition>

其中,element-name 表示元素名称,而 content-definition 则表示元素内容的类型,可以是 EMPTY、ANY、PCDATA 或任何其他定义过的元素。

属性

属性是指 XML 元素中的某些附加信息。DTD 中属性的语法如下所示:

Copy Code
<!ATTLIST element-name attribute-name attribute-type default-value>

其中,element-name 是元素名称,attribute-name 是属性名称,attribute-type 是属性数据类型,default-value 是属性的默认值。

实体

实体是一些具有特殊含义的 XML 字符。DTD 中实体的语法如下所示:

Copy Code
<!ENTITY entity-name "entity-value">

其中,entity-name 表示实体名称,而 "entity-value" 则表示实体的值。

DTD 验证实例

下面是一个简单的 DTD 验证实例,它验证了一个 XML 文档中的一组学生信息。XML 文档的结构如下所示:

Copy Code
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE students SYSTEM "students.dtd"> <students> <student id="1"> <name>张三</name> <age>20</age> <gender></gender> </student> <student id="2"> <name>李四</name> <age>21</age> <gender></gender> </student> </students>

而对应的 DTD 文件则是 students.dtd,它的内容如下所示:

Copy Code
<!ELEMENT students (student*)> <!ELEMENT student (name, age, gender)> <!ATTLIST student id CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT gender (#PCDATA)>

在这个 DTD 文件中,我们定义了:

  • students 元素必须包含至少一个 student 元素,且可以包含多个 student 元素;
  • 每个 student 元素必须包含一个 name、一个 age 和一个 gender 元素,并且 nameagegender 元素的顺序不能改变;
  • 每个 student 元素必须包含一个 id 属性,该属性的类型为 CDATA(即文本类型),并且是必需的;
  • nameagegender 元素都只能包含文本内容(即 PCDATA 类型)。