DTD 元素基础概念
DTD(Document Type Definition)是用于定义XML文档结构的规范,通过声明元素、属性和实体来约束文档内容。元素是DTD的核心组成部分,定义了XML文档中允许出现的标签及其嵌套关系。
元素声明语法:
<!ELEMENT 元素名 (内容模型)>
例如,声明一个book元素:
<!ELEMENT book (title, author, price)>
元素内容类型
空元素
空元素不包含任何内容或子元素,需用EMPTY关键字声明:
<!ELEMENT br EMPTY>
对应的XML实例:
<br/>
文本内容元素
仅包含文本内容的元素使用#PCDATA声明:
<!ELEMENT title (#PCDATA)>
XML实例:
<title>XML Programming</title>
混合内容元素
允许同时包含文本和子元素的混合内容需用|分隔:
<!ELEMENT paragraph (#PCDATA | em | strong)*>
XML实例:
<paragraph>This is <em>mixed</em> content with <strong>formatting</strong>.</paragraph>
元素嵌套与顺序
序列子元素
通过逗号分隔定义严格的子元素顺序:
<!ELEMENT book (title, author+, chapter*, price?)>
- author+:至少一个作者
- chapter*:零或多个章节
- price?:可选价格
XML实例:
<book>
<title>Advanced XML</title>
<author>John Doe</author>
<chapter>Introduction</chapter>
<price>39.99</price>
</book>
选择性子元素
用|符号表示多选一:
<!ELEMENT contact (email | phone | address)>
XML实例:
<contact>
<phone>123-456-7890</phone>
</contact>
元素出现频率控制
| 无 | 必须且仅出现一次 | <!ELEMENT name (#PCDATA)> |
| ? | 可选(0或1次) | <!ELEMENT middle_name (#PCDATA)?> |
| * | 零次或多次 | <!ELEMENT comment (#PCDATA)*> |
| + | 一次或多次 | <!ELEMENT item (#PCDATA)+> |
复杂元素结构示例
DTD声明:
<!ELEMENT library (book+)>
<!ELEMENT book (isbn, title, author+, category?, description)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT category (#PCDATA)>
<!ELEMENT description (#PCDATA | p | ul)*>
<!ELEMENT ul (li+)>
XML实例:
<library>
<book>
<isbn>978-3-16-148410-0</isbn>
<title>XML Mastery</title>
<author>Jane Smith</author>
<category>Web Development</category>
<description>
<p>Comprehensive guide to XML technologies.</p>
<ul>
<li>DTD</li>
<li>XPath</li>
</ul>
</description>
</book>
</library>
元素与属性配合
DTD中元素与属性需分别声明:
<!ELEMENT product (name, price)>
<!ATTLIST product
id CDATA #REQUIRED
stock (in-stock | out-of-stock) "in-stock">
XML实例:
<product id="P1001" stock="out-of-stock">
<name>Wireless Mouse</name>
<price>29.99</price>
</product>
通过合理设计DTD元素结构,可以创建严格规范的XML文档,确保数据交换的一致性和有效性。




