DTD文档
一、DTD是一套关于标记的语法规则,它定义了文档的逻辑结构,规定了文档中所使用的元素、实体、元素的属性、元素与实体之间的关系。
DTD是XML文件的验证机制,定义好DTD,就可以使用XML解析器对编写好的XML文档进行DTD检查,判断XML文档内容是否为有效的XML文档内容。
二、使用DTD的原因
验证接到的数据是否有效
验证自己的数据
定义XML文档的合法构建块
使用一系列合法元素来定义文档结构
三、DID分为内部DID和外部DID还有公用DID
1、内部DID是指在文件XML文档内部,内部DID紧跟在XML声明和处理指令之间。例如:
< ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?>
<! DOCTYPE 根元素名称 [<! ELEMENT 子元素名称 (#PDATA)>]>
2、外部DID可以方便的被多个XML文档共享,只需拟定一份DID
3、公用DID是外部DID的一种,是由某个权威机构制定的,供定行业或公司。
注意:DID文档并不是XML文档,只是为XML定义语义约束的文档。DTD必须定义XML文档中允许出现的所有元素。一旦使用DTD为其增加了语义约束,该XML文档就只能出现在DTD中定义过的元素。
四、DID文档的结构
第1行是DTD声明部分,该声明与XML声明的语法相同
0到多个注释部分,DTD注释与XML注释的语法完全相同
0到多个<!ELEMENT….>定义,每个<!ELEMENT….>定义一个XML元素
0到多个<!ATTLIST….>定义,每个<!ATTLIST….>定义一个XML元素定义了一个属性
0到多个<!ENTITY….>定义,每个<!ENTITY….>定义一个实体
0到多个<!NOTATION….>定义,每个<!NOTATION….>定义一个符号
XML的子元素
三种逻辑关系
有序的子元素
互斥的子元素
无序的子元素
1、有序的子元素:用英文逗号(,)作为子元素之间的分隔符,则子元素之间必须遵守所定义的顺序例如:
<计算机书籍…/>元素下面有四个元素,它们的顺序是:<书名../>,<作者…/>,<价格…、>,<简要介绍…/>
2、互斥的子元素
互斥的子元素表明一系列子元素之间只能出现其中一次。互斥子元素使用竖线(|)分隔,以竖线(|)分隔的多个元素只能出现其中之一。
3、无序的子元素
从理论上讲,DTD没有专门为定义无序子元素提供语法,如果希望使用DTD来表示某个元素之内可以接受无序的子元素。
DID对属性的声明
<! ATTLIST 元素名 属性名 属性类型 [属性限定条件] [默认值]>
属性限定条件”和“默认值‘两部分是可选的吗,有下面几种情况
在没有指定“元素对属性的约束”时,必须为该属性指定“默认值”;
当“元素对属性的约束”是#REQUIRED时,不能为该属性指定“默认值”;必须的属性,必须为该元素提供该属性。
当“元素对属性的约束”是“IMPLIED”时,不能为该属性指定“默认值”;该属性是可有可无的
当“元素对属性的约束”是“FIXED”时,必须为该属性指定“默认值”;该属性的值是固定的定义是必须制定固定值。使用该元素时无需为其分配该属性XML处理器会自动为给属性增加固定值。
定义属性类型
字符类型
CDATA是简单的纯文本字符类型,是最常用的类型,将简单的文本用做属性值。属性值和元素内容都可以是文本类型,但是定义的方法不同例如:
<! ATTLIST Student name CDATA #REQUIRED>
枚举类型
声明了属性的备选值列表,属性必须从该列表中选择一个值作为属性值。
ID、IDREF、 IDREFS类型
ID类型是一种较为严格的约束,它要求属性值必
须是有效地XML标识名,而且在整个XML文件档中
其值不能重复。
NMTOKEN和NMTOKENS类型
NMTOKEN是一个比ID类型更宽松的类型,它只要求该属性是个合法的XML标识。它也是字符串数据,但是约束比CDATA约束要严格,它要求出现的字符要少