“レベル”を変更するにはどうすればよいですかAntのXMLValidateタスクが提供する検証の方法

StackOverflow https://stackoverflow.com/questions/171097

  •  05-07-2019
  •  | 
  •  

質問

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をマージして、検証を行います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top