schema约束

schema

通过schema来解决DTD的不足,dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型,比如 年龄只能是整数,在schema可以直接定义一个整数类型,schema语法更加复杂,schema目前不能替代dtd

schema快速入门
1)创建一个schema文件,后缀名为”.xsd”,特别注意的一点是,在myelipse的new - >other 搜索不到.xsd,其实xsd也是一个xml文件,故搜索xml既可以。看图
这里写图片描述
这里写图片描述

//分析里面的属性
//表示当前xml文件是一个约束文件,这是一个w3c提供的一个严格限制xml的约束文件,一般固定不变
xmlns="http://www.w3.org/2001/XMLSchema"
// 使用schema约束文件,直接通过这个地址引入约束文件,外部的xml使用该约束文件是通过该命名空间,可以随便你写,但是习惯写一个URL地址            
targetNamespace="http://xiaozheng/20161213"
//质量良好的
elementFormDefault="qualified"
//可以不写的,:tns值得是别名,取别名为tns           
xmlns:tns="http://www.example.org/2" 

2)看简单元素和复杂元素,法则:有多少个元素就有多少个< element>

//简单元素:是要写在复杂元素里面的额
<element name="name" type="string"></element>
//复杂元素
<element name="person" type="string">
    <complexType>
        <sequnce>
            //简单元素
            <element name="name" type="string"></element>
        </sequnce>
    </conplexType>
</element>
//上代码
1.xsd
<?xml version="1.0" encoding="UTF-8"?>    //声明文档类型
<schema xmlns="http://www.w3.org/2001/XMLSchema"  //引入约束文件
targetNamespace="http://xiaozheng/20161213"       //约束的命名空间
elementFormDefault="qualified">      //质量良好的
    <element name="person">          //有一个复杂元素,名字为person
        <complexType>                //固定写法,没什么可以说的
            <sequence>               //固定写法,没什么可以说的
                    <element name="name" type="string"></element>    //有一个简单的元素,name,约束为string类型
                    <element name="age" type="int"></element>//有一个简单元素,age,约束为int类型
            </sequence>
        </complexType>
    </element>
</schema>

3)在被约束的文件xml中引入该 约束的文件xsd

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xiaozheng/20161213"
xsi:schemaLocation="http://xiaozheng/20151111 1.xsd">

//表示这个xml是一个被约束的文件,特别注意这里的xmlns与约束文件不一样,差后面的instance部分
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
//是约束文档里面 targetNamespace
xmlns="http://xiaozheng/20161213"
//targetNamespace 空格  约束文档的地址路径,指明路径
xsi:schemaLocation="http://xiaozheng/20161213.xsd"

【注意:】
如果说,引入之后,在写person的时候,没有任何的效果的话,可能就是你的xsd文件有错误,或者是引入的时候写错代码了,才会导致没有提示的

这里写图片描述
schema属性讲解

    <sequence>:表示元素的出现的顺序
    <all>: 元素只能出现一次
    <choice>:元素只能出现其中的一个
    maxOccurs="unbounded": 表示元素的出现的次数
    <any></any>:表示任意元素
//上代码
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xiaozheng/20151111"
elementFormDefault="qualified">
    <element name="person">
        <complexType>
            <sequence>      //这个值是可以修改的额,all,choice,之类的额
            <!-- <all> -->
            <!-- <choice> -->
            <!-- <any> -->
                    <element name="name" type="string" maxOccurs="unbounded"></element> 
                    <element name="age" type="int"></element>
            <!-- </choice> -->
            <!-- </all>  -->
            <!-- </any> -->
            </sequence>
        </complexType>
    </element>
</schema>

schema 的约束属性

//写在复杂元素里面,也就是</complexType>之前
<attribute name="id1" type="int" use="required"></attribute>
    name: 属性名称
    属性类型 int stirng
    use:属性是否必须出现 required
    <element name="person">
        <complexType>
            <sequence>
                    <element name="age" type="int"></element>   
            </sequence>
            <attribute name="id1" type="int" use="required"></attribute>
        </complexType>
    </element>

扩展:如果引入复杂的xsd文件,起别名呗

<company xmlns = "http://www.example.org/company"
    xmlns:dept="http://www.example.org/department"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd" 

看个小小案例
这里写图片描述
这里写图片描述

其实,schema的语法比dtd复杂的多,这里只是让你简单看得懂,能按照别人写好的xsd文件写出xml,至于深入的学习要靠自己

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值