在进行框架、服务器开发或者企业之间交换数据时,经常需要使用XML来配置或交换数据。在使用XML文档时,由于XML文档标签可以任意定义,因此造成配置或交换数据的XML文件格式不统一,因此就需要一种来定义XML文档格式的语言,这就是Schema,只有符合Schema格式的XML文档才是有效的,否则无效。如:spring的配置文件就需要引入一大堆的dtd或者Schema,这就是来验证开发中编写的配置文件是否有效。
下面将会向读者展示怎样为已有的XML文档编写Schema文档,然后将Schema文档应用到XML文档中。
假如我们要创建XML文档结果如下(用来保存学生信息的XML文档),如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student no="100">
<name>张三</name>
<sex>男</sex>
<age>20</age>
</student>
<student no="200">
<name>李烟</name>
<sex>女</sex>
<age>28</age>
</student>
...
</students>第一步:创建一个名为studentschema.xsd的Schema文本文件;
第二步:编写Schema文件的声明部分,如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- 这里是要编写Schema的地方 -->
</xs:schema>第三步:正式编写XML文档元素的Schema,如下:
(1)添加“students”元素的Schema定义定义,“students”是一个复杂类型,内部引用了“student”类型,如下:
<xs:element name="students">
<xs:complexType>
<xs:sequence>
<xs:element ref="student" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>(2)添加“student”元素的Schema定义,“students”类型引用了它,同时该类型又引用了“name”、“sex”和“age”三个类型。如下:
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<xs:element ref="name" />
<xs:element ref="sex" />
<xs:element ref="age" />
</xs:sequence>
<xs:attribute name="no" use="required" type="xs:int"/>
</xs:complexType>
</xs:element>(3)添加“name”、“sex”、“age”元素的Schema定义,如下:
<xs:element name="name" type="xs:string"/>
<xs:element name="sex">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="女"/>
<xs:enumeration value="男"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age" type="xs:int"/>截止这里,Schema文件就编写完成了;
(4)将Schema文件引入到XML文档中,如下:
<students xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="studentschema.xsd">(5)使用Altova XML Spy软件对XML文档的有效性进行校验,你也可以使用其他的XML校验软件;