任何人都可以告诉我什么是"元组"和"元组流"吗?这个XML文档中有多少个元组?我们如何列出本文档中的前三个元组?
<a>
<b>
<a/>
</b>
<c>
<b/>
</c>
</a>
Run Code Online (Sandbox Code Playgroud)
在XQuery规范中,这些术语专门用于描述FLWOR表达式的语义.由于您的示例不包含任何FLWOR表达式,因此不涉及任何元组.
请考虑对您的示例文档进行以下查询:
for $elem at $pos in /a//*
let $name := local-name($elem)
order by $name
return $pos
Run Code Online (Sandbox Code Playgroud)
第一个for子句发出四个元组的元组流,每次迭代一个.每个元组都包含一个绑定,用于在范围内的FLWOR表达式中声明的每个变量:
($elem = <b><a/></b>, $pos = 1),
($elem = <a/>, $pos = 2),
($elem = <c><b/></c>, $pos = 3),
($elem = <b/>, $pos = 4)
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)
该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')
Run Code Online (Sandbox Code Playgroud)
该return子句返回绑定的值$pos,因此FLWOR表达式的结果值为(2, 1, 4, 3)(或者(2, 4, 1, 3)如果order by不稳定).