亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在XML模式中擴展枚舉列表

  發(fā)布時間:2008-12-24 22:54:53   作者:佚名   我要評論
在列表中添加新值是一種常見而且必要的需求。模式設(shè)計者通常希望在系統(tǒng)架構(gòu)中構(gòu)建一種添加附加值的方法,并且該附加值在設(shè)計階段是未知的。模式設(shè)計者如何創(chuàng)建一個可擴展、易于實現(xiàn)的枚舉值列表?本文將介紹幾種實現(xiàn)這一目標的方法。 模式設(shè)計者和實現(xiàn)人員需要一種擴

<xsd:simpleType name="DependentRelationshipEnumType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="AdoptedChild"/>
<xsd:enumeration value="Brother"/>
<xsd:enumeration value="Child"/>
<xsd:enumeration value="ExSpouse"/>
<xsd:enumeration value="Father"/>
<xsd:enumeration value="Granddaughter"/>
<xsd:enumeration value="Grandson"/>
<xsd:enumeration value="Grandfather"/>
<xsd:enumeration value="Grandmother"/>
<xsd:enumeration value="LifePartner"/>
<xsd:enumeration value="Mother"/>
<xsd:enumeration value="Sister"/>
<xsd:enumeration value="Spouse"/>
<xsd:enumeration value="Extension"/>
</xsd:restriction>
</xsd:simpleType>
需要一個能夠容納新值的附加屬性 — extension—。清單 9 顯示了該屬性。
清單 9. 依賴關(guān)系的 extension 屬性

<xsd:complexType name="DependentRelationshipType">
<xsd:simpleContent>
<xsd:extension base="DependentRelationshipEnumType">
<xsd:attribute name="extension" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="DependentRelationship" type="DependentRelationshipType"/>
清單 10 顯示一些反映 extension 的 XML 實例。
清單 10. 示例 XML 實例

<DependentRelationship>Child</DependentRelationship>
<DependentRelationship extension="MyNewRelationship">Extension</DependentRelationship>
優(yōu)點:
不需要編輯原始模式。
該解決方案允許在以后綁定新值。
在原始模式中顯式設(shè)計 extension 方法。
缺點:
在設(shè)計階段,必須在每個枚舉列表中設(shè)計 extension 方法。
必須在元素中而不是在屬性中設(shè)置枚舉值。
回頁首
解決方案 5: 基于文檔的方法 —— 與字符串結(jié)合
注意:解決方案 5 和解決方案 6 違反了在一個周期內(nèi)進行驗證 這一要求。但是,我之所以在這里介紹它們,是因為在很多實際環(huán)境中可以使用這些方法。
在第 5 個解決方案中,使用 <xsd:union> 標記將枚舉列表與字符串結(jié)合。實際上,該解決方案提示接收系統(tǒng)哪些值是標準的(包括包裝和拼寫)。但實際上字符串字段可以存放任何值。因此,解析器并不驗證值。相反,這些值在第二個周期或者在接收數(shù)據(jù)的應(yīng)用程序中驗證。有些 XML 組織就使用這樣的方案。
清單 11 顯示通過 <xsd:union> 將一個枚舉列表和 <xsd:string> 結(jié)合。因為任意值都可以是一個字符串,所以不用驗證枚舉列表。這些值建議使用標準值。
清單 11. 與字符串結(jié)合的 DayOfWeek 枚舉列表

<xsd:simpleType name="DayOfWeekEnumType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Sunday"/>
<xsd:enumeration value="Monday"/>
<xsd:enumeration value="Tuesday"/>
<xsd:enumeration value="Wednesday"/>
<xsd:enumeration value="Thursday"/>
<xsd:enumeration value="Friday"/>
<xsd:enumeration value="Saturday"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="DayOfWeek" type="DayOfWeekEnumType"/>
<xsd:simpleType name="ExtendedDayOfWeekType">
<xsd:union memberTypes="DayOfWeekEnumType xsd:string"/>
</xsd:simpleType>
<xsd:element name="DayOfWeek_solution5" type="ExtendedDayOfWeekType"/>
優(yōu)點:可以添加任意的擴展值,即使在后期綁定時也可以添加。
缺點:
解析器不驗證枚舉值,在第二個步驟中才進行驗證。
需要 <xsd:union> 標記支持。
回頁首
解決方案 6: 基于文檔的方法 —— 使用 <xsd:annotation>
要使用該方法,將實際的枚舉值放到 <xsd:documentation> 標記內(nèi),同時將數(shù)據(jù)字段保留為一個簡單字符串。清單 12 顯示枚舉值。
清單 12. 在 <xsd:documentation> 標記內(nèi)的枚舉值

