无法理解FLWOR表达式与insert和return语句的结合

时间:2016-06-15 17:55:22

标签: xquery updates basex flwor

在BaseX 7.7.2中使用XQuery,我想用一些变量值填充模板节点并将其插入到文档中,并且只返回新创建的节点,而不是我插入的上下文节点。

(: define an "auto-increment" id :)
let $nextId := if( exists( //company/id ) ) then max( //company/id ) + 1 else 1

(: fill the template node (a simplified example node) :)
let $company := <company><id>{ $nextId }</id></company>

(: insert the new node :)
return insert node $company into /companies

这很有效。但是,我不希望它返回/companies,而只是返回新节点$company

但是,如果我将查询更改为以下内容,则它不再起作用。

(: insert the new node; does not work :)
insert node $company into /companies

(: only return the newly created node :)
return $company

为什么在FLWOR语句中我不允许在返回内容之前执行中间更新操作?为什么FLWOR表达式中的返回语句是强制性的?

编辑:

在检查了这个XQuery grammar documentation后,似乎我根本不应该使用FLWOR表达式,而只需使用declare variable语句代替let }语句。但是,在这种情况下,我仍然不知道如何返回新创建的节点,如果显然返回一些内容而不使用FLWOR表达式,则可以开始。

默认情况下,任何更新语句(带或不带FLWOR)都会返回完整的文档作为结果。由于我希望这个文档在某些时候可能变得非常大,我不希望每次更新语句都通过网络发送它。

正如您所知,我很难理解XQuery语言中的更新/返回概念。我希望有人可以对这些问题有所了解。

0 个答案:

没有答案