XSDに対してXMLを検証するJavaコードがいくつかあります。http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.htmlにあるエラーハンドラーの修正バージョンを使用して、検証中にすべての例外をキャッチしてログに記録しています。
エラーは非常に簡潔で、次のようになります。
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:cID&{"http://www.myschema.com/schema":txn}
などの他のメッセージ
http://www.w3.org/TR/xml-schema-1#cvc-complex-type.2.4.a?s:attributes&{"http://www.myschema.com/schema":sequence}
さらに謎めいた。
ここで何が悪かったのかを説明するSAXから明確でわかりやすいメッセージを取得する簡単な方法はありますか?私は最初のエラーでそれが期待していたと思い、txn
代わりに要素を見つけましたcID
。しかし...SAXによって生成される可能性のあるすべてのエラーを把握しているわけではないので、手動で変換テーブルを作成しようとはしません。
この出力の最終的なユーザーはほとんど技術的ではないため、「要素txn
が順序どおりではありませんでした」などの単純で明確なメッセージを生成できる必要があります。
それが役立つ場合は、検証に使用されるコード(多かれ少なかれ)は次のとおりです。
Source schema1 = new StreamSource(new File("resources/schema1.xsd"));
Source schema2 = new StreamSource(new File("resources/schema2.xsd"));
Source[] sources = {schema1,schema2};
validator = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(sources).newValidator();
ErrorHandler lenient = new ForgivingErrorHandler();
validator.setErrorHandler(lenient);
他の場所...
StreamSource xmlSource = new StreamSource(new StringReader(XMLData) );
try
{
validator.validate(xmlSource);
}
catch (SAXException e)
{
logger.error("XML Validation Error: ",e);
}