Ant の XMLValidate タスクを使用して、DTD に対して XML ドキュメントを検証しようとしています。問題は、それが機能しないことではなく、機能しすぎることです。私の DTD には、タイプ IDREF の「@linkend」属性を持つ xref 要素が含まれています。これらの参照 ID のほとんどは、現在のドキュメントの外部にあります。このため、IDREF が参照している ID が存在しないとパーサーが文句を言うため、私のビルドは失敗します。では、XML ドキュメントを DTD に照らして検証し、この種のエラーを無視する方法はありますか?
私が試したいくつかのこと: 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 を直接指定すると、同じ動作になります。