當前位置:開發者網絡 >> 技術教程 >> .NET教程 >> XML應用 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
XML Schema學習(一)
作者:未知
日期:2005-03-21
人氣:
投稿:snow(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
最近埋頭苦讀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>





在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>





如上所示,要把屬性附加在元素上,屬性應該在complexType定義中的組合器之後定義或引用。



相關文章: