2017-08-01 55 views
0

所以我目前工作的一個XSD文件包含一個簡單類型稱爲ipaddress如何爲xs:simpleType提供多個值?

<xs:simpleType name="ipaddress"> 
    <xs:restriction base ="xs:string"> 
     <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"/> 
    </xs:restriction> 
    </xs:simpleType> 

這一個很適合我使用的所有IP地址。 但我想讓ipaddress接受ipaddress本身或字符串「localhost」。我怎麼做?我已經嘗試過這樣的事情

<xs:simpleType name="ipaddress"> 
    <xs:restriction base ="xs:string"> 
     <xs:choice minOccurs="1" maxOccurs="1"> 
      <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"/>  
      <xs:enumeration value="localhost"/> 
     <xs:choice> 
    </xs:restriction> 
    </xs:simpleType> 

或類似的

<xs:complexType name="ipaddress">  
     <xs:choice minOccurs="1" maxOccurs="1"> 
      <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])" type="xs:string"/> 
      <xs:enumeration value="localhost" type="xs:string"/> 
     <xs:choice>  
    </xs:complexType> 

但驗證我的XML文件XSD架構時,這些解決方案的工作。我想通過使用xs:choice,我不知道怎麼做 - 我剛開始學習XSD,我仍然對所有這些標籤和元素以及如何正確連接它們感到困惑。

回答

1

按照W3C page on xs:restriction您可以使用多個xs:pattern■一個xs:restriction

注意:包含多個元素的XML會在集合中產生單個正則表達式;這個正則表達式是正則表達式的「或」,它們是元素的內容。

所以下面做工作:

<xs:simpleType name="ipaddress"> 
    <xs:restriction base ="xs:string"> 
    <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"/>         
    <xs:pattern value="localhost"/> 
    </xs:restriction> 
</xs:simpleType> 
1

我認爲選擇是複雜類型,爲您的簡單類型的限制,你可以簡單地添加另一種模式

<xs:simpleType name="ipaddress"> 
    <xs:restriction base ="xs:string"> 
     <xs:pattern value="((1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]).){3}(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])"/> 
     <xs:pattern value="localhost"/> 
    </xs:restriction> 
</xs:simpleType> 
相關問題