<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=XQuery</id>
	<title>XQuery - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=XQuery"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=XQuery&amp;action=history"/>
	<updated>2026-05-20T01:37:09Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=XQuery&amp;diff=183866&amp;oldid=prev</id>
		<title>imported&gt;Aka: Tippfehler entfernt, Kleinkram</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=XQuery&amp;diff=183866&amp;oldid=prev"/>
		<updated>2023-07-25T18:44:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Benutzer:Aka/Tippfehler_entfernt&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Benutzer:Aka/Tippfehler entfernt (Seite nicht vorhanden)&quot;&gt;Tippfehler entfernt&lt;/a&gt;, Kleinkram&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Programmiersprache&lt;br /&gt;
 | Name                         = XQuery&lt;br /&gt;
 | Logo                         = &lt;br /&gt;
 | Beschreibung                 = &amp;lt;!-- Beschreibung des Logos --&amp;gt;&lt;br /&gt;
 | Paradigma                    = [[Extensible Markup Language|XML]]&lt;br /&gt;
 | Betriebssystem               = [[Plattformunabhängigkeit|plattformunabhängig]]&lt;br /&gt;
 | Lizenz                       = &lt;br /&gt;
 | Erscheinungsjahr             = 2005&lt;br /&gt;
 | Entwickler                   = [[World Wide Web Consortium]]&lt;br /&gt;
 | AktuelleVersion              = 3.1&lt;br /&gt;
 | AktuelleVersionFreigabeDatum = 21. März 2017&lt;br /&gt;
 | Typisierung                  = [[Starke Typisierung|stark]]&lt;br /&gt;
 | Implementierung              = [[BaseX]], [[EXist (Datenbank)]], Galax, [[Saxon (Software)|Saxon]], Pathfinder, XQilla, Zorba&lt;br /&gt;
 | Dialekte                     = &lt;br /&gt;
 | Standardisierungen           = [http://www.w3.org/standards/techs/xquery#w3c_all W3C Spezifikationen]&lt;br /&gt;
 | Beeinflusst_von              = [[XQL]], [[XML-QL]], [[Quilt (Abfragesprache)|Quilt]]&lt;br /&gt;
 | Beeinflusste                 = &lt;br /&gt;
 | Website                      = [http://www.w3.org/standards/xml/query w3.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XQuery&amp;#039;&amp;#039;&amp;#039; steht für &amp;#039;&amp;#039;&amp;#039;XML Query Language&amp;#039;&amp;#039;&amp;#039; und bezeichnet eine vom [[W3C]] spezifizierte [[Abfragesprache]] für [[XML-Datenbank]]en. Sie dient dazu, aus großen [[Extensible Markup Language|XML]]-Datensammlungen einzelne Teile herauszusuchen. Im Gegensatz dazu wird [[XSL Transformation|XSLT]] verwendet, um komplette XML-Dokumente zu transformieren.&lt;br /&gt;
&lt;br /&gt;
XQuery benutzt eine an XSLT, [[SQL]] und [[C (Programmiersprache)|C]] angelehnte Syntax und verwendet [[XPath]] sowie [[XML Schema]] für sein Datenmodell und seine Funktionsbibliothek. Es ist aus den Sprachen [[XML Query Language|XQL]], [[XML-QL]] und [[Quilt (Abfragesprache)|Quilt]] hervorgegangen.&lt;br /&gt;
&lt;br /&gt;
XQuery ist [[Starke Typisierung|stark typisiert]] und [[Turing-Vollständigkeit|Turing-vollständig]].&lt;br /&gt;
&lt;br /&gt;
An der Entwicklung wesentlich beteiligt war (wie schon bei Quilt) [[Donald D. Chamberlin]].&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
Außer Pfadausdrücken ([[XPath]]) gibt es eine ganze Reihe weiterer Spracheigenschaften, die in den folgenden Abschnitten anhand von kurzen Beispielen erläutert werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Datenmodell ===&lt;br /&gt;
Die grundlegende Datenstruktur in XQuery ist eine Sequenz. Eine Sequenz ist eine geordnete Liste von keinem, einem oder mehreren Elementen. Eine Sequenz kann also auch ein XML-Dokument sein. Sequenzen werden in der Regel geklammert und können auch Duplikate enthalten. Sequenzen können nicht verschachtelt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Folgende Sequenzen sind identisch:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;(1, 2, 1)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;(1, (2, 1))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;(1, (), &amp;lt;nowiki /&amp;gt;)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;(1, &amp;lt;nowiki /&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;(&amp;lt;A/&amp;gt;)&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;&amp;lt;A/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XQuery stellt sechs Funktionen zur Abfrage von [[Mächtigkeit (Mathematik)|Kardinalitäten]] auf Sequenzen zur Verfügung:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* fn:zero-or-one($seq)&lt;br /&gt;
* fn:one-or-more($seq)&lt;br /&gt;
* fn:exactly-one($seq)&lt;br /&gt;
* fn:empty($seq)&lt;br /&gt;
* fn:exists($seq)&lt;br /&gt;
* fn:count($seq)&lt;br /&gt;
&lt;br /&gt;
Variablen werden in XQuery mit $-Präfix bezeichnet.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bearbeiten von Sequenzen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Der Kommaoperator hängt zwei Sequenzen hintereinander&lt;br /&gt;
* Werte hinzufügen kann man mit der Funktion fn:insert-before&lt;br /&gt;
* Werte löschen kann man mit der Funktion fn:remove&lt;br /&gt;
* Werte neu anordnen kann man mit der Funktion fn:reverse&lt;br /&gt;
* Werte umsortieren kann man mit der Funktion fn:unordered&lt;br /&gt;
&lt;br /&gt;
=== Konstruktion von XML-Elementen ===&lt;br /&gt;
Direkte XML-Konstruktion mit konstanten Elementnamen („direct constructors“):&lt;br /&gt;
  &amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt; { $page/head/content() } &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body bgcolor={ $style/bgcolor/text() } &amp;gt; { $page/body/content() } &amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
„Computed constructors“&lt;br /&gt;
  element html {&lt;br /&gt;
    element head { $page/head/content() }&lt;br /&gt;
    element body {&lt;br /&gt;
         attribute bgcolor { $style/bgcolor/text() },&lt;br /&gt;
         text { $page/body/content() }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
Zur Konstruktion von XML-Daten stehen sowohl die direkte Schreibweise als XML als auch die eher deklarative Konstruktion mittels der sogenannten „computed constructors“ zur Verfügung. In beiden Fällen dienen die geschweiften Klammern &amp;lt;code style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;{ ... }&amp;lt;/code&amp;gt; zur Einbettung von beliebigen weiteren XQuery-Ausdrücken in den Konstruktor.&lt;br /&gt;
&lt;br /&gt;
=== Sortier-Funktionalität („order by“) ===&lt;br /&gt;
Im Gegensatz zur [[Relationale Algebra|Relationalen Algebra]] und zu [[SQL]] besitzen XML-Datenelemente eine implizit vorgegebene Ordnung („document order“). Alle XQuery-Ausdrücke müssen diese Ordnung erhalten, es sei denn, dies wird im Ausdruck explizit ausgeschaltet (Ordering mode: unordered).&lt;br /&gt;
&lt;br /&gt;
=== FLWOR-Ausdrücke ===&lt;br /&gt;
Eine zentrale Rolle in XQuery spielen die sogenannten FLWOR-Ausdrücke (ausgesprochen: &amp;#039;&amp;#039;flower&amp;#039;&amp;#039;). FLWOR ist eine Abkürzung für die Konstrukte &amp;lt;code&amp;gt;for, let, where, order by&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;, und kann als Analogie zu den (SELECT, FROM, WHERE) – Konstrukten in SQL betrachtet werden. Im Unterschied zu SQL sind FLWOR-Ausdrücke allerdings [[Case sensitivity|case-sensitive]]. FLWOR-Ausdrücke bilden Sequenzen auf Sequenzen ab (vgl. [[#Datenmodell|Datenmodell]]). FLWOR-Ausdrücke besitzen die folgende generische Form:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;for&amp;#039;&amp;#039;&amp;#039; $forvar1 &amp;#039;&amp;#039;&amp;#039;at&amp;#039;&amp;#039;&amp;#039; $posvar1 &amp;#039;&amp;#039;&amp;#039;in&amp;#039;&amp;#039;&amp;#039; &amp;lt;Expr&amp;gt;&amp;#039;&amp;#039;&amp;#039;,&amp;#039;&amp;#039;&amp;#039; $forvar2 &amp;#039;&amp;#039;&amp;#039;at&amp;#039;&amp;#039;&amp;#039; $posvar2 &amp;#039;&amp;#039;&amp;#039;in&amp;#039;&amp;#039;&amp;#039; &amp;lt;Expr&amp;gt; …&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;let&amp;#039;&amp;#039;&amp;#039; $letvar1 &amp;#039;&amp;#039;&amp;#039;:=&amp;#039;&amp;#039;&amp;#039; &amp;lt;Expr&amp;gt;&amp;#039;&amp;#039;&amp;#039;,&amp;#039;&amp;#039;&amp;#039; $letvar2 &amp;#039;&amp;#039;&amp;#039;:=&amp;#039;&amp;#039;&amp;#039; &amp;lt;Expr&amp;gt; …&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;where&amp;#039;&amp;#039;&amp;#039; &amp;lt;BoolExpr&amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;order by&amp;#039;&amp;#039;&amp;#039; &amp;lt;Expr&amp;gt; &amp;#039;&amp;#039;&amp;#039;ascending&amp;#039;&amp;#039;&amp;#039;/&amp;#039;&amp;#039;&amp;#039;descending&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; &amp;lt;Expr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierbei steht &amp;lt;code&amp;gt;&amp;lt;Expr&amp;gt;&amp;lt;/code&amp;gt; für beliebige andere XQuery-Ausdrücke, und &amp;lt;code&amp;gt;&amp;lt;BoolExpr&amp;gt;&amp;lt;/code&amp;gt; für einen Ausdruck vom Typ boolean. Die &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Konstrukte binden ihre Variablen &amp;lt;code&amp;gt;$forvar1, $forvar2, ... &amp;lt;/code&amp;gt; sequentiell an je einen Wert aus den Bindungssequenzen &amp;lt;code&amp;gt;&amp;lt;Expr&amp;gt;&amp;lt;/code&amp;gt;. Über das Schlüsselwort &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt; kann die Position der vorherstehenden Variable in der &amp;lt;code&amp;gt;&amp;lt;Expr&amp;gt;&amp;lt;/code&amp;gt;-Sequenz an eine Positionsvariable gebunden werden, wobei die Nummerierung bei 1 beginnt. Im Unterschied dazu binden die &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Konstrukte ihre Variablen &amp;lt;code&amp;gt;$letvar1, $letvar2, ...&amp;lt;/code&amp;gt; an das gesamte Ergebnis des assoziierten Ausdrucks. Die sich ergebende Tupelfolge beinhaltet alle möglichen Kombinationen von Variablenbindungen, die sich aus der Belegung der for- und let-Variablen bilden lassen.&lt;br /&gt;
&lt;br /&gt;
Das &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;-Konstrukt dient zur Eliminierung unerwünschter Tupel. Sinnvollerweise nimmt sein boolescher Ausdruck Bezug auf mindestens eine der in den &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Konstrukten gebundenen Variablen. Das Gleiche gilt für das &amp;lt;code&amp;gt;order by&amp;lt;/code&amp;gt;-Konstrukt, das zum Sortieren der Tupel dient. Im &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;-Konstrukt werden schließlich die Variablen von Interesse zurückgegeben, möglicherweise eingebettet in direkt oder indirekt konstruierte Elemente. In komplexeren Fällen werden FLWOR-Ausdrücke auch geschachtelt, das bedeutet, dass an der Stelle von jedem Vorkommen von &amp;lt;code&amp;gt;&amp;lt;Expr&amp;gt;&amp;lt;/code&amp;gt; wiederum ein beliebiger FLWOR-Ausdruck stehen kann.&lt;br /&gt;
&lt;br /&gt;
Das nachfolgende Beispiel veranschaulicht die Verwendung von &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;. Der &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Teil des Ausdrucks selektiert alle Absätze innerhalb einer HTML-Seite (&amp;amp;lt;p&amp;amp;gt;-Elemente). Im &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Teil wird für jeden Paragraph mit Hilfe von vordefinierten Funktionen die Zahl der Worte ermittelt. Anschließend werden alle nicht leeren Paragraphen (Wortzahl &amp;gt; 0) um eine Größenangabe erweitert und ausgegeben.&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;for&amp;#039;&amp;#039;&amp;#039; $par &amp;#039;&amp;#039;&amp;#039;in&amp;#039;&amp;#039;&amp;#039; $page//p&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;let&amp;#039;&amp;#039;&amp;#039; $words &amp;#039;&amp;#039;&amp;#039;:=&amp;#039;&amp;#039;&amp;#039; fn:count(fn:tokenize($par/content(), &amp;quot; \n\t&amp;quot;))&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;where&amp;#039;&amp;#039;&amp;#039; $words gt 0&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;return&amp;#039;&amp;#039;&amp;#039; &amp;amp;lt;p&amp;amp;gt;&lt;br /&gt;
           {$par/content()}&amp;amp;lt;br/&amp;amp;gt;&lt;br /&gt;
           Size: { $words }&lt;br /&gt;
        &amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zu beachten ist bei diesem Ausdruck, dass &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Teil abhängig voneinander sind, die im &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Teil deklarierte Variable &amp;lt;code&amp;gt;$par&amp;lt;/code&amp;gt; wird im &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Teil verwendet.&lt;br /&gt;
Für die Auswertung bedeutet dies, dass der &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Teil für jede Belegung der Variable &amp;lt;code&amp;gt;$par&amp;lt;/code&amp;gt; neu ausgewertet werden muss.&lt;br /&gt;
&lt;br /&gt;
=== Verbundoperationen und Gruppierungen ===&lt;br /&gt;
Verbundoperationen (oder engl. &amp;#039;&amp;#039;Joins&amp;#039;&amp;#039;) bezeichnen eine Mengenoperation bestehend aus der Bildung eines kartesischen Produktes zweier Eingabemengen und einer nachfolgenden Selektion (vergl. [[Relationale Algebra]]). Im Beispiel des vorherigen Abschnitts zu FLWOR-Ausdrücken ist bereits eine solche Verbundoperation gezeigt. Die Bindungen der in den &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Teilen deklarierten Variablen bilden die jeweiligen Eingabemengen auf deren kartesisches Produkt die Selektionsbedingungen des &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;-Teils angewandt werden.&lt;br /&gt;
Da Selektionsbedingungen sowohl im &amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;-Teil des Ausdrucks als auch innerhalb der &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;-Teile in Subausdrücken auftreten können, ist vor der Auswertung eines Ausdrucks eine Normalisierung notwendig.&lt;br /&gt;
&lt;br /&gt;
=== Vordefinierte Funktionen ===&lt;br /&gt;
Zur Berechnung arithmetischer Gleichungen sowie Datumsberechnungen sowie zur Bearbeitung von Sequenzen im [[#Datenmodell|Datenmodell]].&lt;br /&gt;
&lt;br /&gt;
=== Benutzerdefinierte Funktionen ===&lt;br /&gt;
Mittels &amp;lt;code&amp;gt;declare function&amp;lt;/code&amp;gt; können benutzerdefinierte Funktionen deklariert werden. Die allgemeine Form sieht folgendermaßen aus:&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;declare function&amp;#039;&amp;#039;&amp;#039; namespace:funktionsname&lt;br /&gt;
  ($parameter1 &amp;#039;&amp;#039;&amp;#039;as&amp;#039;&amp;#039;&amp;#039; datentyp1, $parameter2 &amp;#039;&amp;#039;&amp;#039;as&amp;#039;&amp;#039;&amp;#039; datentyp2, …) &amp;#039;&amp;#039;&amp;#039;as&amp;#039;&amp;#039;&amp;#039; rückgabedatentyp &amp;#039;&amp;#039;&amp;#039;{&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
        &amp;amp;lt;XQuery-Ausdruck&amp;amp;gt;&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;}&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Funktionen können andere Funktionen und sich selbst [[Rekursion|rekursiv]] aufrufen, damit ist XQuery [[Turing-Vollständigkeit|Turing-vollständig]].&lt;br /&gt;
&lt;br /&gt;
=== Verschiedene Vergleichsoperatoren ===&lt;br /&gt;
XQuery kennt zwei Typen von Vergleichsfunktionen: wertqualifizierend oder existenzqualifizierend.&lt;br /&gt;
Die wertqualifizierenden Operatoren ähneln den üblichen Operatoren aus anderen Programmiersprachen. Folgende Operatoren sind definiert&lt;br /&gt;
* eq: Prüft auf Gleichheit (equal)&lt;br /&gt;
* ne: Prüft auf Ungleichheit (not equal)&lt;br /&gt;
* lt: Prüft auf Kleiner (less than)&lt;br /&gt;
* gt: Prüft auf Größer (Greater than)&lt;br /&gt;
* le: Prüft auf Kleiner-Gleich (Less or equal)&lt;br /&gt;
* ge: Prüft auf Größer-Gleich (Greater or equal)&lt;br /&gt;
&lt;br /&gt;
Die „üblichen“ Vergleichsoperatoren (&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt;) führen einen existenziellen Vergleich durch. Dabei können links und rechts des Operators Sequenzen stehen. So ist der Ausdruck &amp;lt;code&amp;gt;seq1 OP seq2&amp;lt;/code&amp;gt; genau dann wahr, wenn ein Element &amp;lt;code&amp;gt;e1&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;seq1&amp;lt;/code&amp;gt; und ein &amp;lt;code&amp;gt;e2&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;seq2&amp;lt;/code&amp;gt; existieren mit &amp;lt;code&amp;gt;e1 OP e2&amp;lt;/code&amp;gt;, wobei &amp;lt;code&amp;gt;OP&amp;lt;/code&amp;gt; einer der Operatoren &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;=&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;gt;=&amp;lt;/code&amp;gt; ist. So ist &amp;lt;code&amp;gt;(1, 2) &amp;gt; (3, 0)&amp;lt;/code&amp;gt; wahr, da &amp;lt;code&amp;gt;1 &amp;gt; 0&amp;lt;/code&amp;gt; ist.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
Zählen aller question-[[Extensible Markup Language|XML]]-Elemente im Quelldokument:&lt;br /&gt;
 fn:count(//question)&lt;br /&gt;
&lt;br /&gt;
Komplexeres Beispiel, Auflisten aller Fragen aller Dokumente einer Galerie für [[KEduca]], die weniger als zwei Antworten haben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;noanswerquestions&amp;gt;{&lt;br /&gt;
  for $s in fn:doc(&amp;quot;lpi101.edugallery&amp;quot;)//server/@address&lt;br /&gt;
  for $d in fn:doc($s)[count(.//question/(true, false)) &amp;lt;= 1]&lt;br /&gt;
  return &amp;lt;doc src=&amp;quot;{ $s }&amp;quot;&amp;gt;{&lt;br /&gt;
    $d//question[count((true, false)) &amp;lt;= 1]&lt;br /&gt;
  }&amp;lt;/doc&amp;gt;&lt;br /&gt;
}&amp;lt;/noanswerquestions&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Beispiel (zeigt die Möglichkeit der indirekten Umstrukturierung durch XQuery)&lt;br /&gt;
* Quell-Dokument:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; style=&amp;quot;margin-left:2em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;partlist&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;0&amp;quot; name=&amp;quot;car&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;1&amp;quot; partof=&amp;quot;0&amp;quot; name=&amp;quot;engine&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;2&amp;quot; partof=&amp;quot;0&amp;quot; name=&amp;quot;door&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;3&amp;quot; partof=&amp;quot;1&amp;quot; name=&amp;quot;piston&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;4&amp;quot; partof=&amp;quot;2&amp;quot; name=&amp;quot;window&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;5&amp;quot; partof=&amp;quot;2&amp;quot; name=&amp;quot;lock&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;10&amp;quot; name=&amp;quot;skateboard&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;11&amp;quot; partof=&amp;quot;10&amp;quot; name=&amp;quot;board&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;12&amp;quot; partof=&amp;quot;10&amp;quot; name=&amp;quot;wheel&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;20&amp;quot; name=&amp;quot;canoe&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/partlist&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Ziel-Dokument:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; style=&amp;quot;margin-left:2em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parttree&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;0&amp;quot; name=&amp;quot;car&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part partid=&amp;quot;1&amp;quot; name=&amp;quot;engine&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;part partid=&amp;quot;3&amp;quot; name=&amp;quot;piston&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/part&amp;gt;&lt;br /&gt;
    &amp;lt;part partid=&amp;quot;2&amp;quot; name=&amp;quot;door&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;part partid=&amp;quot;4&amp;quot; name=&amp;quot;window&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;part partid=&amp;quot;5&amp;quot; name=&amp;quot;lock&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/part&amp;gt;&lt;br /&gt;
  &amp;lt;/part&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;10&amp;quot; name=&amp;quot;skateboard&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;part partid=&amp;quot;11&amp;quot; name=&amp;quot;board&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;part partid=&amp;quot;12&amp;quot; name=&amp;quot;wheel&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/part&amp;gt;&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;20&amp;quot; name=&amp;quot;canoe&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/parttree&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Lösung in XQuery:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; style=&amp;quot;margin-left:2em&amp;quot;&amp;gt;&lt;br /&gt;
declare function local:one_level ($p as node()) as node()&lt;br /&gt;
{&lt;br /&gt;
  &amp;lt;part partid=&amp;quot;{$p/@partid}&amp;quot; name=&amp;quot;{$p/@name}&amp;quot;&amp;gt;&lt;br /&gt;
  {&lt;br /&gt;
    for $s in doc(&amp;quot;data/parts-data.xml&amp;quot;)//part&lt;br /&gt;
    where $s/@partof =$p/@partid&lt;br /&gt;
    return local:one_level($s)&lt;br /&gt;
  }&lt;br /&gt;
  &amp;lt;/part&amp;gt;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;parttree&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  for $p in doc(&amp;quot;data/parts-data.xml&amp;quot;)//part [empty(@partof)]&lt;br /&gt;
  return local:one_level($p)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/parttree&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Aufgrund der Wichtigkeit von XML und historisch bedingt hoher Datenbestände in relationalen [[Datenbank]]en wurde von der [[Internationale Organisation für Normung|ISO]] eine Erweiterung des [[SQL]] Standards namens [[SQL/XML]] entwickelt, um die Möglichkeiten von XML und SQL zu kombinieren. Als [[Abfragesprache]] zur Abfrage von XML Daten im Rahmen der SQL Funktion XMLQuery wurde XQuery definiert.&amp;lt;ref name=&amp;quot;SQLXML2006&amp;quot;&amp;gt;{{cite book&lt;br /&gt;
 |title=SQL/XML:2006 – Evaluierung der Standardkonformität ausgewählter Datenbanksysteme&lt;br /&gt;
 |last=Wagner&lt;br /&gt;
 |first=Michael&lt;br /&gt;
 |year=2010&lt;br /&gt;
 |publisher=Diplomica Verlag&lt;br /&gt;
 |isbn=3-8366-9609-6}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementierungen ==&lt;br /&gt;
* [[BaseX]], Open Source: XQuery 3.1, XQuery Full-Text 1.0, XQuery Update 1.0&lt;br /&gt;
* [[EXist (Datenbank)|eXist]], Open Source: XQuery 3.0, XQuery Update 1.0&lt;br /&gt;
* [[Saxon (Software)|Saxon]], Open Source und kommerziell: XQuery 3.1, XQuery Update 1.0&lt;br /&gt;
* [http://github.com/sirixdb/sirix Sirix], Open Source: XQuery 1.0 (und XQuery Update 1.0 auf Basis von [http://brackit.org/ Brackit])&lt;br /&gt;
* [https://zadean.github.io/xqerl/ xqerl], Open Source: XQuery 3.1, XQuery Update 3.0&lt;br /&gt;
* [http://xqilla.sourceforge.net/ XQilla], Open Source: XPath 2.0, XQuery Update 1.0&lt;br /&gt;
* [http://www.zorba-xquery.com/ Zorba], Open Source: XQuery 3.0, XQuery Full Text 1.0, XQuery Update 1.0;&lt;br /&gt;
* [https://dev.w3.org/2006/xquery-test-suite/PublicPagesStagingArea/XQTSReport_XQTS_1_0_2.html XQuery Test Suite Results]: Konformität mit XQuery 1.0&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Priscilla Wamsley&lt;br /&gt;
   |Titel=XQuery&lt;br /&gt;
   |Verlag=O’Reilly Media&lt;br /&gt;
   |Jahr=2007&lt;br /&gt;
   |ISBN=978-0-596-00634-1&lt;br /&gt;
   |Ort=&lt;br /&gt;
Beijing}}&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Margit Becher&lt;br /&gt;
   |Titel=XML – DTD, XML-Schema, XPath, XQuery, XSLT, XSL-FO, SAX, DOM&lt;br /&gt;
   |Verlag=W3L Verlag&lt;br /&gt;
   |Jahr=2009&lt;br /&gt;
   |ISBN=978-3-937137-69-8&lt;br /&gt;
   |Ort=Witten}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
{{Wiktionary}}&lt;br /&gt;
* [http://www.w3.org/TR/xquery/ XQuery-Spezifikation]&lt;br /&gt;
* [http://www.w3.org/TR/xquery-use-cases/ XQuery Use Cases (Anwendungsgebiete)]&lt;br /&gt;
* [http://www.w3.org/TR/xquery-update-10/ XQuery Update Facility]&lt;br /&gt;
* [http://parsqube.de/xml-technologien/xquery/ Ausführliche Einführung in XQuery]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste W3C-Standards}}&lt;br /&gt;
&lt;br /&gt;
{{Normdaten|TYP=s|GND=4737681-8}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenbanksprache]]&lt;br /&gt;
[[Kategorie:XML]]&lt;br /&gt;
[[Kategorie:Abkürzung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aka</name></author>
	</entry>
</feed>