XML Schema学习
最近埋頭苦讀WMFC定義的接口1標準文檔,其中對XML格式的定義都使用了XML?Schema,由于XML Schema在很多方面都有很大的作用,大有取代DTD的趨勢,所以在此寫了一些學習筆記,有疏漏的地方請大家指正!
?
?
?
?
XML Schema的其他方面偶就不在這里羅嗦了,直接進入主題,關于XML Schema的基本語法。
?
?
?
?
XSDL(XML Schema定義語言)由元素、屬性、命名空間和XML文檔種的其他節點構成的。
?
?
?
?
一、XSD中的元素
?
?
?
XSD文檔至少要包含:schema根元素和XML模式命名空間的定義、元素定義。
?
?
?
1、schema根元素
?
?
?
語法如下:
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
…
</xsd:schema>
?
?
http://gyjkyy.51sole.com/
http://gyjk.b2b168.com/
http://www.wenbing.cn/gyjk
?
在XSD中必須定義一個且只能定義一個schema根元素。根元素中包括模式的約束、XML模式命名空間的定義,其他命名空間的定義、版本信息、語言信息和其他一些屬性。
?
?
?
2、元素
?
?
?
語法如下:
<xsd:element name=”user” type=”xsd:string” />
?
?
?
XSD中的元素是利用element標識符來聲明的。其中name屬性是元素的名字,type屬性是元素值的類型,在這里可以是XML Schema中內置的數據類型或其他類型。
?
?
?
例子:
<xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”user” type=”xsd:string” />
</xsd:schema>
以上文檔對應的有效XML文檔如下:
<?xml version=”1.0”?>
<user>string</user>
?
?
?
在元素的定義中還有2個屬性:minOccurs和maxOccurs。其中minOccurs定義了該元素在父元素中出現的最少次數(默認為1,值為大于等于0的整數),maxOccurs定義了該元素在父元素中出現的最多次數(默認為1,值為大于等于0的整數)。在maxOccurs中可以把值設置為unbounded,表示對元素出現的最多次數沒有限制。
?
?
?
例子:
<xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema>
??? <xsd:element name=”user” type=”xsd:string” minOccurs=”0” maxOccurs=”unbounded” />
</xsd:schema>
?
?
?
表示為元素user的類型為string,出現的次數最少為0(也就是可選),最多不限制。
?
?
?
3、引用元素和替代
?
?
?
語法如下:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”user” type=”xsd:string” />
??? <xsd:element name=”name”>
??????? <xsd:complexType>
??????????? <xsd:sequence>
???? ?????????? <xsd:element ref=”user” />
??????????? </xsd:sequence>
??????? </xsd:complexType>
??? </xsd:element>
</xsd:schema>
?
?
?
引用是利用element標記符的ref屬性實現的。主要適用于避免在文檔中多次定義同一個元素,應當將經常使用的元素定義為根元素的子元素,以便在文檔的任何地方引用它。
?
?
?
在這里還可以為某個定義的元素起一個別名(偶的理解^o^),方法如下:
?
?
?
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”yonghu” type=”xsd:string” substitutionGroup=”user” />
??? <xsd:element name=”user” type=”xsd:string” />
??? <xsd:element name=”name”>
??????? <xsd:complexType>
??????????? <xsd:sequence>
??????????????? <xsd:element ref=”user” />
??????????? </xsd:sequence>
??????? </xsd:complexType>
?? ?</xsd:element>
</xsd:schema>
?
?
以上文檔對應的有效XML文檔如下:
?
?
<?xml version=”1.0”?>
<name>
????<user>string</user>
</name>
或者:
<?xml version=”1.0”?>
<name>
??? <yonghu>string</yonghu>
</name>
?
?
?
主要是利用element標識符中的屬性substitutionGroup實現的。
?
?
?
4、設置默認值和固定值
?
?
?
語法如下:
<xsd:element name=”city” type=”xsd:string” default=”xian” />
<xsd:element name=”country” type=”xsd:string” fixed=”china” />
?
?
?
通過default屬性的設置,可以在XML文檔中沒有對city元素定義時賦予默認值。而使用fixed屬性,可以給元素country設定一個固定的值china,并且不允許改變!
?
?
?
5、利用組合器控制結構
?
?
?
sequence組合器,定義了一列元素必須按照模式中指定的順序顯示(如果是可選的,也可以不顯示)。語法如下:
?
?
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”name”>
??????? <xsd:complexType>
??????????? <xsd:sequence>
??????????????? <xsd:element name=”first” type=”xsd:string” />
??????????????? <xsd:element name=”middle” type=”xsd:string” />
??????????????? <xsd:element name=”last” type=”xsd:string” />
???????????</xsd:sequence>
??????? </xsd:complexType>
??? </xsd:element>
</xsd:schema>
?
?
?
all組合器,允許所定義的元素可以按照任意順序顯示,all元素的子元素在默認情況下是必須的,而且每次最多顯示一次。語法如下:
?
?
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”name”>
??????? <xsd:complexType>
??????????? <xsd:all minOccurs=”0”>
??????????????? <xsd:element name=”first” type=”xsd:string” />
??????????????? <xsd:element name=”middle” type=”xsd:string” />
??????????????? <xsd:element name=”last” type=”xsd:string” />
??????????? </xsd:all>
??????? </xsd:complexType>
??? </xsd:element>
</xsd:schema>
?
?
choice組合器,允許指定多組聲明中的一個,用于互斥情況。語法如下:
?
?
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”name”>
??????? <xsd:complexType>
??????????? <xsd:choice>
??????????????? <xsd:element name=”first” type=”xsd:string” />
??????????????? <xsd:element name=”middle” type=”xsd:string” />
??????????????? <xsd:element name=”last” type=”xsd:string” />
??????????? </xsd:choice>
??????? </xsd:complexType>
??? </xsd:element>
</xsd:schema>
?
?
?
二、定義屬性
?
?
?
在XML Schema文檔中可以按照定義元素的方法定義屬性,但受限制的程度較高。它們只能是簡單類型,只能包含文本,且沒有子屬性。可以應用在attribute元素定義中的屬性如下:
default????初始默認值
fixed??????不能修改和覆蓋的屬性固定值
name?????屬性的名稱
ref??????? ?對前一個屬性定義的引用
type??????該屬性的XSD類型或者簡單類型
use????????如何使用屬性
form??????確定attributeFormDefault的本地值
id??????????模式文檔中屬性唯一的ID
?
?
?
Default、fixed、name、ref和type屬性與在element標記中定義的對應屬性相同,但type只能是簡單類型。Use屬性的值可以是:optional(屬性不是必須的,此為默認屬性)、prohibited或者required(屬性是強制的)。
?
?
?
1、創建屬性
?
?
?
語法如下:
<xsd:attribute name=”age” type=”xsd:integer” />
?
?
?
該語句定義了一個名為age的屬性,它的值必須是一個整數。把它添加到模式中時,它必須時schema元素、complexType元素或者attributeGroup元素的子元素。
?
?
?
例子:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
??? <xsd:element name=”name”>
??????? <xsd:complexType>
??????????? <xsd:sequence>
??????????????? <xsd:element name=”first” type=”xsd:string” />
??????????? </xsd:sequence>
??????????? <xsd:attribute name=”age” type=”xsd:integer” use=”optional” />
??????? </xsd:complexType>
??? </xsd:element>
</xsd:schema>
?
以上文檔對應有效的XML文檔如下:
?
<?xml version=”1.0”?>
<name age=”27”>
??? <first>string</first>
</name>
轉載于:https://blog.51cto.com/11895536/1829419
總結
以上是生活随笔為你收集整理的XML Schema学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 添加nginx为系统服务(service
- 下一篇: 要搞清楚对象和对象的引用