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定义,因此是合法的。