一、DTD的作用
1.验证接收到的数据是否有效
2.用于验证自己的数据
3.定义XML文档的合法构建快
4.使用一系列合法元素来定义文档结构
二、使用DTD的好处
1.用DTD提供统一格式
2.用DTD验证数据有效性
3.根据DTD编写文档样式单
三、引入DTD的方式
1.内部DTD
<!DOCTYPE 根元素名称 [
<!ELEMENT 子元素名称 (#PCDATE)>
]>
2.外部DTD
<!DOCTYPE 根元素名 SYSTEM "URL">
URL 表示DTD文件的路径,可以是绝对路径、也可以是相对路径。
注意:引入外部DTD时还应注意编码方式应与Xml文件相同
3.公用DTD
<!DOCTYPE 根元素名 PUBLIC "DTD-NAME" "DTD-URL">
DTD-NAME 要引用的DTD的名称
DTD-URL 要引用的DTD的路径
四、DTD对元素的声明
声明Xml元素的语法格式:
<!ELEMENT 元素名 元素内容>
1.元素声明以"<!"开始,以">"结束
2.元素声明指令"ELEMENT"为关键字,必须大写
3.元素名:为当前元素指定的元素名称
4.元素内容:用来指定元素的内容类型,他可以分为EMPTY(空)、子元素类型、混合型、ANY(任意)和#PCDATA 五种类型。
混合内容元素的定义
<!ELEMENT 学生(#PCDATA|学号|姓名)*>
解释:学生是混合内容元素,可以包含字符串,也可以包含学号、姓名这两个元素,并且这两个元素出现的顺序和次数没有限制。
五、各个元素之间的几种逻辑关系
1.有序的子元素
<!ELEMENT 学生 (学号,姓名,年龄,性别)>
有序的子元素:用英文逗号作为子元素之间的分隔符,表示元素之间必须遵守所定义的顺序,
2.互斥的子元素
<!ELEMENT 性别 (男|女)>
互斥的子元素:用竖线作为子元素之间的分隔符,表示一系列的元素之间只能出现其中的一个。
3.无序的子元素
无序的子元素:用“|”和“*”、“+”配合实现。
<!ELEMENT 超市 (商品|管理员)*>
表示商品和管理员出现的次数和位置没有限制。
<!ELEMENT 超市 (商品|管理员)+>
表示商品和管理员出现的位置没有限制,但两个里面最少出现一个。
六、DTD中表示频率的特殊标记
1. + 表示子元素可以出现一次或多次
2. * 表示子元素可以出现零次和多次
3. ? 表示子元素可以出现零次或一次
如果在定义子元素时,没有在子元素后指定任何表示频率的特殊标记,则表明这些子元素只能出现一次,且必须一次。
七、DTD对属性声明
声明属性的方式:
<!ATTLIST 元素名 属性名 属性类型 [属性限定条件] [默认值]>
“属性限定条件”和“默认值‘两部分是可选的吗,有下面几种情况
在没有指定“元素对属性的约束”时,必须为该属性指定“默认值”;
当“元素对属性的约束”是#REQUIRED时,不能为该属性指定“默认值”;
当“元素对属性的约束”是“IMPLIED”时,不能为该属性指定“默认值”;
当“元素对属性的约束”是“FIXED”时,必须为该属性指定“默认值”;
#REQUIRED: 表示必须的属性,意味着必须为该元素提供该属性
#IMPLIED: 表示该属性是可有可无的
#FIXED: 表示该属性的值是固定的,定义是必须制定固定值。使用该元素时无需为其分配该属性,XML处理器会自动为给属性增加固定值。
DTD支持的属性类型
字符类型
<! ATTLIST 学生 姓名 CDATA #REQUIRED>
枚举类型
<!ATTLIST 学生 姓别(男|女) #REQUIRED>
ID类型
<!ATTLIST 学生 学号 ID #REQUIRED>
IDREF类型
<!ATTLIST 学生 考号 IDREF #IMPLIED>
IDREFS类型
<!ATTLIST 学校 学生 IDREFS #IMPLIED>
NMTOKEN和NMTOKENS类型
NMTOKEN是一个比ID类型更宽松的类型,它只要求该属性是个合法的XML标识。它也是字符串数据,但是约束比CDATA约束要严格,它要求出现的字符要少。
八、实体
解释:所谓定义实体引用就是用一个字符串代替另一个字符串。
作用:
1.提高代码的复用,方便修改,维护XML文档。
2.使用默写特殊的符号,这些特殊的符号可能会使XML解析混淆。
3.减少字符出入量,如果某个字符串特别长,而且需要经常使用,则可以定义为实体。
九、实体的分类
1.按照实体的具体内容:可解析、不可解析
2.按照逻辑储存:内部实体、外部实体
3.按照使用范围:一般实体、参数实体
十、定义实体
1.普通实体
定义格式:<! ENTITY 实体名 “实体值”>
使用格式:&实体名;
2.参数实体
定义格式:<! ENTITY % 实体名 “实体值”>
使用格式:%实体名;
注意:实体跟变量其实很相似,包括他的使用方法,一定要注意实体也是先定义后使用
3.外部普通实体
定义格式:<! ENTITY 实体名 SYSTEM “实体值所在文件的URI”>
<! ENTITY 实体名 PUBLIC “公用实体标识名” “实体值所在文件的URI”>
使用格式:&实体名;
4.外部参数实体
定义格式:<!ENTITY %实体名 SYSTEM|PUBLIC[“公用实体标识名”] “实体值所在文件的URI”>
使用格式:%实体名;