DTD 元素学习笔记

什么是DTD?

DTD(Document Type Definition,文档类型定义)用于定义XML文档中的元素、属性和实体。它规定了XML文档的合法构建模式。

如何声明DTD?

在XML文档中声明DTD需要使用DOCTYPE语句。例如:

xmlCopy Code
<!DOCTYPE note SYSTEM "note.dtd">

其中,note表示根元素名称,SYSTEM表示DTD所在的文件路径,note.dtd表示DTD文件名。

DTD元素声明

元素定义

DTD可以用来声明元素并指定元素所允许的子元素和属性。例如,以下是一个简单的DTD元素定义:

xmlCopy Code
<!ELEMENT book (title, author, publisher, price)>

上述DTD定义了book元素包括四个子元素:title、author、publisher和price。

元素类型

DTD还可以声明元素类型。常见的元素类型有EMPTY(空元素)、PCDATA(纯文本元素)和MIXED(混合元素)。例如:

xmlCopy Code
<!ELEMENT br EMPTY> <!ELEMENT title (#PCDATA)> <!ELEMENT div (#PCDATA | p)*>

上述DTD分别定义了br为空元素,title为纯文本元素,div为混合元素。

属性声明

DTD可以声明元素属性及其值的数据类型。例如:

xmlCopy Code
<!ELEMENT book (title, author, publisher, price)> <!ATTLIST book id CDATA #IMPLIED> <!ATTLIST book language (English|Chinese|French) #REQUIRED> <!ATTLIST book year CDATA #IMPLIED>

上述DTD为book元素声明了三个属性:id、language和year,其中id为CDATA类型,language为枚举类型(English、Chinese或French),year为CDATA类型。

DTD实例

以下是一个完整的DTD示例,用于验证一个包含书籍信息的XML文档:

xmlCopy Code
<!DOCTYPE bookstore [ <!ELEMENT bookstore (book+)> <!ELEMENT book (title, author, publisher, price)> <!ATTLIST book id CDATA #IMPLIED> <!ATTLIST book language (English|Chinese|French) #REQUIRED> <!ATTLIST book year CDATA #IMPLIED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT price (#PCDATA)> ]> <bookstore> <book id="001" language="English"> <title>The Catcher in the Rye</title> <author>J.D. Salinger</author> <publisher>Little, Brown and Company</publisher> <price>$23.99</price> </book> <book id="002" language="Chinese"> <title>围城</title> <author>钱钟书</author> <publisher>人民文学出版社</publisher> <price>¥20.00</price> </book> </bookstore>

上述DTD定义了包含book元素的bookstore元素,以及book元素的子元素和属性。XML文档中包含了两个book元素,符合DTD定义,因此是合法的。