綠色資源網(wǎng):您身邊最放心的安全下載站! 最新軟件|熱門(mén)排行|軟件分類(lèi)|軟件專(zhuān)題|廠商大全

綠色資源網(wǎng)

技術(shù)教程
您的位置:首頁(yè)網(wǎng)絡(luò)編程Xml編程 → XML Schema學(xué)習(xí)筆記

XML Schema學(xué)習(xí)筆記

我要評(píng)論 2010/02/16 18:51:12 來(lái)源:綠色資源網(wǎng) 編輯:綠色資源站 [ ] 評(píng)論:0 點(diǎn)擊:806次

1、復(fù)雜類(lèi)型和簡(jiǎn)單類(lèi)型之間最根本的區(qū)別就是:復(fù)雜類(lèi)型的內(nèi)容中可以包含其他元素,也可以帶有屬性(Attribute),但簡(jiǎn)單類(lèi)型既不能包含子元素,也不能帶有任何屬性。
<xsd:complexType name="CNAddress" >
<xsd:sequence>
<xsd:element name="name"type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city"type="xsd:string"/>
<xsd:element name="zip"type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>

2、element存在約束:element可以通過(guò)其minOccurs和maxOccurs兩個(gè)屬性來(lái)約束元素實(shí)例存在的個(gè)數(shù),這兩個(gè)屬性的缺省值都是1,表示默認(rèn)情況下此元素在XML實(shí)例文檔中必須出現(xiàn)一次。

3、attribute存在約束:元素屬性也可以通過(guò)attribute的use屬性來(lái)約束出現(xiàn)一次或根本不出現(xiàn);use屬性的取值可以是required,optional,prohibited三個(gè)值,缺?。J(rèn))值是optional.

4、element和attribute都有一個(gè)default和fixed屬性,針對(duì)element來(lái)書(shū),只有當(dāng)element實(shí)例為空時(shí)才采用此default值,而attribute是當(dāng)實(shí)例不提供此attribute時(shí)才采用此default值,因此對(duì)attribute而言,只有其use值是optional時(shí)default值才有意義,而且對(duì)element和attribute來(lái)說(shuō)fixed和default兩個(gè)屬性不能同時(shí)存在,否則會(huì)出現(xiàn)錯(cuò)誤。

5、直接定義在schema元素下,即schema元素的頂級(jí)子元素的element和attribute都是全局的,稱(chēng)之為全局元素和全局屬性,你在其他類(lèi)型定義中可以直接引用。

6、派生新類(lèi)型有兩種方式:第一種就是直接從其他類(lèi)型中擴(kuò)展(繼承)而來(lái),另外一種就是通過(guò)對(duì)已有類(lèi)型進(jìn)行限定性約束而來(lái)。
如:以下有三種通過(guò)限定性約束定義的新類(lèi)型:
通過(guò)值范圍限定:
<xsd:simpleType name="myInteger">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="10000"/>
<xsd:maxInclusive value="99999"/>
</xsd:restriction>
</xsd:simpleType>
使用模式匹配限定:
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
使用枚舉方式限定:
<xsd:simpleType name="CNCity">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="BeiJing"/>
<xsd:enumeration value="NanChang"/>
<xsd:enumeration value="ShangHai"/>
</xsd:restriction>
</xsd:simpleType>

7、原子類(lèi)型(不可分割的類(lèi)型,象string,integer等系統(tǒng)內(nèi)建的類(lèi)型)、列表類(lèi)型、聯(lián)合類(lèi)型合起來(lái)統(tǒng)一稱(chēng)為簡(jiǎn)單類(lèi)型。在Schema中有NMTOKENS、IDREFS、ENTITIES三種內(nèi)建的列表類(lèi)型,你也可以從已有的簡(jiǎn)單類(lèi)型來(lái)創(chuàng)建list(列表)類(lèi)型,但你不能從已有的list類(lèi)型和復(fù)雜類(lèi)型來(lái)創(chuàng)建列表(list)類(lèi)型。
如:
<xsd:simpleType name="listOfMyIntType">
<xsd:list itemType="myInteger"/>
</xsd:simpleType>
在XML實(shí)例文檔中列表類(lèi)型的值是通過(guò)空格來(lái)進(jìn)行分隔的,如果聲明了一個(gè)listOfMyIntType元素,其值可能是:
<listOfMyInt>20003 15037 95977 95945</listOfMyInt>

