XQuery:组合序列

XQuery:组合序列,xquery,Xquery,我有一个相当简单的XQuery函数,它返回一系列ID declare function local:get-ids($param as xs:string) { ...do something... return $ids } 我要做的是组合返回值,如下所示: for $ids in local:get-ids("something") | fn:subsequence(local:get-ids("something else"), 5) let $s1 := ('a', 'b')

我有一个相当简单的XQuery函数,它返回一系列ID

declare function local:get-ids($param as xs:string) {
  ...do something...
  return $ids
}
我要做的是组合返回值,如下所示:

for $ids in local:get-ids("something") | fn:subsequence(local:get-ids("something else"), 5)
let $s1 := ('a', 'b')
let $s2 := ('a', 'c')

return ($s1, $s2)
但这不起作用。我得到一个错误,说其中一个ID不是节点。我可以单独运行每个序列,但是当我尝试组合它们时,它失败了。正确的方法是什么


谢谢>

xquery中没有嵌套序列,因此您可以像这样将两个序列连接在一起:

for $ids in local:get-ids("something") | fn:subsequence(local:get-ids("something else"), 5)
let $s1 := ('a', 'b')
let $s2 := ('a', 'c')

return ($s1, $s2)
结果将是('a','b','a','c'),因此在您的情况下,您可以执行以下操作:

for $ids in (local:get-ids("something"), fn:subsequence(local:get-ids("something else"), 5))

或者,您可以将其包装为一个不同的值(..),以仅获取不同的ID

您不需要声明本地:get-ids()函数的返回类型,但从错误消息判断,它返回的是字符串,而不是节点。union操作符仅对节点序列起作用;要组合值序列,可以使用逗号(如果不需要删除重复的值)或逗号,然后使用不同的值(如果需要):

你说的组合序列是什么意思?是否要将它们连接起来,执行集合并集(就像
|
对节点集所做的那样,再加上按文档顺序排序)或以更复杂的方式合并它们?