您好,我有一个la脚的问题,虽然找不到答案。

如果我使构造函数的括号无效,会发生什么?

例如

{data(doc("somedata.xml")//node[0])}

我的意思是,我知道会发生什么,但是解析时认为是什么?

像吗?
{
    for $i in "0"
    return
    data(doc("somedata.xml")//node[0])
}

最佳答案

一个普遍的误解是,任何XQuery都是FLWOR表达式。当人们从SQL角度看待XQuery并将其视为SELECT时,就会出现这种误解。

实际上并非如此。 FLWOR表达式在许多方面只是另一个表达式。可能FLWOR表达式作为SQL表达式执行,但这不是必须的。

XQuery可以被视为一种功能编程语言(例如Haskell),它碰巧具有一些声明性构造(例如where和order by)。

表达式1+2只是一个将数字1和2相加的XQuery表达式,不需要在其周围有隐式的FLWOR表达式。

如果要在完全基于元组的代数中考虑XQuery,则可以将输入视为单个空元组。我的意思是:

看一下这个查询:

for $x in ...
for $y in ...
where $x/@name=$y/@name
return $x

如果您在基于元组的代数中考虑这一点,则for表达式的输入将是定义$x$y的元组流。很明显,这与数据库查询有何关系。这对应于具有两列$x$y的表,以及每对具有相同名称的行。

您可以考虑以下查询
//foo

因为对没有值的单个元组进行操作。这有点像没有fors或let的FLWOR表达式(如果允许的话,只是一个返回表达式)。在关系域中,这将是一个没有列和一行的表。但是,这只是一个逻辑抽象,大多数(如果不是全部)XQuery实现将其表示为一个表达式。

关于xquery - 不带FLWOR的xquery括号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1852480/

10-12 12:33