繁体   English   中英

XML模式:验证不同的元素对

[英]XML Schema: Validate distinct pair of elements

我尝试生成XML模式,以验证不应该允许多个相同元素出现多次的xml文件。

下面应该有几个要素。 在every下,必须有一对零件,并且此组合应该是唯一的。

使用了XSD 1.1和XPath 2.0,并且我尝试了几种解决方案,例如count()eq count(distinct()),count()eq 1,every及先前兄弟姐妹。

尝试是这样的:

<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>

任何帮助将不胜感激!

从您的问题尚不清楚,拥有一个带有零件(aaa,bbb)的盒子和另一个带有零件(bbb,aaa)的盒子是否有效。

假设这是有效的,则可以使用count(box) = count(distinct-values(box/concat(part[1]/@label, part[2]/@label))

请注意, @label/text()不会选择任何内容。 属性节点没有子节点。

<xs:assert test="2*count(box) eq ( count( distinct-values((box/concat(part[1]/@label, part[2]/@label),
                                                           box/concat(part[2]/@label, part[1]/@label))) ) + 
                                   count( box[part[1]/@label eq part[2]/@label] ) )"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM