Changes

Jump to navigation Jump to search
933 bytes added ,  15:04, 26 August 2018
It summarizes the update features of BaseX.
BaseX offers a complete implementation of the[http://www.w3.org/TR/xquery-update-10/ XQuery Update Facility (XQUF)].This article aims to provide a very quick and basic introduction to the XQUF.First, some examples for update expressions are given. After that,a few problems the challenges are addressed that frequently arise due to the nature functional semantics of thelanguage. These are stated in the [[Update#Concepts|Concepts]] paragraph.
=Features=
==Non-Updating Expressions==
===transformcopy/modify/return===
<pre class="brush:xquery">
===update===
 
The {{Code|update}} expression is a BaseX-specific convenience operator for the {{Code|copy/modify/return}}
construct:
 
* Similar to the [[XQuery 3.0#Simple Map Operator|XQuery 3.0 map operator]], the value of the first
expression is bound as context item, and the second expression performs updates on this item.
The updated item is returned as result:
<pre class="brush:xquery">
</pre>
* More than one node can be specified as source: <pre class="brush:xquery">db:open('data')//item update delete node text()</pre> * If wrapped with curly braces, update expressions can be chained: <pre class="brush:xquery"><root/> update { insert node <child/> into .} update { insert node "text" into child}</pre> ===transform with=== The {{Code|updatetransform with}} expression is a convenience operator for writing simple transform expressions.Similar was added to the current [[XQuery 3https://www.w3.0org/TR/xquery-update-30/#Simple Map Operator|id-transform-with XQuery Update 3.0 map operator]], the value working draft. It is a simple version of the first[[#update|update]] expression is bound as context item, and the second expression performs updates on this item.The updated item is returned as result.also available in BaseX:
Please note that <pre class="brush:xquery"><xml>text</xml> transform with {{Code|update}} is not part replace value of the official XQuery Update Facility yetnode .with 'new-text'It is currently being discussed in the [https:}<//www.w3.org/Bugs/Public/show_bug.cgi?id=23643 W3 Bug Tracker];your feedback is welcome.pre>
==Functions==
===Built-in Functions== {{Code|fn:put()}} is can be used to serialize XDM instances to secondary storage. It is executed at the end of a snapshot. Serialized documents therefore reflect all changes made effective during a query.=
Additional [[Database Module#Updates{{Code|database functions]] exist for performing updates on document and database level.fn:put()}} is can be used to serialize XDM instances to secondary storage:
==User* The function will be executed after all other updates.* Serialized documents therefore reflect all changes made effective during a query.* No files will be created if the addressed nodes have been deleted.* Serialization parameters can be specified as third argument (more details are found in the [https://www.w3.org/TR/xquery-Defined Functions==update-30/#id-func-put XQUF 3.0 Specification]).
To use updating expressions within a user-defined or anonymous function, the {{CodeNumerous additional [[Database Module#Updates|%updating}} annotation has to be added before the {{Code|function}} keyworddatabase functions]] exist for performing updates on document and database level. A correct declaration of a function that contains updating expressions (or one that calls updating functions) looks like this:
<pre class="brush:xquery">declare %updating function { ... }</pre>==User-Defined Functions===
If an updating function item is called, the function call must be prefixed with the keyword {{Code|updating}}. This ensures that the query compiler can statically detect if an invoked function item will perform updates or not:
let $node := <node>TO-BE-DELETED</node>
let $delete-text := %updating function($node) {
delete node $node//text()
}
return $node update (
)
</pre>
 
As shown in the example, user-defined and anonymous functions can additionally be annotated as {{Code|%updating}}.
=Concepts=
==Pending Update List==
The most important thing to keep in mind when using XQuery Update is the Pending Update List (PUL). Updating statements are not executed immediately, but are first collected as update primitives within a set-like structure. At After the end evaluation of a the query, and after some consistency checks and optimizations, the update primitives will be applied in the following order:
* '''Backups (1)''': {{Code|db:create-backup()}}
By default, it is not possible to mix different types of expressions in a query result. The outermost expression of a query must either be a collection of updating or non-updating expressions. But there are two ways out:
* The BaseX-specific <code>[[Database Update Module#dbupdate:output|dbupdate:output()]]</code> function bridges this gap: it caches the results of its arguments at runtime and returns them after all updates have been processed. The following example performs an update and returns a success message:
<pre class="brush:xquery">
dbupdate:output("Update successful."), insert node <c/> into doc('factbook')/mondial
</pre>
=Error Messages=
Along with the Update Facility, a number of new error codes and messages have been addedto the specification and BaseX. All errors are listed in the[[XQuery Errors#Update Errors|XQuery Errors]] overview. Please remember that the collected updates will be executed after the query evaluation. All logical errors will be raised before the updates are actually executed.
=Changelog=
 
;Version 9.0
* Updated: [[#Built-in Functions|Built-in Functions]]: serialization parameters
 
;Version 8.5
* Added: [[#transform with|transform with]]
* Updated: [[#update|update]] was extended.
;Version 8.0
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu