溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

XML模式中擴展枚舉列表的方法

發(fā)布時間:2022-03-16 16:12:35 來源:億速云 閱讀:170 作者:iii 欄目:web開發(fā)

本篇內(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)有元素 &mdash;MaritalStatus &mdash; 也是可以的。公司要如何實現(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"/> 
該解決方案仍然需要對模式進行編輯 &mdash; 即將元素 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ì)量的實用文章!

向AI問一下細節(jié)

免責(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)容。

xml
AI