XML DTD
XML DTD (文档类型定义)
Section titled “XML DTD (文档类型定义)”格式良好的 XML 文档遵循基本的语法规则。而有效的 XML 文档不仅是格式良好的,还符合由模式(如 DTD 或 XSD)定义的特定结构。
DTD 是定义 XML 文档合法构建块的原始机制。
注意: 虽然 DTD 是基础性的,但 XML Schema Definition (XSD) 是更现代、更强大且通常更受欢迎的 XML 验证标准。
什么是 DTD?
Section titled “什么是 DTD?”DTD 定义了 XML 文档的结构以及合法的元素和属性。你可以使用 DTD 来验证 XML 文档是否符合预定义的格式。
XML 文档使用 <!DOCTYPE> 声明引用其 DTD,该声明放置在可选的 XML 声明之后和根元素之前。
引用名为 Note.dtd 的外部 DTD 文件的示例:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE note SYSTEM "Note.dtd"><note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body></note>DTD 文件本身 (Note.dtd) 包含定义结构的声明。
DTD 结构示例
Section titled “DTD 结构示例”以下是 Note.dtd 文件内容的一个示例(也可以使用方括号 [] 直接嵌入在 <!DOCTYPE> 声明中):
<!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>解释:
<!ELEMENT note (to, from, heading, body)>:定义了根元素note,并指定它必须包含一个to、一个from、一个heading和一个body元素,且必须按照此特定顺序。<!ELEMENT to (#PCDATA)>:定义to元素包含解析字符数据(Parsed Character Data),即将被解析器解析的文本。类似的定义也适用于from、heading和body。
#PCDATA 本质上是文本内容,可能包含待解析的标记。
使用 DTD 进行实体声明
Section titled “使用 DTD 进行实体声明”DTD 还可以声明实体,实体充当特殊字符或可重用文本片段的快捷方式。
使用内部 DTD 子集声明实体的示例:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE note [ <!ENTITY nbsp " "> <!-- non-breaking space --> <!ENTITY writer "Writer: Donald Duck."> <!ENTITY copyright "Copyright: W3Schools.">]><note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> <footer>&writer; ©right;</footer></note>在此例中,&writer;、 和 ©right; 在解析过程中会被替换为它们定义的值。
注意:预定义的 XML 实体,如 <、>、&、"、',无需声明。
为什么使用 DTD?(历史背景与现代替代方案)
Section titled “为什么使用 DTD?(历史背景与现代替代方案)”历史上,DTD 被用于:
- 为不同团体或系统之间的数据交换定义标准结构。
- 验证接收到的 XML 数据是否符合预期格式。
然而,DTD 存在显著的局限性:
- 不支持命名空间(namespaces)。
- 数据类型支持非常有限(主要就是文本)。
- DTD 语法不是基于 XML 的。
- 与 XSD 相比,表达能力较弱。
由于这些局限性,XML Schema Definition (XSD) 现在是大多数现代应用程序中用于定义 XML 结构和验证的首选 W3C 标准。XSD 提供了强大的数据类型支持、命名空间支持,并且使用 XML 语法。
你可能仍然会在遗留系统或某些较旧的标准中遇到 DTD。
要了解更多关于现代 XML 验证的信息,请学习 XML Schema (XSD)。