XML Schema断言循环验证

时间:2015-03-31 08:38:32

标签: xml xsd assert assertion xsd-1.1

我的XML结构如下所示:

<myElement>
    <start>0</start>
</myElement>
<myElement>
    <start>5</start>
</myElement>
<myElement>
    <start>7</start>
</myElement>
<myElement>
    <start>14</start>
</myElement>

现在我的验证规则如下:每个“myElement”元素都包含一个“start”元素。该元素的整数值不能小于之前的“myElement” - &gt; “开始”。例如,这将是无效的:

<myElement>
    <start>14</start>
</myElement>
<myElement>
    <start>7</start>
</myElement>

这样的规则如何看作xs:assert - 元素?

1 个答案:

答案 0 :(得分:2)

是的,有可能。这样的断言应该符合你的需要:

<xs:assert test="max(preceding::start) &lt; number(.) or empty(preceding::start)"></xs:assert>

在第一部分中,检查前面的最大start值是否仍然低于正在检查的当前值。

第二部分(or empty(preceding::start))只是为了克服第一部分的失败,因为第一个start标签不会提供任何要比较的值。

它应该以相应的方式添加到您的关联架构中 - 将complexType包裹为myElement的内容模型:

               <xs:complexType>
                   <xs:sequence>
                       <xs:element name="start" type="xs:integer" />
                   </xs:sequence>
                   <xs:assert test="max(preceding::start) &lt; number(.) or empty(preceding::start)"></xs:assert>
               </xs:complexType>