DTD
DTD
介绍
XML(eXtensible Markup Language)的 DTD(Document Type Definition)是用于定义 XML 文档结构的一种规范。DTD 描述了 XML 文档中允许出现哪些元素、元素的顺序、元素的属性以及属性值的类型等信息。
DTD 可以分为内部 DTD 和外部 DTD 两种类型。内部 DTD 直接嵌入在 XML 文档中,而外部 DTD 则可以使用 SYSTEM 或 PUBLIC 关键字引用一个独立的 DTD 文件,使得多个 XML 文档可以共用一个 DTD。
DTD 使用一系列的语法规则来定义 XML 文档的结构,其中包括:
- 元素声明:定义元素的名称、内容和属性等信息。
- 属性声明:定义元素的属性名称和属性值的类型等信息。
- 实体声明:定义 XML 文档中使用的实体,包括字符实体和参数实体。
- 注释声明:用于注释 XML 文档中的各项声明。
DTD 的优点是能够限制 XML 文档的结构和内容,使得 XML 文档更加严谨和规范。但是 DTD 的缺点也很明显,它的语法比较繁琐,特别是对于复杂的文档结构,DTD 定义的规则也比较难以维护。因此,在实际应用中,DTD 逐渐被 XML Schema 取代。
DTD元素和属性
DTD 中常用的元素和属性包括:
- 元素相关的声明:
<!ELEMENT>
:定义元素的结构,包括元素名称、子元素、文本内容和混合内容等。<!ATTLIST>
:定义元素的属性,包括属性名称、属性类型、默认值和是否必需等。<!ENTITY>
:定义实体,包括字符实体和外部实体。<!NOTATION>
:定义符号集,用于描述非 XML 数据类型。
- 实体相关的声明:
<!ENTITY>
:定义实体,包括字符实体和外部实体。<!ENTITY %>
:定义参数实体。<!ENTITY % name "value">
:定义参数实体,其中name
是参数实体的名称,value
是参数实体的值。
- 注释相关的声明:
<!-- ... -->
:注释声明,用于注释 XML 文档中的各项声明。
- 其他声明:
<!DOCTYPE>
:声明文档类型,包括文档类型名称和引用的 DTD 文件。<!CDATA>
:声明文本内容为字符数据,不进行解析。
这些元素和属性都是 DTD 中常用的部分,通过使用它们可以更加精确地定义 XML 文档的结构和内容,提高 XML 文档的可靠性和可维护性。
示例
下面是一个使用 DTD 定义的简单 XML 示例:
<!DOCTYPE catalog [
<!ELEMENT catalog (book+)>
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
]>
<catalog>
<book id="001">
<title>XML Programming</title>
<author>John Doe</author>
<price>29.99</price>
</book>
<book id="002">
<title>Java Programming</title>
<author>Jane Smith</author>
<price>39.99</price>
</book>
</catalog>
在这个示例中,DTD 定义了一个名为 catalog
的元素,它包含一个或多个 book
元素。每个 book
元素包含一个 title
元素、一个 author
元素和一个 price
元素,以及一个名为 id
的属性。除了 id
属性外,title
、author
和 price
元素都只包含文本内容。
注意,在 XML 文档的开头,我们使用 <!DOCTYPE>
声明引用了 DTD 定义,而且在 XML 文档中的每个元素都符合 DTD 定义中所规定的结构和属性要求。这样可以确保 XML 文档的结构和内容符合特定的规范,从而提高了文档的可靠性和可维护性。