2015-11-04 43 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表示。