我最近开始使用schematron来验证xml文档。到目前为止,我对它印象非常深刻,但我偶然发现了一条我无法正常工作的规则。
我在下面做了一个简单的例子。
<iso:assert test="ns1:some-element/text() = 'false' and /ns1:same-other-element">Error message</iso:assert>
基本上我想验证两件事,如果ns1:some-element/text()
包含'false',ns1:same-other-element
应该存在,并且验证确实有效。但是,当ns1:some-element/text()
包含非虚假的内容时,我不关心天气ns1:是否存在相同的其他元素。
此时,当ns1:same-other-element缺失且ns1:some-element/text()
的值不是'false'时,规则也会触发
任何想法如何解决这个问题?
答案 0 :(得分:4)
您的测试需要评估为true才能通过验证(您正在制作关于某事的assertion)。您目前对您的条件说的是:ns1:some-element
的文本节点必须具有'false'的值,并且必须存在ns1:some-other-element
。还有别的错误。
您可能正在寻找的条件是
<iso:assert test="ns1:some-element = 'false' and /ns1:same-other-element or ns1:some-element != 'false'">Error message</iso:assert>
只要ns1:some-element
的值不为'false',无论是否存在ns1:some-other-element
,此条件都将为真。