在XQuery 3.0(zorba)中,如何获得标记内部更新操作的结果

在XQuery 3.0(zorba)中,如何获得标记内部更新操作的结果,xquery,updating,zorba,Xquery,Updating,Zorba,我必须在一个请求中多次调用Xquery服务器才能启用事务行为。是这样的 declare namespace foo = "ns.bar.foo"; ( foo:call("toto"), foo:call("tata"), foo:call("titi")) 但如果我这样做,服务器就会返回 <?xml version="1.0" encoding="UTF-8"?> <call-result> 1 </call-result> <call-result

我必须在一个请求中多次调用Xquery服务器才能启用事务行为。是这样的

declare namespace foo = "ns.bar.foo";
( foo:call("toto"), foo:call("tata"), foo:call("titi"))
但如果我这样做,服务器就会返回

<?xml version="1.0" encoding="UTF-8"?>
<call-result> 1 </call-result>
<call-result> 2 </call-result>
<call-result> 3 </call-result>
它不是有效的XML文件,因为结果不在根标记内。 我的第一次尝试是

declare namespace foo = "ns.bar.foo";
<results> {( foo:call("toto"), foo:call("tata"), foo:call("titi"))} </results>
但是因为foo:call是一个更新表达式,所以它是不允许的。我看到的唯一一件事是在客户端修改接收到的XML,但这真的很糟糕。
我还可以在服务器端添加一个方法,比如foo:calls,但是foo:call已经可以使用序列作为参数,并且在xQuery中不能有序列序列。有什么建议吗?

Zorba如何在更新表达式中返回任何内容?根据规范,这实际上是不允许的,但许多处理器使用一些扩展来实现这一点。我想你可以在那里做,所以你可能想展示你的foo:call函数。而且,我看不出你第一次尝试失败的原因。当然,在基于规范的序列中有多个更新表达式是可能的。我想知道为什么Zorba中不允许这样做。我得出的结论是,在更新表达式中返回某些内容实际上不是一个好的做法。因此,我在foo:call之后用一个经典的reading表达式得到结果。不过,我可能会说,我不知道为什么,我以为修改会在事务结束时应用,因为已经进行了读取调用,所以为时已晚。看看您的实际代码会很有趣。您是正确的,因为XQuery Update的PUL,所有更新都是在读取操作之后执行的。我们通常使用转换表达式计算主内存中新的或更新的元素,然后将该元素放入数据库并返回它。我不会容忍这种坏习惯。