XML之Schema约束

一、定义

XML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd,schema约束最大的作用是为了验证xml文件的规范性的,是为了解决dtd约束不够的问题,相应的它的配置就变得比较复杂。

注意: 一个xml文件可以引用多个schema约束但是只能引用一个DTD约束

如果有多个schema约束,我们可以在文档引用的时候

    <根标签 
        xmlns:aa ="约束文档名称空间1"
        xmlns:bb ="约束文档名称空间2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="约束文档名称空间 xsd约束文件名称">
    
    <aa:name></aa:name>
    <bb:name></bb:name>

二、文档声明(创建文档后自动生成)

<?xml version="1.0" ncoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="本文档名称空间"
    xmlns="本文档名称空间(缺省)"
    elementFormDefault="qualified">

<xs:schema> 是所有XSD文档的根元素,其属性描述文档的名空间及文档引用

xmlns:xs="..." 指示使用xs:作前缀的元素、属性、类型等名称是属于...名称空间的

targetNamespace="..." 指示本文档定义的元素、属性、类型等名称属于...名称空间

xmlns="..." 指示缺省的名空间是...,即没有前缀的元素、属性、类型等名称是属于该名称空间的

elementFormDefault="qualified" 指示使用本XSD定义的XML文档所使用的元素必须在本文档中定义且使用名称空间前缀

三、文档引用 

<根标签 xmlns="约束文档名称空间"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="约束文档名称空间 xsd约束文件名称">

xmlns="..." 指示本文档缺省的名空间,即没有前缀的所有的元素应在该空间中定义

xmlns:xsi="..." 指示本文档要引用...名称空间定义的名称,其前缀是xsi

xsi:schemaLocation="... xxx" 指示本文档要引用的...名称空间的XSD文档是xxx

四、元素声明

1.简单元素

    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.mark.com/teacher" 
        elementFormDefault="qualified">

        <element name="teachers"></element>
        <element name="teacher"></element>

         <!-- 以下两个是简单元素 -->
         <element name="name" type="string"></element>
         <element name="age" type="int"></element>

    </schema>

2.复杂元素(嵌套)

    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.mark.com/teacher" 
        elementFormDefault="qualified">

        <element name="teachers"></element>

        <!-- 这是一个复杂元素 -->
        <element name="teacher">
            <!-- 声明这是一个复杂元素 -->
            <complexType>
                <!-- 下面子元素是有序的 -->
                <sequence>
                    <!-- 以下两个是简单元素 -->
                    <element name="name" type="string"></element>
                    <element name="age" type="int"></element>
                </sequence>
            </complexType>
        </element>

    </schema>

五、实例

1.文档声明

    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.mark.com/teacher" 
        elementFormDefault="qualified">

        <element name="teachers">
            <complexType>
                <sequence maxOccurs="unbounded">  <!--maxOccurs最大出现次数不限制-->
                    <!-- 这是一个复杂元素 -->
                    <element name="teacher">
                        <complexType>
                            <sequence>
                                <!-- 以下两个是简单元素 -->
                                <element name="name" type="string"></element>
                                <element name="age" type="int"></element>
                            </sequence>
                        </complexType>
                    </element>
                </sequence>
            </complexType>
        </element>
    </schema>

2.文档使用 

    <?xml version="1.0" encoding="UTF-8"?>
    <teachers
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.mark.com/teacher"
        xsi:schemaLocation="http://www.mark.com/teacher teacher.xsd">
        <teacher>
            <name>mark</name>
            <age>19</age>
        </teacher>
        <teacher>
            <name>tom</name>
            <age>29</age>
        </teacher>
        <teacher>
            <name>tom</name>
            <age>29</age>
        </teacher>
    </teachers>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值