【发布时间】:2019-02-08 13:25:30
【问题描述】:
我尝试生成 XML 架构,以验证不应允许多个相同元素多次出现的 xml 文件。
下面应该有几个元素。在 each 下,必须有一对部分,并且这个组合应该是唯一的。
使用了 XSD 1.1 和 XPath 2.0,我尝试了几种解决方案,例如 count() eq count(distinct())、count() eq 1、every & previous-siblings。
尝试是这样的:
<xs:assert test="count( box/part[1]/@label/text() || box/part[2]/@label/text() )
eq count( distinct-values( box/part[1]/@label/text() ||
box/part[2]/@label/text() ) )"/>
还有一个是这样的:
<xs:assert test="count(box) eq count(box[ not ( preceding-sibling::box/part[1]/[@label
=current()/part[1]/@label] or
preceding-sibling::box/part[2]/[@label
= current()/part[1]/@label] ) ])"/>
更具体地说,这应该是有效的:
<box_list>
<box>
<part label="aaa"/>
<part label="bbb"/>
<random_el id="8"/>
</box>
<box>
<part label="ccc"/>
<part label="iii"/>
<random_el height="9"/>
</box>
<box>
<part label="aaa"/>
<part label="kkk"/>
<random_el id="5"/>
</box>
</box_list>
并且以下内容一定是无效的:
<box_list>
<box>
<part label="aaa"/>
<part label="bbb"/>
<random_el id="8"/>
</box>
<box>
<part label="aaa"/>
<part label="bbb"/>
<random_el height="9"/>
</box>
<box>
<part label="aaa"/>
<part label="kkk"/>
<random_el id="5"/>
</box>
</box_list>
任何帮助将不胜感激!
【问题讨论】:
标签: xml xsd-validation