2015-11-04 71 views
1

我试图创建一个XSD架构规则,允许以下内容:情结越来越多的XML架构元素的

<Polynom> 
    <Order> 
    <Coefficients> 
     <Coefficient>0</Coefficient> 
    </Coefficients> 
    <Coefficients> 
     <Coefficient>1</Coefficient> 
     <Coefficient>0</Coefficient> 
    </Coefficients> 
    <Coefficients> 
     <Coefficient>3</Coefficient> 
     <Coefficient>2</Coefficient> 
     <Coefficient>1</Coefficient> 
    </Coefficients> 
    </Order> 
</Polynom> 

现在,如果这只是这将是简单的,但它应该是可能的改变数量Coefficients。所以,如果我添加另一个,那一个必须有四个Coefficient

我甚至不确定这是可能的与xsd?

更新: 只是为了澄清,第一Coefficients必须在一组n Coefficents之一,只有一个Coefficient,那么第n个Coefficients必须有n个Coefficient

+0

我不认为这是可能的队友从标准的事件限制。 – Maverik

+0

这是不可能的出现限制,但它是与XSD 1.1中的'xs:assert' [描述如下](http://stackoverflow.com/a/33535731/290085)。 – kjhughes

回答

0

你的约束可以在XSD 1.1使用xs:assert表示:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> 

    <xs:element name="Polynom"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Order"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Coefficients" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="Coefficient" maxOccurs="unbounded" 
           type="xs:integer"/> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:assert test="every $c in Coefficients satisfies 
          count($c/Coefficient) = count($c/preceding-sibling::*) + 1"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

您的约束不能在XSD 1.0表示。