Java /Xalanとhttps://sourceforge.net/projects/docbook/files/docbook-xsl/1.76.1/の公式DocbookXSLファイルとローカルxslを組み合わせて、DocbookXSLをHTMLに変換しようとしています。いくつかのカスタマイズとオーバーライドを提供するファイル。
アプリケーションが外部リソースをダウンロードしたり、ローカルファイルにアクセスしたりする必要がないようにしたい。そこで、URIResolverインターフェースを拡張するクラスを実装しました。
問題は、resolve(final String href, final String base)
関数が要求されている特定のファイルを識別するのに十分な情報を提供していないことです。
たとえば、ローカルオーバーライドファイルの1つは、を使用してxslファイルからインポートされます<xsl:import href="../../../xsl/html.xsl"/>
。この場合、リゾルバークラスのhrefパラメーターは../../../xsl/html.xslに設定されています。これは問題ありません。次に、html.xslファイルはdefaults.xslというファイルをインポートします。hrefパラメーターはdefaults.xslのみに設定され、baseパラメーターはnullに設定されます。
これに続いてhttp://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xslがインポートされる場合があります。この場合、hrefパラメーターはhttp://docbook.sourceforge.net/releaseに設定されます。 /xsl/current/xhtml/docbook.xsl。ただし、docbook.xslがdefaults.xslというファイルをインポートする場合、hrefパラメーターもdefaults.xslに設定され、baseはnullに設定されます。
問題は、hrefパラメーターとbaseパラメーターがリソースを一意に識別せず、前のhrefの順序を見ても、どのファイルが要求されているかを推測できないことです。ファイルが要求されているコンテキストを正確に見つけるためのトリックはありますか?