2015-10-08 35 views
2

我一直在使用XML Schema 1.1,因爲我想在模式中定義一些斷言。問題是我是否可以將任何斷言錯誤作爲簡單的警告處理。XSD斷言違規是警告而不是錯誤?

原因是任何不一致都會在我的網站上自動處理,所以我想通知用戶做了哪些更改。

也許有一個合適的選擇來「斷言」,我不知道。

回答

1

不,XSD沒有這種警告的概念,並且不直接支持關於約束違規的用戶控制消息。

您可以看看Schematron,其中可以指定斷言消息和@role@flag屬性。每OP評論


更新:

是的,你可以寫一個自定義的SAX錯誤處理程序以攔截和更改驗證解析器的默認錯誤消息。 (請參閱Tip: Validation and the SAX ErrorHandler interface)但是,這不會在XSD本身聲明式地表示自然表示,除非您還以某種創造性的方式利用xsd:appinfo

+0

謝謝你的回答。不幸的是,Schematron不是一個選項......如果在java級別處理這些斷言錯誤作爲警告呢? – unicorn

+0

答案已更新,以解決有關在Java級別控制驗證錯誤的後續問題。 – kjhughes

0

無效文檔是否是錯誤或警告的原因不是模式的功能;它由確認者和確認者的調用者確定。

默認情況下,大多數驗證器都假定它們應該在無效輸入上產生錯誤,但沒有什麼要求這種行爲。您正在使用的驗證器可能有一個調用時間選項,允許您請求警告,或者如果您是從像Java這樣的語言調用解析器,那麼您當然可以自己捕獲異常。您幾乎可以肯定地通過檢查驗證器提供的錯誤代碼來確定無效的原因是否是錯誤的斷言。

如果您是任何驗證器的用戶(特別是如果您是付費客戶),則可以考慮讓開發人員知道您希望驗證器的界面行爲不同;很明顯,他們永遠不會知道你是否不告訴他們。

相關問題