分享
 
 
 

XML Schema学习(二)

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

三、XML Schema数据类型

XML Schema提供了一组丰富的内置数据类型,用于定义元素中允许的类型。下面将介绍一些完全符合C#标准的通用类型。

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.其中的一个。

复杂类型

复杂类型的定义必须使用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>

如上就实现了一个复杂类型,该例子实现了一个复杂类型FullName,其中包含了两个简单类型PersonsFirstname和PersonsTitle。

分组和属性

在为定义XML文档而创建的一些更为复杂的定义中,会有一些元素集、属性集的组合,这是我们就使用了分组的概念。分组定义中使用的是group元素。

例如:

<xsd:group name=”CityChoice”>

<xsd:choice>

<xsd:element name=”Beijing

” type=”xsd:string” />

<xsd:element name=”Shanghai

” type=”xsd:string” />

<xsd:element name=”Xian” type=”xsd:string” />

</xsd:choice>

</xsd:group>

<xsd:element name=”City”>

<xsd”group ref=”CityChoice” minOccurs=”1” maxOccurs=”1” />

</xsd:element>

对属性的分组,应该使用attributeGroup元素,例如:

<xsd:attributeGroup name=”contactAttribs”>

<xsd:attribute name=”city” type=”xsd:string” />

<xsd:attribute name=”country” type=”xsd:string” />

<xsd:attribute name=”age” type=”xsd:string” />

</xsd:attributeGroup>

<xsd:element name=”contact”>

<xsd:complexType>

<xsd:attributeGroup ref=”contactAttribs” />

</xsd:complexType>

</xsd:element>

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

<contact city=”Beijing

” country=”China

” age=”25” />

内容模型

内容模型可以对在XML文档内使用的元素、属性和类型进行限制,确定用户可以在XML实例的哪些等级添加自己的元素和属性。

any

当在XML中声明元素时any是默认的内容模型,该模型可以包含文本、元素和空格。如果允许添加元素的内容,且无需屋里修改模式文件,就可以使用该模型。

例如:

<xsd:xchema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>

<xsd:element name=”name”>

<xsd:complexType>

<xsd:sequence>

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

<xsd:element name=”middle” type=”OtherNames” />

<xsd:element name=”last” type=”xsd:string” />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:complexType name=”OtherNames”>

<xsd:sequence>

<xsd:any namespace=”##any” processContents=”lax” minOccurs=”0”

maxOccurs=”unbounded” />

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

例子中的xsd:any元素说明该类型允许添加内容。namespace属性允许的值为:

##any(元素可以来自任何命名空间)

##other(元素可以来自除了该元素的父元素所在的目标命名空间之外的命名空间)

##local(元素不受命名空间的限制)

##targetNamespace(元素来自父元素的目标命名空间)

processContents属性说明对这里所创建的元素进行验证时所执行的操作,取值有如下3种:

strict(标明XML处理器必须获得和那些命名空间相关联的模式,并验证元素和属性)

lax(与strict相似,只是如果处理器找不到模式文档,也不会出现错误)

skip(不利用模式文档验证XML文档)

上述模式的一个有效实例如下:

<?xml version=”1.0”?>

<name>

<first>santld</first>

<middle>

<nameInChina>San</nameInChina>

</middle>

<last>wang</last>

</name>

empty

empty元素禁止把文本或者元素作为一个声明为空的元素的子元素,如果要保证该元素不包括子元素、文本甚至空格,就可以使用它。在XSD中时利用xsd:anyType类型来限定它的,这样就意味元素只能包含属性,例如:

<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>

<xsd:element name=”contact”>

<xsd:complexType>

<xsd:complexContent>

<xsd:restriction base=”xsd:anyType”>

<xsd:attribute name=”age” type=”xsd:integer” />

</xsd:restriction>

</xsd:complexContent>

</xsd:complexType>

</xsd:element>

</xsd:schema>

以上就是一个复杂类型,只允许有一个age属性。在例子里complexContent元素可以表示complexType的内容要进行扩充或者限制,在这里,我们对其内容进行限制,因此使用了restriction元素,如果扩成则使用exension元素。

element(前边已经了解过了)

mixed

最后一个内容模型就是mixed,它包含文本、内容和属性。在complexType元素上把mixed属性的值设为true,就一个声明一个mixed内容模型了。例如:

<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>

<xsd:element name=”contact”>

<xsd:complexType mixed=”true”>

<xsd:sequence>

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

</xsd:sequence>

<xsd:complexType>

</xsd:element>

</xsd:schema>

上述模式的一个有效实例如下:

<?xml version=”1.0”?>

<contact>My first name is<first>Santld</first>.</contact>

在例子中contact元素就包含了文本和元素first。

(完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有