如下例子是我在练习schema的时候碰到的,就是在XMLSpy中定义了如下schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://www.hexinli.com" xmlns="http://www.hexinli.com">
<xs:element name="学生名册">
<xs:complexType>
<xs:sequence>
<xs:element name="学生" type="我的类型" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="我的类型">
<xs:sequence>
<xs:element name="名字" type="xs:string"/>
</xs:sequence>
<xs:attribute name="学号" type="xs:int"/>
</xs:complexType>
</xs:schema>
如果没有上面红色部分是会报错的,原因就是type="我的类型",“我的类型”不知道来源由哪里,如果加上上面红色部分也就说明了我自己定义的类型恰好在本schema中使用到了。
1. 书写简单的Schema 文档
9 创建XML 文档studentschema.xml 如下:<?xml version="1.0" encoding="GB2312"?>
<学生 学号="1">
<姓名>张三</姓名>
<性别>男</性别>
<年龄>20</年龄>
</学生>
<学生 学号="2">
<姓名>李四</姓名>
<性别>女</性别>
<年龄>19</年龄>
</学生>
<学生 学号="3">
<姓名>王二</姓名>
<性别>男</性别>
<年龄>21</年龄>
</学生>
<学生 学号="4">
<姓名>王二</姓名>
<性别>男</性别>
<年龄>21</年龄>
</学生>
</学生名册>
9 新建文本文件,首先是XML 声明代码
<?xml version="1.0" encoding="GB2312"?>
9 添加Schema 声明
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
… …
</xs:schema>
9 添加“学生名册”元素定义
<xs:element name="学生名册">
<xs:complexType>
<xs:sequence>
<xs:element ref="学生" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
9 “学生名册”元素之后添加“学生”元素定义
<xs:element name="学生">
<xs:complexType>
<xs:sequence>
<xs:element ref="姓名"/>
<xs:element ref="性别"/>
<xs:element ref="年龄"/>
</xs:sequence>
<xs:attribute name="学号" use="required" type="xs:int"/>
</xs:complexType>
</xs:element>
9 参考上述方法依次添加“姓名”、“性别”、“年龄”元素定义
<xs:element name="姓名" type="xs:string"/>
<xs:element name="性别">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="女"/>
<xs:enumeration value="男"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="年龄" type="xs:int"/>
9 文件保存为studentschema.xsd
9 在studentSchema.xml 文件中加入对schema 文件的引用
<学生名册 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="studentschema.xsd">
9 添加一条不符合约束的数据
9 用XMLSPY 观察出错信息
2. 根据Schema 书写XML 文档
9 创建schema 文件company.xsd 如下
<?xml version="1.0" encoding="GB2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="联系人列表">
<xs:complexType>
<xs:sequence>
<xs:element ref="联系人" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="公司" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="联系人">
<xs:complexType>
<xs:sequence>
<xs:element ref="姓名"/>
<xs:element ref="公司"/>
<xs:element ref=" 电话"/>
<xs:element ref="地址"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="公司" type="xs:string"/>
<xs:element name=" 邮编" type="xs:int"/>
<xs:element name="地址">
<xs:complexType>
<xs:sequence>
<xs:element ref="街道"/>
<xs:element ref="城市"/>
<xs:element ref="省份"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="城市">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="上海"/>
<xs:enumeration value="北京市"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="姓名" type="xs:string"/>
<xs:element name=" 电话" type="xs:string"/>
<xs:element name="省份">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="上海"/>
<xs:enumeration value="北京"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="街道" type="xs:string"/>
</xs:schema>
9 分析上述Schema 文档根节点元素:联系人列表(包含子元素联系人、属性公司)联系人元素含姓名、公司、电话、地址四个子节点元素 地址节点元素含有三个子元素:街道、城市和省份
9 创建针对上述Schema 的XML 文档,示例:
<?xml version="1.0" encoding="GB2312"?>
<联系人列表 公司="A 集团">
<联系人>
<姓名>张三</姓名>
<公司>A 公司</公司>
< 电话>(021)5555666</ 电话>
<地址>
<街道>5 街</街道><城市>上海市</城市><省份>上海</省份>
</地址>
</联系人>
<联系人>
<姓名>王三</姓名>
<公司>B 公司</公司>
< 电话>(021)5555777</ 电话>
<地址>
<街道>87 街</街道><城市>上海市</城市><省份>上海</省份>
</地址>
</联系人>
</联系人列表>