Java第四十一天,XML系列(二),XML 约束
1.何为约束
规定 XML 文档的书写规则
2.约束分类
(1)DTD ===> 一种简单的约束技术
后缀名为 .dtd
// 通过 ELEMENT 定义标签
// 通过 ATTLIST 定义属性
// 声明 students 标签中可以存放 student 子标签; * 代表 student 标签可以出现零次或多次
<!ELEMENT students (student*) >
// student 标签中可以出现 name age sex 标签;不写个数表示这三个标签只能出现一次
<!ELEMENT student (name,age,sex)>
// #PCDATA 表示 字符串
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
// 表示 student 标签有 number 属性,该属性是ID(唯一标识); #REQUIRED 表示该属性是必须的
<!ATTLIST student number ID #REQUIRED>
(2)Schema ===> 一种复杂的约束技术
后缀名为 xsd
<?xml version="1.0"?>
<xsd:schema xmlns="http://www.itcast.cn/xml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn/xml" elementFormDefault="qualified">
<!--element 表示定义了一个元素 name 是元素的名字; type 是元素的类型-->
<xsd:element name="students" type="studentsType"/>
<xsd:complexType name="studentsType">
<!--sequence 表示 student 元素按顺序显示-->
<xsd:sequence>
<xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="studentType">
<!--sequence 表示按顺序出现 name, age, sex 标签-->
<xsd:sequence>
<!--xsd:string 表明是规定类型字符串-->
<xsd:element name="name" type="xsd:string"/>
<!--ageType 和 sexType 是自定义类型-->
<xsd:element name="age" type="ageType" />
<xsd:element name="sex" type="sexType" />
</xsd:sequence>
<!--attribute 表示定义一个属性; 属性名为 number type指定了该属性是 数字类型 use="required" 表明了该属性是必须的-->
<xsd:attribute name="number" type="numberType" use="required"/>
</xsd:complexType>
<xsd:simpleType name="sexType">
<!--restriction 指定了基础类型是 string 类型-->
<xsd:restriction base="xsd:string">
<!--enumeration 指定了是枚举类型,只能取列出的值-->
<xsd:enumeration value="male"/>
<xsd:enumeration value="female"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ageType">
<!--restriction 指明基本数据类型为 integer 类型-->
<xsd:restriction base="xsd:integer">
<!--最小值为0-->
<xsd:minInclusive value="0"/>
<!--最大值为256-->
<xsd:maxInclusive value="256"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="numberType">
<xsd:restriction base="xsd:string">
<!--pattern 指定了是组成格式;格式为 R_xxxx; \d(4) 表示了只能是 4位 的数字-->
<xsd:pattern value="R_\d{4}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
3.在 XML 文件中引入 DTD 约束文件
(1)内部dtd ===> 将约束规则定义在xml文档中
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students 【
约束
】>
(2)外部dtd ===> 将约束的规则定义在外部的dtd文件中;外部 DTD 文档又分为 本地DTD 和 网络DTD 两种
<!--外部本地-->
<!DOCTYPE 根标签 SYSTEM "dtd文档的路径">
<!--外部网络-->
<!DOCTYPE 根标签 PUBLIC "dtd文档名字" "dtd文档url">
4.在 XML 文件中引入 Schema 约束文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--
1.填写xml文档的根元素
2.引入xsi前缀
3.引入xsd文件命名空间
4.为每一个xsd约束声明一个前缀,作为标识(否则的话,每个标签都得写上前缀)
-->
<根标签 xmlns:xsi="引入xsi前缀"
xsi:schemaLocation="为schema文档设置的前缀(命名空间) schema文档路径"
xmlns="设置 xsd 文件的命名空间,作为标识"
>
</根标签>
注意:
xmlns="" 表明是空前缀,即默认前缀;假如有多个约束文件,就不能写空前缀了,写法如下:
xmlns:前缀名称=""
例如:
<?xml version="1.0" encoding="UTF-8" ?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.lanyue.cn/xml"
xsi:schemaLocation="http://www.lanyue.cn/xml student.xsd"
>
<student number="0001">
<name>tom</name>
<age>18</age>
<sex>male</sex>
</student>
</students>