DTD(Document Type Definition,文档类型定义),有了DTD就可以检测XML文档的结构是否正确。通过在XML文档中包含文档类型声明,来建立当前文档和DTD的关联。当进行有效性验证的XML处理器读到该指令时,它获取DTD,并根据其中定义的规则对文档进行检验。文档类型声明必须位于XML声明之后,且在根元素(文档元素)之前。
1.内部DTD
<?xml version="1.0" encoding='gb2312' standalone='yes'?>
<!DOCTYPE greeting [
<!ELEMENT greeting (#PCDATA)>
]>
文档类型声明由<!开始,后面紧跟一个关键字DOCTYPE,然后是文档根元素的名称,接下来是标记声明块,标记声明块是放在左中括号[和右中括号]之间,由一个或多个标记声明构成,最后由>结束。在DTD中,所有的关键字都是大写的,不过定义的元素和属性的大小写可以任意指定。
2.外部DTD
在文档类型声明时,用关键字SYSTEM或PUBLIC来指出外部DTD文件的位置,使用SYSTEM关键字的声明语法如下:
<!DOCTYPE 根元素的名字 SYSTEM "外部DTD文件的URI">
SYSTEM关键字表示文档使用的是私有的DTD文件,"外部DTD文件的URI"可以是相当URI或者绝对URI,相对URI是相对于文档类型声明所在的文档的位置。
使用PUBLIC关键字的声明语法如下:
<!DOCTYPE 根元素的名字 PUBLIC"DTD的名称""外部DTD文件的URI">
"DTD的名称(公共标识符)"可以存放在某个公共的地方,XML处理程序会根据名称按照某种方式去检索DTD,如果XML处理器不能根据名称检索到DTD,就会使用"外部DTD文件的URI(系统标识符)"来查找该DTD。
"DTD的名称"规则:
它们只能包含ASCII字母和数字字符,空格,回车符,换行符和一些标点符号。
如果一项DTD是ISO标准,它的名称要以字符串"ISO"开始,如果是一个非ISO的标准组织批准的DTD,它的名称以+开始,其它的则以-开始。
这些字符后接//和DTD所有者的名字,之后是另一个//和DTD描述的文档类型,接着又是//后接ISO 639语言标识符,如EN表示英语(参见http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt)。
例如:-//xin sun//DTD HR 1.0//ZH
我们可以通过在声明中通过standalone="yes"来定义我们的文档不依赖于外部文档。