XML Schema:根据子元素限制出现次数

时间:2013-04-02 14:17:19

标签: xml xsd

我有一个元素 myCoupon ,其中包含一系列 curatedCoupon 元素。我知道我可以通过添加 maxOccurs 属性来限制出现次数。但是,我希望根据isCouponActive元素限制其数量(假设我只想允许5张有效优惠券)。这可以实现吗?

  <xs:complexType name="curatedCoupon">
    <xs:sequence>
      <xs:element name="isCouponActive" type="xs:boolean" default="false" minOccurs="0">
    </xs:sequence>      
  </xs:complexType>  

  <xs:element name="myCoupon">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="curatedCoupon" type="sbcc:curatedCoupon" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

1 个答案:

答案 0 :(得分:1)

您可以使用XML Schema 1.1中的断言约束来完成此操作。在'myCoupon'元素上,你可以添加一个'assert',如下所示:

<xs:element name="myCoupon">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="curatedCoupon" type="curatedCoupon" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:assert test="count(curatedCoupon/isCouponActive[text()='true']) &lt;= 5"/>
    </xs:complexType>
</xs:element>