??
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、属性
属性声明使用下列语法:
<!ATTLIST元素名称 属性名称 属性类型 默认值>
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、命名空间
解决复杂的DTD描述元素中名称冲突问题
前缀法的使用
元素名和属性名前面加一个标识进行区分
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|