W3C XML Schema 教程 (三)

6          复杂元素描述

复杂元素指包含属性或子元素的XML元素,如:<student name=Li sex=>,主要包括下列四类

l         空元素:只包含属性的元素。如:<student name=li />

l         只包含属性与子元素的元素。如

<name type=realname>

<firstname>Jack</firstname>

<lastname>Tom</lastname>

      </name>

l         只包含属性与text的元素。如

<name type=firstname>Jack</name>

l         只包含属性、text和子元素的元素。如

    <name type=realname>

        Your name is:

       <firstname>xxx</firstname>

       <lastname>xxx</lastname>

</name>

复杂元素是一种复杂类型,可以使用下面两种描述方式,一是复合结构,二是分离结构。复合结构,则直接将复杂类型定义为复杂元素的子元素;分离结构则是将复杂类型定义在外部,由复杂元素引用

l         复合结

<xs:element name="xxx">

<xs:complexType>

    ...

        </xs:complexType>

</xs:element>

l         分离结

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

<xs:complexType name=”yyy”>

    ...

    </xs:complexType>

这两种描述结构也适合于属性、简单元素的描述。如果XSD元素中存在大量可复用的自定义数据类型时,建议使用分离式的定义结构

6.1    数据类型

XSD的数据类型包括基本数据类型、简单数据类型、复杂数据类型三类。基本数据类型指W3C标准定义的数据类型,主要包括xs:integerxs:stringxs:datexs:boolean等。简单数据类型是基本数据类型的扩展,对取值进行约束;复杂数据类型则是一个复杂的数据结构,通常包含了属性或子元素定义

1       简单类

简单类型扩展基本数据类型,并对值施加一定的约束。如

    <xs:simpleType name="XSDSimpleType">

        <xs:restriction base="dateTime">

           <xs:enumeration value="value1" />

           <xs:enumeration value="value2" />

           <xs:enumeration value="value3" />

        </xs:restriction>

    </xs:simpleType>

    <xs:simpleType name="XSDSimpleType">

       <xs:list itemType="dateTime">

           <xs:enumeration value="value1" />

           <xs:enumeration value="value2" />

           <xs:enumeration value="value3" />

       </xs:list>

    </xs:simpleType>

    <xs:simpleType name="XSDSimpleType">

       <xs:union memberTypes="dateTime">

           <xs:enumeration value="value1" />

           <xs:enumeration value="value2" />

           <xs:enumeration value="value3" />

       </xs:union>

    </xs:simpleType>

2       复杂类

复杂类型通常是复杂元素的数据类型或复杂元素的子元素,描述复杂元素的子元素、属性以及子元素与属性的类型。参看后续各小节的描述

6.2    约束

约束指对简单类型的元素或属性施加的值约束条件,主要包含范围约束、长度约束、枚举值、模式匹配、空白处理等,是XSD元素或属性值限制的基础

1       范围约

范围约束主要施加到数值型、日期型等类型,限制取值的范围。如

<xs:restriction base="xs:integer">
        <xs:minInclusive value="0"/>
        <xs:maxInclusive value="120"/>
    </xs:restriction>

上述范围约束限定的取值范围是:0<=<=120

其他的值范围约束元素主要包括

l         fractionDigits 设置最大小数位

l         totalDigits 指定精确的数值位

l         maxExclusive 设置数值型的最大值(val < xxx)

l         maxInclusive 设置数值型的最大值(val <= xxx)

l         minExclusive 设置数值型的最小值(val > xxx)

l         minInclusive 设置数值型的最小值(val >= xxx)

2       长度约

长度约束施加到任何类型上限制值的长度,包括<xs:length>固定长度、<xs:maxLength>最大长度、<xs:minLength>最小长度三个限定元素。如

<xs:restriction base="xs:string">

    <xs:length value="8"/>

</xs:restriction>

<xs:restriction base="xs:string">

    <xs:minLength value="5"/>

    <xs:maxLength value="8"/>

</xs:restriction>

3       枚举值约

枚举值约束限制元素或属性的值只能在给定的值列表中取值,并使用base属性指示值的数据类型。如

<xs:restriction base="xs:string">

    <xs:enumeration value="CNY"/>

    <xs:enumeration value="USD"/>

    <xs:enumeration value="JPY"/>

</xs:restriction>

4       模式匹配约

模式匹配约束限制元素或属性的值应满足给定的模式要求,并使用base属性指示值的数据类型。如

<xs:restriction base="xs:string">

    <xs:pattern value="[a-z]"/>

</xs:restriction>

以下是些模式匹配的示例

l         [a-z] a-z间的单个字符

l         [A-Z][A-Z] 两个字符,每个字符都在AZ

l         [a-zA-Z] a-zA-Z间的单个字符

l         [abc] 单个字符 abc

l         ([a-z])* 零个或任意个字符a-z

l         ([a-z][A-Z])+ 一个或任意个字符对,每对字符大小写间隔出现

l         "a"|"b" 值只能是ab,与枚举类似

l         [a-zA-Z0-9]{8} 精确的八个a-zA-Z0-9间的字符

5       空白处理约

空白处理约束限制XML文档解析器如何处理值的组成空白字符,使用<xs:whitespace>限定元素指示。如

<xs:restriction base="xs:string">

    <xs:whiteSpace value="replace"/>

</xs:restriction>

value可能的取值包括

l         replace 删除内容中的全部空白

l         preserve 保留内容中的全部空白

l         collapse 删除前导、后导空白,替换内容中的一个或多个空白为一个空格

6.3    属性

属性本身总是定义为简单类型的。属性可以指定缺省值、固定值、强制项、约束等属性。属性定义格式是:<xs:attribute name="xxx" type="ttt" [default="ddd"] [fixed="fff"] [use="required"] >

<xs:attribute name="orderid" type="xs:string" use="required"/>

    <xs:attribute name="orderid" >

       <xs:simpleType name="orderIdType">

           <xs:restriction base="string">

              <xs:pattern value="[A-Z]"d{8}" />

           </xs:restriction>

       </xs:simpleType>

    </xs:attribute>

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

    <xs:simpleType name=" orderIdType">

        <xs:restriction base="string">

            <xs:pattern value="[A-Z]"d{8}" />

     </xs:restriction>

</xs:simpleType>

6.4    空元素描述

空元素通常使用<xs:complexType>描述

<xs:element name="product">
    <xs:complexType>
        <xs:attribute name="prodid" type="xs:positiveInteger"/>
    </xs:complexType>
</xs:element>

或使用<xs:simpleContent>描述,这种格式通常在元素包含属性和文本时使用

<xs:element name="product">
    <xs:complexType>
        <xs:simpleContent>
            <xs:restriction base="xs:integer">
                 <xs:attribute name="prodid" type="xs:positiveInteger"/>
            </xs:restriction>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

或者使用分离结构描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值