2024年4月30日发(作者:)

前面提到过的, DTD ( Document Type Definition ,文档类型定义)就是定义 XML 文档

中元素的结构和内容等。其实 DTD 就相当于 XML 中的“词汇”和“语法”,不同的行业可以

定义自己的“词汇”和“语法”,以利于解析器验证 XML 文档的有效性,并且这样也利于行

业中和行业之间的交流。就相当于只有当两个人对各自说出的词汇都理解对方的时候才能有

顺利的交流。这其实就是对 XML 文档使用元素的定义的以层抽象,把它的定义独立出一个文

件,以利于对信息的隐藏和扩展。这也可以把它想象成程序语言,比如 C# 中的接口的定义。

把 DTD 文件想象成一个接口,而引用这个 DTD 文件的 XML 文档是这个接口的实现类,只要

了解了这个 DTD 文件,就大致知道了和这个 DTD 文件相链接的 XML 文档的一些框架信息。

DTD 文件也可以看成是一系列 XML 文档的模板,它定义了相关 XML 文档的元素,属性,排

列方式(元素,属性等),元素的内容类型,以及元素的层次结构等。

DTD 中元素的声明

<;!ELEMENT 元素名(元素描述) >;

这里主要介绍元素描述,元素的描述包含两部分:

1. 如果元素是简单元素,即该元素不包含子元素,则描述部分是针对该元素的

内容的限制或是规定。这种限制的描述可以是:

#PCDATA :元素的内容只能是可解析的文本数据。

<;!ELEMENT 元素名 (#PCDATA)>;

EMPTY :元素内容必须为空,但可以包含属性。

<; ! ELEMENT 元素名 EMPTY>;

2. 如果元素是复杂元素,即该元素包含子元素,则元素描述包含对子元素名的

列表(可用正则表达式表达)。元素描述的括号表示内容描述的组合。

<;!ELEMENT book(title, author+, summary | content)>;

正则表达式用法:

( ) 给元素分组

(A | B | C), (D | E), F

| 在列出的对象中选择一个 (A | B)

* 对象允许出现 0 到多次 (A*)

+ 对象应出现 1 到多次 (A+)

对象可以出现 0 到 1 次 (A?)

, 对象以指定顺序出现

(A, B, C)