「DTD」- Document Type Definition

  CREATED BY JENKINSBOT

DTD是什么?

文档类型定义(DTD)是“标记声明”的一个集合,用于定义SGML系列标记语言(SGML,XML,HTML)的“文档类型”。

DTD定义XML文档的结构、合法元素、属性。

简单的说:一个DTD文件描述了一个XML文件的结构。

为什么使用DTD?

通过 DTD,您的每一个XML文件均可携带一个有关其自身格式的描述。(规定XML结构)

通过 DTD,不同的组织可以一致地使用某个标准的DTD来交换数据。(规范数据结构)

而您的应用程序也可使用某个标准的DTD来验证从外部接收到的数据。(数据结构合法性检查)

如何使用DTD?

DTD用于定义XML的结构,它可以在XML文档中声明(“内联声明”),也可以引入XML文档(“外部引用声明”)。

内联声明

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

外部引用声明

外部引用声明是将DTD与XML分离,因此需要定义两个文件:

用于定义的note.dtd文件:

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

包含数据的note.xml文件:

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

简单示例

使用DTD校验XMl文件

文件people.dtd的内容如下:

<!ELEMENT people_list (person)*>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT birthdate (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT socialsecuritynumber (#PCDATA)>

文件peopel.xml的内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<people_list>
  <person>
    <name>Fred Bloggs</name>
    <birthdate>2008-11-27</birthdate>
    <gender>Male</gender>
  </person>
</people_list>

执行如下命令来校验DTD文件:

# xmllint –noout –dtdvalid people.dtd people.xml

如果格式正确,则不会有任何输出。如果people.xml的格式与people.dtd中的描述不匹配,则会产生错误提示。你可以尝试将person.xml中的<person>…<person>修改来<persons>…<persons>,然后执行命令,并观察输出。

相关教程

W3school/DTD 教程

参考文献

Wikipedia/Document type definition
Wikipedia/XML
xmllint : how to validate an XML using a local DTD file
Validate XML using a DTD
How to validate an XML document by using DTD, XDR, or XSD in Visual Basic