一.xml约束的简介
Xml约束就是书写xml的要求、规则、束缚,在写xml文件之前先定义好的一套规则,然后在xml文件中引用这套规则,那么该xml文件的书写必须满足规则。
xml约束的常用约束有:dtd约束、schema约束
下面简单说一下dtd约束的定义和使用
注意:下面所以的标签和元素都是指同一个东西,就是xml文件中自定义的标签
二.dtd约束文件的定义
1)dtd约束简介
DTD(Document Type Definition),全称为文档类型定义。dtd约束的文件有其自己独特的语法结构:
2)自定义dtd约束文件
下面是自定义的一个dtd约束文件,dtd约束文件的后缀名是.dtd(下面dtd文件名是:my.dtd)
<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT wh0320 (student+,teacher+)> <!ELEMENT student (name,age,gender)> <!ELEMENT teacher (name,age,gender)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT gender (#PCDATA)> <!-- ATTLIST 表示属性列表 student 当前属性写在哪个标签上 id表示属性名称,可以任意命名,注意命名规范 ID表示属性的类型 #REQUIRED表示必填 属性如果是ID类型就必须设置为必填 --> <!ATTLIST student id ID #REQUIRED>
<?xml version="1.0" encoding="uft-8"?> 第一行是文档声明,version是xml文件的版本信息,encoding是xml文件的字符编码
<!ELEMENT wh0320 (student+,teacher+)> 表示在wh0320标签下面可以有1到多个student和teacher子标签,注意()之前有个空格
<!ELEMENT student (name,age,gender)> 表示在student这个标签下面还有name,age,gender这个三个子标签,默认只出现一次
<!ELEMENT name (#PCDATA)> 表示在name标签中可以输入文本内容
<!ATTLIST student id ID #REQUIRED> 表示在student标签下面有一个属性名为id的属性,值的类型是ID,#REQUIRED表示这个属性对student标签来说是必写的属性
3)dtd约束的语法介绍【定义元素和属性】
①声明xml元素的语法:
<!ELEMENT 元素名称 (子标签名称.....) > 表示在xml文件中这个标签下面有些子标签
或者<!ELEMENT 元素名称 (#PCDATA)> 表示在xml文件中这个标签下面没有子标签,直接在该标签里面填写文本
注意:上面的语法中元素名称和()之间必须要有一个空格,如果没有约束无效
在子标签后面也可以使用下面符号:
*:表示该子标签可以自这个标签中出现0次或多次
+:表示该子标签可以在这个标签中出现一次或多次
?:表示该字标签可以在这个标签中出现0次或一次
注意:标签名后面没有这些符号默认出现一次
②声明元素属性的语法:
<!ATTLIST 元素名称 属性名1 属性类型 设置说明 ....> 表示在指定的元素中设置属性,可以在在一个标签中设置多个属性
设置说明:
#REQUIRED:必须设置该属性
#IMPLIED:属性不是必需的,可以设置也可以不设置
#FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值
直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
常用属性值类型
CDATA:表示属性值为普通文本字符串。
ID:值为唯一的 id
ENTITY(实体):值是一个实体
三.dtd约束的使用
dtd约束定义好了以后,可以在xml文件中引用这个dtd约束文件,引用以后,xml文件的标签的定义必须和dtd约束的规则一致
下面是自定义的xml文件中,引用dtd文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE wh0320 SYSTEM "my.dtd"> <wh0320> <student id="stu_01"> <name>赵敏</name> <age>23</age> <gender>女</gender> </student> <teacher> <name>张三丰</name> <age>110</age> <gender>男</gender> </teacher> </wh0320>
引用外部dtd文件的声明语法:<!DOCTYPE 根元素 SYSTEM "文件路径">
注意:①引入文件的声明语句必须在xml文档声明的语句下面
②后面的文件路径,如果dtd约束文件和xml文件在同一个文件夹下,可以不写路径直接使用文件名