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>
作者:蓝月

-------------------------------------------

个性签名:能我之人何其多,戒骄戒躁,脚踏实地地走好每一步

原文地址:https://www.cnblogs.com/viplanyue/p/13573691.html