XML Schema
目录
# 定义和引用
o 在Eclipse 中使用XSD对XML文档进行有效验证
# 元素定义
o 简单元素定义
o 对简单元素值进行约束
o 定义复杂类型元素
o 定义空元素
o 定义只包含子元素的复杂元素
o 定义只包含文本的复杂元素
o 定义混合内容复杂元素
o 定义元素属性
o 子元素顺序
o 元素出现次数
o 子元素分组和引用
o 属性分组和引用
o 允许出现未定义的子元素
o 允许出现未定义的属性
# 参考
# 定义和引用
Schema 本身也是一个XML文件,根元素为 <schema>:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/NewXMLSchema" elementFormDefault="qualified"> </xs:schema>
或者使用默认命名空间:
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/NewXMLSchema" elementFormDefault="qualified"> </schema>
- XSD所有元素(<schema> 等)位于"http://www.w3.org/2001/XMLSchema"命名空间
- targetNamespace 定义XSD所定义的XML文档的命名空间
- elementFormDefault="qualified" 定义实例文档元素必须使用 qualified name
使用某一个Schema的XML文档,称为该Schema的实例文档
实例文档引用Schema的格式是:
<?xml version="1.0" encoding="UTF-8"?> <NewRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/NewXMLSchema" xsi:schemaLocation="http://www.example.org NewXMLSchema.xsd" > </NewRoot>
注意,schemaLocation 属性值必须是偶数个URI,以空格分隔,上例中是2个
o 在Eclipse 中使用XSD对XML文档进行有效验证
Eclipse 中,在Package Explorer 中右键点击XML文档,选择“Validate”菜单项,对XML文档进行有效性验证
如果XML文档应用了Schema,则需要将Schema文件添加到XML Catalog:选择 Window->Preference->XML->XML Catalog
添加一个 User Specified Entry:
- Location:Schema路径,可以指定文件系统绝对路径,或工作空间相对路径
- Key type:选择 Namespace name
- Key:输入该Schema 所定义的命名空间(targetNamespace)
Eclipse 对实例文档进行验证时,将根据所声明的命名空间(xmlns="URI"),在XML Catalog 中查找对应的Schema文件
# 元素定义
XSD将元素分为2种类型:
- 简单元素:只包含文本,无属性
- 复杂元素:可能包含文本、子元素、属性
根据是否包含文本或子元素,复杂元素又分为以下4种(每种都可能具有属性):
- 空元素:无文本、子元素
- 仅包含子元素
- 仅包含文本(但有属性,因此与简单元素区分)
- 包含文本及子元素
o 简单元素定义
<element name="name" type="type" >
常见的类型有 string、boolean、integer...(如果XSD没有定义默认命名空间,则类型要加命名空间前缀,如 xs:string )
设置缺省值:
<element name="name" type="type" default="default">
设置固定值:
<element name="name" type="type" fixed="value">
o 对简单元素值进行约束
使用 <simpleType> 定义一种简单元素类型,使用 <restriction> 对该类型进行约束,如:
<element name="age" type="ageType" /> <simpleType name="ageType" > <restriction base="integer"> <minInclusive value="0" /> <maxExclusive value="10000" /> </restriction> </simpleType>
也可以直接将 <simpleType> 定义为<element> 的子元素,如:
<element name="age" > <simpleType > <restriction base="integer"> <minInclusive value="0" /> <maxExclusive value="10000" /> </restriction> </simpleType> </element>
o 定义复杂类型元素
使用 <complexType> 定义复杂元素类型
<element name="name"> <complexType> ... </complexType> </element>
o 定义空元素
空元素即只有属性,不包含文本或子元素的复杂类型元素
<element name="name"> <complexType> <attribute ... /> <attribute ... /> ... </complexType> </element>
关于属性的定义见后文
o 定义只包含子元素的复杂元素
使用 <sequence> 定义其子元素
<complexType> <sequence> <element ... > ... </element> ... </sequence> </complexType>
实例文档中子元素的出现顺序必须按照XSD定义的顺序
o 定义只包含文本的复杂元素
使用 <simpleContent>
<element name="name" > <complexType> <simpleContent base="type"> ... </simpleContent> <complexType> </element>
可以使用 <restriction> 约束文本值:
<element name="name" > <complexType> <simpleContent > <restriction base="type"> ... </restriction> </simpleContent> <complexType> </element>
或者,使用 <extension> 增加属性定义
<element name="name" > <complexType> <simpleContent > <extension base="type"> <attribute ... /> ... </extension > </simpleContent> <complexType> </element>
o 定义混合内容复杂元素
这类元素包含文本内容和子元素
使用 mixed="true" 属性
<complexType mixed="true">
o 定义元素属性
元素属性定义类似于简单元素定义:
<attribute name="name" type="type" >
o 子元素顺序
使用以下元素定义子元素出现的顺序:
- <sequence> 顺序
- <all> 任意顺序
- <choice> 只允许其中之一出现
o 元素出现次数
使用 minOccurs/maxOccurs 属性
<element name="name" minOccurs="min" maxOccurs="max" >
o 子元素分组和引用
将子元素定义为一组,可被其它元素引用
定义组:
<group name="name"> <sequence> ... </sequence> </group>
引用:
<sequence> <group ref="name" /> <element ... /> </sequence>
o 属性分组和引用
将属性分组,可被其它元素引用
定义分组:
<attributeGroup name="name"> <attribute ... /> ... </attributeGroup>
引用:
<complexType> <attributeGroup ref="name" /> </complexType>
o 允许出现未定义的子元素
使用 <any> 定义任意子元素
<sequence> <element ...>...</element> ... <any minOccurs="0" /> </sequence>
o 允许出现未定义的属性
使用 <anyAttribute>
<complexType> <sequence> ... </sequnece> <anyAttribute /> </complexType>
# 参考
数据类型:XSD String
元素:XSD Elements