XML模式

时间:2015-11-04 12:58:14

标签: xml xsd

我正在尝试创建一个允许以下内容的XSD架构规则:

<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必须有一个而且只有一个Coefficient,那么n Coefficients中的第n个Coefficents必须有n Coefficient

1 个答案:

答案 0 :(得分:0)

您的约束可以使用xs:assert

在XSD 1.1中表示
<?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中表示。