如何为 xs:simpleType 提供多个值?

How to provide multiple values for a xs:simpleType?

所以我目前正在处理一个 XSD 文件,其中包含一个名为 ipaddress:

的简单类型
  <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>

但是在根据 xsd 模式验证我的 xml 文件时,这些解决方案中的 none 有效。我认为我不知道如何使用 xs:choice 是正确的 - 我正处于学习 XSD 的最开始阶段,我仍然对所有这些标签和元素感到困惑,并且如何正确连接。

我认为选择是针对复杂类型的,对于简单的类型限制,您可以简单地添加另一个模式

<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>

根据 W3C page on xs:restriction,您可以在一个 xs:restriction 中使用多个 xs:pattern

Note: An XML containing more than one element gives rise to a single ·regular expression· in the set; this ·regular expression· is an "or" of the ·regular expressions· that are the content of the elements.

因此以下内容有效:

<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>