2016-04-19 13 views
0

XSDアサーションでXSD 1.1バリデータとしてSaxon 9.6を使用することを考えました。 Saxonバリデータを使用して私自身のエラーメッセージ(デフォルトのものではない)を定義することは可能ですか?SaxonとXML Schema 1.1のカスタム検証メッセージ

+0

[net.sf.saxon.s9api.SchemaManager.getErrorListener()](http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/SchemaManager.html#getErrorListener ))と[setErrorListener()](http://www.saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/SchemaManager.html#setErrorListener(javax.xml.transform.ErrorListener)) – kjhughes

答えて

1

いくつかのメカニズムが考えられます。

まず、あなたはアサーションと確かに他の面に関連した独自のメッセージを定義することができます

http://www.saxonica.com/documentation/index.html#!schema-processing/extensions11/saxon.message

第二には、あなたはあなたがして変換することができますXMLレポートファイルにすべての検証メッセージを送ることができます。 Validateコマンドラインで-report:filename、またはs9api APIでSchemaValidator.setValidityReporting()を使用します。レポートファイルの形式は、saxon-resources.zipダウンロードファイルで利用可能なスキーマによって定義されます。

@kjhughesにより示唆されるようにあなたはErrorListenerを使用することができます - は、ErrorListenerに渡されたValidationExceptionオブジェクト内のエラー情報は非常に構造化された形態である - しかし、(a)のIは、B(XMLレポートが操作しやすいと思うし、 )検証では数百のエラーが報告され、ErrorListenerインターフェイスで必要な例外オブジェクトを作成するコストは全体の実行時間のかなりの部分になる可能性があることがわかりました。 Javaの例外は実際にはこの目的のために設計されていませんでした。

+0

saxon:メッセージは本当に素晴らしいですが、それはファセットだけに使用可能です。何らかの形で構造検証用のカスタムメッセージを定義することは可能ですか(cplxタイプなど)?ありがとう – Yuri

+1

いいえ、申し訳ありません。私はそれについて考えましたが、方法を見つけませんでした。問題は、複合型定義の一部とエラーメッセージの間に単純な対応がないことです。 Saxonは入力が複雑な型に対して無効であるときに本当に間違っていることを解決しようと努力しています。「X要素はここでは有効ではありませんが、名前空間Nの場合は有効です。 。 –

+0

はい、私はそう思った。 cplxの型定義とそれに関連するエラーメッセージとの間に接続を引き出す方法は簡単ではありません。とにかくありがとう! – Yuri

関連する問題