XML Schema简介
Schema的一般结构
< !Schema name = “Schema 名字” xmlns=”命名空间”>
元素和属性定义的具体内容
< /Schema>
Schema 具有两个属性。
1. name属性置顶该Schema的名称,可以省略;
2. xmlns属性指定Schema文档中包含的namespace(命名空间)。在Schema中,一个XML文档中包含多个命名空间,一般在编写的时候,下面两句是必须写的:
xmlns= “urn: schemas-miscrosoft-com: xml-data”
xmlns: dt= “urn: schema-miscrosoft-com: datatypes”
第一个命名空间 是说明引用的 Miscrosoft Schema类型定义,指定本文档是一个 XML Schema文档。
第二个命名空间 是说明引用的Miscrosoft Schema的数据类型定义
这样在XML文档中可以使用在schema中定义过的数据类型。
Schema元素定义
在schema中可以加入各个元素的定义语句,元素的声明语法如下。
< ElementType name=”元素”
content= “{empty|textonly|eltonly|mixed}”
dt:type= “数据类型”
order= “{one|seq|many}”
model=”{open|closed}”
maxOccurs=”{0|1}”minOccurs=”{1|*}”>
< /Elementtype>
在之上的声明的语法表达中,涉及多种属性和元素的其他方面描述,下面对其含义进行详细的说明:
(1). 内容属性
一般来讲,一个元素最简单的Schema声明如下。
< elementType 元素/>
在这个声明格式中,没有指明元素的内容和数据类型,他们都取默认值。如果要指明元素的内容,则需要用到content 属性。例如:
< elementtype name=”A”content=”empty”/>
< /elementType>
Content说明内容属性,其可选的4种情况及含义参见表:
选项 含义
Empty | 表示元素的内容为 空
TextOnly | 表示元素中只能出现字符串
Mixed | 表示可以包含元素和已经分析的字符数据
Eltonly | 表示元素中只能包含子元素
(2). minOccurs 和 maxOccurs属性
minOccurs 和 maxOccurs 属性用来表示元素在该项中的最少和最多出现次数。如果省略不写则系统默认值为1.
除了这两种属性设置之外,还可以使用occurs属性进行设置。例如:
< element type=”B”occurs=”REQUIERED”/>
表示元素必须出现一次。其他修饰词包括:OPTIONAL表示可选出现(0或者1次),ONEORMORE,ZEROORMORE
(3). 元素的数据类型
dt:type这个属性用于指明元素文本的数据类型,在XML Schema中,内建的数据类型有20多种,可以分为两类: 基本类型 和派生类型。
string : 字符串
boolean : 布尔
number : 数值
dataTime :日期时间类型
binary : 二进制数据块
uri : 统一资源标识符号
integer : 整数 型,由number 派生
decimal : 小数,由number派生
real : 实数 由number 派生
date : 日期 由dateTime派生
time : 时间 由dateTime派生
timePeriod : 时间段 由dateTime派生
(4). 元素的顺序和分组
order 属性有3个,他们是seq、one、many。seq表示在Schema中定义的元素在XML 文档中出现的顺序必须和定义时候 是一致。one 表示单选。
< elementType name = “A”order=”one”>
< element type=”B”/>
< element type=”C”/>
< element type=”D”/>
< /elementType>
many、one、seq指明子元素可以有任意数量、任意顺序出现。
(5). model属性
选项 含义
open 表明该元素可以包含其他未在XML Schema中定义的元素和舒心
closed 表明该元素只能包含在本XMLSchema中定义过的元素和属性
*默认的model 属性取值为open*
Schema的属性声明
Schema用来定义属性的元素有两个:AttrbuteType 和attrbute。
< AttributeType
name=”属性名”
dt:type=”属性类型”
dt:value=”枚举值列表”
default=”默认值”
required=”{yes|no}”/>
含义如下:
name : 在属性定义中,属性名是必须的,声明该属性的类型的名称。在使用属性的时候要用属性名来引用属性
dt:type : 指定所声明的属性的数据类型吗属性类型的声明语句为: dt:type”属性类型”
例如 一个标号的属性声明,类型为ID,声明如下:
< Attrbutetype
标号
dt: type=“ID”
required=”yes”/>
dt:value:只有当type的值为enumeration的时候,才能使用。此时dt:value 需要列出所有的值
default : 指该元素默认取值
requored: 指定该属性对于引用它的元素是否为必须的。yes 表示必须。。。。。
最后,关于attrbute , AttrbuteType的关系: attrbute真正指明一元素具有哪些属性,AttributeType只是 起到声明 属性的作用