XML DTD

语法正确的 XML 文档被称为“格式良好”。

根据 DTD 验证的 XML 文档,既是“格式良好”的,又是“有效”的。

什么是 DTD?

DTD 代表文档类型定义(Document Type Definition)。

DTD 定义 XML 文档的结构,以及合法的元素和属性。

有效的 XML 文档

“有效”的 XML 文档既是“格式良好”的,同时也要符合 DTD 的规则:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

上面的 DOCTYPE 声明包含对 DTD 文件的引用。下面展示并解释了 DTD 文件的内容。

XML DTD

DTD 的目的是定义 XML 文档的结构,以及合法的元素和属性:

Note.dtd:

<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

对上面的 DTD 解释如下:

!DOCTYPE note -  定义文档的根元素是 note
!ELEMENT note - 定义 note 元素必须包含以下元素:"to, from, heading, body"
!ELEMENT to - 将 to 元素定义为 "#PCDATA" 类型
!ELEMENT from - 将 from 元素定义为 "#PCDATA" 类型
!ELEMENT heading  - 将 heading 元素定义为 "#PCDATA" 类型
!ELEMENT body - 将 body 元素定义为 "#PCDATA" 类型

提示:#PCDATA 表示可解析的字符数据(parseable character data)。

使用 DTD 进行实体声明

DOCTYPE 声明还可用于定义文档中使用的特殊字符或字符串:

实例

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note [
<!ENTITY nbsp " ">
<!ENTITY writer "Writer: Bill Gates.">
<!ENTITY copyright "Copyright: W3School.">
]>

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
<footer>&writer; ©right;</footer>
</note>

提示:实体由三部分组成:以与号 (&) 开头,然后是实体名称,最后以分号 (;) 结尾。

何时使用 DTD?

有了 DTD,独立的群体可以就交换数据的标准达成一致。

使用 DTD,您可以验证从外界接收的数据是否有效。

您还可以使用 DTD 来验证您自己的数据。

如果您希望学习 DTD,请阅读我们的 DTD 教程

何时不使用 DTD?

对于 XML,DTD 不是必需的。

如果您正在测试 XML,或使用的是很小的 XML 文件时,创建 DTD 可能是在浪费时间。

如果您正在开发应用程序,请等到规范稳定后再添加 DTD。否则,您的软件可能会因验证错误而停止工作。