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属性实现的。主要适用于避免在文档中多次定义同一个元素,应当将经常使用的元素定义为根元素的子元素,以便在文档的任何地方引用它。
在这里还可以为某个定义的元素起一个别名,方法如下:
<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的基本语法(转)的更多相关文章
- XML Schema命名空间解析
URI Web中汇集了各种资源.资源可以是具有标识的任何事物, 如文档. 文件. 菜单项. 计算机. 服务等, 甚至可以包括人. 组织和概念[BernersLee 1998].在Web体系结构中, ...
- 【转】XSD (xml Schema Definition)
来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1. 定义一个Xml文档中都有什么元 ...
- Xml Schema的用途
Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 3. 定义某个节点的都有什么样的子节点,可以有多少个子节点,子节点出现的顺序 4. ...
- XML Schema验证
XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...
- W3C XML Schema 教程
转自:http://www.blogjava.net/sham2k/articles/179825.html W3C XML Schema 教程 XML SCHEMA教程 本教程是笔者学习W3C的&l ...
- XML&DTD&XML Schema学习
XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...
- XML Schema <第三篇>
验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...
- XML Schema
XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...
- 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来 ...
随机推荐
- Hadoop笔记HDFS(2)
高级Hadoop MapReduce管理 1 调试部署好的Hadoop的配置 2 运行基准测试检验Hadoop的安装 3 重新利用JVM提升性能 4 容错性 5 调试脚本-分析失败任务原因 6 设置失 ...
- MySQL 常用命令
mysql -uroot -pXXXXXXXXX //登陆mysql mysqladmin -u 用户名 -p 旧密码 password 新密码 创建数据库并分配用户 create database ...
- 【Spring】初始化Spring IoC容器(非Web应用),并获取Bean
参考文章 Introduction to the Spring IoC container and beans BeanFactory 和ApplicationContext(Bean工厂和应用上下文 ...
- 开源.NET FTP组件edtFTPnet 用法
edtFTPnet官方网站:http://www.enterprisedt.com/products/edtftpnet/ 目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll ...
- C library function - freopen()
Description The C library function FILE *freopen(const char *filename, const char *mode, FILE *strea ...
- 数据转换为json格式的方法
数据转换为json格式: 如果一张表中存在主外键关系,模板自动生成的类是不可以转换成JSON格式的,此时需要重新写一个类,类前面需加[DataContract],字段前需加[DataMember],实 ...
- 视频播放器之————JW Player参数详解
JW Player参数详解 1,安装 下载后,你可以得到一个例子,当用文本或HTML编辑器打开的时候,你可以发现swf是用一段短小的 javascript嵌入到页面上的.这个Javascript是Ge ...
- 五大权限:UGO权限、SetUID SetGID Sticky、ACL权限、chattr(文件系统级别的权限)、SELINUX
五大权限:UGO权限.SetUID SetGID Sticky.ACL权限.chattr(文件系统级别的权限).SELINUX ======================文件属性以及ugo权限= ...
- JQuery Datatables Dom 和 Language 参数详细说明
http://linleizi.iteye.com/blog/2086435 *********************************** Data Tables: http://datat ...
- iOS开发 ReactiveCocoa入门教程 第一部分
作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...