1

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の順序を見ても、どのファイルが要求されているかを推測できないことです。ファイルが要求されているコンテキストを正確に見つけるためのトリックはありますか?

4

1 に答える 1

2

変換を作成しているソースにはシステムIDがありますか?そうでない場合、これがURIリゾルバーでベースが常にnullである理由である可能性があります。

入力ストリームからトランスフォームを作成する場合は、システムIDをソースに手動で割り当てることができます。必要に応じて人工的なものを生成し、URIリゾルバーでその人工的なURIを使用して、ベースURIにマップし直すことができます。また、URIリゾルバーで作成するソースにもシステムIDがあることを確認してください。そうしないと、これらのファイルからインポートされたリソースで同じ問題が発生します。

于 2011-10-17T23:48:26.433 に答える