6

XSL 変換で同じファイルが複数回インポートされると、常に警告がスローされます。通常、次のようなものですStylesheet module file:/Users/blake/Documents/workspace/course-connect-parent/course-connect-publisher/src/main/xsl/config.xsl is included or imported more than once. This is permitted, but may lead to errors or unexpected behavior

ただし、複数の「子」xsl 呼び出し (たとえば、重要な関数を含む util.xsl) によって同じ xsl をインポートする必要がある場合、この状況は避けられないようです。

これらの警告を回避する方法、またはより良い方法はありますか?

問題の設定は次のとおりです。

FILE_A.xsl

imports FILE_B.xsl and FILE_C.xsl
uses functions/parameters from util.xsl, which it gets from FILE_B.xsl & FILEC.xsl
calls templates in FILE_B.xsl
calls templates in FILE_C.xsl

FILE_B.xsl

imports util.xsl
contains templates used by FILE_A.xsl
uses functions/parameters from util.xsl

FILE_C.xsl

imports util.xsl
contains templates used by FILE_A.xsl
uses functions/parameters from util.xsl

util.xsl

Contains functions/variables used by FILE_A, FILE_B, FILE_C
4

2 に答える 2

10

これらのメッセージは、Saxon の最近のリリースによって生成されます。同じファイルを複数回インポートしてもエラーにはなりませんが、一部のプロセッサ (Saxon の以前のリリースを含む) では非常に非効率的です。これも不要であり、コードのデバッグが非常に困難になる可能性があります。基本的には、同じテンプレート ルールの複数のインスタンスが異なる優先順位で存在することを意味します。

XSLT では、他の言語とは異なり、モジュールが依存するすべてのものをインポートする必要はありません。スタイルシート内の任意の場所に 1 つのインポートのみが必要です。A.xsl が util.xsl を使用していて、多くの場所で A.xsl を再利用したい場合、A.xsl が import または include 宣言を使用して依存関係を宣言すると便利であることは十分に真実です。 xsl も util.xsl を使用すると、この複数のインポートの状況が発生します。

2 つのインシデントのためにメッセージを追加しました: 1 つは xsl:next-match から完全に奇妙な効果を得ていたユーザー、もう 1 つは 1 つのモジュールが約 100,000 の異なるルートによって組み合わせでインポートされたために病理学的に悪いコンパイル時のパフォーマンスを得ていたユーザーです。したがって、約 100,000 の異なるインポートの優先順位で。このような問題が発生すると、二度と起こらないようにしようとする傾向が常にあり、警告はそれに対応するものでしたが、健康と安全に関する警告と同様に、いつバランスが正しいかを知ることは困難です. すべてが正常に機能している場合はいつでも警告を無視できます。本当に必要な場合は、ErrorListener でメッセージをフィルター処理することにより、いつでも警告を抑制することができます。

于 2012-04-11T08:19:22.137 に答える
2

そのコレクション内のスタイルシートのみを使用する場合、つまり FILE_C.xsl を自立した最上位スタイルシートとして使用しない場合は、単純に utils.xsl のインポートを取り出すことができます。インポートにはグローバル スコープがあるため、FILE_C.xsl 内のテンプレートはインポート ツリーの上位にインポートされている場合でも、utils.xsl のテンプレートを「参照」します。utils.xsl は 1 回だけインポートされ、警告が表示されます。

または、そのままにしておくこともできます。これはエラーではなく、システムがエラー以外で煩わされることはありません。それはどの XSLT システムですか? おそらく、警告の攻撃性を下げるオプションがありますか?

于 2012-04-11T00:07:19.243 に答える