2013-12-12 62 views
0

我想知道是否可以對3個yes/no元素設置限制。我希望這三個中的一個被選作'是'檢查在三個布爾值中選擇了一個值爲yes

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

請注意'yes'不屬於'xs:boolean':'true','false','1'和'0'的合法值。問題仍然有效;請參閱下面的答案。 – kjhughes

回答

1

如果你正在使用XML Schema 1.1,您可以通過XPath 2.0中使用specify co-occurrence constraintsxs: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或在應用程序級別檢查它。