DTD 总结学习笔记

DTD(Document Type Definition)文档类型定义,是一种用于定义 XML 文档结构和规范的语言。它定义了 XML 文档的元素、属性、实体以及它们之间的关系。

DTD 基本语法

DTD 定义由 DOCTYPE 声明开始,其中包含了文档根元素的名称和 DTD 的公共标识符或系统标识符。

xmlCopy Code
<!DOCTYPE 根元素名称 PUBLIC|SYSTEM "DTD 公共标识符或系统标识符">

DTD 定义主要由元素定义、属性定义和实体定义组成。

元素定义

元素定义由 ELEMENT 关键字开始,然后是元素名称和元素内容。元素内容可以是元素序列、元素选择或元素混合。元素序列表示必须按照一定顺序出现的元素集合,元素选择表示可以按任意顺序出现的元素集合,元素混合则是两者的结合。

以下是一个简单的元素定义示例:

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

属性定义

属性定义由 ATTLIST 关键字开始,然后是属性所属元素和属性名称。接着是属性类型(CDATA、ID、IDREF、IDREFS、ENTITY、ENTITIES、NMTOKEN、NMTOKENS、NOTATION 和 ENUMERATION),最后是默认值。

以下是一个简单的属性定义示例:

xmlCopy Code
<!ATTLIST book isbn CDATA #IMPLIED>

实体定义

实体定义有两种类型:内部实体和外部实体。内部实体由 <!ENTITY> 关键字开始,然后是实体名称和实体值。外部实体由 <!ENTITY> 关键字开始,然后是实体名称、系统标识符和公共标识符。

以下是一个简单的实体定义示例:

xmlCopy Code
<!ENTITY company "XYZ Inc.">

DTD 示例

以下是一个简单的 XML 文档及其 DTD 定义:

xmlCopy Code
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE library SYSTEM "library.dtd"> <library> <book> <title>Learn Python the Hard Way</title> <author>Zed A. Shaw</author> <price>26.00</price> </book> <book> <title>Head First Java</title> <author>Kathy Sierra, Bert Bates</author> <price>35.50</price> </book> </library>

以下是对应的 DTD 定义:

xmlCopy Code
<!ELEMENT library (book+)> <!ELEMENT book (title, author, price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST book isbn CDATA #IMPLIED>

在这个示例中,DTD 定义了 library 元素必须包含至少一个 book 元素,而 book 元素必须包含一个 title 元素、一个 author 元素和一个 price 元素。另外,book 元素可以有一个可选属性 isbn,其默认值为空。