質問
私はいくつかのSchematronのアサートを作成しましたが、それらはすべて私のXMLインスタンスに対して正常に実行されています。ただし、エラーメッセージの出力をそのような方法で構成したいと思います。これにより、後でJavaを使用してそれらをポストプロセスできます。
私のアサーションエラーメッセージの出力はあるはずです
<error>
<errorMessage>My error message</errorMessage>
<violatingElement>The violating element</violatingElement>
</error>
ただし、次のような構成要素
<pattern>
<rule context="/p1:Document/p1:Delivery/p1:DeliveryDetails/p1:ShippingDate">
<report test=".">
<error>
<errorMessage>My error message</errorMessage>
<violatingElement>The violating element</violatingElement>
</error>
</report>
</rule>
</pattern>
動作しません。スキーマトロンを返す正しい方法は何ですか?
解決
実際、XMLとしてSchematronレポートを取得するには、SVRLを使用する必要があります。あなたはそれについてもっとここで学ぶことができます: スキーマトロン検証レポート言語(SVRL)
SVRLを使用することの大きな利点は、アサーション/レポートがXPathとしてトリガーされた場所に関する詳細情報を取得できることです。
他のヒント
Schematron by Designは、主張と報告の内容を自然言語のみとして保持したいと考えています。標準(利用可能 ここ)より豊富な情報のために診断要素の使用を奨励します。それは次のように述べています:
自然言語のアサーションには、期待値に加えて実際の値に関する情報が含まれている場合があり、診断情報が含まれている場合があります。ただし、ユーザーは、自然言語の主張に関する明確な声明を促進するために、そのような情報の診断要素が提供されていることに注意する必要があります。
診断メッセージはに含まれていますu003Cdiagonstic>要素(aに包まれていますu003Cdiagnostics>ラッパー)およびID/IDREFメカニズムを使用したレポートおよびアサーションに関連付けられています。
標準の付録Gでの診断の使用を示す例があります。
また、XSL StyleSheetではなくネイティブスキマトロンエンジンを活用して、アサーションが満たされているかどうかを決定することもできます。私は.net / c#のために1つで働いています ここ.