XML架构:基于子元素限制出现次数

XML架构:基于子元素限制出现次数,xml,xsd,Xml,Xsd,我有一个元素mycoon,上面有一系列精心策划的优惠券元素。我知道我可以通过添加maxOccurs属性来限制出现次数。但是,我想根据iscoupactive元素限制它的数量(假设我只允许5个活动优惠券)。这是可以实现的吗 <xs:complexType name="curatedCoupon"> <xs:sequence> <xs:element name="isCouponActive" type="xs:boolean" default=

我有一个元素mycoon,上面有一系列精心策划的优惠券元素。我知道我可以通过添加maxOccurs属性来限制出现次数。但是,我想根据iscoupactive元素限制它的数量(假设我只允许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>

您可以使用XMLSchema 1.1中的断言约束来实现这一点。在“mycoon”元素上,可以添加如下“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>