xml Schema概述
一.元素和属性的声明
例:
<?xml version=”1.0” endcoding=”UTF-8”?>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema>
<xs:elementname=”student” type=”xs:string”/>
<xs:attributename=”sn” type=”xs:integer”/>
</xs:schema>
二.元素和属性的类型:
在xml schema中,元素和属性都有数据类型,元素的数据类型即元素内容的数据类型,属性的数据类型即属性值的数据类型。xml schema把元素和属性的概念与其数据类型分开,这就允许不同名称的元素拥有相同类型的数据。如下:
|
|
<xs:element name=”homeAddress” type=”addressType”/>
<xs:element name=”homeAddress” type=”addressType”/>
<xs:complexType name=”addressType”>
<xs:sequence>
<xs:element name=”street” type=”xs:string”/>
<xs:element name=”city” type=”xs:string”/>
<xs:element name=”country” type=”xs:string”/>
</xs:sequnence>
</xs:complexType>
|
|
三.简单数据类型
具有简单类型的元素只能包含字符数据,不能包含子元素,也不能有属性。
XML Schema支持类型的派生,类型的派生分为:限制和扩展。通过限制派生的新类型的值的范围是原类型值范围的子集,通过扩展则可以为现有类型添加新的元素属性。
XML Schema提高了12个面用于指定一个值的有效范围,约束值的长度和精度、枚举一系列的有效值,或者指定有效值必须匹配的正则表达式。(面就是对数据类型的约束,目的是为了让他的值限制在一定的范围内)。
要定义新的简单类型,使用xs:simpleType元素,要对现有的基类型进行限制,使用xs:restriction元素,并在该元素的内部使用限制值范围的面。例如:
<xs:simpleType name=”ageType”>
<xs:restriction base=”xs:integer”>
<xs:minInclusive value=”18”/>
<xs:maxInclusive value=”60”/>
|
|
xs:restriction
元素的
base
属性指定要限制的基类型。
关于简单类型更详细的内容,参照以后的文章。
四.复杂类型
具有复杂类型的元素可以有子元素和属性。复杂类型使用xs:complexType元素来定义。
复杂类型要么具有简单内容,要么具有复杂内容。元素的“内容”是指它的开始标签和结束标签之间的字符数据和子元素。简单内容指只包含字符数据内容,而不包含子元素(可以有属性),简单内容使用xs:simpleContent元素来定义;除此之外的元素为复杂内容,复杂内容使用xs:complexContent元素来定义。
五.全局声明和局部声明:
直接在xs:schema元素下生命的元素和属性是全局的,这些元素和属性可以通过xs:element和xs:attribute元素的ref属性来引用。例如:
<?xml version=”1.0” encoding=”UTF-8”?>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
<xs:element name=”book” type=”bookType”/>
<xs:element name=”title” type=”xs:token”/>
<xs:element name=”author” type=”xs:token”/>
<xs:attribute name=”isbn” type=”xs:token”/>
<xs:complexType name=”bookType”>
<xs:sequence>
<xs:element ref=”title”/>
<xs:element ref=”author”/>
</xs:sequence>
<xs:attributename=”isbn” type=”xs:string”/>
</xs:complexType>
</xs:schema>
|
|
注:(
1
)全局声明的元素和属性的名称在模式中必须唯一;
(2)在全局生命中不能使用ref属性;
(3)全局声明的元素在实力文档中可以作为根元素出现。
六.模式与名称空间:
XML Schema对名称空间提供了良好地支持。
1.目标名称空间:
目标名称空间使用xs:schema元素的targetNamespace属性来制定。
例如:
<?xml version=”1.0” encoding=”UTF-8”?>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”
targetNamespace=”http://www.sunxin.org/book”
xmlns:book=”http//www.sunxin.org/book”>
<xs:element name=”book” type=”book:bookType”/>
<xs:sequence>
<xs:element name=”title” type=”xs:token”/>
<xs:element name=”author” type=”xs:token”/>
</xs:sequence>
<xs:attribute name=”isbn” type=”xs:string”/>
</xs:complexType>
</xs:schema>
|
|
对应的实例文档:
|
|
<?xml version=”1.0” encoding=”GB2312”?>
<book:bookxmlns:book=”http://www.sunxin.org/book”isbn=”978-7-9”>
<title>《struts 2深入详解》</title>
<author>孙鑫</author>
</book:book>
|
|
只有模式文档中的全局元素和全局属性才属于目标名称空间。
为了简化模式文档可使用默认的名称空间,如下:
|
|
<?xml version=”1.0” encoding=”UTF-8”?>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”
targetNamespace=”http://www.sunxin.org/book”
xmlns=”http//www.sunxin.org/book”>
<xs:element name=”book” type=”bookType”/>
<xs:sequence>
<xs:element name=”title” type=”xs:token”/>
<xs:element name=”author” type=”xs:token”/>
</xs:sequence>
<xs:attribute/>
</xs:complexType>
</xs:schema>
|
|
2.局部元素和属性的限定:
若想要限制局部的元素可在xs:schema标签最后使用elementFormDefault=”qualified”;若想限制属性,则可使用attributeDefault=”qualified”,即可把模式文档中的全部局部元素和属性都添加了名称空间,而若想给某个元素或属性添加,即可使用form属性,具体可在相应标签最后加上form=”qualified”。
3.未声明的目标名称空间:
即不使用目标名称空间的文档。
七.在实例中引用模式文档:
XML Schema提供了两个在市里文档中使用的特殊属性,用于指出模式文档的位置。这两个属性是:xsi:schemaLocation和xsi:noNamespaceLocation.前者用于声明了目标名称空间的模式文档,后者用于没有目标名称空间的模式文档,他们通常在市里文档中使用。
1.xsi:schemaLocation属性:
例如:
<?xml version=”1.0” encoding=”GB2312”?>
<book xmlns=”http://www.sunxin.org/book”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.sunxin.org/book http:// http://www.sunxin.org/book.xsd”>
<title>《struts 2深入详解》</title>
<author>孙鑫</author>
</book>
|
|
XML Schema推荐标准中指出,xsi:schemaLocation和xsi:noNamespaceLocation可以在实例中的任何元素上使用,而不一定是根元素,不过他们必须出现在它要验证的人和元素和属性之前。另外这两个属性并不是必须的。
2.xsi:noNamespaceLocation属性的值是单一的值,只适用于指定模式文档的位置。
例如:
<?xml version=”1.0” encoding=”GB2312”?>
<book xmlns=”http://www.sunxin.org/book”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=” http:// http://www.sunxin.org/book.xsd”>
<title>《struts 2深入详解》</title>
<author>孙鑫</author>
</book>
|
|
八.注释:
XML Schema中提供了三种元素来为模式提供注解,这三个元素分别为:xs:annotation、xs:documentation和xs:appinfo,其中xs:documentation和xs:appinfo是xs:annotation的子元素,
xs:documentation元素用于放置适合人阅读的信息,而xs:appinfo元素用于为工具,样式表与其他应用程序提供信息。另外对于xs:documentation具有xml:lang属性,而xs:appinfo没有。