在 DTD(Document Type Definition)中,元素声明用于定义 XML 文档中的元素及其结构。元素声明规定了元素的名称、内容模型(即元素包含的内容类型)、可能的属性等信息。以下是一些关于 DTD 元素声明的基本概念和语法:

1. 基本元素声明:

元素声明的一般形式如下:
<!ELEMENT element_name content_model>

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

  •  content_model 定义了元素的内容模型,即元素包含的内容。


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

2. 内容模型:

内容模型定义了元素的内容结构,可以包括以下几种类型:

  •  元素名称: 表示元素包含一个具体的子元素。
  <!ELEMENT book (title, author)>

  •  #PCDATA: 表示元素包含文本数据。
  <!ELEMENT title (#PCDATA)>

  •  混合内容(Mixed Content): 表示元素可以包含文本和其他元素。
  <!ELEMENT paragraph (#PCDATA | b | i)*>

  •  空元素(Empty Element): 表示元素没有内容。
  <!ELEMENT empty_element EMPTY>

3. 元素的次数:

通过使用 +、*、? 等符号,可以指定元素在文档中出现的次数:

  •  +:至少出现一次。
  <!ELEMENT list (item+)>

  •  *:零次或多次。
  <!ELEMENT paragraph (#PCDATA | b | i)*>

  •  ?:零次或一次。
  <!ELEMENT optional (title?)>

4. 嵌套元素:

可以嵌套使用元素声明,以定义复杂的嵌套结构:
<!ELEMENT bookstore (book+)>
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>

在上述例子中,bookstore 元素包含一个或多个 book 元素,而每个 book 元素包含 title、author 和 price 元素。

5. 元素属性:

可以使用 ATTLIST 定义元素的属性:
<!ATTLIST book category CDATA #IMPLIED>

上述例子表示 book 元素可以有一个 category 属性,数据类型为 CDATA,且是可选的。

6. CDATA 和 ID 类型:

  •  CDATA(Character Data): 表示元素包含纯文本数据,可以包括任意字符。
  <!ELEMENT description (#CDATA)>

  •  ID 类型: 表示属性值是唯一标识符。
  <!ELEMENT student (name, id)>
  <!ATTLIST student id ID #REQUIRED>

这些是关于 DTD 元素声明的基本概念和语法。DTD 提供了一种简单的机制来定义 XML 文档的结构和规范,但它也有一些限制,因此在更复杂的场景中,可能会选择使用 XML Schema 或 Relax NG 这样的替代技术。


转载请注明出处:http://www.pingtaimeng.com/article/detail/12193/XML