0

2つの異なる名前空間からのドキュメントを対象とする複雑なXQuery式を生成するライブラリを作成しています。ただし、クエリを生成するとき、クエリする必要のある各要素の特定の名前空間がわからないため、現在、2つの可能な組み合わせの論理和を生成しています。

// * [ns1:foo / ns1:bar = "何らかの条件"またはns2:foo / ns2:bar="何らかの条件"]

この式をパフォーマンスの観点からより適切かつ最適に生成する方法はありますか?

私が見つけた1つの可能な解決策は、以下を使用することです。

デフォルトの要素名前空間「*」を宣言します

その場合、私は単純に以下を生成することができます:

// * [foo / bar="何らかの条件"]

ただし、2つの可能な名前空間を列挙できず、代わりにワイルドカードを使用できるため、パフォーマンスのオーバーヘッドが増える可能性があります。

4

1 に答える 1

0

入力ソースの 2 つのバリアントを処理するクエリを作成する必要がある場合の私の通常のアプローチは、最初に入力を正規化して変動を排除するフェーズを設けてから、正規化された入力に対してメイン クエリを実行することです。

これの利点の 1 つは、正規化ステップが再利用可能であることです。これは、後で実行したい処理に使用できます。

(すべての名前空間 URI を変更しながらドキュメントをコピーすること、または実際にそのようなアルゴリズム変換を行うことは、XQuery よりも XSLT の方が簡単ですが、本当に必要な場合は XQuery で行うことができます。)

于 2013-03-12T18:32:47.703 に答える