2

我想cts:or-query在 for 循环中创建一个。我怎样才能做到这一点?

我的逻辑的一个例子:

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))

这将表现得像一个或查询,但会更有效率。请注意,我将您更改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 回答