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属性实现的。主要适用于避免在文档中多次定义同一个元素,应当将经常使用的元素定义为根元素的子元素,以便在文档的任何地方引用它。

在这里还可以为某个定义的元素起一个别名,方法如下:

<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定义中的组合器之后定义或引用。

三、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。

XML Schema的基本语法(转)的更多相关文章

  1. XML Schema命名空间解析

    URI Web中汇集了各种资源.资源可以是具有标识的任何事物, 如文档. 文件. 菜单项. 计算机. 服务等, 甚至可以包括人. 组织和概念[BernersLee 1998].在Web体系结构中, ...

  2. 【转】XSD (xml Schema Definition)

    来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1.  定义一个Xml文档中都有什么元 ...

  3. Xml Schema的用途

    Xml Schema的用途 1.  定义一个Xml文档中都有什么元素 2.  定义一个Xml文档中都会有什么属性 3.  定义某个节点的都有什么样的子节点,可以有多少个子节点,子节点出现的顺序 4.  ...

  4. XML Schema验证

    XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...

  5. W3C XML Schema 教程

    转自:http://www.blogjava.net/sham2k/articles/179825.html W3C XML Schema 教程 XML SCHEMA教程 本教程是笔者学习W3C的&l ...

  6. XML&DTD&XML Schema学习

    XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...

  7. XML Schema <第三篇>

    验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...

  8. XML Schema

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...

  9. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

随机推荐

  1. 编写windows7 bat运行脚本

    每天上班,打开电脑后,我总是会固定的打开几个软件.这是重复的工作,我要写脚本startup.bat,直接点击它,就可以启动这些软件了. 本文主要参考这里,只用到了start 和 @Rem 两个命令语句 ...

  2. Normalize.css 初识

    一. 用来干嘛的 一个现代的.准备好了支持 HTML5 技术,并且要替代 CSS Reset 处理样式的理念. Normalize.css 使浏览器渲染所有元素更加一致,并且符合现代标准.它只是针对那 ...

  3. wifipineapple使用教程

    1.把开关拨到右边 如果有灯亮说明有电 4个灯全亮说明电量是满的 以此类推 如果一个也不亮说明没电了需要用充电器充电 2.把开关拨到左边打开wifi的开关  会开启一个wifi大概一分钟左右会有wif ...

  4. 深入浅出设计模式——状态模式(State Pattern)

    模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的.当一个这样的 ...

  5. Scrum Meeting 7-20151209

    任务安排 姓名 今日任务 明日任务 困难 董元财 服务器购买记录接口 请假(编译攻坚) 无 胡亚坤 发布记录和购买记录 请假(编译攻坚) 无 刘猛 完成Scrum Meeting 请假(编译攻坚) 无 ...

  6. RedHat3.4安装GIT

    1.首先到官网上下载git包,地址为http://git-scm.com/download 注意:选择下载Older releases 2.输入命令tar zxvf git-1.7.9.4.tat.g ...

  7. ANSI C与GNU C

    GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 GNU C标准.A ...

  8. 【转】 strcpy和memcpy的区别

    strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...

  9. GIT ON WINDOWS

    https://help.github.com/articles/generating-an-ssh-key/

  10. python的类和对象——类成员番外篇

    学完了面向对象的三大特性,已经get了所有屌丝技能的我们也当一回文艺小青年,来看看类的成员和成员修饰符. 今天‘三’这个数字好亲和~~~类成员可以分为三类:字段.方法和属性 一.字段 首先我们来看看字 ...