Um bestimmte Abschnitte des XQuery Programm wiederverwendbar zu machen, stehen Funktionsdeklarationen Programmierkonstrukte Funktionen zur Verfügung. Eine einfache Funktion wäre z.B. diese hier:
declare function local:wrap-header($json) { xdmp:add-response-header("Pragma", "no-cache"), xdmp:add-response-header("Cache-Control", "no-cache"), xdmp:add-response-header("Expires", "0"), xdmp:set-response-content-type('text/json; charset=utf-8'), $json };Plain Text
Sie wickelt um einen JSON String eine passende Header Information.
Damit die Funktion eingebunden werden kann, muss ein passender Namespace XML Konstrukte Namespaces deklariert werden:
declare namespace local = 'local:';Plain Text
Nicht nur bzgl. Wiederverwendbarkeit sind Funktionen praktisch, sondern auch um ganz elementare Konstrukte, wie while...do Programmierkonstrukte Schleifen - while..do Schleifen, zu realisieren.
Dazu nutzt man - wie in der funktionalen Programmierung üblich - die Rekursion:
declare function local:ist-letzter-wert-in-kette($glied) { let $wert := local:komplizierte-berechnung($glied), $naechstes-glied := local:komplizierte-berechnung-der-position($glied), return if ($naechstes-glied and not($wert = 'foobar')) then local:durchlaufe-kette($naechstes-glied) else $wert = 'foobar' };Plain Text
In diesem kleinen Schnippsel sind schon einige Besonderheiten von XQuery zu sehen. Variablenzuweisungen geschehen mit einem Doppelpunkt, Vergleiche dagegen nur mit einem einfachen "=". Statements werden mit einem Komma getrennt.