XQuery/eXist Crib sheet
From Wikibooks, open books for an open world
< XQuery
[edit] XQuery declaration
xquery version "1.0";
[edit] import a module
import module namespace geo="http://www.cems.uwe.ac.uk/exist/coord" at "coord.xqm";
[edit] Base eXist namespace
declare namespace exist = "http://exist.sourceforge.net/NS/exist";
[edit] Standard eXist modules
Optional in an XQuery script but required in a module in 1.2 but not in 1.3
import module namespace xmldb = "http://exist-db.org/xquery/xmldb"; import module namespace util = "http://exist-db.org/xquery/util"; import module namespace request = "http://exist-db.org/xquery/request"; import module namespace response = "http://exist-db.org/xquery/response"; import module namespace session = "http://exist-db.org/xquery/session"; import module namespace transform = "http://exist-db.org/xquery/transform"; import module namespace text = "http://exist-db.org/xquery/text"; import module namespace system = "http://exist-db.org/xquery/system";
[edit] declare a namespace
declare namespace tx="http://www.transxchange.org.uk/";
[edit] declare a default element namespace
declare default element namespace "http://www.w3.org/1999/xhtml";
Note that you do not associate a prefix with the default namespace.
[edit] declare a default function namespace
declare default function namespace "http://www.transxchange.org.uk/";
[edit] declare a java binding namespace
declare namespace math="java:java.lang.Math";
Note that the java binding is disabled by default due to security issues. Math functions can now be invoked via the maths extension module.
[edit] output XML document
This is the default, but can be declared explictly:
declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=no indent=yes";
[edit] output SVG document
declare option exist:serialize "method=svg media-type=application/svg+xml omit-xml-declaration=no indent=yes";
[edit] output XHTML document
declare option exist:serialize "method=xhtml media-type=text/html omit-xml-declaration=no indent=yes
doctype-public=-//W3C//DTD XHTML 1.0 Transitional//EN
doctype-system=http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
[edit] output HTML4 document
declare option exist:serialize "method=xhtml media-type=text/html omit-xml-declaration=no indent=yes
doctype-public=-//W3C//DTD HTML 4.01 Transitional//EN
doctype-system=http://www.w3.org/TR/loose.dtd";
[edit] output HTML document with no doctype
declare option exist:serialize "method=html media-type=text/html omit-xml-declaration=yes indent=yes";
[edit] output XHTML document with no doctype
declare option exist:serialize "method=xhtml media-type=text/html omit-xml-declaration=yes indent=yes";
[edit] output plain text document with no doctype
declare option exist:serialize "method=text media-type=text/plain omit-xml-declaration=yes";
[edit] output kml document
declare option exist:serialize "method=xhtml media-type=application/vnd.google-earth.kml+xml highlight-matches=none";
[edit] output XForms document
declare option exist:serialize "method=xhtml media-type=text/xml indent=yes";
[edit] module header
module namespace c="http://www.cems.uwe.ac.uk/exist/coord";
[edit] function declaration
- in the default namespace in an XQuery script
declare function local:times($tt, $dt) {
if (exists($dt))
then local:times(($tt, $tt[last()]+ $dt[1]), remove($dt,1))
else $tt
};
- in the namespace of a module
module namespace time = 'http://www.cems.uwe.ac.uk/fold/time'; declare function time:times($tt, $dt) { if (exists($dt)) then time:times(($tt, $tt[last()]+ $dt[1]), remove($dt,1)) else $tt };
[edit] declare variable
declare variable $pi as xs:double := 3.14159265;
in a module with namespace prefix fxx:
declare variable $fxx:file := doc('/db/me/file.xml');
[edit] embedded CSS stylesheet
<style language="text/css">
<![CDATA[
.good {background-color: green;}
.bad {background-color:red;}
]]>
</style>
[edit] Get HTTP POST URL Parameters
To get two URL parameters from an HTTP POST
http://localhost:8080/exist/rest/db/my-collection/my-xquery.xq?color=blue&shape=circle
Add the following:
let $my-color := request:get-parameter('color', 'red')
let $my-shape := request:get-parameter('shape', '')
If no color parameter is supplied a default color of "red" will be used.
[edit] Get HTTP POST Data
To get all the XML data from an HTTP POST
let $my-data := request:get-data()
[edit] Extend the Output Size Limit
By default the output size in 10,000 bytes. You can extend this by adding the following
declare option exist:output-size-limit "new-size";
For example to triple the size limit of the output use the following line:
declare option exist:output-size-limit "30000";