检查在三个布尔值中选择一个值为yes

时间:2013-12-12 20:17:26

标签: xml xsd

我想知道是否可以对3个是/否元素进行限制。我希望其中三个中的一个被选为“是”

bpplena值低于。关于如何设置此限制的任何想法?

<xs:element name="ResponseTime" minOccurs="0" maxOccurs="unbounded">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="TwelveHour" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
          <xs:element name="SevenDay" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
          <xs:element name="FortyEightHours" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
          <xs:element name="Departure" minOccurs="1" maxOccurs="1">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:maxLength value="250"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

1 个答案:

答案 0 :(得分:1)

如果你正在使用XML Schema 1.1 ,你可以specify co-occurrence constraints通过XPath 2.0使用xs:assert这样(未经测试):

<xs:element name="ResponseTime" minOccurs="0" maxOccurs="unbounded">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="TwelveHour" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="SevenDay" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="FortyEightHours" type="xs:boolean" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Departure" minOccurs="1" maxOccurs="1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:maxLength value="250"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
    <xs:assert test="count((TwelveHour|SevenHour|FortyEightHours)[. = 'true']) gt 0"/>
  </xs:complexType>
</xs:element>

如果您使用的是XML Schema 1.0 ,则无法在架构中表达此类约束,但您可以使用Schematron或在应用程序级别进行检查。