This is my home, welcome to my blog. There is no limit to the goodness of life. The more you experience and appreciate the goodness of life.

11/19/2010

XML Schema的数据结构

    XML Schema中的数据类型是学习XML Schema的核心,只有理解了这一点,后面的内容也就相对简单了。  
  XML Schema中的数据类型可分为简单类型和复合类型,其中简单类型是不能分割的原子信息;复合类型类似于编程语言中的自定义类型,它是由已存在的简单类型组合而成。
  XML Schema规范中定义了两类简单类型,内置类型和用户定义类型。
  内置类型又可分为两类:基础类型,它们是解析系统直接支持的原始类型。派生类型,它们是对基础类型或其它的内置派生类型加以限制生成的。
用户自定义类型是对内置类型或其它用户自定义类型加以限制或扩展生成的。




1、基本数据类型

基本数据类型是在XML Schema中使用的每种数据类型的最基本构成块。可以根据这些类型构造自定义的类型。这些类型包括:

boolean              可以是1true)或者0false)。
dateTime             表示时间的部分可选,格式:CCYY-MM-DDThh:mm:ss
例如:2005-3-18T14:48:12
decimal              表示任意精度的十进制数字。
string               字符数据。
int                  -2,147,483,6482,147,483,648之间一个整数。
nonNegativeInteger   表示大于或者等于0的一个整数。
nonPositiveInteger    表示小于或者等于0的一个整数。
short                表示从-3276832767之间的一个整数。

例如:

<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema>
<xsd:element name=”ContactDetails”>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref=”name” />
                <xsd:element name=”rate” type=”xsd:decimal” />
            </xsd:sequence>
          <xsd:attribute name=”lastUpdated” type=”xsd:dateTime” />
        </xsd:complexType>
</xsd:element>

<xsd:element name=”name”>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name=”first” type=”xsd:string” />
                <xsd:element name=”middle” type=”xsd:string” />
                <xsd:element name=”last” type=”xsd:string” />
            </xsd:sequence>
            <xsd:attribute name=”local” type=”xsd:boolean” />
        </xsd:complexType>
</xsd:element>
</xsd:schema>

以上文档对应有效的XML文档如下:

<?xml version=”1.0”?>
<ContactDetails lastUpdated=” 2005-3-18T14:48:12”>
<name local=”true”>
        <first>santld</first>
        <middle/>
        <last>wang</last>
</name>
<rate>10.27</rate>
</ContactDetails>



2、简单类型

虽然从内置数据类型中得到了许多的功能,但是在许多情况下,只有数据类型来限制数据的值是远远不够的。这里在学习简单类型之前,先看看关于约束。
约束方面

enumeration      用空格分开一组指定的数值。它把数据类型约束为指定的值。
fractionDigit      指定小数点后的最大位数。
length               长度单位。
minExclusive     下限值,所有的值都必须大于该值。
maxExclusive     上限值,所有的值都应该小于该值。
minLength        长度单位的最小个数。
maxLength        长度单位的最大数。
minInclusive      最小值,所有的值都应该大于或者等于该值。
maxInclusive      最大值,所有的值都应该小于或者等于该值。
pattern           数据类型的值必须匹配的指定模式,pattern值必须是一个正则表达式。
totalDigits      指定小数最大位数的值。
whiteSpace       其值为:preserve(值中的空格不能改变),replace(所有的制表 符、换行符和回车符都用空格代替),collapse(执行replace,删 除相邻的、结尾处和开头处的空格)。

要应用上述的约束,就要利用元素restriction。这个元素中有2个属性:id属性是模式文档中restriction元素的唯一标识符,base属性设置为一个内置的XSD数据类型或者现有的简单类型定义,他是一种被限制的类型。

例如:

<xsd:restriction base=”xsd:string”>
<xsd:minLength value=”4” />
    <xsd:maxLength value=”10” />
</xsd:restriction>

如上,将字符串最小长度限定为4个字符,将最大长度限定为10个字符。

<xsd:restriction base=”xsd:int”>
<xsd:minInclusive value=”1” />
<xsd:maxInclusive value=”100” />
</xsd:restriction>

如上,将一个整数的取值范围设置为1100之间。

<xsd:restriction base=”xsd:string”>
<xsd:enumeration value=”FistValue” />
<xsd:enumeration value=”SecondValue” />
<xsd:enumeration value=”ThirdValue” />
</xsd:restriction>

如上,字符串只能为枚举出的三种值。

简单类型

简单类型是对一个节点的可能值进一步限制的自定义数据类型。创建简单类型需要利用simpleType元素,其定义如下:

<simpleType id=”ID” name=”NCName” final=”(#all|(list|union|restriction))” />

id属性应唯一的标明文档内的simpleType元素,name不能使用冒号字符。simpleType不能包含元素,也不能有属性,根据在simpleType中定义的规则,它基本上是一个值,或者是一个值的集合。

例如:

<xsd:simpleType name=”personsName”>
<xsd:restriction base=”xsd:string”>
        <xsd:minLength value=”4” />
        <xsd:maxLength value=”8” />
</xsd:restriction>
</xsd:simpleType>

<xsd:element name=”first” type=”personsName” />

以上文档对应有效的XML文档如下:
<first>Santld</first>

以下就是无效的XML文档:
<first>SS</first> 或者 <first>Santld wang</first>

再举个例子:

<xsd:simpleType name=”personsTitle”>
<xsd:restriction base=”xsd:string”>
        <xsd:enumeration value=”Mr.” />
        <xsd:enumeration value=”Mrs.” />
        <xsd:enumeration value=”Miss.” />
</xsd:restriction>
</xsd:simpleType>

<xsd:element name=”title” type=”personsTitle” />

上面定义的类型personsTitle是一个字符串类型,但它的值只能是Mr.Mrs.或者Miss.其中的一个。

3. 复杂类型

复杂类型的定义必须使用complexType元素,在这里可以包含属性和元素。在复杂类型的使用中,主要是complexTypesimpleType配合使用。格式如下:

<xsd:complexType name=”name” />

例如:

<xsd:element name="name" type="FullName" />

<
;xsd:complexType name="FullName">
<xsd:sequence>
<xsd:element name="first" type="PersonsFirstname" minOccurs="0" maxOccurs="1"
default="John" />
<xsd:element name="middle" type="xsd:string" minOccurs="0"
maxOccurs="unbounded" nillable="true" />
<xsd:element name="last" type="xsd:string" minOccurs="1" maxOccurs="1"
default="Doe" />
</xsd:sequence>
<xsd:attribute name="title" type="PersonsTitle" default="Mr." />
</xsd:complexType>

<xsd:simpleType name="PersonsFirstname">
<xsd:restriction base="xsd:string">
<xsd:minLength value="4" />
<xsd:maxLength value="10" />
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="PersonsTitle">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Mr." />
<xsd:enumeration value="Mrs." />
<xsd:enumeration value="Miss." />
</xsd:restriction>
</xsd:simpleType>


0 评论:

发表评论