DTD 简介
文档类型定义 (DTD) 简介
Section titled “文档类型定义 (DTD) 简介”文档类型定义(Document Type Definition,简称 DTD)定义了 XML 文档允许的结构、元素和属性。它就像一个模式(schema)或蓝图。
使用 DTD 可确保 XML 文档遵循预定义的格式,从而根据该定义使其成为“有效”(valid)的。
DTD 可以直接在 XML 文档内声明(内部 DTD),也可以链接为外部文件(外部 DTD)。
在深入了解 DTD 之前,您应该对以下内容有基本了解:
- 基本的 HTML 结构
- 基本的 XML 语法(元素、属性、格式良好性)
如果这些概念对您来说是新的,请考虑先回顾一下 XML 入门资料。
为什么使用 DTD(或其他模式)?
Section titled “为什么使用 DTD(或其他模式)?”为 XML 文档定义结构提供了多种好处:
- 验证 (Validation): 应用可以自动检查接收到的 XML 数据是否符合预期的结构,从而防止错误。
- 互操作性 (Interoperability): 当各方约定共同的 DTD(或模式)时,可确保数据交换时的一致性。
- 文档 (Documentation): DTD 作为 XML 格式的文档。
- 开发辅助 (Development Assistance): 许多 XML 编辑器和 IDE 在开发过程中使用 DTD/模式提供自动补全和验证。
虽然 DTD 是一种早期方法,但 XML Schema Definition (XSD) 是一种更现代、更强大且更广泛使用的替代方案,它提供了更丰富的数据类型和命名空间支持。然而,理解 DTD 提供基础知识。
内部 DTD 声明
Section titled “内部 DTD 声明”内部 DTD 声明在 XML 文件自身内,包含在 <!DOCTYPE ... [...]> 声明中。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE note [ <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>]><note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body></note>DTD 部分的解释:
<!DOCTYPE note ...>: 定义note为文档的根元素。<!ELEMENT note (to, from, heading, body)>: 指定note元素必须依次包含一个to、一个from、一个heading和一个body元素。<!ELEMENT to (#PCDATA)>: 定义to元素包含解析字符数据(Parsed Character Data,即文本)。<!ELEMENT from (#PCDATA)>、<!ELEMENT heading (#PCDATA)>、<!ELEMENT body (#PCDATA)>: 类似地定义这些元素包含文本。
外部 DTD 声明
Section titled “外部 DTD 声明”外部 DTD 定义在单独的 .dtd 文件中。XML 文档然后使用带有 SYSTEM 或 PUBLIC 标识符的 <!DOCTYPE> 声明引用此文件。
XML 文件 (myNote.xml):
<?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):
<!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>使用外部 DTD 通常更受欢迎,因为它可重用,相同的 DTD 可以应用于多个 XML 文档。