Ant の XSLT タスクを介していくつかの XSL 変換を実行しています。プロセッシングエンジンにはSaxon 9HEを使用しています。入力 XML ファイルがすべて同じ DTD を使用しているが、それを別の場所で宣言しているという状況があります。現在のディレクトリにあると宣言するものもあれば、フォルダーにあるものもあれば、URL を参照するものもあります。Ant スクリプトは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<project name="PubXML2EHeader" default="transform">
<property name="data.dir.input" value="./InputXML"/>
<property name="data.dir.output" value="./converted-xml"/>
<property name="xslt.processor.location" value="D:\\saxon9he.jar"/>
<property name="xslt.processor.factory" value="net.sf.saxon.TransformerFactoryImpl"/>
<path id="saxon9.classpath" location="${xslt.processor.location}"/>
<target name="clean">
<delete dir="${data.dir.output}" includes="*.xml" failonerror="no"/>
</target>
<target name="transform" depends="clean">
<xslt destdir="${data.dir.output}"
extension=".xml"
failOnTransformationError="false"
processor="trax"
style="Transform.xsl"
useImplicitFileset="false"
classpathref="saxon9.classpath"
>
<outputproperty name="method" value="xml"/>
<outputproperty name="indent" value="yes"/>
<fileset dir="${data.dir.input}" includes="**/*.xml" excludes="Transform.xml"/>
<factory name="${xslt.processor.factory}"/>
</xslt>
</target>
</project>
この Ant スクリプトを実行すると、次のようなエラーが発生します。
[xslt] : 致命的なエラー! XML パーサー処理ファイルによって報告された I/O エラー:/D:/annurev.biophys.093008.131228.xml: http://www.atypon.com/DTD/nlm-dtd/archivearticle.dtd原因: java.io.FileNotFoundException: http://www.atypon.com/DTD/nlm-dtd/archivearticle.dtd
これらは、Saxon が DTD にアクセスできないことが原因であると思います (この場合、実際にはファイアウォールの問題です)。ここで起こっていると思う入力の検証は気にしないので、スキップしたいと思います。XSLT Ant タスクに追加して、Saxon が DTD を読み込もうとするのを止めることができる属性はありますか?