2017-07-13 150 views
0

假設我有一個屬性類型,允許的(0,1,2,3),即所有的組合中的任何值:XSD類型限制繼承?

<xs:simpleType name="fourValues"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="0" /> 
     <xs:enumeration value="1" /> 
     <xs:enumeration value="2" /> 
     <xs:enumeration value="3" /> 
     <xs:enumeration value="0,1" /> 
     <xs:enumeration value="0,2" /> 
     <xs:enumeration value="0,3" /> 
     <xs:enumeration value="0,4" /> 
     <xs:enumeration value="1,2" /> 
     <xs:enumeration value="1,3" /> 
     <xs:enumeration value="2,3" /> 
     <xs:enumeration value="0,1,2" /> 
     <xs:enumeration value="0,1,3" /> 
     <xs:enumeration value="0,2,3" /> 
     <xs:enumeration value="1,2,3" /> 
     <xs:enumeration value="0,1,2,3" /> 
    </xs:restriction> 
    </xs:simpleType> 

現在,如果我想定義一個類型,它是與上述相同的什麼,但也允許空(NULL)值,如:

<xs:simpleType name="fourValues-null"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="" /> 
     <xs:enumeration value="0" /> 
     <xs:enumeration value="1" /> 
     <xs:enumeration value="2" /> 
     <xs:enumeration value="3" /> 
     <xs:enumeration value="0,1" /> 
     <xs:enumeration value="0,2" /> 
     <xs:enumeration value="0,3" /> 
     <xs:enumeration value="0,4" /> 
     <xs:enumeration value="1,2" /> 
     <xs:enumeration value="1,3" /> 
     <xs:enumeration value="2,3" /> 
     <xs:enumeration value="0,1,2" /> 
     <xs:enumeration value="0,1,3" /> 
     <xs:enumeration value="0,2,3" /> 
     <xs:enumeration value="1,2,3" /> 
     <xs:enumeration value="0,1,2,3" /> 
    </xs:restriction> 
    </xs:simpleType> 

是否有某種類型的繼承,避免我列舉的重複這兩種類型的?

我有兩個屬性的使用:

<xs:attribute name="readingSources" type="fourValues" use="required" /> 
<xs:attribute name="targetFlip" type="fourValues-null" use="required"> 

我試圖讓targetFlip屬性type="fourValues"use="optional"但它說,限制失敗。

回答

1

這樣做的一種方法是定義允許將額外值作爲頂級類型的新類型,然後重新定義現有類型作爲其限制條件,並帶有諸如<minLength value="1"/>等額外方面。

第二種方法是將新類型定義爲現有類型的聯合類型和僅允許零長度字符串的類型。

第三種方式(我通常喜歡的方式,但它取決於您是僅將模式用於驗證還是用於數據綁定)是將新類型定義爲列表類型,其中現有類型作爲其項目類型,maxLength設置爲1.