欢迎光临
我们一直在努力

XML Schema学习(一)-.NET教程,XML应用

建站超值云服务器,限时71元/月

最近埋头苦读wmfc定义的接口1标准文档,其中对xml格式的定义都使用了xml schema,由于xml schema在很多方面都有很大的作用,大有取代dtd的趋势,所以在此写了一些学习笔记,有疏漏的地方请大家指正!

xml schema的其他方面偶就不在这里罗嗦了,直接进入主题,关于xml schema的基本语法。

xsdl(xml schema定义语言)由元素、属性、命名空间和xml文档种的其他节点构成的。

一、xsd中的元素

xsd文档至少要包含:schema根元素和xml模式命名空间的定义、元素定义。

1、schema根元素

语法如下:

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

</xsd:schema>

在xsd中必须定义一个且只能定义一个schema根元素。根元素中包括模式的约束、xml模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些属性。

2、元素

语法如下:

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

xsd中的元素是利用element标识符来声明的。其中name属性是元素的名字,type属性是元素值的类型,在这里可以是xml schema中内置的数据类型或其他类型。

例子:

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

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

</xsd:schema>

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

<?xml version=”1.0”?>

<user>string</user>

在元素的定义中还有2个属性:minoccurs和maxoccurs。其中minoccurs定义了该元素在父元素中出现的最少次数(默认为1,值为大于等于0的整数),maxoccurs定义了该元素在父元素中出现的最多次数(默认为1,值为大于等于0的整数)。在maxoccurs中可以把值设置为unbounded,表示对元素出现的最多次数没有限制。

例子:

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

<xsd:element name=”user” type=”xsd:string” minoccurs=”0” maxoccurs=”unbounded” />

</xsd:schema>

表示为元素user的类型为string,出现的次数最少为0(也就是可选),最多不限制。

3、引用元素和替代

语法如下:

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

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

<xsd:element name=”name”>

<xsd:complextype>

<xsd:sequence>

<xsd:element ref=”user” />

</xsd:sequence>

</xsd:complextype>

</xsd:element>

</xsd:schema>

引用是利用element标记符的ref属性实现的。主要适用于避免在文档中多次定义同一个元素,应当将经常使用的元素定义为根元素的子元素,以便在文档的任何地方引用它。

在这里还可以为某个定义的元素起一个别名(偶的理解^o^),方法如下:

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

<xsd:element name=”yonghu” type=”xsd:string” substitutiongroup=”user” />

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

<xsd:element name=”name”>

<xsd:complextype>

<xsd:sequence>

<xsd:element ref=”user” />

</xsd:sequence>

</xsd:complextype>

</xsd:element>

</xsd:schema>

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

<?xml version=”1.0”?>

<name>

<user>string</user>

</name>

或者:

<?xml version=”1.0”?>

<name>

<yonghu>string</yonghu>

</name>

主要是利用element标识符中的属性substitutiongroup实现的。

4、设置默认值和固定值

语法如下:

<xsd:element name=”city” type=”xsd:string” default=”xian” />

<xsd:element name=”country” type=”xsd:string” fixed=”china” />

通过default属性的设置,可以在xml文档中没有对city元素定义时赋予默认值。而使用fixed属性,可以给元素country设定一个固定的值china,并且不允许改变!

5、利用组合器控制结构

sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。语法如下:

<xsd:schema 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=”xsd:string” />

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

</xsd:sequence>

</xsd:complextype>

</xsd:element>

</xsd:schema>

all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。语法如下:

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

<xsd:element name=”name”>

<xsd:complextype>

<xsd:all minoccurs=”0”>

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

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

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

</xsd:all>

</xsd:complextype>

</xsd:element>

</xsd:schema>

choice组合器,允许指定多组声明中的一个,用于互斥情况。语法如下:

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

<xsd:element name=”name”>

<xsd:complextype>

<xsd:choice>

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

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

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

</xsd:choice>

</xsd:complextype>

</xsd:element>

</xsd:schema>

二、定义属性

在xml schema文档中可以按照定义元素的方法定义属性,但受限制的程度较高。它们只能是简单类型,只能包含文本,且没有子属性。可以应用在attribute元素定义中的属性如下:

default 初始默认值

fixed 不能修改和覆盖的属性固定值

name 属性的名称

ref 对前一个属性定义的引用

type 该属性的xsd类型或者简单类型

use 如何使用属性

form 确定attributeformdefault的本地值

id 模式文档中属性唯一的id

default、fixed、name、ref和type属性与在element标记中定义的对应属性相同,但type只能是简单类型。use属性的值可以是:optional(属性不是必须的,此为默认属性)、prohibited或者required(属性是强制的)。

1、创建属性

语法如下:

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

该语句定义了一个名为age的属性,它的值必须是一个整数。把它添加到模式中时,它必须时schema元素、complextype元素或者attributegroup元素的子元素。

例子:

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

<xsd:element name=”name”>

<xsd:complextype>

<xsd:sequence>

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

</xsd:sequence>

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

</xsd:complextype>

</xsd:element>

</xsd:schema>

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

<?xml version=”1.0”?>

<name age=”27”>

<first>string</first>

</name>

如上所示,要把属性附加在元素上,属性应该在complextype定义中的组合器之后定义或引用。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » XML Schema学习(一)-.NET教程,XML应用
分享到: 更多 (0)