0

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 を直接指定すると、同じ動作になります。

4

2 に答える 2

2

あなたの問題は、DTD の 2 つの解釈の違いに由来します: あなたのものと仕様のもの:-)。IDREF は同じドキュメント内の ID を参照する必要がありますが、IDREF はドキュメント全体の要素を参照します。

私の提案は、その属性の IDREF の代わりに NMTOKEN を指定する独自のバージョンの DTD を作成し、それを使用して検証を実行することです。これにより、コンテンツが有効な xml ID 値になることが保証されます。

于 2008-10-22T01:18:53.233 に答える
0

これが役立つかどうかはわかりませんが、この回避策を試すことができますか?一時ファイルを作成し、すべてのXMLをマージして、検証を行います。

于 2008-10-06T12:11:25.667 に答える