如下例子是我在練習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 街</街道><城市>上海市</城市><省份>上海</省份>
</地址>
</聯繫人>
</聯繫人列表>