想要验证对XML中容器的引用

时间:2019-08-14 18:01:13

标签: xml schematron

我有一个用XML编写的配置文件。我有大多数的XSD验证。我想验证对同一XML中的容器的引用是否有效(存在)。我还想验证对另一个XML中的容器的引用是否有效,但我将另行询问。

我的容器定义了一个“开关”作为对其他特定容器的引用。看起来像这样。

<switch> name="SW-01" type="NORMAL">
    <in-left>I_SW-01R</in-left>
    <out-left>O_SW-01R</out_left>
    <in-right>I_SW-01N</in-right>
    <out-right>O_SW-01N</out-right>
</switch>

我想进行测试以确保这些容器存在。

1 个答案:

答案 0 :(得分:0)

类似的事情应该起作用:

<sch:rule context="switch/*">
    <sch:assert test=". = //@id">
        <sch:name/> should reference an element that has a matching "id" attribute.
    </sch:assert>
</sch:rule>

规则上下文(“ switch / *”)使规则在作为“ switch”元素的子元素的所有元素上触发。如果元素(“。”)的内容等于文档中任何“ id”属性(“ // @ id”)的值,则断言测试将通过。

在大型文档上,此规则可能无法很好地执行,因为assert测试会遍历整个文档以查找“ id”属性。如果您知道文档的预期结构,建议您使断言测试中的Xpath更具体。

相关问题