Schema简介
基于XML的DTD替代者
描述XML文档的结构
也称作XML Schema定义(XML Schema Definition,XSD)
在2001,5,2成为W3C标准
Schema作用
定义XML文档的合法构建,类似 DTD
定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值
Schema取代DTD理由
基于XML编写
扩充了数据类型,还支持自定义类型
功能更强大(比如支持继承extends的概念,支持属性组Group的概念)
支持命名空间
Schema文档结构
<?xml version="1.0" encoding="UTF-8"?>
<!--
xs:schema是Schema的根元素
xmlns:xs
这个地址不能变,这个是定义schema本身的
用于构造schema元素和数据类型
来自http://www.w3.org/2001/XMLSchema命名空间
targetNamespace
这个是定义本schema
用于构造本schema元素和数据类型
属于http://www.example.org/XMLSchema命名空间
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/XMLSchema">
<!-- 存放实际内容 -->
</xs:schema>
Schema数据类型
简单类型
内置数据类型
string 表示字符串
boolean 布尔型
decimal 代表特定精度的数字
float 表示单精度32位浮点数
double 表示双精度64位浮点数
duration 表示持续时间
dateTime 代表特定的时间
time 代表特定的时间,但是是每天重复的
date 代表日期
hexBinary 代表十六进制数
anyURI 代表一个URI,用来定位文件
NOTATION 代表 NOTATION类型
ID 用于唯一标识元素
IDREF 参考ID类型的元素或属性
ENTITY 实体类型
NMTOKEN NMTOKEN类型
NMTOKENS NMTOKEN类型集
long 表示整型数
int 表示整型数
short 表示整型数
byte 表示整型数
用户自定义类型
通过simpleType定义
复杂类型
通过complexType定义
Schema的元素类型详解
schema
作用:包含已经定义的schema
属性:xmlns/targetNamespace
element
作用:声明一个元素
属性:name/type/ref/minOccurs/maxOccurs/substitutionGroup/fixed/default
group
作用:把一组元素声明组合在一起,以便它们能够一起被复合类型应用
属性:name/ref
attribute
作用:声明一个属性
属性:name/type/ref/use
备注:use的使用方式有三种required必须,optional不是必须的,prohibited禁止的
attributeGroup
作用:把一组属性声明组合在一起,以便可以被复合类型应用
属性:name/ref
simpleType
作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息
属性:name
内容:restrict/list/union
complexType
作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息
属性:name
simpleContent
作用:应用于complexType,对它的内容进行约束和扩展
choice
作用:允许唯一的一个元素从一个组中被选择
属性:minOccurs/maxOccurs
sequence
作用:给一组元素一个特定的序列
list
作用:从列表中选择多个,中间用空格隔开
union
作用:多个取一个
restriction
作用:约束,限定一个范围
simpleType与complexType的区别
simpleType类型的元素不能有子元素和属性
complexType类型的元素可以有子元素和属性
当需要基于内置基本数据类型定义一个新的数据类型时使用simpleType(一般这是做限制)
Schema简单元素
简易元素指那些只包含文本的元素,它不会包含任何其他的元素或属性
定义简单元素:
<xs:element name="author" type="xs:string"/>
简单元素默认值或者固定值
<xs:element name="font" type="xs:string" default="red"/>
<xs:element name="font" type="xs:string" fixed="red"/>
Schema复杂元素
复合元素指包含其他元素或属性的XML元素
有四种类型的复合元素:
空元素
包含其他元素的元素
仅包含文本的元素
包含元素和文本的元素
两种方式定义复合元素
直接声明
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
引用声明
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Schema属性
简易元素无法拥有属性,假如某个元素拥有属性,它就会被当作某种复合类型
但是属性本身总是作为简易类型被声明的
声明:
<xs:attribute name="style" type="xs:string"/>
属性默认值和固定值
<xs:attribute name="style" type="xs:string" default="bold"/>
<xs:attribute name="style" type="xs:string" fixed="bold"/>
属性可选和必选
<xs:attribute name="style" type="xs:string" fixed="bold" use="required"/>
Schema数据类型的限定
minInclusive 定义数值的下限,所允许的值必需大于或等于此值
maxInclusive 定义数值的上限,所允许的值必须小于或等于此值
enumeration 定义可接受值的一个列表
pattern 定义可接受的字符的精确序列
whiteSpace 定义空白字符(换行,回车,空格,制表符)的处理方式
length 定义所允许的字符或者列表项目的精确数目,必须大于或等于0
minLength 定义所允许的字符或者列表项目的最小数目,必须大于或等于0
maxLength 定义所允许的字符或者列表项目的最大数目,必须大于或等于0
fractionDigits 定义所允许的最大的小数位数,必须大于等于0
minExclusive 定义数值的下限,所允许的值必需大于此值
maxExclusive 定义数值的上限,所允许的值必须小于此值
totalDigits 定义所允许的阿拉伯数字的精确位数,必须大于0
Schema几个元素的使用方法
group
<xs:complexType name="myComplexType">
<xs:group ref="myGroup"/>
</xs:complexType>
<xs:group name="myGroup">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="cat" type="xs:string"/>
<xs:element name="dog" type="xs:string"/>
</xs:sequence>
</xs:group>
attributeGroup
<xs:complexType name="myElementType">
<xs:attributeGroup ref="myAttributeGroup"/>
</xs:complexType>
<xs:attributeGroup name="myAttributeGroup">
<xs:attribute name="someattribute1" type="xs:integer"/>
<xs:attribute name="someattribute2" type="xs:string"/>
</xs:attributeGroup>
choice
<xs:complexType name="myComplexType">
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="cat" type="xs:string"/>
<xs:element name="dog" type="xs:string"/>
</xs:choice>
</xs:complexType>
sequence
<xs:element name="myElement">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="cat" type="xs:string"/>
<xs:element name="dog" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
list
<xs:simpleType name="abc">
<xs:list itemType="xs:date"/>
</xs:simpleType>
union
<xs:complexType name="myComplexType">
<xs:union>
<xs:element name="cat" type="xs:string"/>
<xs:element name="dog" type="xs:string"/>
</xs:union>
</xs:complexType>
restriction
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
enumeration
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="US"/>
<xs:enumeration value="European"/>
<xs:enumeration value="UK"/>
</xs:restriction>
</xs:simpleType>