XML Schema中的数据类型是学习XML Schema的核心,只有理解了这一点,后面的内容也就相对简单了。
XML Schema中的数据类型可分为简单类型和复合类型,其中简单类型是不能分割的原子信息;复合类型类似于编程语言中的自定义类型,它是由已存在的简单类型组合而成。
XML Schema规范中定义了两类简单类型,内置类型和用户定义类型。
XML Schema规范中定义了两类简单类型,内置类型和用户定义类型。
内置类型又可分为两类:基础类型,它们是解析系统直接支持的原始类型。派生类型,它们是对基础类型或其它的内置派生类型加以限制生成的。
用户自定义类型是对内置类型或其它用户自定义类型加以限制或扩展生成的。
1、基本数据类型
基本数据类型是在XML Schema中使用的每种数据类型的最基本构成块。可以根据这些类型构造自定义的类型。这些类型包括:
boolean 可以是1(true)或者0(false)。
dateTime 表示时间的部分可选,格式:CCYY-MM-DDThh:mm:ss
例如:2005-3-18T14:48:12
decimal 表示任意精度的十进制数字。
string 字符数据。
int 从-2,147,483,648到2,147,483,648之间一个整数。
nonNegativeInteger 表示大于或者等于0的一个整数。
nonPositiveInteger 表示小于或者等于0的一个整数。
short 表示从-32768到32767之间的一个整数。
例如:
<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>
如上,将一个整数的取值范围设置为1到100之间。
<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元素,在这里可以包含属性和元素。在复杂类型的使用中,主要是complexType和simpleType配合使用。格式如下:
<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 评论:
发表评论