02、DTD 简介

文档类型定义(DTD)可定义合法的 XML文档组成部件,它使用一系列合法的元素来定义文档的结构

DTD可被声明于 XML 文档中,也可作为一个外部引用

内部的 DOCTYPE 声明

假如DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

<!DOCTYPE root-element [element-declarations]>

带有DTD 的 XML 文档实例(请在浏览器中打开,并选择查看源代码):

<?xml version="1.0" encoding="UTF-8" ?>
<!--  Copyright www.ddkk.com -->
<!DOCTYPE article [
  <!ELEMENT article    (author,created_at,summary,content)>
  <!ELEMENT author      (#PCDATA)>
  <!ELEMENT created_at    (#PCDATA)>
  <!ELEMENT summary (#PCDATA)>
  <!ELEMENT content    (#PCDATA)>
]>
<article>
<author>DDKK.COM 弟弟快看,程序员编程资料站</author>
<created_at>2017-08-08 08:08:08</created_at>
<summary>DDKK.COM 弟弟快看,程序员编程资料站,DDKK.COM 弟弟快看,程序员编程资料站</summary>
<content>DDKK.COM 弟弟快看,程序员编程资料站[www.ddkk.com]以编程开发所需掌握的语言和知识入手...</content>
</article> 

在您的浏览器中打开此 XML 文件,并选择查看源代码命令

简单解释下上面的 DTD:

  • !DOCTYPE article (第三行)定义此文档是 article 类型的文档
  • !ELEMENT article (第四行)定义 article 元素有四个元素:author,created_at,summary,content
  • !ELEMENT author (第五行)定义 author 元素为 "#PCDATA" 类型
  • !ELEMENT created_at (第六行)定义 created_at 元素为 "#PCDATA" 类型
  • !ELEMENT summary (第七行)定义 summary 元素为 "#PCDATA" 类型
  • !ELEMENT content (第八行)定义 content 元素为 "#PCDATA" 类型

外部文档声明

如果DTD 位于 XML 文件以外的其他文件中,那么 XML 文件必须在 DOCTYPE 声明中通过以下的语法引入这个 DTD

<!DOCTYPE root-element SYSTEM "filename">

这个XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD: ( 在浏览器中打开 ,并选择查看源代码命令)

<?xml version="1.0" encoding="UTF-8" ?>
<!--  Copyright www.ddkk.com -->
<!DOCTYPE article SYSTEM "/static/media/note.dtd">
<article>
<author>DDKK.COM 弟弟快看,程序员编程资料站</author>
<created_at>2017-08-08 08:08:08</created_at>
<summary>DDKK.COM 弟弟快看,程序员编程资料站,DDKK.COM 弟弟快看,程序员编程资料站</summary>
<content>DDKK.COM 弟弟快看,程序员编程资料站[www.ddkk.com]以编程开发所需掌握的语言和知识入手...</content>
</article> 

/static/media/note.dtd 文件中 DTD 声明如下

<?xml version="1.0" encoding="UTF-8" ?>
<!--  Copyright www.ddkk.com -->
<!DOCTYPE article [
  <!ELEMENT article    (author,created_at,summary,content)>
  <!ELEMENT author      (#PCDATA)>
  <!ELEMENT created_at    (#PCDATA)>
  <!ELEMENT summary (#PCDATA)>
  <!ELEMENT content    (#PCDATA)>
]>

为什么使用 DTD?

  • 通过 DTD,我们的每一个 XML 文件均可携带一个有关其自身格式的描述
  • 通过 DTD,独立的团队可一致地使用某个标准的 DTD 来交换数据
  • 我们的应用程序可以使用某个标准的 DTD 来验证从外部接收到的数据
  • 我们还可以使用 DTD 来验证自身的数据