DTD(Document Type Definition),定义了XML文件的结构,为XML文件提供语法与规则。内容既可以在XML文件中,也可以在XML文件外。可以定义自己的DTD.DTD对于XML是可选的内容。
一、为什么要用?
为了正确的交换数据,XML文件需要确定的结构。
<span style="font-size:18px;"><book> <author> <name>刘伟</name> <sex>男</sex> </author> </book></span>
一个<book>标签只能包含一个<name>和<sex>标签
二、形式
1、内置DTD
DTD被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>
带有DTD 的 XML 文档实例:
<span style="font-size:18px;"><span style="font-size:18px;"> <?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>晴天</to> <from>小夏</from> <heading>提醒</heading> <body>得要开会今天!</body> </note></span></span>
解释如下:
!DOCTYPE note (第二行)定义此文档是note 类型的文档。
!ELEMENT note (第三行)定义note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义from元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义body 元素为 "#PCDATA" 类型
2、外部DTD
DTD位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:
<!DOCTYPE 根元素 SYSTEM "文件名">
这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>晴天</to>
<from>小夏</from>
<heading>提醒</heading>
<body>记得要开会今天!</body>
</note>
这是包含 DTD 的 "note.dtd" 文件:
<!ELEMENT note (to,body)>
< !ELEMENT to (#PCDATA)>
< !ELEMENT from (#PCDATA)>
< !ELEMENT heading (#PCDATA)>
< !ELEMENT body (#PCDATA)>
三、XML文件构成
1、元素
(1)普通元素
<!ELEMENT元素名称 类别>或者<!ELEMENT 元素名称 (元素内容)>
例子:
<!ELEMENT书名(#PCDATA)>
<!ELEMENT计算机书籍(书名,价格,简要介绍)>
(2)空元素
空元素通过类别关键词EMPTY进行声明:
<!ELEMENT元素名称 EMPTY>
DTD例子:
<!ELEMENTbr EMPTY>
XML例子:
<br/>
(3)带有任何内容的元素
<!ELEMENT元素名称 ANY>
例子:
<!ELEMENTnote ANY>
子元素顺序 <1 要求顺序: DTD <!ELEMENT计算机书籍(书名,价格)> <!ELEMENT书名(#PCDATA)> <!ELEMENT价格(#PCDATA)> XML <书籍列表> <计算机书籍> <书名>J2EE</书名> <价格>23</价格> </计算机书籍> </书籍列表> <2 不要求顺序: <span style="font-family: Arial,Helvetica,sans-serif;">DTD: </span>
<!ELEMENT计算机书籍(书名|价格)*> XML: <书籍列表> <计算机书籍> <价格>23</价格> <书名>J2EE</书名> </计算机书籍> </书籍列表>
<3 重复元素: DTD: <!ELEMENT计算机书籍(书名,作者+)> XML: <书籍列表> <计算机书籍> <书名>J2EE</书名> <作者>小小</作者> <作者>清河</作者> </计算机书籍> </书籍列表>
<4成组元素 DTD: <!ELEMENT计算机书籍(书名,作者)+> XML: <书籍列表> <计算机书籍> <书名>J2EE</书名> <作者>小小</作者> <书名>XML</书名> <作者>清河</作者> </计算机书籍> </书籍列表>
2、属性
属性声明使用下列语法:
DTD实例
<!ATTLISTpayment type CDATA "check">
XML实例
<paymenttype="check" />
关键字的使用(这部分简答了解):
#Implied:假如您不希望强制作者包含属性,并且您没有默认值选项的话
#required:假如您没有默认值选项,但是仍然希望强制作者提交属性的话
#fixes:如果您希望属性拥有固定的值,并不允许作者改变这个值
3、实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体可在内部或外部进行声明。
一个内部实体声明
语法:
<!ENTITY实体名称 "实体的值">例子:
DTD例子:
<!ENTITY writer"Bill Gates">
<!ENTITY copyright "12323">XML例子:
<author>&writer;©right;</author>注释:一个实体由三部分构成:一个和号 (&),一个实体名称,以及一个分号 (;)。
一个外部实体声明
语法:
<!ENTITY实体名称 SYSTEM "URI/URL">例子:
DTD例子:
<!ENTITY writerSYSTEM "http://www.baidu.com/">
<!ENTITY copyright SYSTEM "http://www.baidu.com/">XML例子:
<author>&writer;©right;</author>
注意:声明的次序
4、命名空间
前缀法的使用
元素名和属性名前面加一个标识进行区分