DTD(Document Type Definition)是一种用于定义 XML 文档结构和验证 XML 文档有效性的规范。它定义了 XML 文档中允许包含的元素以及它们的结构和属性。DTD 通常包含在 XML 文档的头部,通过 DTD 可以确保 XML 文档遵循特定的约定。

以下是 DTD 的一些基本概念和语法:

1. 元素声明:

DTD 通过元素声明定义 XML 文档中可以包含的元素。元素声明的一般形式如下:
<!ELEMENT element_name (content)>

其中:
  •  element_name 是元素的名称。

  •  content 定义了元素的内容,包括子元素、文本、混合内容等。


例如,下面的声明表示 <book> 元素包含一个 <title> 元素和一个 <author> 元素:
<!ELEMENT book (title, author)>

2. 属性声明:

属性声明用于定义元素可以包含的属性,以及属性的数据类型。属性声明的一般形式如下:
<!ATTLIST element_name attribute_name attribute_type default_value>

其中:
  •  element_name 是元素的名称。

  •  attribute_name 是属性的名称。

  •  attribute_type 定义了属性的数据类型,如 CDATA、ID、IDREF 等。

  •  default_value 是属性的默认值。


例如,下面的声明表示 <book> 元素有一个 category 属性,类型为 CDATA,没有默认值:
<!ATTLIST book category CDATA #IMPLIED>

3. 实体声明:

实体用于在 XML 文档中定义可重复使用的文本片段。实体声明的一般形式如下:
<!ENTITY entity_name "entity_value">

其中:
  •  entity_name 是实体的名称。

  •  entity_value 是实体的值。


例如,下面的声明定义了一个名为 copyright 的实体:
<!ENTITY copyright "©">

4. 混合内容和元素序列:

在 DTD 中,可以定义元素的内容是混合内容(包括文本和元素)还是元素序列(只包含特定的元素)。例如:

  •  混合内容:

<!ELEMENT book (#PCDATA | title | author)*>

上述声明表示 <book> 元素的内容可以包含文本、<title> 元素和 <author> 元素的任意组合。

  •  元素序列:

<!ELEMENT book (title, author)>

上述声明表示 <book> 元素的内容必须按照顺序包含一个 <title> 元素,后跟一个 <author> 元素。

5. 示例:

考虑以下简单的 DTD 示例,定义了一个包含图书信息的 XML 文档:
<!DOCTYPE bookstore [
  <!ELEMENT bookstore (book+)>
  <!ELEMENT book (title, author, price)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
  <!ATTLIST book category CDATA #IMPLIED>
]>

上述 DTD 定义了一个 <bookstore> 元素,它包含一个或多个 <book> 元素。每个 <book> 元素包含一个 <title> 元素、一个 <author> 元素、一个 <price> 元素和一个可选的 category 属性。

总体而言,DTD 提供了一种结构化的方式来定义 XML 文档的合法结构,以及元素和属性的相关规则。虽然 DTD 仍然被广泛使用,但它的复杂性和一些限制使得 XML Schema 和 Relax NG 这样的替代技术更受欢迎。


转载请注明出处:http://www.zyzy.cn/article/detail/12191/XML