これがドキュメント機能に関する私の質問です。
ドキュメント関数は、変換ごとに常に入力ファイルを読み取りますか? または、最初にメモリにロードし、後でメモリから読み取って連続的な変換を行いますか?
ここでこの質問をする理由は、変換中に常に値をチェックする非常に入力ファイルがあるからです。
これらの状況で最高のパフォーマンスを達成するにはどうすればよいですか?
XSLT 2.0 の関数の仕様はdocument
、単一の URL から XML を解析する詳細をXSLT/XPath/XQuerydoc
関数の仕様に委任します。解析されたドキュメントがキャッシュされるかどうかは指定されませんが、関数が安定している必要があります。絶対 URI 参照) が両方の呼び出しに提供されます. したがって、次の式 (エラーが発生しない場合) は常に true になります: doc("foo.xml") is doc("foo.xml")".
これは、同じドキュメントに複数回アクセスしたい場合には利点となる可能性がありますが、複数の大きなドキュメントをロードし、それらを破棄する手段がない場合には欠点となる可能性があります。
どの XSLT 2.0 プロセッサーを使用していますか? Saxon にはhttp://www.saxonica.com/documentation/index.html#!functions/saxon/discard-documentdocument('foo.xml')
があり、キャッシュされたドキュメントを明示的に破棄するため、またはの呼び出しdoc('foo.xml')
が通常キャッシュされていることが示唆されます。
関数を使用する場合document()
、ライブラリは、その関数を再度使用するかどうか、またはこれが一時的なアクセスであるかどうかを知る方法がありません。
ドキュメントを操作するときはいつでも、解析などを行う必要がありますが、これには比較的時間がかかります。ドキュメントを何度も再読み込みして再解析するオーバーヘッドを回避するために、ライブラリは「変換コンテキスト」の一部として「ドキュメント リスト」を維持します。アクセスされたドキュメントの解析済みイメージがこのリストに追加され、変換コンテキストが解放された場合にのみリストが (それが参照するドキュメントと共に) 解放されます。