DTD
DTD是一套关于标记的语法规则,它定义了文档的逻辑
结构,规定了文档中所使用的元素、实体、元素的属性、
元素与实体之间的关系。DTD告诉你可以在哪些文档中使
用哪些标记,各标记出现的次序,哪些标记出现在哪些标
记中,哪些标记有属性等等。
DTD是XML文件的验证机制,定义好DTD,就可以使用
XML解析器对编写好的XML文档进行DTD检查,判断XML
使用DTD的好处
v 用DTD提供统一格式。例如,用DTD规定个人简历文档的逻辑结构,包括所需填写内容和内容排列方式,所有按照这个DTD编写的个人简历都将具有统一格式。
v 用DTD验证数据有效性。DTD约束文档逻辑结构,可以根据DTD检查数据,验证其是否符合规定要求,确保数据正确和有效。
v 根据DTD编写文档样式单。DTD能在不提供原始资料的情况下,表示出一个网页或文档的架构元素,这意味着用户能先根据DTD为未来的文档编写样式单,然后再安全且不破坏结构的把用户的资料放上去,提高工作效率。
在XML文档中引入DTD主要有3种方式:
Ø 内部DTD
Ø 外部DTD
Ø 公用DTD
所谓内部DTD是指DTD与XML数据定义放在同
一份文档中,即将DTD定义在XML文档内部。内
部DTD紧跟在XML声明和处理指令之间。
文档类型声明以“<!DOCTYPE>” 开始,以“]>”
结束。在XML处理指令和根元素之间定义。
例: < ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?>
<! DOCTYPE 根元素名称 [
<! ELEMENT 子元素名称 (#PDATA)>
]>
外部文件类型定义存在于独立文件中,文件扩
展名为“.dtd”。外部DTD的好处是:可以方便地
被多个XML文档共享,只需要定义一份DTD文
档,即可为多个XML文档定义语义约束。
<!DOCTYPE 根元素名 SYSTEM " DTD-URL ">
<!DOCTYPE Book SYSTEM “http://www.crazyit.orgSystem/dtd/book.dtd”>
Ø :关键字,指该外部DTD是私有的
Ø DTD-URL:通过URL将外部DTD引用到XML文档中,可以是绝对地址也是
可相对地址
有一种外部DTD,是由某个权威机构制定,供
特定行业或公司,这种DTD又被称为公用DTD。
<!DOCTYPE 根元素名 PUBLIC " DTD-NAME “ “DTD-URL”>
公用DTD与外部DTD区别在于:公用DTD使用PUBLIC代替了原来的SYSTEM,并增加了DTD标识名。
使用ELEMENT声明XML元素的语法,语法格式如下:
Ø 元素声明以“<!”开始,以“>”结束
Ø 元素声明指令“ELEMENT”为关键字,必须大写
Ø 元素名:为当前元素指定的元素名称
Ø 元素内容: 元素名后面的内容用来指定元素的内容类型,它可以分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 5种类型。
Ø <!ELEMENT 元素名 元素内容>
EMPTY空, ANY任意
DTD必须定义XML文档中允许出现的所有
元素。
#PCDATA字符串
注意:
#PCDATA必须放在最前面
#PCDATA和各子元素之间只能用竖线(|)分割
子元素1,子元素2和子元素3之间的竖线(|)并不是表示互斥,而只是表 示这些元素能无序的重复出现,而且次数不受限制
不要试图在各个子元素之后添加?,*。+等表示频率的修饰符
Ø 有序的子元素
Ø 互斥的子元素
Ø 无序的子元素
用英文逗号(,)作为子元素之间的分隔符,则子
元素之间必须遵守所定义的顺序。
互斥的子元素表明一系列子元素之间只能出现
其中一次。互斥子元素使用竖线(|)分隔,以竖
线(|)分隔的多个元素只能出现其中之一。
子元素的出现频率通过在元素声明后紧跟一个表
示频率的特殊标记来表示,DTD中表示频率的特殊
标记有3个:
Ø +: 表明子元素可以出现1次或多次
Ø *: 表明子元素可以出现0次或多次
Ø ?: 表明子元素可以出现0次或1次
如果在定义子元素时,没有在子元素后指定任
何表示频率的特殊标记,则表明这些子元素只能
出现一次,且必须一次
对属性的限定条件:
v #REQUIRED: 必须的属性,意味着必须为该元素提供该属性
v #IMPLIED: 该属性是可有可无的
v #FIXED: 该属性的值是固定的,定义是必须制定固定值。使用该元素时无需为其分配该属性,XML处理器会自动为给属性增加固定值
CDATA 是简单的纯文本字符类型,是最常用
的类型,将简单的文本用做属性值。可以包括任何
字符串,但不允许使用“<”,“>”,“&”,“””,“‘”。如果需
要使用必须使用实体引用。属性值和元素内容都
可以是文本类型,但是定义的方法不同
<! ATTLIST Student name CDATA #REQUIRED>