“レベル”を変更するにはどうすればよいですかAntのXMLValidateタスクが提供する検証の方法
質問
AntのXMLValidateタスクを使用して、DTDに対してXMLドキュメントを検証しようとしています。問題は、機能しないことではなく、うまく機能することです。 DTDには" @ linkend"を持つxref要素が含まれています。タイプIDREFの属性。これらの参照IDのほとんどは、現在のドキュメントの外部にあります。このため、IDREFが参照しているIDが存在しないとパーサーが不満を言うので、ビルドは失敗します。だから、DTDに対してXML文書を検証する方法はありますが、このタイプのエラーを無視しますか?
私が試したいくつかのこと:" lenient"の設定XMLValidateのオプションにより、タスクはドキュメントの整形式のみをチェックし、DTDに対する妥当性はチェックしません。 AntマニュアルのXMLValidateタスクには、設定可能なJAXPおよびSAXオプションがリストされています。 、しかし該当するものはないようです。
ここに私のコードがあります:
<target name="validate">
<echo message="Validating ${input}"/>
<xmlvalidate file="${input}" failonerror="yes"
classname="org.apache.xml.resolver.tools.ResolvingXMLReader">
<classpath refid="xslt.processor.classpath"/>
</xmlvalidate>
</target>
ご覧のとおり、ResolvingXMLReaderを使用して、公開識別子のカタログに対してDTDを解決しています。ただし、ネストされたxmlcatalog要素を使用してDTDを直接指定した場合も、同じ動作になります。
解決
あなたの問題は、DTDの2つの解釈の違いに由来します:あなたのものと仕様 :-)。 IDREFは同じドキュメント内のIDを参照する必要がありますが、IDREFはドキュメント全体の要素を参照します。
私の提案は、その属性にIDREFの代わりにNMTOKENを指定するDTDの独自のバージョンを作成し、それを使用して検証を実行することです。これにより、コンテンツが有効なxml id値になります。
他のヒント
これが役立つかどうかはわかりませんが、この回避策を試すことができますか? 一時ファイルを作成し、すべてのXMLをマージして、検証を行います。