XML Schema检验XML文档结构

1. XML Schema简介

 

XML Schema(也称作XML Schema Definition),它用于检验XML文档的结构,是DTD文件的替代者。由于XML Schema本身也是XML结构,因此它易于掌握与扩展。具体的介绍可以参照这里XML Schema教程或者这里XML Schema Primer(英文的)。上面两个文档介绍的非常之详细,我就不多费口舌了。如果不想看教程的朋友也可直接参见本文第二部分,直接上例子,简单明了。

 

2. 常见Schema写法

 

a) 定义简易元素(SimpleType Element),带restriction。如果定义Attribute,而该Attribute有restriction,写法类似。

 

    待检验XML: <sex>male</sex>, 只能填male或female。

 

<xs:element name="sex">
     <xs:simpleType>
         <xs:restriction base="xs:string">
              <xs:enumeration value="male" />
              <xs:enumeration value="female" />
         </xs:restriction>
     </xs:simpleType>
</xs:element>

 

 

b) 定义复杂元素(Complex Element),带attribute。注意:只带attribute的元素也被归为复杂元素。

    待检验XML: <process id="1001">pName</process>, id是int型。

 

<xs:element name="process">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="id" type="xs:int" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

 

    在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性。

 

 

 c) 定义复杂元素(Complex Element),带attribute, 并对元素内容进行限制。

     待检验XML: <process id="9999">processName</process>, id是string型且为四位数字。process的text长度最小是5,最长是20。

 

<xs:element name="process">
   <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="processType">
                <xs:attribute name="id">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:pattern value="[0-9][0-9][0-9][0-9]" />
                         </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

<xs:simpleType name="processType">
    <xs:restriction base="xs:string">
        <xs:minLength value="5"/>
        <xs:maxLength value="20"/>
    </xs:restriction>
</xs:simpleType>
 

 

   这个例子比较复杂,由于该元素带attribute,因此不能再simpleContent下直接使用restriction,只能使用extension标签;而此元素又带有restriction,extension下面没有restriction的功能 。这时,我们可以通过在extension添加自定义的simpleType来满足需求。如上的processType。

 

 

d) 定义复杂元素(Complex Element),带多个element且拥有attribute。

    待检验XML: <person name="michael">

                          <sex>male</sex>

                          <birthplace>Beijing</birthplace>

                      </person>

 

<xs:element name="person">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="sex" />
            <xs:element name="birthplace" type="xs:string" minOccurs="0"/>
        </xs:sequence>
        <attribute name="name" type="xs:string">
    </xs:complexType>
<xs:element name="person">

<xs:element name="sex">
    <xs:simpleType>
         <xs:restriction base="xs:string">
              <xs:enumeration value="male" />
              <xs:enumeration value="female" />
         </xs:restriction>
     </xs:simpleType>
</xs:element>
 

 

    此例子中用的sequence这个Order Indicator, 其他的Order Indicator还有choice和all等。

 

    在sex标签上,我们用了ref关键字,它可以引用另一个element,使文档模块化,有助于阅读。

 

    对于所有的 "Order" 和 "Group" 指示器(any、all、choice、sequence、group name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1。因此,当想让一个element变为可选,我们可以将<minOccurs> 设置为 0 ,或者你希望的数字。

 

    如果这个元素既有子元素又有属性的话,属性跟在Order Indicator后。

 

 

 

Hope it can relax your eyes : )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值