2013-01-16 88 views
2

我最近開始使用schematron來驗證xml文檔。到目前爲止,我對它印象非常深刻,但我偶然發現了一條我無法正常工作的規則。Schematron有條件驗證

我在下面做了一個簡單的例子。

<iso:assert test="ns1:some-element/text() = 'false' and /ns1:same-other-element">Error message</iso:assert> 

基本上我想驗證兩件事情,如果ns1:some-element/text()包含「假」,ns1:same-other-element應該存在,並且驗證實際工作。然而,當ns1:some-element/text()包含非假的東西時,我不在乎天氣ns1:same-other-element是否存在。同其它元素缺失和ns1:some-element/text()值不是「假」

任何想法如何解決此問題:

此時,規則NS1時也會觸發?

回答

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具有的值是不是「假」,無論ns1:some-other-element是否存在這種情況將是如此。

+0

謝謝,這似乎確實是正確的路要走。現在我的規則按照我希望的方式工作。 – ErikL

+0

一個更簡單的等價條件就是:'ns1:some-element!='false'或/ ns1:same-other-element'。 – JLRishe