2013-04-02 36 views
0

我有一个元素myCoupon具有一个策略元素元素的序列。我知道我可以通过添加一个maxOccurs属性来限制发生次数。但是,我希望根据isCouponActive元素限制它的数量(比如说我只想允许5个活动优惠券)。这是可以实现的吗?XML架构:基于子元素限制发生的次数

<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

您可以通过使用XML Schema 1.1中的断言约束来执行此操作。在'myCoupon'元素上,您可以添加如下所示的“声明”:

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