在进行框架、服务器开发或者企业之间交换数据时,经常需要使用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校验软件;