一、DTD约束
1、解释
1.1 什么是约束?
在xml文档中,可以通过一个文件来约束xml文档中的内容规范,这个规范就是约束。
约束就是规定了xml文件中可以写什么,不可以写什么。
1.2 为什么要有约束?
因为xml文件可以随意写,如果标记随意写,在解析xml文件时,程序员就不清楚xml文件中的标记具体表示什么含义,所以说用约束规范xml文件的书写。
2、创建约束文件
2.1 什么是DTD:
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可以作为一个外部引用。
2.2 语法
<!ELEMENT 元素名称 [dtd具体约束内容]>
比如:
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,价格)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 |(#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
3、DTD引入
3.1 直接在xml文件中引入DTD约束
<!DOCTYPE 书架[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,价格)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 |(#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
]>
3.2 外部引入方式
(1)本地引入
语法:<!DOCTYPE 书架 SYSTEM "xxx.dtd">
(2)公网引入
语法:<!DOCTYPE 书架 PUBLIC "DTD名称" "DTD文件在公网的url">
4、DTD语法
4.1 元素定义
(1)基本语法
<!ELEMENT 元素名称 元素内容>
(2)元素内容对应的类型
普通的文本:#PCDATA
子元素:比如说:(子元素1,子元素2,等等)
EMPTY:比如说:<book />
ANY:代表任意内容,元素内容可以是普通的文本,也可以是子元素。
注意:
* 表示零个或者多个
+ 表示一个或者多个
| 表示任选一个
,表示子元素按顺序排列
?表示可以出现0或1
4.2 属性定义
(1)基本语法
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
(2)属性类型
CDATA:属性值为任意文本数据
即Character Data(字符数据)。表示属性的类型为字符类型!
Enumerated:属性值必须是枚举列表中的一个:
它不是关键字,定义枚举类型的属性需要给出枚举列表。当属性值为枚举类型时,
那么这个属性的取值必须是枚举列表中的一个值。
ID:属性值必须是唯一的,并且属性值不能以数字开头
一个元素只能有一个ID属性,ID属性用来表示元素唯一性的唯一标识。ID属性就相当于元素的身份证号,必须是唯一标识!
IDREF:属性值必须是ID属性的值
IDREF 属性用来与其他元素建立关联关系,
IDREF 属性的值必须是另一个元素的ID属性值。
(3)属性类型的设置说明
#REQUIRED:表示属性是必须的。
#IMPLIED:表示属性是可选的,即这个属性可以不给出;