我正在尝试根据其ID标识的文档中的不同元素中的条件来验证子元素的存在。使用ISO Schematron和XPath 2.0。
采用以下示例:
<value id="red" bits="16" />
<foo value_id="red">
<increased_sensitivity/>
</foo>
只有当带有@id“red”的“value”元素在文档中的某处包含属性bits =“16”时,才允许使用“increase_sensitivity”元素。
说实话,我甚至不确定Schematron可以做到这一点,我对它的经验非常有限。
答案 0 :(得分:0)
假设您要查找其ID与foo id值匹配的value元素(在本例中为“red”),然后检查那里的位值,那么此Schematron架构显示了一种可行的方法:
<?xml version="1.0"?>
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:let name="root" value="/"/>
<sch:pattern>
<sch:rule context="increased_sensitivity">
<sch:let name="id" value="parent::*/@value_id"/>
<sch:let name="assoc-bits-value" value="$root//value[@id=$id]/@bits"/>
<sch:assert test="$assoc-bits-value = 16">When the increased_sensitivity element is used, a
corresponding value element must exist in the doucment with a bits value of
"16".</sch:assert>
</sch:rule>
</sch:pattern>
</sch:schema>