任何人都可以告诉我什么是"元组"和一个"元组流"?这个XML文档中有多少个元组?我们如何列出本文档中的前三个元组?
<a>
<b>
<a/>
</b>
<c>
<b/>
</c>
</a>
答案 0 :(得分:9)
在XQuery规范中,这些术语专门用于描述FLWOR expressions的语义。由于您的示例不包含任何FLWOR表达式,因此不涉及任何元组。
在您的示例文档中考虑以下查询:
for $elem at $pos in /a//*
let $name := local-name($elem)
order by $name
return $pos
第一个for
子句发出四个元组的元组流,每次迭代一个。每个元组都包含一个绑定,用于在范围内的FLWOR表达式中声明的每个变量:
($elem = <b><a/></b>, $pos = 1),
($elem = <a/>, $pos = 2),
($elem = <c><b/></c>, $pos = 3),
($elem = <b/>, $pos = 4)
let
子句然后为每个元组添加$name
的绑定,发出以下流:
($elem = <b><a/></b>, $pos = 1, $name = 'b'),
($elem = <a/>, $pos = 2, $name = 'a'),
($elem = <c><b/></c>, $pos = 3, $name = 'c'),
($elem = <b/>, $pos = 4, $name = 'b')
order by
子句最终获取传入流,并根据绑定到$name
的值重新排序元组。流看起来像这样:
($elem = <a/>, $pos = 2, $name = 'a'),
($elem = <b><a/></b>, $pos = 1, $name = 'b'),
($elem = <b/>, $pos = 4, $name = 'b'),
($elem = <c><b/></c>, $pos = 3, $name = 'c')
return
子句返回绑定到$pos
的值,因此FLWOR表达式的结果值为(2, 1, 4, 3)
(如果(2, 4, 1, 3)
为order by
,则为{{1}}不稳定)。