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