想要验证对 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 更具体。
我有一个用 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 更具体。