Hi Henning,

The XQuery Update specification does not allow users to mix updating
expressions and return data at the same time. The slides of Arve and
Sabine (see [1]) will give you some hints how updates are usually
performed in RESTXQ contexts. The slides are from 2013, and some
convenience functions have been added since then, but the basic
principle is the same as before. In a nutshell:

* Use db:output() to both return data and do updates [2];
* use web:redirect() to redirect to another success page [3];
* alternatively, activate the MIXUPDATES option in web.xml to disable
the XQuery Update restriction [4].

Hope this helps,
Christian

[1] http://files.basex.org/publications/xmlprague/2013.html
[2] http://docs.basex.org/wiki/Database_Module#db:output
[3] http://docs.basex.org/wiki/Web_Module#web:redirect
[4] http://docs.basex.org/wiki/XQuery_Update#Returning_Results


> declare
>   %rest:path("/start")
>   %updating
>   %output:method("xhtml")
>   %output:omit-xml-declaration("no")
>   %output:doctype-public("-//W3C//DTD XHTML 1.0 Transitional//EN")
>
> %output:doctype-system("http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";)
>   function page:hello()
>     as element(Q{http://www.w3.org/1999/xhtml}html)
> {
>   <html xmlns="http://www.w3.org/1999/xhtml";>
>     <title>Good day Sir!</title>
>     <link rel="stylesheet" href="static/w3.css"/>
>     <time>The current time is: { current-time() }</time>
> <body class="w3-container">
> <ul class="w3-navbar w3-green">
>   <li><a href="#">Home</a></li>
>   <li><a href="#">Link 1</a></li>
>   <li><a href="#">Link 2</a></li>
>   <li><a href="#">Link 3</a></li>
> </ul>
>   <ul>{
>     for $result in db:open('factbook')//continent/@name
>     return <li>{ data($result) }</li>
>   }</ul>
> <li>
> {
> db:create("test")
> }
> </li>
> </body>
>   </html>
>
>
> =========== File End  ================

Reply via email to