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

Would like to validate a reference to a container in an XML

我有一个用 XML 编写的配置文件。我对其中的大部分内容进行了 XSD 验证。我想验证对同一 XML 中容器的引用是否有效(存在)。我还想验证对另一个容器的引用 XML 是否有效,但我会单独询问。

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

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

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

像这样的东西应该可以工作:

<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").

,断言测试将通过

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