以下是 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