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

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

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

  • 相关阅读:
    算法问题实战策略 JUMPGAME 记忆化搜索
    算法问题实战策略 TRIANGLEPATH 动态规划入门题
    poj 2785 4 Values whose Sum is 0
    poj 3276 Face The Right Way 递推
    acwing 883. 高斯消元解线性方程组
    acwing 861. 二分图的最大匹配 模板
    Leetcode 42 接雨水 双指针 空间换时间
    LeetCode 1290. 二进制链表转整数
    LeetCode 1291. 顺次数
    <挑战程序设计竞赛> poj 3320 Jessica's Reading Problem 双指针
  • 原文地址:https://www.cnblogs.com/viplanyue/p/13573691.html
Copyright © 2020-2023  润新知