XQuery Module

From BaseX Documentation
Revision as of 16:43, 17 December 2013 by CG (talk | contribs) (→‎xquery:evaluate)
Jump to navigation Jump to search

This XQuery Module contains functions for evaluating XQuery strings and modules at runtime.

Conventions

All functions in this module are assigned to the http://basex.org/modules/xquery namespace, which is statically bound to the xquery prefix.
All errors are assigned to the http://basex.org/errors namespace, which is statically bound to the bxerr prefix.

Functions

xquery:eval

Signatures xquery:eval($query as xs:string) as item()*
xquery:eval($query as xs:string, $bindings as map(*)) as item()*
Summary Evaluates $query as XQuery expression at runtime and returns the resulting items.
The evaluated query has its own query context. If a returned node is stored in a database, a main-memory copy will be returned as result, because the referenced database is closed after query execution and will not be accessible anymore.
Variables and context items can be declared via $bindings. The specified keys must be QNames or strings, the values can be arbitrary item sequences:
  • variables specified as QNames will be directly interpreted as variable name.
  • variables specified as xs:string may be prefixed with a dollar sign. Namespace can be specified using the Clark Notation.
  • If the specified string is empty, the value will be bound to the context item.
Errors BXXQ0001: the query contains updating expressions.
FOTY0013: the expression yields function items.
Examples
  • xquery:eval("1+3") returns 4.
  • You can bind the context and e.g. operate on a certain database only:
xquery:eval("//country", map{ '' := db:open('factbook') })
  • The following expressions use strings as keys. All of them return 'XML':
xquery:eval(".", map{ '' := 'XML' })
xquery:eval("$xml", map{ 'xml' := 'XML' }),
xquery:eval("$xml", map{ '$xml' := 'XML' }),
xquery:eval("declare namespace pref='URI'; $pref:xml", map{ '{URI}xml' := 'XML' }),
  • The following expressions use QNames as keys. All of them return 'XML':
declare namespace pref = 'URI';
xquery:eval("$xml", map{ xs:QName('xml') := 'XML' })
xquery:eval("declare namespace pref='URI'; $pref:xml", map{ xs:QName('pref:xml') := 'XML' }),

xquery:evaluate

Template:Mark

Signatures xquery:evaluate($query as xs:string) as item()*
xquery:evaluate($query as xs:string, $bindings as map(*)) as item()*
Summary Evaluates $query as XQuery expression at runtime and returns the resulting items.
The function differs from xquery:eval in two ways:
  • All items will be directly returned and not duplicated. This way, queries will be evaluated faster, and database nodes will retain their node identity.
  • In exchange, it is not possible to open new databases.
Errors BXXQ0001: the query contains updating expressions.
BXXQ0002: the addressed database cannot be opened.
FOTY0013: the expression yields function items.

xquery:invoke

Signatures xquery:invoke($uri as xs:string) as item()*
xquery:invoke($uri as xs:string, $bindings as map(*)) as item()*
Summary Opens $uri as file, evaluates it as XQuery expression at runtime, and returns the resulting items. Database nodes in the result will be copied and returned instead.
The semantics of the $bindings parameter is the same as for xquery:eval.
Errors BXXQ0001: the expression contains updating expressions.
FOTY0013: the expression yields function items.

xquery:type

Signatures xquery:type($expr as item()*) as item()*
Summary Similar to fn:trace($expr, $msg), but instead of a user-defined message, it emits the compile-time type and estimated result size of its argument.

Errors

Code Description
BXXQ0001 A dynamically evaluated query must not contain updating expressions.
BXXQ0002 The addressed database cannot be opened.

Changelog

Changelog

Version 7.8
  • Added: [#xquery:evaluate|xquery:evaluate]]

This module was introduced with Version 7.3. Functions have been adopted from the obsolete Utility Module.