XML中擁有Schema特性,能夠比DTD更加強大地引入元素結構,下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下
文件定義模型為XML文件提供了規範,DTD的引入雖然解決了XML文檔的規範化問題,但它文件格式類型和XML文件格式類型不一致,同時DTD提供的數據類型有限有時無法滿足行業的需求,所以引入了Schema。 Schema模式可以決定XML文件的元素和屬性的結構、元素的順序、元素和屬性的資料值,根據範圍、枚舉以及樣式匹配等。
一、Schema初識
XML Schema語言也稱為XML Schema Definition (XSD),它的作用是定義一份XML文件的合法組件群(XML文件的結構),就像DTD的作用一樣。 XML Schema以XML語言為基礎,也可以說XML Schema本身就是XML的一種應用。
1、Schema作用
XML Schema和DTD的作用一樣,都是用來定義一個XML文件的結構的模式,那麼為什麼有了DTD還要有XML Schema呢? 因為,XML Schema比DTD作用更強大。
Xml Schema 比DTD的優越性:
(1)模式是可擴展的
(2)模式比DTD 功能更豐富且更有用
(3)模式是用XML編寫的
(4)模式支援資料類型
(5)模式支援名稱空間
(6)不需要在學習其他的語言
(7)可以直接使用XML編輯器來編寫XML Schema
(8)可以直接使用XML解析器來解析XML Schema
(9)可以使用XML DOM來靈活的操作XML Schema
(10)可以使用XSLT技術來轉換XML Schema
2、對比學習
1.1 作用上
兩者相同,都是定義了一個XML文件的結構的模式。
1.2 用法上
兩者作用相同,但文法上有些差異。 Schema是DTD的擴展,同樣支援元素和屬性的定義,並且定義的語法相似,但Schema可以為元素和屬性添加相應的資料類型,同時也引入了全局和局部元素聲明的語法,另外根據元素和屬性的數據內容引入了簡單類型和複雜類型。
所謂的簡單類型(SimpleType)和複雜類型(ComplexType),它們本身並不是具體的資料類型,它們只是對節點或自訂類型的類型作一個抽象的說明。
也就是說Schema的引進使得模式的宣告更類似於我們所使用的程式語言。
二、實例詳解
2.1 Schema實例
清單1:User.xml文檔結構
XML/HTML Code复制内容到剪贴板 <?xml version="1.0"?> <用户列表> <用户> <用户名>xx</用户名> <密码>123456</密码> <用户类型>1</用户类型> </用户> </用户列表>
#清單2:使用全域元件形式定義Schema,User.xsd
XML/HTML Code复制内容到剪贴板 <!-- 使用全局组件形式定义 --> <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='用户列表' type='userlist'/> <xs:complexType name='userlist'><!-- 使用complexType声明该类型为复合类型的元素 --> <xs:sequence><!-- 使用sequence说明下面的元素必须按顺序在XML文档中显示 --> <xs:element name='用户' type='user'/> </xs:sequence> </xs:complexType> <xs:complexType name='user'> <xs:sequence> <xs:element name='用户名' type='user'/> <xs:element name='密码' type='user'/> <xs:element name='用户类型' type='user'/> </xs:sequence> </xs:complexType> </xs:schema>
XML/HTML Code复制内容到剪贴板 <!-- 使用局部形式定义 --> <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='用户列表'> <xs:complexType> <xs:sequence> <xs:element name='用户'> <xs:complexType> <xs:sequence> <xs:element name='用户名' type='xs:string'/> <xs:element name='密码' type='xs:string'/> <xs:element name='用户类型' type='xs:integer'/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
清單2和清單3的都定義了User.xsd,它們的作用是相同的,都是為了驗證XML文件的合法性,但定義的方法不同,清單2是使用全域組件的形式定義,而清單3所使用的局部形式定義,具體的區別請看下文。
2.2 基本用法
2.2.1 引用語法
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <用户列表 xmlns:xsi=http://www.nishishui.org/2000/XMLSchema xsi:noNamespaceSchemaLocation='user.xsd'><!-- 引用user.xsd --> <用户> <用户名>我是谁</用户名> <密码>123456</密码> <用户类型>1</用户类型> </用户> </用户列表>
2.2.2 元素類型
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='age'> <xs:simpleType><!-- 使用关键字simpleType声明简单元素 --> <!--restriction关键字结合minInclusive和maxInclusive控制了XML中元素可接受的值范围为0~100--> <xs:restriction base="xs:integer"> <xs:minInclusive value='0'/> <xs:maxInclusive value='100'/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='age'> <xs:complexType><!-- 使用关键字complexType声明复杂元素 --> <!--sequence控制XML内容中元素出现的顺序--> <xs:sequence> <!-- 定义具体的元素,这些都是简单元素--> <xs:element name='firstname' type='xs:string'/> <xs:element name='lastname' type='xs:string'/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>###########################################################
(2)按照定义位置可分为局部和全局元素。
全局元素:1dd643d91c792abd0a34d1b312e2f207元素的父元素必须是b7b165c079dc80a737996dfae2b9c338;
局部元素:局部元素声明只能出现在复杂类型(b04708ad431d182f917fc0425233bdde元素)定义内部。即1dd643d91c792abd0a34d1b312e2f207元素的父元素只能是6e9388779e5fc4a565f66fe84a63ec67、6352600d7af58d108c255b7cc4da5797或72b96a4fd26a14b531b12ddf122686e3元素。
XML/HTML Code复制内容到剪贴板 <?xml version='1.0' encoding='utf-8'?> <xs:schema xmlns:xs='http://www.nishishui.org/2000/XML Schema' elementFormDefault='qualified' attributeFormDefualt='unqualified'> <xs:element name='用户' type='user'/><!-- 全局元素 --> <xs:element name='用户名' type='xs:string'/><!-- 全局元素 --> <xs:element name='密码' type='xs:string'><!-- 全局元素 --> <xs:complexType name='user'> <!--sequence控制XML内容中元素出现的顺序--> <xs:sequence> <!-- 定义具体的元素,这些都是简单元素--> <!-- 定义局部元素,使用ref关键字引用,并使用minOccurs和maxOccurs制定元素出现的最少和最多的次数--> <xs:element ref='用户名' minOccurs='0' maxOccurs='1'/><!-- 局部元素--> <xs:element ref='密码' minOccurs='0' maxOccurs='1'/><!-- 局部元素--> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
以上是XML中的模式Schema程式碼詳細介紹(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!