8、有幾個(gè)方面的元素可以應(yīng)用于list類(lèi)型來(lái)進(jìn)行約束,它們是:length、minLength、maxLength和enumeration,如:
<xsd:simpleType name="USStateList">
<xsd:list itemType="USState"/>
</xsd:simpleType>
<xsd:simpleType name="SixUSStates">
<xsd:restriction base="USStateList">
<xsd:length value="6"/>
</xsd:restriction>
</xsd:simpleType>
注:針對(duì)列表類(lèi)型要千萬(wàn)注意成員是string類(lèi)型的,因?yàn)閟tring類(lèi)型中的空格和列表類(lèi)型的分割符空格會(huì)造成部分混淆。
9、對(duì)元素的定義可以采用通過(guò)指定其type屬性為已定義的屬性的方式,也可一采用匿名定義類(lèi)型的方式,如:
采用類(lèi)型定義:
<xsd:element name=”comment” type=”xsd:string”>
采用匿名定義:
<xsd:element name=”quantity”>
<xsd:simpleType>
<xsd:restriction base=”xsd:positiveInteger”>
<xsd:maxExclusive value=”100” />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>

10、union(聯(lián)合)類(lèi)型表示在XML實(shí)例文檔中的元素實(shí)例符合union類(lèi)型定義的成員類(lèi)型中的一種就可以了(合法),這一點(diǎn)和C++中的聯(lián)合類(lèi)型有類(lèi)似的概念,如:
<xsd:simpleType name="addrUnion">
<xsd:union memberTypes="xsd:string integer"/>
</xsd:simpleType>

11、復(fù)雜類(lèi)型一般可以分為三類(lèi):第一類(lèi)是包含字符內(nèi)容和屬性但不包含子元素;第二類(lèi)是包含屬性和子元素但不包含字符數(shù)據(jù)(字符數(shù)據(jù)包含在子元素中);第三類(lèi)是即包含屬性和字符內(nèi)容又包含子元素的;那么如何來(lái)定義這三類(lèi)類(lèi)型呢?針對(duì)第一類(lèi)可以通過(guò)simpleContent來(lái)實(shí)現(xiàn),第二類(lèi)可以通過(guò)complexContent來(lái)做到,第三類(lèi)只需要將complexType的屬性mixed設(shè)為true就可以了。具體的例子如下:

第一種類(lèi)型(從一個(gè)簡(jiǎn)單類(lèi)型擴(kuò)展而來(lái),增加了屬性):
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="currency" type="xsd:string"/>

</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>

第二種類(lèi)型(有一個(gè)element和兩個(gè)attribute構(gòu)成):
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:complexContent>
<xsd:element name=”Country” ?type=”xsd:string” />
<xsd:attribute name="currency" type="xsd:string"/>
<xsd:attribute name="value"?type="xsd:decimal"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
注意:在這里由于默認(rèn)情況下缺省是complexContent,所以在這里簡(jiǎn)略的寫(xiě)法是:
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:element name=”Country”type=”xsd:string” />
<xsd:attribute name="currency" type="xsd:string"/>
<xsd:attribute name="value"?type="xsd:decimal"/>
</xsd:complexContent>
</xsd:element>

第三種類(lèi)型:
<xsd:element name="letterBody">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="salutation">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="quantity"type="xsd:positiveInteger"/>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="shipDate"type="xsd:date" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType&

關(guān)鍵詞:XML,Schema,學(xué)習(xí)筆記

閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!

  • 13 歡迎喜歡
  • 13 白癡
  • 13 拜托
  • 13 哇
  • 13 加油
  • 13 鄙視