您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“XML模式中擴展枚舉列表的方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
清單 1. 婚姻狀況枚舉列表
<xsd:simpleType name="MaritalStatusEnumType">
<xsd:restriction base="xsd:normalizedString">
<xsd:enumeration value="Divorced"/>
<xsd:enumeration value="Married"/>
<xsd:enumeration value="NeverMarried"/>
<xsd:enumeration value="Separated"/>
<xsd:enumeration value="SignificantOther"/>
<xsd:enumeration value="Widowed"/>
<xsd:enumeration value="Unknown"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="MaritalStatus" type="MaritalStatusEnumType"/>
假設(shè)一個公司要使用這些值,另外,還要支持它的重要貿(mào)易伙伴使用另一個值。CivilUnion 是一個擴展值,公司識別出該值不屬于原始模式。但是從語義上來說,使用現(xiàn)有元素 —MaritalStatus — 也是可以的。公司要如何實現(xiàn)呢?
回頁首
解決方案 1: 編輯原始模式使其包含新枚舉值
當(dāng)然,編輯原始模式使其包含新枚舉值是最直接的方法。保留模式的本地副本,然后編輯這些模式以支持公司使用的枚舉值。
優(yōu)點:易于實現(xiàn)
缺點:
需要編輯原始模式,這些模式將逐漸改變,以至于無法控制。如果擴展一個先前存在的列表,那么創(chuàng)建者(貿(mào)易伙伴、協(xié)會等)可能要發(fā)布列表的新版本。您需要將編輯的內(nèi)容傳播到每個新版本中。
手動編輯模式會導(dǎo)致意外的編輯錯誤。
如果您不能(或不想)編輯原始模式,則需要一種替代方法。
回頁首
解決方案 2: 創(chuàng)建新枚舉列表并加入到原始列表中
第二個選擇是創(chuàng)建新枚舉列表,并將其加入到原始枚舉列表中。清單 1 顯示原始婚姻狀況列表。清單 2 顯示最新創(chuàng)建的枚舉列表。
清單 2. 新婚姻狀況枚舉列表
<xsd:simpleType name="MyExtMaritalStatusEnumType">
<xsd:restriction base="xsd:normalizedString">
<xsd:enumeration value="CivilUnion"/>
</xsd:restriction>
</xsd:simpleType>
使用 <xsd:union> 標記將其與原始列表結(jié)合,如 清單 3 所示。
清單 3. 將兩個列表組合起來
<xsd:simpleType name="MaritalStatusType_Union">
<xsd:union memberTypes="MyExtMaritalStatusEnumType MaritalStatusEnumType"/>
</xsd:simpleType>
<xsd:element name="MaritalStatus" type="MaritalStatusType_Union"/>
該解決方案仍然需要對模式進行編輯 — 即將元素 MaritalStatus 由 MaritalStatusType 類型轉(zhuǎn)換為 MaritalStatusType_Union 類型。改動不大,但仍然有一些手動編輯工作。
優(yōu)點:不改變原始枚舉列表。
缺點:
在設(shè)計階段所有的值必須是已知的,防止后期綁定解決方案。
需要 <xsd:union> 標記支持,但有時該標記無法用工具實現(xiàn)。
回頁首
解決方案 3: 創(chuàng)建一個模式,并與原始枚舉類型結(jié)合
現(xiàn)在看一下有關(guān)眼睛顏色的人口數(shù)據(jù)用例。清單 4 顯示這一列表。
清單 4. Person Eye Color 枚舉列表
<xsd:simpleType name="PersonEyeColorType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Black"/>
<xsd:enumeration value="Hazel"/>
<xsd:enumeration value="Gray"/>
<xsd:enumeration value="Brown"/>
<xsd:enumeration value="Violet"/>
<xsd:enumeration value="Green"/>
<xsd:enumeration value="Blue"/>
<xsd:enumeration value="Maroon"/>
<xsd:enumeration value="Pink"/>
<xsd:enumeration value="Dichromatic"/>
<xsd:enumeration value="Unknown"/>
</xsd:restriction>
</xsd:simpleType>
接下來,創(chuàng)建采用新值的模式(一個正則表達式)。該模式是以 x: 為前綴的任意字符串。x: 是標準枚舉列表和擴展列表之間的描繪程序。清單 5 顯示這一模式。
清單 5. 用于擴展的正則表達式
<xsd:simpleType name="StringPatternType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="x:/S.*"/>
</xsd:restriction>
</xsd:simpleType>
最后,使用 <xsd:union> 標記結(jié)合列表與模式,如 清單 6 所示。
清單 6. 枚舉列表與擴展模式的結(jié)合
<xsd:simpleType name="MyExtPersonEyeColorType">
<xsd:union memberTypes="PersonEyeColorType StringPatternType"/>
</xsd:simpleType>
<xsd:element name="PersonEyeColor" type="MyExtPersonEyeColorType"/>
同一節(jié)點擁有標準和擴展值。兩個值很容易分離,而且都可以用解析器驗證,如 清單 7 所示。
清單 7. XML 實例樣例
<PersonEyeColor>Black</PersonEyeColor>
<PersonEyeColor>x:Teal</PersonEyeColor>
優(yōu)點:
同一元素可用于所有數(shù)據(jù)。
用解析器對基本枚舉列表進行驗證。
清晰地分隔擴展值。
該解決方案允許在以后綁定新值。
缺點:
必須解析元素的內(nèi)容,以確定是否已經(jīng)被擴展。
模式解析器必須支持正則表達式。
需要 <xsd:union> 標記支持。
回頁首
解決方案 4:使用單獨的字段用于擴展
在該解決方案中,枚舉字段不會變化。
“XML模式中擴展枚舉列表的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。