您好,我有一个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/