XML学习笔记三:XML Schema
06月 26th, 2006 by 城市刀客
尽管XML1.0提供了一种机制,即文档类型定义(DTD)来规范XML的格式规则。但是它天生存在一些缺点,比如,它采用了非XML的语法规则、不支持更多的数据类型、扩展性差等,为了克服这些缺点,XML Schema 出现了。W3C推荐在XML中使用XML Schema来代替DTD。
什么是XML Schema ?
XML Schema(模式) 跟DTD一样,也用于定义 XML 文档的约束。但它与DTD明显不同的是,XML Schema遵循XML语法规则,更好地支持数据类型以及命名空间。W3C称:XML Schema is an XML based alternative to DTD。
模式在单独的文件中定义,通常扩展名为 .xsd。每个模式定义都有一个根元素 schema,该元素属于名称空间http://www.w3.org/2001/XMLSchema。schema 元素可以包含可选的属性。比如:
XML 文件使用 schema 名称空间中的 schemaLocation 属性链接到对应的模式。使用 schemaLocation 属性必须定义 schema 名称空间。所有这些定义都出现在 XML 文档的根元素中。语法如下:
下面是一个例子:
先来看看一个XML文件示例(message.xml),分别用DTD和XML Schema 描述这个文件,看看它们之间的区别:
1、使用DTD:yes"?> ]>
2、使用XML Schema :
message.xml:
no"? >
message.xsd:
XML Schema语法
从上面的简单的例子我们可以看出一个XML Schema的大概的结构。先解释一下上面的message.xsd。
xmlns:xs="http://www.w3.org/2001/XMLSchema"这句表明元素和数据类型的定义(schema, element, complexType, sequence, string, boolean,etc.)来自命名空间:http://www.w3.org/2001/XMLSchema所有来自该命名空间的元素和类型定义均使用前缀xs。
targetNamespace="http://www.example.com"这句表明元素message,to,from,body属于命名空间:http://www.example.com
xmlns="http://www.example.com"
elementFormDefault="qualified" 这句表明引用这个Schema的xml文件中的元素都有命名空间限制。
XML Schema的元素类型分为简单类型和复杂类型两种:
简单类型
1、简单元素:指只能包含文本内容,不能够包含子元素,也没有属性的元素。格式:
2、属性:所有的元素属性均被声明为简单类型。只有复杂类型的元素才可以拥有属性。格式:
所有的属性默认都是可选的,我们可以通过使用use关键字明确的指出是可选或是必需:
我们可以通过使用default或fixed为简单类型(简单元素、属性)指定默认值或固定值,如下:
补充:对简单类型值的约束
复杂类型
复杂类型指包含其他元素/属性的元素类型。
未完,待续。。。
昨天写得太晚了,今天继续完成这一部分^_^
在上面的例子中,元素message就是一个复杂类型的元素,我们在Schema中这样描述:
当然,message元素也可以包含一个type属性,指向我们定义的复杂类型,象这样:
下面通过几个实例学习XML Schema的语法:
1、如何描述空元素,比如:
因为是空元素,所以不包含子元素,也就没有elment标记,同时由于包含属性,用attribute定义,象这样:
也可以这样:
2、如何描述只含有简单内容(文本/属性)的元素,比如:
由于只包含简单内容,所以我们在元素内容定义的外面用simpleContent 指出,当描述简单内容的时候,我们需要在简单内容里使用extension或者restriction来描述内容的数据类型。象这样:
其中message的属性date的数据类型为日期(xs:date)。顺便提一下:XML Schema中常用的数据类型有:xs:string 、xs:decimal 、xs:integer 、xs:boolean 、xs:date 、xs:time 等。
3、如何定义混合类型,比如:
这跟最开始的message.xml的例子不同的是,message元素除了包含子元素from之外,还直接包含文本“This message comes from”。对于这种情况,我们需要在complexType中使用属性mixed="true"指出。以下是Schema:
当然,如果包含更多的子元素,我们可以需要使用
在XML Schema中,有3类共7种指示器(Indicator):
一、定义元素如何出现:包括all,sequence,choice 这三个。
1、all:默认值。不限制子元素的出现顺序,每个子元素必须出现且只能出现一次。例如:
2、sequence:子元素在XML文件中按照XML Schema定义的顺序出现。前面已经提过。
3、choice:两个子元素中仅出现一个。例如:
二、次数限定类,包括minOccurs和maxOccurs,前者指定最少出现次数,后者指定最多出现次数。例如:
如果元素出现的最大次数无限制,可以使用maxOccurs="unbounded"。
三、组限定:包括Group和attributeGroup,用来定义一组相关的元素。比如:
——————————————————————-
补充:
元素属性substitutionGroup可以让元素b替换元素a在XML文件中出现。比如:
这种情形类似choice:
本文来源:https://www.2haoxitong.net/k/doc/73a8b71bfc4ffe473368abc2.html
文档为doc格式