Difference between revisions of "Update Module"
Jump to navigation
Jump to search
m (Modified Examples Headline) |
|||
(7 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
− | This [[Module Library|XQuery Module]] | + | This [[Module Library|XQuery Module]] provides additional functions for performing updates and returning results in [[XQuery Update|updating expressions]]. |
=Conventions= | =Conventions= | ||
All functions in this module are assigned to the <code><nowiki>http://basex.org/modules/update</nowiki></code> namespace, which is statically bound to the {{Code|update}} prefix.<br/> | All functions in this module are assigned to the <code><nowiki>http://basex.org/modules/update</nowiki></code> namespace, which is statically bound to the {{Code|update}} prefix.<br/> | ||
+ | |||
+ | Except for [[#update:output-cache|update:output-cache]], all functions are ''updating'' and thus comply to the XQuery Update constraints. | ||
+ | |||
+ | =Updates= | ||
+ | |||
+ | ==update:apply== | ||
+ | |||
+ | {| | ||
+ | |- | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|update:apply|$function as function(*), $arguments as array(*))|empty-sequence()}} | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |The updating variant of [[XQuery 3.1#fn:apply|fn:apply]] applies the specified updating <code>$function</code> to the specified <code>$arguments</code>. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * Creates a new database with an initial document and adds a document to an existing database. | ||
+ | <pre class="brush:xquery"> | ||
+ | declare %updating function local:update( | ||
+ | $database as xs:string, | ||
+ | $path as xs:string, | ||
+ | $function as %updating function(item(), xs:string) as empty-sequence() | ||
+ | ) as empty-sequence() { | ||
+ | update:apply($function, [ $database, $path ]) | ||
+ | }; | ||
+ | local:update('new-db', 'doc.xml', db:create#2), | ||
+ | local:update('existing-db', 'doc.xml', db:add#2) | ||
+ | </pre> | ||
+ | |} | ||
+ | |||
+ | ==update:for-each== | ||
+ | |||
+ | {| | ||
+ | |- | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|update:for-each|$seq as item()*, $function as function(item()) as item()*)|empty-sequence()}} | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |The updating variant of [[Higher-Order Functions#fn:for-each|fn:for-each]] applies the specified updating <code>$function</code> to every item of <code>$seq</code>. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * Creates two databases: | ||
+ | <pre class="brush:xquery"> | ||
+ | let $names := ('db1', 'db2') | ||
+ | return update:for-each($names, db:create#1) | ||
+ | </pre> | ||
+ | |} | ||
+ | |||
+ | ==update:for-each-pair== | ||
+ | |||
+ | {| | ||
+ | |- | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|update:for-each-pair|$seq1 as item()*, $function as function(item()) as item()*)|empty-sequence()}} | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |The updating variant of [[Higher-Order Functions#fn:for-each-pair|fn:for-each-pair]] applies the specified updating <code>$function</code> to the successive pairs of items of <code>$seq1</code> and <code>$seq2</code>. Evaluation is stopped if one sequence yields no more items. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * Renames nodes in an XML snippets: | ||
+ | <pre class="brush:xquery"> | ||
+ | copy $xml := <xml><a/><b/></xml> | ||
+ | modify update:for-each-pair( | ||
+ | ('a', 'b'), | ||
+ | ('d', 'e'), | ||
+ | function($source, $target) { | ||
+ | for $e in $xml/*[name() = $source] | ||
+ | return rename node $e as $target | ||
+ | } | ||
+ | ) | ||
+ | return $xml | ||
+ | </pre> | ||
+ | |} | ||
+ | |||
+ | ==update:map-for-each== | ||
+ | |||
+ | {| width='100%' | ||
+ | | width='120' | '''Signatures''' | ||
+ | |{{Func|update:map-for-each|$map as map(*), $function as function(xs:anyAtomicType, item()*) as item()*|item()*}} | ||
+ | |- | ||
+ | | '''Summary''' | ||
+ | |The updating variant of {{Function|Map|map:for-each}} applies the specified {{Code|$function}} to every key/value pair of the supplied {{Code|$map}} and returns the results as a sequence. | ||
+ | |- | ||
+ | | '''Examples''' | ||
+ | | | ||
+ | * Inserts attributes into a document: | ||
+ | <pre class="brush:xquery"> | ||
+ | copy $doc := <xml/> | ||
+ | modify update:map-for-each( | ||
+ | map { | ||
+ | 'id': 'id0', | ||
+ | 'value': 456 | ||
+ | }, | ||
+ | function($key, $value) { | ||
+ | insert node attribute { $key } { $value } into $doc | ||
+ | } | ||
+ | ) | ||
+ | return $doc</pre> | ||
+ | |} | ||
=Output= | =Output= | ||
Line 17: | Line 119: | ||
|- | |- | ||
| '''Summary''' | | '''Summary''' | ||
− | |This function | + | |This function is a helper function for returning results in an updating expression. The argument of the function will be evaluated, and the resulting items will be cached and returned after the updates on the ''pending update list'' have been processed. As nodes may be updated, they will be copied before being cached. |
|- | |- | ||
| '''Examples''' | | '''Examples''' |
Revision as of 15:51, 12 December 2017
This XQuery Module provides additional functions for performing updates and returning results in updating expressions.
Contents
Conventions
All functions in this module are assigned to the http://basex.org/modules/update
namespace, which is statically bound to the update
prefix.
Except for update:output-cache, all functions are updating and thus comply to the XQuery Update constraints.
Updates
update:apply
Signatures | update:apply($function as function(*), $arguments as array(*))) as empty-sequence()
|
Summary | The updating variant of fn:apply applies the specified updating $function to the specified $arguments .
|
Examples |
declare %updating function local:update( $database as xs:string, $path as xs:string, $function as %updating function(item(), xs:string) as empty-sequence() ) as empty-sequence() { update:apply($function, [ $database, $path ]) }; local:update('new-db', 'doc.xml', db:create#2), local:update('existing-db', 'doc.xml', db:add#2) |
update:for-each
Signatures | update:for-each($seq as item()*, $function as function(item()) as item()*)) as empty-sequence()
|
Summary | The updating variant of fn:for-each applies the specified updating $function to every item of $seq .
|
Examples |
let $names := ('db1', 'db2') return update:for-each($names, db:create#1) |
update:for-each-pair
Signatures | update:for-each-pair($seq1 as item()*, $function as function(item()) as item()*)) as empty-sequence()
|
Summary | The updating variant of fn:for-each-pair applies the specified updating $function to the successive pairs of items of $seq1 and $seq2 . Evaluation is stopped if one sequence yields no more items.
|
Examples |
copy $xml := <xml><a/><b/></xml> modify update:for-each-pair( ('a', 'b'), ('d', 'e'), function($source, $target) { for $e in $xml/*[name() = $source] return rename node $e as $target } ) return $xml |
update:map-for-each
Signatures | update:map-for-each($map as map(*), $function as function(xs:anyAtomicType, item()*) as item()*) as item()*
|
Summary | The updating variant of map:for-each applies the specified $function to every key/value pair of the supplied $map and returns the results as a sequence.
|
Examples |
copy $doc := <xml/> modify update:map-for-each( map { 'id': 'id0', 'value': 456 }, function($key, $value) { insert node attribute { $key } { $value } into $doc } ) return $doc |
Output
update:output
Template:Mark: formerly db:output
.
Signatures | update:output($result as item()*) as empty-sequence()
|
Summary | This function is a helper function for returning results in an updating expression. The argument of the function will be evaluated, and the resulting items will be cached and returned after the updates on the pending update list have been processed. As nodes may be updated, they will be copied before being cached. |
Examples |
|
update:output-cache
Template:Mark: formerly db:output-cache
.
Signatures | update:output-cache() as item()*
|
Summary | Returns the items that have been cached by update:output. It can be used to check which items will eventually be returned as result of an updating function. This function is non-deterministic: It will return different results before and after items have been cached. It is e. g. useful when writing unit tests. |
Changelog
This module was introduced with Version 9.0.