在XML模式中擴(kuò)展枚舉列表
發(fā)布時(shí)間:2008-12-24 22:54:53 作者:佚名
我要評(píng)論

在列表中添加新值是一種常見而且必要的需求。模式設(shè)計(jì)者通常希望在系統(tǒng)架構(gòu)中構(gòu)建一種添加附加值的方法,并且該附加值在設(shè)計(jì)階段是未知的。模式設(shè)計(jì)者如何創(chuàng)建一個(gè)可擴(kuò)展、易于實(shí)現(xiàn)的枚舉值列表?本文將介紹幾種實(shí)現(xiàn)這一目標(biāo)的方法。
模式設(shè)計(jì)者和實(shí)現(xiàn)人員需要一種擴(kuò)
在列表中添加新值是一種常見而且必要的需求。模式設(shè)計(jì)者通常希望在系統(tǒng)架構(gòu)中構(gòu)建一種添加附加值的方法,并且該附加值在設(shè)計(jì)階段是未知的。模式設(shè)計(jì)者如何創(chuàng)建一個(gè)可擴(kuò)展、易于實(shí)現(xiàn)的枚舉值列表?本文將介紹幾種實(shí)現(xiàn)這一目標(biāo)的方法。
模式設(shè)計(jì)者和實(shí)現(xiàn)人員需要一種擴(kuò)展 XML 模式中現(xiàn)有枚舉列表的方法。不幸的是,XML 模式規(guī)范不允許在這些列表的創(chuàng)建過程中(參閱 參考資料)進(jìn)行擴(kuò)展。設(shè)計(jì)階段所選的值是固定的,而且都是可用的。盡管有這樣的限制,人們?nèi)允褂酶鞣N替代方案來實(shí)現(xiàn)列表擴(kuò)展。很多使用現(xiàn)有的不能改變的模式的客戶經(jīng)常提出這一要求。他們希望在添加新功能的同時(shí)保持向后兼容性。本文中,您將會(huì)看到模式設(shè)計(jì)者如何克服障礙實(shí)現(xiàn)該功能。
枚舉列表 是特定數(shù)據(jù)點(diǎn)的一組指定值。例如,您也許通過固定的值列表查看國(guó)家代碼,包括 DE(德國(guó))、US(美國(guó))和 JP(日本)。根據(jù)給定的值集,當(dāng)一個(gè)新國(guó)家被識(shí)別出時(shí),如 TL(東帝汶)或者 BA(波斯尼亞及黑塞哥維那),該怎么辦?使用以前的名稱列表的客戶必須改變實(shí)現(xiàn)來容納新值。
當(dāng)使用 XML 模式對(duì)數(shù)據(jù)建模時(shí),枚舉值被顯式列出。因此,國(guó)家代碼列表依次包含各個(gè)枚舉值。經(jīng)常需要識(shí)別列表中的新值,而且必須將其容納到列表中,模式設(shè)計(jì)者試圖找到一種擴(kuò)展列表的方法,實(shí)際上,是將這種方法構(gòu)建到設(shè)計(jì)中,允許添加在設(shè)計(jì)時(shí)未知的附加值。
創(chuàng)建可擴(kuò)展的枚舉列表
在尋找這一問題的解決方案時(shí),受到四個(gè)關(guān)鍵標(biāo)準(zhǔn)的影響:
首先,要在設(shè)計(jì)階段之后擴(kuò)展列表。不管是快速建立一個(gè)新的貿(mào)易伙伴還是建立時(shí)間關(guān)鍵型的新數(shù)據(jù)字段,在關(guān)鍵時(shí)刻進(jìn)行擴(kuò)展是一項(xiàng)實(shí)際需求。
其次,能夠在解析器中驗(yàn)證值對(duì)于簡(jiǎn)化實(shí)現(xiàn)是非常關(guān)鍵的。
第三,在單個(gè)周期內(nèi)完成解析和驗(yàn)證是至關(guān)重要的。這就避免了像 Genericode 解決方案一樣,在一個(gè)單獨(dú)的周期和解析器中進(jìn)行驗(yàn)證。對(duì)于某些設(shè)置來說,添加新技術(shù)需求會(huì)導(dǎo)致成本太高或者太耗時(shí)。
最后,解決方案必須能夠向后兼容原始的模式。不兼容的列表更改不能稱為擴(kuò)展。
有些人認(rèn)為根本就不應(yīng)該擴(kuò)展枚舉列表。數(shù)據(jù)建模人員也許認(rèn)為如果想讓模型包含更多數(shù)據(jù)、擴(kuò)展模型,那么可以根據(jù)產(chǎn)品創(chuàng)建模式 — 實(shí)際上,在需要時(shí)創(chuàng)建更大的模型并減少限制。如果能夠控制原始模式和數(shù)據(jù)模型,這樣做是可以的,這種方法也許是理想的方法。但是,如果您需要在設(shè)計(jì)階段之后進(jìn)行實(shí)際擴(kuò)展,這樣的方法是行不通的。
還有人認(rèn)為擴(kuò)展枚舉列表的關(guān)鍵是不使用 XML 模式驗(yàn)證解析器。Genericode(參閱 參考資料)建議在第二層對(duì)枚舉列表進(jìn)行驗(yàn)證,脫離初始的 XML 模式解析器驗(yàn)證過程。這種理論是正確的,而且這種方法的應(yīng)用會(huì)越來越廣泛。但是,如果要在一個(gè)解析周期內(nèi)完成,這種解決方案是無法做到的。在某些情況下,不可能執(zhí)行第二個(gè)驗(yàn)證周期。
當(dāng)然,您可以在新列表中創(chuàng)建新元素。但是,不能向后兼容原始模式。我們的目標(biāo)是在保持向后兼容性的同時(shí)實(shí)現(xiàn)一個(gè)可擴(kuò)展的列表(參閱 參考資料)。
對(duì)于本文的目標(biāo),這里作出的假設(shè)基于我與客戶打交道的經(jīng)驗(yàn) —— 即用附加值擴(kuò)展現(xiàn)有枚舉列表的需求。另外,我假設(shè)在一個(gè)步驟內(nèi)完成 XML 模式解析與驗(yàn)證等操作。
擴(kuò)展枚舉列表的必要條件
該擴(kuò)展示例有四個(gè)必要條件:
允許在設(shè)計(jì)階段之后擴(kuò)展枚舉列表。
用解析器驗(yàn)證枚舉列表。
在一個(gè)周期內(nèi)驗(yàn)證枚舉列表。
維持和原始模式的向后兼容性。
舉例來說,一個(gè)團(tuán)隊(duì)需要處理一個(gè)區(qū)域產(chǎn)業(yè)協(xié)會(huì)的枚舉列表(或任意現(xiàn)有列表)為例,并根據(jù)使用修改模式組件。先前的模式提供 MaritalStatus 組件和值的枚舉列表,如 清單 1 所示。
清單 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è)一個(gè)公司要使用這些值,另外,還要支持它的重要貿(mào)易伙伴使用另一個(gè)值。CivilUnion 是一個(gè)擴(kuò)展值,公司識(shí)別出該值不屬于原始模式。但是從語義上來說,使用現(xiàn)有元素 —MaritalStatus — 也是可以的。公司要如何實(shí)現(xiàn)呢?
回頁首
解決方案 1: 編輯原始模式使其包含新枚舉值
當(dāng)然,編輯原始模式使其包含新枚舉值是最直接的方法。保留模式的本地副本,然后編輯這些模式以支持公司使用的枚舉值。
優(yōu)點(diǎn):易于實(shí)現(xiàn)
缺點(diǎn):
需要編輯原始模式,這些模式將逐漸改變,以至于無法控制。如果擴(kuò)展一個(gè)先前存在的列表,那么創(chuàng)建者(貿(mào)易伙伴、協(xié)會(huì)等)可能要發(fā)布列表的新版本。您需要將編輯的內(nèi)容傳播到每個(gè)新版本中。
手動(dòng)編輯模式會(huì)導(dǎo)致意外的編輯錯(cuò)誤。
如果您不能(或不想)編輯原始模式,則需要一種替代方法。
回頁首
解決方案 2: 創(chuàng)建新枚舉列表并加入到原始列表中
第二個(gè)選擇是創(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> 標(biāo)記將其與原始列表結(jié)合,如 清單 3 所示。
清單 3. 將兩個(gè)列表組合起來
<xsd:simpleType name="MaritalStatusType_Union">
<xsd:union memberTypes="MyExtMaritalStatusEnumType MaritalStatusEnumType"/>
</xsd:simpleType>
<xsd:element name="MaritalStatus" type="MaritalStatusType_Union"/>
該解決方案仍然需要對(duì)模式進(jìn)行編輯 — 即將元素 MaritalStatus 由 MaritalStatusType 類型轉(zhuǎn)換為 MaritalStatusType_Union 類型。改動(dòng)不大,但仍然有一些手動(dòng)編輯工作。
優(yōu)點(diǎn):不改變?cè)济杜e列表。
缺點(diǎn):
在設(shè)計(jì)階段所有的值必須是已知的,防止后期綁定解決方案。
需要 <xsd:union> 標(biāo)記支持,但有時(shí)該標(biāo)記無法用工具實(shí)現(xiàn)。
回頁首
解決方案 3: 創(chuàng)建一個(gè)模式,并與原始枚舉類型結(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)建采用新值的模式(一個(gè)正則表達(dá)式)。該模式是以 x: 為前綴的任意字符串。x: 是標(biāo)準(zhǔn)枚舉列表和擴(kuò)展列表之間的描繪程序。清單 5 顯示這一模式。
清單 5. 用于擴(kuò)展的正則表達(dá)式
<xsd:simpleType name="StringPatternType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="x:\S.*"/>
</xsd:restriction>
</xsd:simpleType>
最后,使用 <xsd:union> 標(biāo)記結(jié)合列表與模式,如 清單 6 所示。
清單 6. 枚舉列表與擴(kuò)展模式的結(jié)合
<xsd:simpleType name="MyExtPersonEyeColorType">
<xsd:union memberTypes="PersonEyeColorType StringPatternType"/>
</xsd:simpleType>
<xsd:element name="PersonEyeColor" type="MyExtPersonEyeColorType"/>
同一節(jié)點(diǎn)擁有標(biāo)準(zhǔn)和擴(kuò)展值。兩個(gè)值很容易分離,而且都可以用解析器驗(yàn)證,如 清單 7 所示。
清單 7. XML 實(shí)例樣例
<PersonEyeColor>Black</PersonEyeColor>
<PersonEyeColor>x:Teal</PersonEyeColor>
優(yōu)點(diǎn):
同一元素可用于所有數(shù)據(jù)。
用解析器對(duì)基本枚舉列表進(jìn)行驗(yàn)證。
清晰地分隔擴(kuò)展值。
該解決方案允許在以后綁定新值。
缺點(diǎn):
必須解析元素的內(nèi)容,以確定是否已經(jīng)被擴(kuò)展。
模式解析器必須支持正則表達(dá)式。
需要 <xsd:union> 標(biāo)記支持。
回頁首
解決方案 4:使用單獨(dú)的字段用于擴(kuò)展
在該解決方案中,枚舉字段不會(huì)變化。然而,您要在模式中設(shè)計(jì)一個(gè)擴(kuò)展字段來容納附加值。在本例中,初始列表是依賴型的(就業(yè)受益者和受養(yǎng)人之間的關(guān)系),如 清單 8 所示。
清單 8. 依賴關(guān)系枚舉列表
模式設(shè)計(jì)者和實(shí)現(xiàn)人員需要一種擴(kuò)展 XML 模式中現(xiàn)有枚舉列表的方法。不幸的是,XML 模式規(guī)范不允許在這些列表的創(chuàng)建過程中(參閱 參考資料)進(jìn)行擴(kuò)展。設(shè)計(jì)階段所選的值是固定的,而且都是可用的。盡管有這樣的限制,人們?nèi)允褂酶鞣N替代方案來實(shí)現(xiàn)列表擴(kuò)展。很多使用現(xiàn)有的不能改變的模式的客戶經(jīng)常提出這一要求。他們希望在添加新功能的同時(shí)保持向后兼容性。本文中,您將會(huì)看到模式設(shè)計(jì)者如何克服障礙實(shí)現(xiàn)該功能。
枚舉列表 是特定數(shù)據(jù)點(diǎn)的一組指定值。例如,您也許通過固定的值列表查看國(guó)家代碼,包括 DE(德國(guó))、US(美國(guó))和 JP(日本)。根據(jù)給定的值集,當(dāng)一個(gè)新國(guó)家被識(shí)別出時(shí),如 TL(東帝汶)或者 BA(波斯尼亞及黑塞哥維那),該怎么辦?使用以前的名稱列表的客戶必須改變實(shí)現(xiàn)來容納新值。
當(dāng)使用 XML 模式對(duì)數(shù)據(jù)建模時(shí),枚舉值被顯式列出。因此,國(guó)家代碼列表依次包含各個(gè)枚舉值。經(jīng)常需要識(shí)別列表中的新值,而且必須將其容納到列表中,模式設(shè)計(jì)者試圖找到一種擴(kuò)展列表的方法,實(shí)際上,是將這種方法構(gòu)建到設(shè)計(jì)中,允許添加在設(shè)計(jì)時(shí)未知的附加值。
創(chuàng)建可擴(kuò)展的枚舉列表
在尋找這一問題的解決方案時(shí),受到四個(gè)關(guān)鍵標(biāo)準(zhǔn)的影響:
首先,要在設(shè)計(jì)階段之后擴(kuò)展列表。不管是快速建立一個(gè)新的貿(mào)易伙伴還是建立時(shí)間關(guān)鍵型的新數(shù)據(jù)字段,在關(guān)鍵時(shí)刻進(jìn)行擴(kuò)展是一項(xiàng)實(shí)際需求。
其次,能夠在解析器中驗(yàn)證值對(duì)于簡(jiǎn)化實(shí)現(xiàn)是非常關(guān)鍵的。
第三,在單個(gè)周期內(nèi)完成解析和驗(yàn)證是至關(guān)重要的。這就避免了像 Genericode 解決方案一樣,在一個(gè)單獨(dú)的周期和解析器中進(jìn)行驗(yàn)證。對(duì)于某些設(shè)置來說,添加新技術(shù)需求會(huì)導(dǎo)致成本太高或者太耗時(shí)。
最后,解決方案必須能夠向后兼容原始的模式。不兼容的列表更改不能稱為擴(kuò)展。
有些人認(rèn)為根本就不應(yīng)該擴(kuò)展枚舉列表。數(shù)據(jù)建模人員也許認(rèn)為如果想讓模型包含更多數(shù)據(jù)、擴(kuò)展模型,那么可以根據(jù)產(chǎn)品創(chuàng)建模式 — 實(shí)際上,在需要時(shí)創(chuàng)建更大的模型并減少限制。如果能夠控制原始模式和數(shù)據(jù)模型,這樣做是可以的,這種方法也許是理想的方法。但是,如果您需要在設(shè)計(jì)階段之后進(jìn)行實(shí)際擴(kuò)展,這樣的方法是行不通的。
還有人認(rèn)為擴(kuò)展枚舉列表的關(guān)鍵是不使用 XML 模式驗(yàn)證解析器。Genericode(參閱 參考資料)建議在第二層對(duì)枚舉列表進(jìn)行驗(yàn)證,脫離初始的 XML 模式解析器驗(yàn)證過程。這種理論是正確的,而且這種方法的應(yīng)用會(huì)越來越廣泛。但是,如果要在一個(gè)解析周期內(nèi)完成,這種解決方案是無法做到的。在某些情況下,不可能執(zhí)行第二個(gè)驗(yàn)證周期。
當(dāng)然,您可以在新列表中創(chuàng)建新元素。但是,不能向后兼容原始模式。我們的目標(biāo)是在保持向后兼容性的同時(shí)實(shí)現(xiàn)一個(gè)可擴(kuò)展的列表(參閱 參考資料)。
對(duì)于本文的目標(biāo),這里作出的假設(shè)基于我與客戶打交道的經(jīng)驗(yàn) —— 即用附加值擴(kuò)展現(xiàn)有枚舉列表的需求。另外,我假設(shè)在一個(gè)步驟內(nèi)完成 XML 模式解析與驗(yàn)證等操作。
擴(kuò)展枚舉列表的必要條件
該擴(kuò)展示例有四個(gè)必要條件:
允許在設(shè)計(jì)階段之后擴(kuò)展枚舉列表。
用解析器驗(yàn)證枚舉列表。
在一個(gè)周期內(nèi)驗(yàn)證枚舉列表。
維持和原始模式的向后兼容性。
舉例來說,一個(gè)團(tuán)隊(duì)需要處理一個(gè)區(qū)域產(chǎn)業(yè)協(xié)會(huì)的枚舉列表(或任意現(xiàn)有列表)為例,并根據(jù)使用修改模式組件。先前的模式提供 MaritalStatus 組件和值的枚舉列表,如 清單 1 所示。
清單 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è)一個(gè)公司要使用這些值,另外,還要支持它的重要貿(mào)易伙伴使用另一個(gè)值。CivilUnion 是一個(gè)擴(kuò)展值,公司識(shí)別出該值不屬于原始模式。但是從語義上來說,使用現(xiàn)有元素 —MaritalStatus — 也是可以的。公司要如何實(shí)現(xiàn)呢?
回頁首
解決方案 1: 編輯原始模式使其包含新枚舉值
當(dāng)然,編輯原始模式使其包含新枚舉值是最直接的方法。保留模式的本地副本,然后編輯這些模式以支持公司使用的枚舉值。
優(yōu)點(diǎn):易于實(shí)現(xiàn)
缺點(diǎn):
需要編輯原始模式,這些模式將逐漸改變,以至于無法控制。如果擴(kuò)展一個(gè)先前存在的列表,那么創(chuàng)建者(貿(mào)易伙伴、協(xié)會(huì)等)可能要發(fā)布列表的新版本。您需要將編輯的內(nèi)容傳播到每個(gè)新版本中。
手動(dòng)編輯模式會(huì)導(dǎo)致意外的編輯錯(cuò)誤。
如果您不能(或不想)編輯原始模式,則需要一種替代方法。
回頁首
解決方案 2: 創(chuàng)建新枚舉列表并加入到原始列表中
第二個(gè)選擇是創(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> 標(biāo)記將其與原始列表結(jié)合,如 清單 3 所示。
清單 3. 將兩個(gè)列表組合起來
<xsd:simpleType name="MaritalStatusType_Union">
<xsd:union memberTypes="MyExtMaritalStatusEnumType MaritalStatusEnumType"/>
</xsd:simpleType>
<xsd:element name="MaritalStatus" type="MaritalStatusType_Union"/>
該解決方案仍然需要對(duì)模式進(jìn)行編輯 — 即將元素 MaritalStatus 由 MaritalStatusType 類型轉(zhuǎn)換為 MaritalStatusType_Union 類型。改動(dòng)不大,但仍然有一些手動(dòng)編輯工作。
優(yōu)點(diǎn):不改變?cè)济杜e列表。
缺點(diǎn):
在設(shè)計(jì)階段所有的值必須是已知的,防止后期綁定解決方案。
需要 <xsd:union> 標(biāo)記支持,但有時(shí)該標(biāo)記無法用工具實(shí)現(xiàn)。
回頁首
解決方案 3: 創(chuàng)建一個(gè)模式,并與原始枚舉類型結(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)建采用新值的模式(一個(gè)正則表達(dá)式)。該模式是以 x: 為前綴的任意字符串。x: 是標(biāo)準(zhǔn)枚舉列表和擴(kuò)展列表之間的描繪程序。清單 5 顯示這一模式。
清單 5. 用于擴(kuò)展的正則表達(dá)式
<xsd:simpleType name="StringPatternType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="x:\S.*"/>
</xsd:restriction>
</xsd:simpleType>
最后,使用 <xsd:union> 標(biāo)記結(jié)合列表與模式,如 清單 6 所示。
清單 6. 枚舉列表與擴(kuò)展模式的結(jié)合
<xsd:simpleType name="MyExtPersonEyeColorType">
<xsd:union memberTypes="PersonEyeColorType StringPatternType"/>
</xsd:simpleType>
<xsd:element name="PersonEyeColor" type="MyExtPersonEyeColorType"/>
同一節(jié)點(diǎn)擁有標(biāo)準(zhǔn)和擴(kuò)展值。兩個(gè)值很容易分離,而且都可以用解析器驗(yàn)證,如 清單 7 所示。
清單 7. XML 實(shí)例樣例
<PersonEyeColor>Black</PersonEyeColor>
<PersonEyeColor>x:Teal</PersonEyeColor>
優(yōu)點(diǎn):
同一元素可用于所有數(shù)據(jù)。
用解析器對(duì)基本枚舉列表進(jìn)行驗(yàn)證。
清晰地分隔擴(kuò)展值。
該解決方案允許在以后綁定新值。
缺點(diǎn):
必須解析元素的內(nèi)容,以確定是否已經(jīng)被擴(kuò)展。
模式解析器必須支持正則表達(dá)式。
需要 <xsd:union> 標(biāo)記支持。
回頁首
解決方案 4:使用單獨(dú)的字段用于擴(kuò)展
在該解決方案中,枚舉字段不會(huì)變化。然而,您要在模式中設(shè)計(jì)一個(gè)擴(kuò)展字段來容納附加值。在本例中,初始列表是依賴型的(就業(yè)受益者和受養(yǎng)人之間的關(guān)系),如 清單 8 所示。
清單 8. 依賴關(guān)系枚舉列表
相關(guān)文章
MIME類型中application/xml與text/xml的區(qū)別介紹
這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-28- XML中擁有Schema特性,能夠比DTD更加強(qiáng)大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下2021-11-30
- 這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標(biāo)簽等,需要的朋友可以參考下2016-06-24
- XML標(biāo)簽的自定義功能非常強(qiáng)大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析2016-06-24
- 這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺(tái)與源代碼查看,需要的朋友可以參考下2016-02-16
- 這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-16
解析XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型
這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對(duì)象模型,文中舉了JavaScript解析DOM對(duì)象的例子,需要的朋友可以參考下2016-02-15- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15