<xsd:element name="DayOfWeek" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
<!-- suggested enumerations -->
<xsd:enumeration value="Sunday"/>
<xsd:enumeration value="Monday"/>
<xsd:enumeration value="Tuesday"/>
<xsd:enumeration value="Wednesday"/>
<xsd:enumeration value="Thursday"/>
<xsd:enumeration value="Friday"/>
<xsd:enumeration value="Saturday"/>
</xsd:documentation>
</xsd:annotation>
</xsd:element>
優(yōu)點:
可以添加任意的擴展值,即使在后期綁定時也可以添加。
只需要最簡單的 XML 模式特性。
缺點:解析器不驗證枚舉值。
回頁首
未討論的方法
我省略了其他幾種擴展枚舉列表的解決方案。下面簡單介紹了兩種沒有使用的方法:
使用 <xsd:redefine> 標記: 通常不使用 XML 模式的這一特性,而且一般無法用工具實現(xiàn)它。該方法經(jīng)常被認為是避免重新定義的最佳實踐。
使用 substitutionGroup 元素替換包含所有值的聯(lián)合列表: 另外一種出色的解決方案,使用了替換組和聯(lián)合。將原始列表與新列表聯(lián)合以創(chuàng)建一個完整的枚舉列表,然后使用 substitutionGroups 標記(或 <xsi:type> 標記)替換一個全局作用域元素。該方法的缺點是替換不能派生有效的聯(lián)合,替換需要兩個組件來自相同的基類型。擴展和限制是替換的兩個有效方法。但是,根據(jù) XML 模式規(guī)范,聯(lián)合并不是有效的派生技術(shù)(參閱 參考資料)。
回頁首
結(jié)束語
XML 模式設(shè)計者和實現(xiàn)人員需要一種方法來擴展現(xiàn)有的枚舉列表。因為一旦原始列表創(chuàng)建后,規(guī)范不允許進行擴展,因此需要找到一種方法實際實現(xiàn)擴展。實現(xiàn)人員可以使用本文的示例來設(shè)計和擴展枚舉列表。每種方法都有優(yōu)缺點,沒有一種方法在所有用例中都是最佳方法。那么,應(yīng)該使用哪種方法呢?
請考慮這些經(jīng)驗法則:
如果您習(xí)慣編輯原始枚舉列表或模式,而且在設(shè)計階段就知道所有要擴展的枚舉值,最好使用 解決方案 1(手動編輯原始列表)或 解決方案 2(創(chuàng)建新列表并加入到原始列表中)。
如果想使用相同的語義元素來包含基本枚舉列表和擴展枚舉列表,可以考慮 解決方案 3(與模式聯(lián)合)。
如果允許原始列表與擴展列表有不同的字段,可以使用 解決方案 4(獨立的字段)。
如果不想在解析器中解析枚舉值,可以考慮 Genericode 方法或使用 解決方案 5 或 解決方案 6。
這些指導(dǎo)原則可以使模式設(shè)計者找到實用的最佳實踐,而且可以幫助他們創(chuàng)建易于實現(xiàn)、可擴展的枚舉列表。
XML 模式和 XML 實例示例 ExtendEnumeratedListsCode.zip 2KB

相關(guān)文章

  • MIME類型中application/xml與text/xml的區(qū)別介紹

    這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-28
  • 詳解XML中的模式Schema

    XML中擁有Schema特性,能夠比DTD更加強大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下
    2021-11-30
  • XML基本概念入門學(xué)習(xí)指南

    這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標簽等,需要的朋友可以參考下
    2016-06-24
  • XML中的DTD文檔類型定義完全解析

    XML標簽的自定義功能非常強大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析
    2016-06-24
  • 簡介XML文檔的閱讀與編輯

    這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺與源代碼查看,需要的朋友可以參考下
    2016-02-16
  • 簡單了解XML中的命名空間

    這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-02-16
  • 解析XML中的樹形結(jié)構(gòu)與DOM文檔對象模型

    這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對象模型,文中舉了JavaScript解析DOM對象的例子,需要的朋友可以參考下
    2016-02-15
  • 詳解XML編程中的模式定義XSD

    這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下
    2016-02-15
  • 深入解析XML中的DTD文檔類型定義

    這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-02-15
  • 淺談XML代碼編寫的編碼與驗證問題

    這篇文章主要介紹了XML代碼編寫的編碼與驗證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下
    2016-02-15

最新評論