XML架构中的DTD全称是Document Type Definition,用来定义XML文档的合法结构,包括允许的元素、属性以及嵌套关系。借助DTD,我们可以让程序在解析XML时自动检查数据是否符合约定格式。

什么是DTD
DTD是一套关于XML文档结构的规则集。它声明了根元素、子元素顺序、元素类型以及属性列表。当XML处理器读取带有DTD的文档时,会进行有效性校验,若不符合定义就报错。
内部DTD如何使用
内部DTD直接写在XML文件内部,通过<!DOCTYPE>声明。下面给出一个简单示例,定义一个笔记(note)文档结构:
<?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>张三</to> <from>李四</from> <heading>提醒</heading> <body>明天开会</body> </note>
上面代码中,<!ELEMENT>用来声明元素,#PCDATA表示可解析的文本内容。note元素必须依次包含to、from、heading、body四个子元素。
外部DTD如何使用
外部DTD将定义单独存为.dtd文件,XML通过SYSTEM关键字引入。假设我们有文件note.dtd:
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
在XML中使用方式如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>张三</to> <from>李四</from> <heading>提醒</heading> <body>明天开会</body> </note>
带属性的DTD定义
除了元素,DTD还能定义属性。下面示例给note加一个日期属性:
<!ELEMENT note (to,from,heading,body)> <!ATTLIST note date CDATA #REQUIRED> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
XML中写法变成:
<note date="2024-06-01"> <to>张三</to> <from>李四</from> <heading>提醒</heading> <body>明天开会</body> </note>
使用DTD校验的注意事项
- DTD不支持数据类型约束,只能区分文本或子元素。
- 若XML声明了DTD但内容不符,严格解析器会停止处理。
- 比起XSD,DTD语法较简单,适合轻量结构约束。
掌握以上用法,你就能在项目中用DTD快速定义并校验XML架构,减少数据格式错误。
XMLDTDXML_schema修改时间:2026-07-28 13:48:23