在XQuery中是否存在“按优先级连接”等效项?

在XQuery中是否存在“按优先级连接”等效项?,xquery,basex,connect-by,Xquery,Basex,Connect By,我使用的是BaseX,它支持XQuery 3.0 假设我有一个这样的数据集,按的值排序: 1. 2. 2. 4. 5. 6. 我希望通过端点和起点值连接这些元素,并将连接元素分组在一起: <block> <start>1</start> <end>4</end> </block> <block> <start>5</start> <end>6</end

我使用的是BaseX,它支持XQuery 3.0

假设我有一个这样的数据集,按
的值排序:


1.
2.
2.
4.
5.
6.
我希望通过端点和起点值连接这些元素,并将连接元素分组在一起:

<block>
  <start>1</start>
  <end>4</end>
</block>
<block>
  <start>5</start>
  <end>6</end>
</block>

1.
4.
5.
6.

在Oracle中,我们可以使用
connectbyprior
执行类似的操作。我们如何在XQuery中做到这一点?

您可以使用翻滚窗口实现此行为,该窗口允许您根据元素跨度上的条件进行分组。滑动和翻滚窗口需要BaseX支持的XQuery 3.0

let $items := (
  <element>
    <start>1</start>
    <end>2</end>
  </element>,
  <element>
    <start>2</start>
    <end>4</end>
  </element>,
  <element>
   <start>5</start>
   <end>6</end>
  </element>
)
for tumbling window $window in $items
  start $start when fn:true()
  only end $end next $next when not(
  $end/end eq $next/start
)
return <block>{
  $start/start,
  $end/end
}</block>
let$items:=(
1.
2.
,
2.
4.
,
5.
6.
)
用于翻滚窗口$窗口中的$项目
当fn:true()时启动$start
仅结束$结束下一个$下一个,如果没有(
$end/end eq$next/start
)
返回{
$start/start,
$end/end
}

您已经看过XQuery 3.0了吗?@ChristianGrün,没有。谢谢你的提示,我来看看。太好了。再次感谢。只需添加一点…这同样有效:
start$start when fn:true()end$end when$start/end eq$end/start
let $items := (
  <element>
    <start>1</start>
    <end>2</end>
  </element>,
  <element>
    <start>2</start>
    <end>4</end>
  </element>,
  <element>
   <start>5</start>
   <end>6</end>
  </element>
)
for tumbling window $window in $items
  start $start when fn:true()
  only end $end next $next when not(
  $end/end eq $next/start
)
return <block>{
  $start/start,
  $end/end
}</block>