Dtd的分类
Ø 内部DTD 所谓内部DTD是指DTD与XML数据定义放在同
Ø 一份文档中,即将DTD定义在XML文档内部。内
Ø 部DTD紧跟在XML声明和处理指令之间。
Ø 文档类型声明以“<!DOCTYPE>” 开始,以“]>”
Ø 结束。在XML处理指令和根元素之间定义。
Ø 如下:
Ø < ? xml version=”1.0” encoding=”GB2312” standalone=”yes” ?>
Ø <! DOCTYPE 根元素名称 [
Ø <! ELEMENT 子元素名称 (#PDATA)>
Ø ]>
Ø
Ø 外部DTD 外部文件类型定义存在于独立文件中,文件扩
Ø 展名为“.dtd”。外部DTD的好处是:可以方便地
Ø 被多个XML文档共享,只需要定义一份DTD文
Ø 档,即可为多个XML文档定义语义约束。
Ø <!DOCTYPE 根元素名 SYSTEM " DTD-URL ">
Ø 公用DTD 有一种外部DTD,是由某个权威机构制定,供
Ø 特定行业或公司,这种DTD又被称为公用DTD。
Ø <!DOCTYPE 根元素名 PUBLIC " DTD-NAME “ “DTD-URL”>
公用DTD与外部DTD区别在于:公用DTD使用PUBLIC代替了原来的SYSTEM,并增加了DTD标识名。
Ø 注意:0到多个<!ELEMENT….>定义,每个<!ELEMENT….>定义一个XML元素
Ø 0到多个<!ATTLIST….>定义,每个<!ATTLIST….>定义一个XML元素定义了一个属性
Ø 0到多个<!ENTITY….>定义,每个<!ENTITY….>定义一个实体
Ø 0到多个<!NOTATION….>定义,每个<!NOTATION….>定义一个符号
Ø
DTD对元素声明【重点掌握】
使用ELEMENT声明XML元素的语法,语法格式如下:
<!ELEMENT 元素名 元素内容>
Ø 元素声明以“<!”开始,以“>”结束
Ø 元素声明指令“ELEMENT”为关键字,必须大写
Ø 元素名:为当前元素指定的元素名称
Ø 元素内容: 元素名后面的内容用来指定元素的内容类型,它可以分为EMPTY(空)、子元素类型,混合型、ANY(任意)和#PCDATA 5种类型。
定义空元素类型—EMPTY
<!ELEMENT 元素名 EMPTY>
定义任意类型的元素
<!ELEMENT 元素名 ANY>
定义字符串内容的元素
<!ELEMENT 元素名 #PCDATA>
定义混合内容元素
<!ELEMENT 父元素名 (#PCDATA|子元素1|子元素2|子元素3…..)*>
注意:
Ø #PCDATA必须放在最前面
Ø #PCDATA和各子元素之间只能用竖线(|)分割
Ø 子元素1,子元素2和子元素3之间的竖线(|)并不是表示互斥,而只是表 示这些元素能无序的重复出现,而且次数不受限制
Ø 不要试图在各个子元素之后添加?,*。+等表示频率的修饰符
Ø 定义子元素
Ø 有序的子元素
Ø 互斥的子元素
Ø 无序的子元素
有序的子元素
用英文逗号(,)作为子元素之间的分隔符,则子
元素之间必须遵守所定义的顺序。
互斥的子元素
互斥的子元素表明一系列子元素之间只能出现
其中一次。互斥子元素使用竖线(|)分隔,以竖
线(|)分隔的多个元素只能出现其中之一
实例
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 书籍列表 (计算机书籍)*>
<!ELEMENT 计算机书籍 (书名|作者|价格|简要介绍)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
<!ELEMENT 简要介绍 (#PCDATA)>
DTD对属性声明【重点掌握】
在 DTD 中,属性通过 ATTLIST 声明来进行声明。一个属性声明可以声明一个元素的多个属性。
<! ATTLIST 元素名 属性名 属性类型 [属性限定条件] [默认值]>
“属性限定条件”和“默认值‘两部分是可选的吗,有下面几种情况
Ø 在没有指定“元素对属性的约束”时,必须为该属性指定“默认值”;
Ø 当“元素对属性的约束”是#REQUIRED时,不能为该属性指定“默认值”;
Ø 当“元素对属性的约束”是“IMPLIED”时,不能为该属性指定“默认值”;
Ø 当“元素对属性的约束”是“FIXED”时,必须为该属性指定“默认值”;
对属性的限定条件
v #REQUIRED: 必须的属性,意味着必须为该元素提供该属性
v #IMPLIED: 该属性是可有可无的
v #FIXED: 该属性的值是固定的,定义是必须制定固定值。使用该元素时无需为其分配该属性,XML处理器会自动为给属性增加固定值
属性类型 | 含义 |
CDATA | 值为字符串数据 |
(en1|en2|..) | 此值是枚举列表中的一个值 |
ID | 该属性值必须是有效地标识符,在XML文档时唯一的 |
IDREF | 值为另外一个元素的 id属性值 |
IDREFS | 值必须引用自多个已经有的ID属性值,多个ID属性值用空格隔开 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为多个合法的 XML 名称的列表 |
ENTITY | 值是一个外部实体,如图片支持 |
ENTITIES | 值是一个实体列表,多个实体之间以空格隔开 |
NOTATION | 该属性值是在DTD中声明过的符号,这个是过期的,不要使用 |
枚举类型
声明了属性的备选值列表,属性必须从该列表
中选择一个值作为属性值。
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 购物车 (肉* , 水果*)>
<!ELEMENT 肉 EMPTY>
<!ELEMENT 水果 EMPTY>
<!ATTLIST 肉 类型 (鸡肉|牛肉|猪肉|鱼肉) #REQUIRED>
<!ATTLIST 水果 类型 (苹果|梨|桔子) #REQUIRED>