我有一个用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>
我想进行测试以确保这些容器存在。
答案 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更具体。