我是schematron的新手, 尝试编写一个断言,以验证@test节点的@Origin和@end的值,其范围为@Origin和'bases的@end
我尝试了以下断言,但是它不起作用。
<sch:rule context="test">
<sch:assert test="End[*]/@value > ancestor::bases/bound/End/@value and Origin[*]/@value < ancestor::bases/bound/Origin/@value " >values are within range. </sch:assert>
</sch:rule>
<tests_root>
<bases>
<bound x="-276.724" xEnd="-276.193">
<Origin value="1"/>
<End value="20"/>
</bound>
</bases>
<tests>
<test x="-276.724" xEnd="-276.193">
<Origin value="1"/>
<End value="2"/>
</test>
<test x="-276.193" xEnd="-260.29">
<Origin value="2"/>
<End value="5"/>
</test>
<test x="-260.29" xEnd="-240.194">
<Origin value="5"/>
<End value="10"/>
</test>
<test x="-240.194" xEnd="-220.046">
<Origin value="10"/>
<End value="19"/>
</test>
<test x="-220.046" xEnd="-200.09">
<Origin value="19"/>
<End value="20"/>
</test>
</tests>
</tests_root>
答案 0 :(得分:0)
在您的Schematron中有些事情是不正确的,主要是ancestor::bases/bound/End/@value
与任何节点都不匹配,因为<bases>
不是不是{{1的祖先}}。使用<test>
将检索您想要的值。
然后,您似乎以相反的方式实现了/tests_root/bases/bound/End/@value
规则(并且不完整,因为您没有测试Origin和End的绑定值)。提醒:
<sch:assert>
将发出一条消息; assert
将发出一条消息。作为提示,您可以使用report
来提高代码的可读性:
这是我实现控件的方式:
<sch:let>