有没有办法按输入的位置范围对记录进行分组?

Is there a way to group records by position range in input?

有什么方法可以按位置范围对输入进行分组吗? 在我的例子中,我有一个使用多个字符串的函数。我需要按静态位置范围(1-3、4-6、7-9 等)对它们进行分组,然后在 for 循环中为每个组执行一些代码。 我不知道传递了多少个字符串。它可以根据输入而改变。

我已经尝试使用 for $x at $i in... 进行迭代,但无法正确完成

 declare function bs:concat-strings
   ( $multipleStringInput as item()+ )  {
     let $firstString := $multipleStringInput[position() = 1]
     let $secondString := $multipleStringInput[position() = 2]
     let $thirdString := $multipleStringInput[position() = 3]
     let $concat :=
                     concat(
                            $firstString, 
                            $secondString, 
                            $thirdString)
     return bs:next-function($concat)
  } ;

所以我的目标是将这多个字符串分成 3 个更小的变量,以便能够单独使用它们并像上面一样使用常量 [position() = 1]、[position() = 2] , [positon() = 3] 然后连接它们并将每个传递给下一个函数或以某种方式在每次迭代中更改位置 [1,2,3] -> [4,5,6]。

例如:

输入: 'Cat'、'likes'、'fish'、'Dog'、'likes'、'bones'

输出: bs:next-函数('Catlikesfish') bs:next-函数('Doglikesbones')

使用 tumbling window 子句 https://www.w3.org/TR/xquery-31/#id-windows 例如

for tumbling window $window in ('Cat', 'likes', 'fish', 'Dog', 'likes', 'bones')
start at $s when $s mod 3 = 1
return
  string-join($window)

要在每个项目上调用您的函数,请使用地图运算符 !:

(for tumbling window $window in ('Cat', 'likes', 'fish', 'Dog', 'likes', 'bones')
start at $s when $s mod 3 = 1
return
  string-join($window)
  )
  ! bs:next-function(.)