XML Schema基本用法

       Schema与DTD一样,都是对xml文件的规范和约束,但是Schema比DTD更加细粒度、数据类型更多、功能更加强大,所以现在大多数都选择Schema。Schema也是一个XML文件,因此编写Schema也需要按照xml的规范进行编写,因此我们会思考那么schema是有什么来规范和验证的呢?其实Schema也是有DTD进行规范和验证的。

Schema按照xml文件的规范,所以需要添加:<?xml version="1.0" encoding="utf-8" standalone="yes"?>。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace=“”>......</xs:schema>使用命名空间:xmlns:xs ="..."  其中命名空间的地址是固定不变的。

targetNamespace表示将当前的元素或类型或属性放到指定的空间中(有全局和局部之分,通过elementFormDefault和attributeFormDefault来指定),如果指定了targetNamespace的值,就需要通过使用xmlns定义命名空间指向该空间,如果不指定targetNamespace的值,则表示缺省,那么在使用元素或者类型或者属性时就不需要加上命名空间前缀,

此时elementFormDefault和attributeFormDefault将不起作用。

 elementFormDeafult和attributeFormDefault有 unqualified和qualified两个选择值,当elementFormDefault取值qualified时,表示此时的全局元素或者属性将被定义的指定的命名空间中,在此文件中使用时需要加上命名前缀,并且全局元素的子元素将被以缺省方式放到目标命名空间,当elementFormDefault取值unqualified时,表示全局的置于命名空间中,在此文件中使用时仍需要加上命名前缀,而局部的置于无名空间中,这些特性也就决定的我们在生成xml文件实例是否需要在子元素前面加上命名前缀,当取值qualified表示在父元素和子元素上都需要加上前缀,当取值unqualified是表示不需要再子元素前面加上前缀。   

在这里我们还需要注意一点就是在局部的元素中如果我们使用form属性时,form取值qualified和unqualified,当前的限定范围就会覆盖指定的范围,例如elementFormDefault取值qualified,form取值unqualified时,那么当前的就会定义在无名空间中,即在xml实例中该子元素时,就不需要加上前缀。

attributeFormDefault与elementFormDefault类似。

 

 一、定义元素

       <xs:element name=" " type=" "/>

 二、定义属性

     <xs:attribute name=" "  type=" "/>

 三、简单类型simpleType,对属性或者元素的约束,简单类型中不能包含属性或者元素,只是简单的文本

         <xs:simpleType name="">
<xs:restriction base=""> //表示约束,base 表示基于哪一种类型(xs:int/xs:string.........),在<xs:restriction>元
               </xs:restriction>//素下表示对长度、大小、枚举等限制
       </xs:simpleType> 

     例如: <xs:simpleType name="type">
<xs:restriction base="xs:string">
                       <xs:length value="2"/>
</xs:restriction>
       </xs:simpleType> //表示type为长度为2的字符串

    在simpleType中除了除了restriction之外还可以取list、union

        <xs:simpleType>
<xs:list itemType="xs:int"/>//指定该类是int类型的列表,在xml实例中取值通过空格隔开
</xs:simpleType>       

      xs:simpleType>
<xs:union memberTypes="xs:int xs:string" > //表示该类型是int和string的联合体
</xs:union>
</xs:simpleType> 


四、复合类型complexType,也是对属性或者元素的约定,complexType包含元素或者属性或者二者都包含。

   <xs:complexType name="">
     <xs:sequence>//表示序列,该序列下面的元素必须按照给定的顺序出现,通过属性maxOccurs="" minOccurs=""
          <xs:element name=" " type=" "/> //指定总体出现的最大次数和最小次数,默认值为1

           <xs:element name=" " type=" "/>      maxOccurs="unbounded"表示无上限

     </xs:sequence>
     <xs:attribute name="" type=""/>//指定属性
  </xs:complexType>
      除了使用sequence之外还可以使用all 、group 、choice

        <xs:all>.....</xs:all>表示其下面的元素整体按照任意的顺序出现,可出现一次或者零次

           <xs:group>....</xs:group>表示按照组的形式出现

     <xs:choce>....</xs:choice>表示每次选择其下的一个元素,maxOccurs="" minOccurs=""选择的最大、最小次数

    

    另外complexType 下面还可以使用simpleContent和complexContent,其中simpleContent表示该复合类型没有元素,包含文本,还可以包含属性。  

     <xs:complexType name="">
                         <xs:simpleContent>
             <xs:extension base="xs:int">//在这里还可以使用restriction   
                                <xs:attribute name="name" type="xs:string"/>
           </xs:extension>
               </xs:simpleContent>
      </xs:complexType>//表示包含属性name和文本为int类型的符合类型

 五、group和attributeGroup

      group表示对元素进行分组,attributeGroup表示对属性进行分组,在其它地方可以通过ref属性对其进行

 六、unique 表示在一定的范围内对属性或者元素的唯一性进行限定

     例如:<xs:element name="books">
                      <xs:complexType>
                         <xs:sequence>
                             <xs:element name="bookName" type="xs:string" maxOccurs="unbounded"/>            
                        </xs:sequence>        
                     </xs:complexType>
                    <xs:unique name="bookUnique">
                        <xs:selector xpath="bookName"></xs:selector>//表示指定范围
                        <xs:field xpath="."></xs:field>//表示当前元素本身在指定的范围内唯一
                   </xs:unique>
               </xs:element>

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

      <xs:element name="books">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="book" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string"/>
                            <xs:element name="price" type="xs:decimal"/>                   
                        </xs:sequence> 
                        <xs:attribute name="id" type="xs:integer"/>                  
                    </xs:complexType>                
                </xs:element>         
            </xs:sequence>        
        </xs:complexType>
        <xs:unique name="bookUnique">
            <xs:selector xpath="book"/>  //指定范围
            <xs:field xpath="id"/>//指定id属性在指定的范围内唯一
        </xs:unique>
    </xs:element>


   7、 key元素  用于对元素或者属性的唯一性进行限定

         key的用法与unique的用法相同

        另外还有一个refkey元素,它与key元素一起使用

      <xs:keyref refer="sortKey" name="sortKeyRef">  //refer表示引用一个key元素
            <xs:selector xpath="book"></xs:selector>//表示限定的范围
            <xs:field xpath="type"></xs:field>//表示type的值必须是sortKey中的一员
        </xs:keyref>

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

<xs:element name="学生名册" type="students"/>
<xs:complexType name="students">
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element ref="student"/>
</xs:sequence>
</xs:complexType>
<xs:element name="student" type="s"/>
<xs:complexType name="s">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element ref="name"/>
<xs:element ref="gender"/>
<xs:element ref="age"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int" use="required"/>
</xs:complexType>
<xs:element name="name" type="xs:string"/>
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minExclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
</xs:element>






















            

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值