2

cts:or-queryfor ループ内にを作成したい。これどうやってするの?

私のロジックの例:

let $query := for $tag in (1,2,3,4,5)
return myquery

次のような最終クエリを取得したいと思います。

let $query := cts:or-query(
    (
    cts:element-query(xs:QName("ts:tag"),'1'),
    cts:element-query(xs:QName("ts:tag"),'2'),
    cts:element-query(xs:QName("ts:tag"),'3'),
    cts:element-query(xs:QName("ts:tag"),'4'),
    cts:element-query(xs:QName("ts:tag"),'5')
    )
)
4

2 に答える 2

6

この特定の例では、shotgun-OR を記述する方が適切です。

cts:element-value-query(xs:QName("ts:tag"), xs:string(1 to 5))

これは or クエリのように動作しますが、もう少し効率的です。cts:element-query要素値クエリに変更したことに注意してください。それはあなたが望むものかもしれませんし、そうでないかもしれませんが、各クエリ用語はできるだけ正確でなければなりません。

FLWOR 式を使用してクエリを生成することもできます。これは、前の手法が役に立たない and-query セマンティクスに役立ちます。

let $query := cts:and-query(
  for $i in ('dog', 'cat', 'rat')
  return cts:word-query($i))
return cts:search(collection(), $query)[1 to 20]
于 2012-09-18T19:02:56.800 に答える
0

これはうまくいきます:

let $query := cts:or-query(
  for $val in ('1', '2', '3', '4', '5')
  return cts:element-query(xs:QName("ts:tag"), $val)
)

FLWOR ループは一連の cts:element-query を返します。

于 2012-09-18T20:17:21.313 に答える