<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BunzA</id>
	<title>GlossarWiki - Benutzerbeiträge [de-formal]</title>
	<link rel="self" type="application/atom+xml" href="https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BunzA"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/Spezial:Beitr%C3%A4ge/BunzA"/>
	<updated>2026-07-17T19:59:02Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2517</id>
		<title>XML</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2517"/>
		<updated>2006-07-06T17:12:38Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Programmierung]]&lt;br /&gt;
Die &#039;&#039;&#039;Extensible Markup Language&#039;&#039;&#039; wurde von der „XML Activity“ des [http://www.w3.org W3C] entwickelt. Als eine von SGML abgeleitete Auszeichnungssprache bietet sie die Möglichkeit, weitere Auszeichnungssprachen zu definieren.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
Mit XML werden Informationen in einer Baum-Struktur gespeichert. &lt;br /&gt;
&lt;br /&gt;
Ein Vorteil dieser Auszeichnungssprache ist, dass für die Baum-Struktur keine festen Element- oder Attributnamen, wie beipielsweise in HTML, vorgegeben sind. Das bedeutet, der Programmierer kann sein Dokument nach eine eigenen der Situation angepassten Muster entwerfen. Vor allem durch die Möglichkeit, Elemente und Attribute selbst zu benennen, wird die spätere Lesbarkeit der Dokumente erhöht.&lt;br /&gt;
&lt;br /&gt;
Jedes XML-Dokument beginnt mit einem so genannten Prolog. In diesem muss die XML-Version angegeben, eventuell können auch der verwendete Zeichensatz oder die Art des Dokuments angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Der XML-Baum kann die folgenden Knotentypen beinhalten:&lt;br /&gt;
&lt;br /&gt;
* Kommentare (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar--&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elemente (z.B.: &amp;lt;code&amp;gt;&amp;lt;element&amp;gt;...&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;element /&amp;gt;&amp;lt;/code&amp;gt; für ein leeres Element)&lt;br /&gt;
* Attribute (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Text (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;text&amp;quot;&amp;gt;text&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Ausführungsanweisungen (engl.: Processing Instructions, PIs)&lt;br /&gt;
&lt;br /&gt;
== Schemas ==&lt;br /&gt;
&lt;br /&gt;
Die Struktur des XML-Dokuments kann durch Schemasprachen definiert werden. Hier kann man festlegen, in welcher Reihenfolge und welcher Verschachtelung die Elemente auftreteen, welche Attribute sie beinhalten und welche Inhalte die Text-Knoten annehmen dürfen. Hierzu kann beispielsweise &#039;&#039;&#039;DTD&#039;&#039;&#039; (Dokument Type Definition) oder das jüngere und flexiblere [www.w3.org/XML/Schema XML Schema] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
In einer DTD wird Abfolge und Verschachtelung der Elemente anhand regulärer Ausdrücke dargestellt. Es können Entitäten definiert und Wertelisten für Attribute vorgegeben werden.&lt;br /&gt;
&lt;br /&gt;
In einem XML Schema können weit mehr Eigenschaften einex XML-Dokuments als in DTDs festgelegt werden. XML Schema kennt mehrere Datentypen (z.B.: &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;), es können jedoch auch neue Datentypen definiert und diese wiederverwendet werden Auch das Ertellen von Patterns für die möglichen Werte der Text-Knoten ist möglich. XML-Schema-Dokumente werden selbst in einer XML-Syntax geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wohlgeformtheit ==&lt;br /&gt;
&lt;br /&gt;
Zwar bietet XML dem Programmeirer sehr viel Spielruam, jedoch müssen bestimmte Regeln eingehalten werden. Diese Regeln definieren die &#039;&#039;&#039;Wohlgeformtheit&#039;&#039;&#039; eines XML-Dokuments:&lt;br /&gt;
&lt;br /&gt;
* der XML-Baum enthält genau ein Wurzelelement (vgl.: &amp;lt;code&amp;gt;&amp;lt;books&amp;gt;...&amp;lt;/books&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags müssen immer geschlossen werden (z.B.: &amp;lt;code&amp;gt;&amp;lt;book&amp;gt;...&amp;lt;/book&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;location /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags dürfen sich nicht überlappen  (z.B.: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt, erlaubt: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Die Werte von Attributen müssen stets in Anführungszeichen stehen (z.B.: &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;elem attr=&#039;value&#039;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Attribute dürfen nicht mehrmals in einem Element vorkommen (z.B. &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt)&lt;br /&gt;
* Kommentare werden durch &amp;lt;code&amp;gt;&amp;lt;!--&amp;lt;/code&amp;gt; eingeleitet und mit &amp;lt;code&amp;gt;--&amp;gt;&amp;lt;/code&amp;gt; beendet&lt;br /&gt;
* Kommentare und PIs dürfen nicht innerhalb von Tags statttfinden&lt;br /&gt;
* Sonderzeichen (&amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;) dürfen nicht in Text-Knoten verwendet werden&lt;br /&gt;
* die Struktur des Dokument wird durch DTD definiert und eingebunden), oder das Attribut &amp;lt;code&amp;gt;standalone&amp;lt;/code&amp;gt; erhält im Prolog den Wert &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Die XML-Familie ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[XML Schema]]&#039;&#039;&#039; zur Definition des Dokumenten-Baums&lt;br /&gt;
* &#039;&#039;&#039;[[XLink]]&#039;&#039;&#039; zum Einfügen von Hyperlinks in XML-Dateien&lt;br /&gt;
* &#039;&#039;&#039;[[XPointer]]&#039;&#039;&#039; um auf Daten innerhalb eines XML-Dokuments zu zeigen&lt;br /&gt;
* &#039;&#039;&#039;[[XSLT]]&#039;&#039;&#039; zum Transformieren von XML-Dokumenten&lt;br /&gt;
* &#039;&#039;&#039;[[XPath]]&#039;&#039;&#039; für die Navigation innerhalb eines XML-Dokuments&lt;br /&gt;
* &#039;&#039;&#039;[[XQuery]]&#039;&#039;&#039; zur Abfrage von XML-Datenbanken&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;books&amp;gt;&lt;br /&gt;
   &amp;lt;book id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;authors&amp;gt;&lt;br /&gt;
       &amp;lt;author title=&amp;quot;Dr.&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;firstname&amp;gt;John&amp;lt;/firstname&amp;gt;&lt;br /&gt;
         &amp;lt;lastname&amp;gt;Smith&amp;lt;/lastname&amp;gt;&lt;br /&gt;
       &amp;lt;/autor&amp;gt;&lt;br /&gt;
     &amp;lt;/authors&amp;gt;&lt;br /&gt;
     &amp;lt;title&amp;gt;1st Book&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;subtitle&amp;gt;This is my first book&amp;lt;/subtitle&amp;gt;&lt;br /&gt;
     &amp;lt;location&amp;gt;London&amp;lt;/location&amp;gt;&lt;br /&gt;
     &amp;lt;year&amp;gt;2006&amp;lt;/year&amp;gt;&lt;br /&gt;
   &amp;lt;/book&amp;gt;&lt;br /&gt;
 &amp;lt;/books&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/XML http://www.w3.org/XML]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Xml http://de.wikipedia.org/wiki/Xml]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XUpdate&amp;diff=2521</id>
		<title>XUpdate</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XUpdate&amp;diff=2521"/>
		<updated>2006-07-06T17:11:35Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Programmierung]]&lt;br /&gt;
XUpdate (Namespace: [http://www.xmldb.org/xupdate http://www.xmldb.org/xupdate]) wurde von der Initiative [http://xmldb-org.sourceforge.net XML:DB] entwickelt, die ebenfalls eine API für XUpdate zur Verfügung stellt. XUpdate ermöglicht es dem Programmierer, ändernd auf Daten und Dateien zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
XUpdate ist eine deklarative Sprache, deren Anweisungen im XML-Format geschrieben werden. Für die Navigation innerhalb der Dokumente werden XPath und dessen Funktionen verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Anweisungen werden nach dem folgenden Muster aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xupdate:type select=&amp;quot;expr&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;xupdate:node&amp;gt;...&amp;lt;/xupdate:node&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/xupdate:type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Beginn des Elements &#039;&#039;&#039;&amp;lt;code&amp;gt;xupdate:type&amp;lt;/code&amp;gt;&#039;&#039;&#039; wird die Art der Modifikation angegeben. Es stehen verschiedene XUpdate-Funktionen zum Einfügen eines neuen Knotens (&#039;&#039;&#039;&amp;lt;code&amp;gt;insert&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;insert&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt;&#039;&#039;&#039;) und zum Ändern (&#039;&#039;&#039;&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;rename&amp;lt;/code&amp;gt;&#039;&#039;&#039;) oder Löschen (&#039;&#039;&#039;&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&#039;&#039;&#039;) eines bereits bestehenden Knotens zur Verfügung. Zusätzlich können Knoten in einer Konstanten gespeichert (&#039;&#039;&#039;&amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt;&#039;&#039;&#039;) oder ihr Wert ausgelesen (&#039;&#039;&#039;&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;of&amp;lt;/code&amp;gt;&#039;&#039;&#039;) werden. Auch das Einfügen von Kommentaren (&#039;&#039;&#039;&amp;lt;code&amp;gt;comment&amp;lt;/code&amp;gt;&#039;&#039;&#039;) ist möglich.&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;&amp;lt;code&amp;gt;select&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Attribut wird für &amp;lt;code&amp;gt;expr&amp;lt;/code&amp;gt; ein XPath-Ausdruck angegeben. Es kann im Dokument navigiert und Elemente ausgewählt werden. Hierbei können auch die von XPath zur Verfügung gestellten Funktionen und Bedingungsangaben benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;&#039;&amp;lt;code&amp;gt;xupdate:node&amp;lt;/code&amp;gt;&#039;&#039;&#039; wird ein Knoten definiert, &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; kann je nach gewünschtem Knotentyp die Ausprägungen &#039;&#039;&#039;&amp;lt;code&amp;gt;element&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;attribute&amp;lt;/code&amp;gt;&#039;&#039;&#039;oder &#039;&#039;&#039;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;&#039;&#039;&#039;annehmen.&lt;br /&gt;
&lt;br /&gt;
folgenden Beispiel wird aus einem XML-Dokument der Nachname von Otto in der Konstanten &amp;lt;code&amp;gt;$last&amp;lt;/code&amp;gt; gespeichert. Anschließend wird ein neuer Personen-Knoten für Susi Müller hinzugefügt. Danach werden alle Personen, die nicht Müller heißen, aus dem Dokument gelöscht.&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;person gender=“m“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Müller&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Otto&amp;lt;/first&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xupdate:variable name=“last“ select=“//person[first=’Otto’]/last“&amp;gt;&lt;br /&gt;
 &amp;lt;xupdate:append select=“/personen“&amp;gt;&lt;br /&gt;
   &amp;lt;xupdate:element name=“person“&amp;gt;&lt;br /&gt;
     &amp;lt;xupdate:attribute&amp;gt;f&amp;lt;/xupdate:attribute&amp;gt;&lt;br /&gt;
     &amp;lt;xupdate:element name=“last“&amp;gt;&amp;lt;xupdate:value-of select=&amp;quot;$last&amp;quot;/&amp;gt;&amp;lt;/xupdate:element&amp;gt;&lt;br /&gt;
     &amp;lt;xupdate:element name=“first“&amp;gt;Susi&amp;lt;/xupdate:element&amp;gt;&lt;br /&gt;
   &amp;lt;/xupdate:element&amp;gt;&lt;br /&gt;
 &amp;lt;/xupdate:append&amp;gt;&lt;br /&gt;
 &amp;lt;xupdate:remove select=“//person[last!=&#039;Müller&#039;]“/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Müller&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Susi&amp;lt;/first&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
 &amp;lt;person gender=“m“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Müller&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Otto&amp;lt;/first&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.xmldb.org/xupdate http://www.xmldb.org/xupdate]&lt;br /&gt;
* [http://xmldb-org.sourceforge.net http://xmldb-org.sourceforge.net]&lt;br /&gt;
* [http://www.oio.de/m/eai/xupdate.htm http://www.oio.de/m/eai/xupdate.htm]&lt;br /&gt;
* [http://www.oio.de/m/eai/xupdate-append.htm http://www.oio.de/m/eai/xupdate-append.htm]&lt;br /&gt;
* [https://www.tu-chemnitz.de/informatik/DVS/dvs.informatik.tu-chemnitz.de/Seminar-SemiDB-XML/SS04-SemiDB-XML/pdf/04-slides.pdf https://www.tu-chemnitz.de/informatik/DVS/dvs.informatik.tu-chemnitz.de/Seminar-SemiDB-XML/SS04-SemiDB-XML/pdf/04-slides.pdf]&lt;br /&gt;
* [http://www.info.uni-karlsruhe.de/~i44www/lehre/XML-WS-01-02/Vortrag15/note016.htm http://www.info.uni-karlsruhe.de/~i44www/lehre/XML-WS-01-02/Vortrag15/note016.htm]&lt;br /&gt;
* [http://www.zdnet.de/builder/print_this.htm?pid=39118709-20000202c http://www.zdnet.de/builder/print_this.htm?pid=39118709-20000202c]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2520</id>
		<title>XML Query Language</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2520"/>
		<updated>2006-07-06T17:11:24Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Programmierung]]&lt;br /&gt;
Die &#039;&#039;&#039;XML Query Language&#039;&#039;&#039; ist eine Abfragesprache für XML-Datenbanken und wird von der „XML Query Working Group“, einer Untergruppe der „XML Activity“ des [http://www.w3.org W3C], entwickelt. Derzeit im Status „Working Draft“ soll XQuery bald zum W3C-Standard werden.&lt;br /&gt;
&lt;br /&gt;
Als funktionale Sprache arbeitet XQuery ohne Seiteneffekte. Das bedeutet, dass weder Daten dauerhaft oder auch nur temporär gespeichert, noch Inhalte modifiziert werden können.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Navigation innerhalb der Dokumente erfolgt mit Hilfe von [http://www.w3.org/TR/xpath XPath]. Durch [[XPath]] kann jeder Knoten des durch das XML-Dokument erstellten Baums erreicht werden. Die in XPath vorhandenen Funktionen und elementaren Ausdrücke können ebenfalls verwendet werden. Man spricht deshalb von XPath als einer Untermenge von XQuery.&lt;br /&gt;
&lt;br /&gt;
=== Das FLWOR-Muster ===&lt;br /&gt;
&lt;br /&gt;
Komplexere Ausdrücke werden nach dem &#039;&#039;&#039;FLWOR&#039;&#039;&#039;-Muster (&#039;&#039;&#039;f&#039;&#039;&#039;or-&#039;&#039;&#039;l&#039;&#039;&#039;et-&#039;&#039;&#039;w&#039;&#039;&#039;here-&#039;&#039;&#039;o&#039;&#039;&#039;rder-&#039;&#039;&#039;b&#039;&#039;&#039;y-&#039;&#039;&#039;r&#039;&#039;&#039;eturn) aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;for&#039;&#039;&#039; $var1 &#039;&#039;&#039;at&#039;&#039;&#039; $pos &#039;&#039;&#039;in&#039;&#039;&#039; &amp;lt;expr1&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;let&#039;&#039;&#039; $var2 := &amp;lt;expr2&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;where&#039;&#039;&#039; &amp;lt;bool&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;order by&#039;&#039;&#039; &amp;lt;expr3&amp;gt; &#039;&#039;&#039;ascending/descending&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;return&#039;&#039;&#039; &amp;lt;expr4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend der SELECT-Anweisung in SQL kann auch in XQuery zur Abfrage der Daten eine Schleife (&#039;&#039;&#039;&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;&#039;&#039;&#039;) durchlaufen werden. Das Element des jeweiligen Schleifenschritts wird dabei in einer Konstanten (&amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt;, s. o.) gespeichert, über die in den folgenden Anweisungen auf dessen Inhalt zugegriffen werden kann. In einer Konstanten (&amp;lt;code&amp;gt;$pos&amp;lt;/code&amp;gt;) kann die Position des Elementes gespeichert und auf diese, beispielsweise in der where-Bedingung, zugegriffen werden (z.B. &amp;lt;code&amp;gt;where $posvar1 mod 2 = 0&amp;lt;/code&amp;gt; bedeutet jeder 2te).&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Abschnitt können Konstanten definiert, mit Werten belegt und Berechnungen durchgeführt werden. In jedem Schritt werden diese Konstanten neu definiert, ihr Inhalt wird also nicht über den Schleifenschritt hinaus gespeichert. &lt;br /&gt;
&lt;br /&gt;
Es ist zudem möglich mehrere weitere &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisungen vor dem Aufruf der for-Schleife(n) zu platzieren. Auf diese Daten kann während des gesamten Schleifendurchlaufs zugegriffen werden. Um Berechnungen mit Daten aus einer Abfrage auszuführen, müssen diese jedoch nach der Zuweisung für &amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt; durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;&amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Bedingung wird jedes Element auf die angegebenen Kriterien geprüft. Hier können mehrere Bedingungen, die entweder mit &#039;&#039;&#039;&amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;&#039;&#039;&#039; verknüpft werden, angegeben werden. Im Gegensatz zu SQL können mit Xquery keine negativen Bedingungen (&amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt;) angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Erfüllt dieses die Bedingungen, so wird es in der &#039;&#039;&#039;&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisung verarbeitet und alle gefundenen Daten nach dem &#039;&#039;&#039;&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;by&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Kriterium geordnet zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel werden aus einem XML-Dokument die Nach- und Vornamen aller Personen ausgewählt und als neues XML-Dokument ausgegeben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Mayr&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Ute&amp;lt;/firste&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
 for $person in  document(“personen.xml“)//person&lt;br /&gt;
 let $l:=string($person/last),&lt;br /&gt;
     $f:= string($person/first)&lt;br /&gt;
 return &lt;br /&gt;
   &amp;lt;anrede&amp;gt;{$l}{“ “}{$f}&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
   &amp;lt;anrede&amp;gt;Mayr Ute&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konstanten in XQuery-Ausdrücken werden jeweils mit einem vorangehenden &#039;&#039;&#039;&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Zeichen gekennzeichnet. &lt;br /&gt;
&lt;br /&gt;
Den Konstanten, aber auch den Inhalten der Knoten, können explizit bestimmte Datentypen zugewiesen werden. Diese können als Bezeichner, zur Typüberprüfung oder auch für explizite Typecasts verwendet werden (Bsp.: &amp;lt;code&amp;gt;string($person/last)&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Bei der Rückgabe der Elemente muss jeder neue Knotentyp (Attribute, Elemente, Text, etc.) in geschweifte Klammern eingefasst werden. Ausschließlich XML-Tags können ohne diesen Rahmen ausgegeben werden. (z.B.: &amp;lt;code&amp;gt;&amp;lt;anrede&amp;gt;{“Frau“}{$last}&amp;lt;/anrede&amp;gt;&amp;lt;/code&amp;gt;) Hierbei muss man darauf achten, wiederum wohlgeformtes XML zu produzieren.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben der where-Klauseln muss eine Besonderheit beachtet werden. Da im XML-Umfeld stets zwischen dem kompletten Knoten und dessen Inhalt unterschieden wird, werden auch hier unterschiedliche Vergleichsoperatoren angeboten. &lt;br /&gt;
&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung des Wertes eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;eq&#039;&#039;&#039; (equal), &#039;&#039;&#039;ne&#039;&#039;&#039; (not equal), &#039;&#039;&#039;lt&#039;&#039;&#039; (less than), &#039;&#039;&#039;le&#039;&#039;&#039; (less or equal), &#039;&#039;&#039;gt&#039;&#039;&#039; (greater than), &#039;&#039;&#039;ge&#039;&#039;&#039; (greater or equal)&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Existenz eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;=&#039;&#039;&#039;, &#039;&#039;&#039;!=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Abfolge von Elementen: &lt;br /&gt;
 &#039;&#039;&#039;is&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Weitere Elemente ===&lt;br /&gt;
&lt;br /&gt;
Neben den bereits genannten FLWOR-Ausdrücken verfügt XQuery über weitere Elemente, die seine Funktionalität und Möglichkeiten erweitern. So können auch Listen (z.B.: &amp;lt;code&amp;gt;(1, 2, 4)&amp;lt;/code&amp;gt;) oder Integerränge (z.B.: &amp;lt;code&amp;gt;1 to 3&amp;lt;/code&amp;gt;, d. h. die Zahlen 1, 2 und 3) definiert werden.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Knotenfolgen zu kombinieren, können, wie in SQL auch, die Operatoren &#039;&#039;&#039;&amp;lt;code&amp;gt;union&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;intersect&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;except&amp;lt;/code&amp;gt;&#039;&#039;&#039; verwendet werden. Die Auswertung der Knoten und ihres Inhalts anhand von Bedingungen ist in XQuery möglich. Hierzu kann das &#039;&#039;&#039;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;then&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Konstrukt verwendet werden. Knotenmengen können auch anhand quantifizierender Ausdrücke überprüft werden (&#039;&#039;&#039;&amp;lt;code&amp;gt;some&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;every&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In XQuery können Kommentare, auch geschachtelt, verwendet werden. Diese werden jeweils durch einen Smilie eingeleitet und abgeschlossen (z.B.: &amp;lt;code&amp;gt;(: Kommentar :)&amp;lt;/code&amp;gt;). Auch Kommentare im XML-Format sind erlaubt (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar --&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Benutzerdefinierte Funktionen ===&lt;br /&gt;
&lt;br /&gt;
In XQuery können XPath-Funktionen verwendet werden. &lt;br /&gt;
&lt;br /&gt;
Ein Besonderheit, die XQuery bietet, ist jedoch die Möglichkeit zur Definition benutzerdefinierter Funktionen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;declare function&#039;&#039;&#039; namespace:function (para1 &#039;&#039;&#039;as&#039;&#039;&#039; type1, ...)&lt;br /&gt;
 &#039;&#039;&#039;as&#039;&#039;&#039; ret&lt;br /&gt;
 { &lt;br /&gt;
   &amp;lt;expr&amp;gt; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
In diesen Funktionen können weitere Funktionen aufgerufen werden. Auch der rekursi-ve Aufruf von Funktionen ist an dieser Stelle möglich. Gerade die Möglichkeit zur Verwendung von Rekursion in den benutzerdefinierten Funktionen unterscheidet XQuery grundlegend von SQL.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel gibt aus einem XML-Dokument, in dem Familienmitglieder über eine ID verknüpft sind, den Stammbaum aller Ottos aus. Dazu wird zuerst eine lokale benutzerdefinierte Funktion erstellt, die sich rekursiv selbst aufruft, bis keine Vorfahren mehr gefunden werden können. Diese Funktion kann anschließend unter Angabe ihres Namespaces beispielsweise aus einer for-Schleife aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
 declare function local:getfamilie($id as xs:string) as node()* {&lt;br /&gt;
   &amp;lt;mitglied&amp;gt;&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/last}&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/first}&lt;br /&gt;
     &amp;lt;mutter&amp;gt; {let $mid as xs:string := //person[id=$id]/mutter&lt;br /&gt;
              return if ($mid) then local:getfamilie(string($mid)) else ()&lt;br /&gt;
     }&amp;lt;/mutter&amp;gt;&lt;br /&gt;
     &amp;lt;vater&amp;gt; {let $vid as xs:string := //person[id=$id]/vater&lt;br /&gt;
              return if ($vid) then local:getfamilie(string($vid)) else ()&lt;br /&gt;
     }&amp;lt;/vater&amp;gt;&lt;br /&gt;
   &amp;lt;/mitglied&amp;gt;&lt;br /&gt;
 };&lt;br /&gt;
 for $e in document(“personen.xml“)//person[first=&amp;quot;Otto&amp;quot;]&lt;br /&gt;
 return &amp;lt;familie&amp;gt;{local:getfamilie(string($e/id))}&amp;lt;/familie&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/xquery http://www.w3.org/TR/xquery]&lt;br /&gt;
* [http://www.w3.org/XML/Query http://www.w3.org/XML/Query]&lt;br /&gt;
* [http://www.w3schools.com/xquery/xquery_intro.asp http://www.w3schools.com/xquery/xquery_intro.asp]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://demo.exist-db.org/xquery/functions.xq http://demo.exist-db.org/xquery/functions.xq]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/XQuery http://de.wikipedia.org/wiki/XQuery]&lt;br /&gt;
* Lehner, Wolfgang. Schöning, Harald. „XQuery“ – Ein Überblick. Datenbank-Spektrum. Ausgabe 11/2004.&lt;br /&gt;
* Sasaki, Felix. Milde, Jan-Torsten. Fragestunde. Neuerungen in XQuery und XSLT.XML &amp;amp; Web Services Magazin. Ausgabe 4.05. Software und Support Verlag GmbH.&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2515</id>
		<title>XML</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2515"/>
		<updated>2006-07-06T17:10:49Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Programmierung]]&lt;br /&gt;
Die &#039;&#039;&#039;Extensible Markup Language&#039;&#039;&#039; wurde von der „XML Activity“ des [http://www.w3.org W3C] entwickelt. Als eine von SGML abgeleitete Auszeichnungssprache bietet sie die Möglichkeit, weitere Auszeichnungssprachen zu definieren.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
Mit XML werden Informationen in einer Baum-Struktur gespeichert. &lt;br /&gt;
&lt;br /&gt;
Ein Vorteil dieser Auszeichnungssprache ist, dass für die Baum-Struktur keine festen Element- oder Attributnamen, wie beipielsweise in HTML, vorgegeben sind. Das bedeutet, der Programmierer kann sein Dokument nach eine eigenen der Situation angepassten Muster entwerfen. Vor allem durch die Möglichkeit, Elemente und Attribute selbst zu benennen, wird die spätere Lesbarkeit der Dokumente erhöht.&lt;br /&gt;
&lt;br /&gt;
Jedes XML-Dokument beginnt mit einem so genannten Prolog. In diesem muss die XML-Version angegeben, eventuell können auch der verwendete Zeichensatz oder die Art des Dokuments angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Der XML-Baum kann die folgenden Knotentypen beinhalten:&lt;br /&gt;
&lt;br /&gt;
* Kommentare (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar--&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elemente (z.B.: &amp;lt;code&amp;gt;&amp;lt;element&amp;gt;...&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;element /&amp;gt;&amp;lt;/code&amp;gt; für ein leeres Element)&lt;br /&gt;
* Attribute (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Text (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;text&amp;quot;&amp;gt;text&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Ausführungsanweisungen (engl.: Processing Instructions, PIs)&lt;br /&gt;
&lt;br /&gt;
Im folgenden ist ein Beispiel einer XML-Datei zur Verwaltung von Büchern dargestellt:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;books&amp;gt;&lt;br /&gt;
   &amp;lt;book id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;authors&amp;gt;&lt;br /&gt;
       &amp;lt;author title=&amp;quot;Dr.&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;firstname&amp;gt;John&amp;lt;/firstname&amp;gt;&lt;br /&gt;
         &amp;lt;lastname&amp;gt;Smith&amp;lt;/lastname&amp;gt;&lt;br /&gt;
       &amp;lt;/autor&amp;gt;&lt;br /&gt;
     &amp;lt;/authors&amp;gt;&lt;br /&gt;
     &amp;lt;title&amp;gt;1st Book&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;subtitle&amp;gt;This is my first book&amp;lt;/subtitle&amp;gt;&lt;br /&gt;
     &amp;lt;location&amp;gt;London&amp;lt;/location&amp;gt;&lt;br /&gt;
     &amp;lt;year&amp;gt;2006&amp;lt;/year&amp;gt;&lt;br /&gt;
   &amp;lt;/book&amp;gt;&lt;br /&gt;
 &amp;lt;/books&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schemas ==&lt;br /&gt;
&lt;br /&gt;
Die Struktur des XML-Dokuments kann durch Schemasprachen definiert werden. Hier kann man festlegen, in welcher Reihenfolge und welcher Verschachtelung die Elemente auftreteen, welche Attribute sie beinhalten und welche Inhalte die Text-Knoten annehmen dürfen. Hierzu kann beispielsweise &#039;&#039;&#039;DTD&#039;&#039;&#039; (Dokument Type Definition) oder das jüngere und flexiblere [www.w3.org/XML/Schema XML Schema] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
In einer DTD wird Abfolge und Verschachtelung der Elemente anhand regulärer Ausdrücke dargestellt. Es können Entitäten definiert und Wertelisten für Attribute vorgegeben werden.&lt;br /&gt;
&lt;br /&gt;
In einem XML Schema können weit mehr Eigenschaften einex XML-Dokuments als in DTDs festgelegt werden. XML Schema kennt mehrere Datentypen (z.B.: &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;), es können jedoch auch neue Datentypen definiert und diese wiederverwendet werden Auch das Ertellen von Patterns für die möglichen Werte der Text-Knoten ist möglich. XML-Schema-Dokumente werden selbst in einer XML-Syntax geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wohlgeformtheit ==&lt;br /&gt;
&lt;br /&gt;
Zwar bietet XML dem Programmeirer sehr viel Spielruam, jedoch müssen bestimmte Regeln eingehalten werden. Diese Regeln definieren die &#039;&#039;&#039;Wohlgeformtheit&#039;&#039;&#039; eines XML-Dokuments:&lt;br /&gt;
&lt;br /&gt;
* der XML-Baum enthält genau ein Wurzelelement (vgl.: &amp;lt;code&amp;gt;&amp;lt;books&amp;gt;...&amp;lt;/books&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags müssen immer geschlossen werden (z.B.: &amp;lt;code&amp;gt;&amp;lt;book&amp;gt;...&amp;lt;/book&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;location /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags dürfen sich nicht überlappen  (z.B.: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt, erlaubt: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Die Werte von Attributen müssen stets in Anführungszeichen stehen (z.B.: &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;elem attr=&#039;value&#039;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Attribute dürfen nicht mehrmals in einem Element vorkommen (z.B. &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt)&lt;br /&gt;
* Kommentare werden durch &amp;lt;code&amp;gt;&amp;lt;!--&amp;lt;/code&amp;gt; eingeleitet und mit &amp;lt;code&amp;gt;--&amp;gt;&amp;lt;/code&amp;gt; beendet&lt;br /&gt;
* Kommentare und PIs dürfen nicht innerhalb von Tags statttfinden&lt;br /&gt;
* Sonderzeichen (&amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;) dürfen nicht in Text-Knoten verwendet werden&lt;br /&gt;
* die Struktur des Dokument wird durch DTD definiert und eingebunden), oder das Attribut &amp;lt;code&amp;gt;standalone&amp;lt;/code&amp;gt; erhält im Prolog den Wert &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Die XML-Familie ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[XML Schema]]&#039;&#039;&#039; zur Definition des Dokumenten-Baums&lt;br /&gt;
* &#039;&#039;&#039;[[XLink]]&#039;&#039;&#039; zum Einfügen von Hyperlinks in XML-Dateien&lt;br /&gt;
* &#039;&#039;&#039;[[XPointer]]&#039;&#039;&#039; um auf Daten innerhalb eines XML-Dokuments zu zeigen&lt;br /&gt;
* &#039;&#039;&#039;[[XSLT]]&#039;&#039;&#039; zum Transformieren von XML-Dokumenten&lt;br /&gt;
* &#039;&#039;&#039;[[XPath]]&#039;&#039;&#039; für die Navigation innerhalb eines XML-Dokuments&lt;br /&gt;
* &#039;&#039;&#039;[[XQuery]]&#039;&#039;&#039; zur Abfrage von XML-Datenbanken&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/XML http://www.w3.org/XML]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Xml http://de.wikipedia.org/wiki/Xml]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2512</id>
		<title>XML</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2512"/>
		<updated>2006-07-06T17:09:54Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Informatik]]&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;Extensible Markup Language&#039;&#039;&#039; wurde von der „XML Activity“ des [http://www.w3.org W3C] entwickelt. Als eine von SGML abgeleitete Auszeichnungssprache bietet sie die Möglichkeit, weitere Auszeichnungssprachen zu definieren.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
Mit XML werden Informationen in einer Baum-Struktur gespeichert. &lt;br /&gt;
&lt;br /&gt;
Ein Vorteil dieser Auszeichnungssprache ist, dass für die Baum-Struktur keine festen Element- oder Attributnamen, wie beipielsweise in HTML, vorgegeben sind. Das bedeutet, der Programmierer kann sein Dokument nach eine eigenen der Situation angepassten Muster entwerfen. Vor allem durch die Möglichkeit, Elemente und Attribute selbst zu benennen, wird die spätere Lesbarkeit der Dokumente erhöht.&lt;br /&gt;
&lt;br /&gt;
Jedes XML-Dokument beginnt mit einem so genannten Prolog. In diesem muss die XML-Version angegeben, eventuell können auch der verwendete Zeichensatz oder die Art des Dokuments angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Der XML-Baum kann die folgenden Knotentypen beinhalten:&lt;br /&gt;
&lt;br /&gt;
* Kommentare (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar--&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elemente (z.B.: &amp;lt;code&amp;gt;&amp;lt;element&amp;gt;...&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;element /&amp;gt;&amp;lt;/code&amp;gt; für ein leeres Element)&lt;br /&gt;
* Attribute (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Text (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;text&amp;quot;&amp;gt;text&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Ausführungsanweisungen (engl.: Processing Instructions, PIs)&lt;br /&gt;
&lt;br /&gt;
Im folgenden ist ein Beispiel einer XML-Datei zur Verwaltung von Büchern dargestellt:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;books&amp;gt;&lt;br /&gt;
   &amp;lt;book id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;authors&amp;gt;&lt;br /&gt;
       &amp;lt;author title=&amp;quot;Dr.&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;firstname&amp;gt;John&amp;lt;/firstname&amp;gt;&lt;br /&gt;
         &amp;lt;lastname&amp;gt;Smith&amp;lt;/lastname&amp;gt;&lt;br /&gt;
       &amp;lt;/autor&amp;gt;&lt;br /&gt;
     &amp;lt;/authors&amp;gt;&lt;br /&gt;
     &amp;lt;title&amp;gt;1st Book&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;subtitle&amp;gt;This is my first book&amp;lt;/subtitle&amp;gt;&lt;br /&gt;
     &amp;lt;location&amp;gt;London&amp;lt;/location&amp;gt;&lt;br /&gt;
     &amp;lt;year&amp;gt;2006&amp;lt;/year&amp;gt;&lt;br /&gt;
   &amp;lt;/book&amp;gt;&lt;br /&gt;
 &amp;lt;/books&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schemas ==&lt;br /&gt;
&lt;br /&gt;
Die Struktur des XML-Dokuments kann durch Schemasprachen definiert werden. Hier kann man festlegen, in welcher Reihenfolge und welcher Verschachtelung die Elemente auftreteen, welche Attribute sie beinhalten und welche Inhalte die Text-Knoten annehmen dürfen. Hierzu kann beispielsweise &#039;&#039;&#039;DTD&#039;&#039;&#039; (Dokument Type Definition) oder das jüngere und flexiblere [www.w3.org/XML/Schema XML Schema] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
In einer DTD wird Abfolge und Verschachtelung der Elemente anhand regulärer Ausdrücke dargestellt. Es können Entitäten definiert und Wertelisten für Attribute vorgegeben werden.&lt;br /&gt;
&lt;br /&gt;
In einem XML Schema können weit mehr Eigenschaften einex XML-Dokuments als in DTDs festgelegt werden. XML Schema kennt mehrere Datentypen (z.B.: &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;), es können jedoch auch neue Datentypen definiert und diese wiederverwendet werden Auch das Ertellen von Patterns für die möglichen Werte der Text-Knoten ist möglich. XML-Schema-Dokumente werden selbst in einer XML-Syntax geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wohlgeformtheit ==&lt;br /&gt;
&lt;br /&gt;
Zwar bietet XML dem Programmeirer sehr viel Spielruam, jedoch müssen bestimmte Regeln eingehalten werden. Diese Regeln definieren die &#039;&#039;&#039;Wohlgeformtheit&#039;&#039;&#039; eines XML-Dokuments:&lt;br /&gt;
&lt;br /&gt;
* der XML-Baum enthält genau ein Wurzelelement (vgl.: &amp;lt;code&amp;gt;&amp;lt;books&amp;gt;...&amp;lt;/books&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags müssen immer geschlossen werden (z.B.: &amp;lt;code&amp;gt;&amp;lt;book&amp;gt;...&amp;lt;/book&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;location /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags dürfen sich nicht überlappen  (z.B.: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt, erlaubt: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Die Werte von Attributen müssen stets in Anführungszeichen stehen (z.B.: &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;elem attr=&#039;value&#039;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Attribute dürfen nicht mehrmals in einem Element vorkommen (z.B. &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt)&lt;br /&gt;
* Kommentare werden durch &amp;lt;code&amp;gt;&amp;lt;!--&amp;lt;/code&amp;gt; eingeleitet und mit &amp;lt;code&amp;gt;--&amp;gt;&amp;lt;/code&amp;gt; beendet&lt;br /&gt;
* Kommentare und PIs dürfen nicht innerhalb von Tags statttfinden&lt;br /&gt;
* Sonderzeichen (&amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;) dürfen nicht in Text-Knoten verwendet werden&lt;br /&gt;
* die Struktur des Dokument wird durch DTD definiert und eingebunden), oder das Attribut &amp;lt;code&amp;gt;standalone&amp;lt;/code&amp;gt; erhält im Prolog den Wert &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Die XML-Familie ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[XML Schema]]&#039;&#039;&#039; zur Definition des Dokumenten-Baums&lt;br /&gt;
* &#039;&#039;&#039;[[XLink]]&#039;&#039;&#039; zum Einfügen von Hyperlinks in XML-Dateien&lt;br /&gt;
* &#039;&#039;&#039;[[XPointer]]&#039;&#039;&#039; um auf Daten innerhalb eines XML-Dokuments zu zeigen&lt;br /&gt;
* &#039;&#039;&#039;[[XSLT]]&#039;&#039;&#039; zum Transformieren von XML-Dokumenten&lt;br /&gt;
* &#039;&#039;&#039;[[XPath]]&#039;&#039;&#039; für die Navigation innerhalb eines XML-Dokuments&lt;br /&gt;
* &#039;&#039;&#039;[[XQuery]]&#039;&#039;&#039; zur Abfrage von XML-Datenbanken&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/XML http://www.w3.org/XML]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Xml http://de.wikipedia.org/wiki/Xml]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2511</id>
		<title>XML</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2511"/>
		<updated>2006-07-06T16:59:58Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Extensible Markup Language&#039;&#039;&#039; wurde von der „XML Activity“ des [http://www.w3.org W3C] entwickelt. Als eine von SGML abgeleitete Auszeichnungssprache bietet sie die Möglichkeit, weitere Auszeichnungssprachen zu definieren.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
Mit XML werden Informationen in einer Baum-Struktur gespeichert. &lt;br /&gt;
&lt;br /&gt;
Ein Vorteil dieser Auszeichnungssprache ist, dass für die Baum-Struktur keine festen Element- oder Attributnamen, wie beipielsweise in HTML, vorgegeben sind. Das bedeutet, der Programmierer kann sein Dokument nach eine eigenen der Situation angepassten Muster entwerfen. Vor allem durch die Möglichkeit, Elemente und Attribute selbst zu benennen, wird die spätere Lesbarkeit der Dokumente erhöht.&lt;br /&gt;
&lt;br /&gt;
Jedes XML-Dokument beginnt mit einem so genannten Prolog. In diesem muss die XML-Version angegeben, eventuell können auch der verwendete Zeichensatz oder die Art des Dokuments angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Der XML-Baum kann die folgenden Knotentypen beinhalten:&lt;br /&gt;
&lt;br /&gt;
* Kommentare (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar--&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elemente (z.B.: &amp;lt;code&amp;gt;&amp;lt;element&amp;gt;...&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;element /&amp;gt;&amp;lt;/code&amp;gt; für ein leeres Element)&lt;br /&gt;
* Attribute (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Text (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;text&amp;quot;&amp;gt;text&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Ausführungsanweisungen (engl.: Processing Instructions, PIs)&lt;br /&gt;
&lt;br /&gt;
Im folgenden ist ein Beispiel einer XML-Datei zur Verwaltung von Büchern dargestellt:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;books&amp;gt;&lt;br /&gt;
   &amp;lt;book id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;authors&amp;gt;&lt;br /&gt;
       &amp;lt;author title=&amp;quot;Dr.&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;firstname&amp;gt;John&amp;lt;/firstname&amp;gt;&lt;br /&gt;
         &amp;lt;lastname&amp;gt;Smith&amp;lt;/lastname&amp;gt;&lt;br /&gt;
       &amp;lt;/autor&amp;gt;&lt;br /&gt;
     &amp;lt;/authors&amp;gt;&lt;br /&gt;
     &amp;lt;title&amp;gt;1st Book&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;subtitle&amp;gt;This is my first book&amp;lt;/subtitle&amp;gt;&lt;br /&gt;
     &amp;lt;location&amp;gt;London&amp;lt;/location&amp;gt;&lt;br /&gt;
     &amp;lt;year&amp;gt;2006&amp;lt;/year&amp;gt;&lt;br /&gt;
   &amp;lt;/book&amp;gt;&lt;br /&gt;
 &amp;lt;/books&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schemas ==&lt;br /&gt;
&lt;br /&gt;
Die Struktur des XML-Dokuments kann durch Schemasprachen definiert werden. Hier kann man festlegen, in welcher Reihenfolge und welcher Verschachtelung die Elemente auftreteen, welche Attribute sie beinhalten und welche Inhalte die Text-Knoten annehmen dürfen. Hierzu kann beispielsweise &#039;&#039;&#039;DTD&#039;&#039;&#039; (Dokument Type Definition) oder das jüngere und flexiblere [www.w3.org/XML/Schema XML Schema] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
In einer DTD wird Abfolge und Verschachtelung der Elemente anhand regulärer Ausdrücke dargestellt. Es können Entitäten definiert und Wertelisten für Attribute vorgegeben werden.&lt;br /&gt;
&lt;br /&gt;
In einem XML Schema können weit mehr Eigenschaften einex XML-Dokuments als in DTDs festgelegt werden. XML Schema kennt mehrere Datentypen (z.B.: &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;), es können jedoch auch neue Datentypen definiert und diese wiederverwendet werden Auch das Ertellen von Patterns für die möglichen Werte der Text-Knoten ist möglich. XML-Schema-Dokumente werden selbst in einer XML-Syntax geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wohlgeformtheit ==&lt;br /&gt;
&lt;br /&gt;
Zwar bietet XML dem Programmeirer sehr viel Spielruam, jedoch müssen bestimmte Regeln eingehalten werden. Diese Regeln definieren die &#039;&#039;&#039;Wohlgeformtheit&#039;&#039;&#039; eines XML-Dokuments:&lt;br /&gt;
&lt;br /&gt;
* der XML-Baum enthält genau ein Wurzelelement (vgl.: &amp;lt;code&amp;gt;&amp;lt;books&amp;gt;...&amp;lt;/books&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags müssen immer geschlossen werden (z.B.: &amp;lt;code&amp;gt;&amp;lt;book&amp;gt;...&amp;lt;/book&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;location /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags dürfen sich nicht überlappen  (z.B.: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt, erlaubt: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Die Werte von Attributen müssen stets in Anführungszeichen stehen (z.B.: &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;elem attr=&#039;value&#039;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Attribute dürfen nicht mehrmals in einem Element vorkommen (z.B. &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt)&lt;br /&gt;
* Kommentare werden durch &amp;lt;code&amp;gt;&amp;lt;!--&amp;lt;/code&amp;gt; eingeleitet und mit &amp;lt;code&amp;gt;--&amp;gt;&amp;lt;/code&amp;gt; beendet&lt;br /&gt;
* Kommentare und PIs dürfen nicht innerhalb von Tags statttfinden&lt;br /&gt;
* Sonderzeichen (&amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;) dürfen nicht in Text-Knoten verwendet werden&lt;br /&gt;
* die Struktur des Dokument wird durch DTD definiert und eingebunden), oder das Attribut &amp;lt;code&amp;gt;standalone&amp;lt;/code&amp;gt; erhält im Prolog den Wert &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Die XML-Familie ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[XML Schema]]&#039;&#039;&#039; zur Definition des Dokumenten-Baums&lt;br /&gt;
* &#039;&#039;&#039;[[XLink]]&#039;&#039;&#039; zum Einfügen von Hyperlinks in XML-Dateien&lt;br /&gt;
* &#039;&#039;&#039;[[XPointer]]&#039;&#039;&#039; um auf Daten innerhalb eines XML-Dokuments zu zeigen&lt;br /&gt;
* &#039;&#039;&#039;[[XSLT]]&#039;&#039;&#039; zum Transformieren von XML-Dokumenten&lt;br /&gt;
* &#039;&#039;&#039;[[XPath]]&#039;&#039;&#039; für die Navigation innerhalb eines XML-Dokuments&lt;br /&gt;
* &#039;&#039;&#039;[[XQuery]]&#039;&#039;&#039; zur Abfrage von XML-Datenbanken&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/XML http://www.w3.org/XML]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Xml http://de.wikipedia.org/wiki/Xml]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2510</id>
		<title>XML</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML&amp;diff=2510"/>
		<updated>2006-07-06T16:59:24Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;Extensible Markup Language&#039;&#039;&#039; wurde von der „XML Activity“ des [http://www.w3.org W3C] entwickelt. Als eine von SGML abgeleitete Auszeichnungssprache bietet sie die Möglichkeit, weitere Auszeichnungssprachen zu definieren.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
Mit XML werden Informationen in einer Baum-Struktur gespeichert. &lt;br /&gt;
&lt;br /&gt;
Ein Vorteil dieser Auszeichnungssprache ist, dass für die Baum-Struktur keine festen Element- oder Attributnamen, wie beipielsweise in HTML, vorgegeben sind. Das bedeutet, der Programmierer kann sein Dokument nach eine eigenen der Situation angepassten Muster entwerfen. Vor allem durch die Möglichkeit, Elemente und Attribute selbst zu benennen, wird die spätere Lesbarkeit der Dokumente erhöht.&lt;br /&gt;
&lt;br /&gt;
Jedes XML-Dokument beginnt mit einem so genannten Prolog. In diesem muss die XML-Version angegeben, eventuell können auch der verwendete Zeichensatz oder die Art des Dokuments angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Der XML-Baum kann die folgenden Knotentypen beinhalten:&lt;br /&gt;
&lt;br /&gt;
* Kommentare (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar--&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elemente (z.B.: &amp;lt;code&amp;gt;&amp;lt;element&amp;gt;...&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;element /&amp;gt;&amp;lt;/code&amp;gt; für ein leeres Element)&lt;br /&gt;
* Attribute (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Text (z.B.: &amp;lt;code&amp;gt;&amp;lt;element attribute=&amp;quot;text&amp;quot;&amp;gt;text&amp;lt;/element&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Ausführungsanweisungen (engl.: Processing Instructions, PIs)&lt;br /&gt;
&lt;br /&gt;
Im folgenden ist ein Beispiel einer XML-Datei zur Verwaltung von Büchern dargestellt:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;books&amp;gt;&lt;br /&gt;
   &amp;lt;book id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;authors&amp;gt;&lt;br /&gt;
       &amp;lt;author title=&amp;quot;Dr.&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;firstname&amp;gt;John&amp;lt;/firstname&amp;gt;&lt;br /&gt;
         &amp;lt;lastname&amp;gt;Smith&amp;lt;/lastname&amp;gt;&lt;br /&gt;
       &amp;lt;/autor&amp;gt;&lt;br /&gt;
     &amp;lt;/authors&amp;gt;&lt;br /&gt;
     &amp;lt;title&amp;gt;1st Book&amp;lt;/title&amp;gt;&lt;br /&gt;
     &amp;lt;subtitle&amp;gt;This is my first book&amp;lt;/subtitle&amp;gt;&lt;br /&gt;
     &amp;lt;location&amp;gt;London&amp;lt;/location&amp;gt;&lt;br /&gt;
     &amp;lt;year&amp;gt;2006&amp;lt;/year&amp;gt;&lt;br /&gt;
   &amp;lt;/book&amp;gt;&lt;br /&gt;
 &amp;lt;/books&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schemas ===&lt;br /&gt;
&lt;br /&gt;
Die Struktur des XML-Dokuments kann durch Schemasprachen definiert werden. Hier kann man festlegen, in welcher Reihenfolge und welcher Verschachtelung die Elemente auftreteen, welche Attribute sie beinhalten und welche Inhalte die Text-Knoten annehmen dürfen. Hierzu kann beispielsweise &#039;&#039;&#039;DTD&#039;&#039;&#039; (Dokument Type Definition) oder das jüngere und flexiblere [www.w3.org/XML/Schema XML Schema] verwendet werden.&lt;br /&gt;
&lt;br /&gt;
In einer DTD wird Abfolge und Verschachtelung der Elemente anhand regulärer Ausdrücke dargestellt. Es können Entitäten definiert und Wertelisten für Attribute vorgegeben werden.&lt;br /&gt;
&lt;br /&gt;
In einem XML Schema können weit mehr Eigenschaften einex XML-Dokuments als in DTDs festgelegt werden. XML Schema kennt mehrere Datentypen (z.B.: &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;integer&amp;lt;/code&amp;gt;), es können jedoch auch neue Datentypen definiert und diese wiederverwendet werden Auch das Ertellen von Patterns für die möglichen Werte der Text-Knoten ist möglich. XML-Schema-Dokumente werden selbst in einer XML-Syntax geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Wohlgeformtheit ==&lt;br /&gt;
&lt;br /&gt;
Zwar bietet XML dem Programmeirer sehr viel Spielruam, jedoch müssen bestimmte Regeln eingehalten werden. Diese Regeln definieren die &#039;&#039;&#039;Wohlgeformtheit&#039;&#039;&#039; eines XML-Dokuments:&lt;br /&gt;
&lt;br /&gt;
* der XML-Baum enthält genau ein Wurzelelement (vgl.: &amp;lt;code&amp;gt;&amp;lt;books&amp;gt;...&amp;lt;/books&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags müssen immer geschlossen werden (z.B.: &amp;lt;code&amp;gt;&amp;lt;book&amp;gt;...&amp;lt;/book&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;location /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Tags dürfen sich nicht überlappen  (z.B.: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt, erlaubt: &amp;lt;code&amp;gt;&amp;lt;a1&amp;gt;&amp;lt;b1&amp;gt;&amp;lt;/b1&amp;gt;&amp;lt;/a1&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Die Werte von Attributen müssen stets in Anführungszeichen stehen (z.B.: &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;&amp;lt;elem attr=&#039;value&#039;&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Attribute dürfen nicht mehrmals in einem Element vorkommen (z.B. &amp;lt;code&amp;gt;&amp;lt;elem attr=&amp;quot;value&amp;quot; attr=&amp;quot;value&amp;quot; /&amp;gt;&amp;lt;/code&amp;gt; nicht erlaubt)&lt;br /&gt;
* Kommentare werden durch &amp;lt;code&amp;gt;&amp;lt;!--&amp;lt;/code&amp;gt; eingeleitet und mit &amp;lt;code&amp;gt;--&amp;gt;&amp;lt;/code&amp;gt; beendet&lt;br /&gt;
* Kommentare und PIs dürfen nicht innerhalb von Tags statttfinden&lt;br /&gt;
* Sonderzeichen (&amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;) dürfen nicht in Text-Knoten verwendet werden&lt;br /&gt;
* die Struktur des Dokument wird durch DTD definiert und eingebunden), oder das Attribut &amp;lt;code&amp;gt;standalone&amp;lt;/code&amp;gt; erhält im Prolog den Wert &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Die XML-Familie ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[XML Schema]]&#039;&#039;&#039; zur Definition des Dokumenten-Baums&lt;br /&gt;
* &#039;&#039;&#039;[[XLink]]&#039;&#039;&#039; zum Einfügen von Hyperlinks in XML-Dateien&lt;br /&gt;
* &#039;&#039;&#039;[[XPointer]]&#039;&#039;&#039; um auf Daten innerhalb eines XML-Dokuments zu zeigen&lt;br /&gt;
* &#039;&#039;&#039;[[XSLT]]&#039;&#039;&#039; zum Transformieren von XML-Dokumenten&lt;br /&gt;
* &#039;&#039;&#039;[[XPath]]&#039;&#039;&#039; für die Navigation innerhalb eines XML-Dokuments&lt;br /&gt;
* &#039;&#039;&#039;[[XQuery]]&#039;&#039;&#039; zur Abfrage von XML-Datenbanken&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/XML http://www.w3.org/XML]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/Xml http://de.wikipedia.org/wiki/Xml]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XUpdate&amp;diff=2514</id>
		<title>XUpdate</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XUpdate&amp;diff=2514"/>
		<updated>2006-07-06T16:00:15Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XUpdate (Namespace: [http://www.xmldb.org/xupdate http://www.xmldb.org/xupdate]) wurde von der Initiative [http://xmldb-org.sourceforge.net XML:DB] entwickelt, die ebenfalls eine API für XUpdate zur Verfügung stellt. XUpdate ermöglicht es dem Programmierer, ändernd auf Daten und Dateien zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
XUpdate ist eine deklarative Sprache, deren Anweisungen im XML-Format geschrieben werden. Für die Navigation innerhalb der Dokumente werden XPath und dessen Funktionen verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Anweisungen werden nach dem folgenden Muster aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xupdate:type select=&amp;quot;expr&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;xupdate:node&amp;gt;...&amp;lt;/xupdate:node&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/xupdate:type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Beginn des Elements &#039;&#039;&#039;&amp;lt;code&amp;gt;xupdate:type&amp;lt;/code&amp;gt;&#039;&#039;&#039; wird die Art der Modifikation angegeben. Es stehen verschiedene XUpdate-Funktionen zum Einfügen eines neuen Knotens (&#039;&#039;&#039;&amp;lt;code&amp;gt;insert&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;before&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;insert&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;after&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;append&amp;lt;/code&amp;gt;&#039;&#039;&#039;) und zum Ändern (&#039;&#039;&#039;&amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;rename&amp;lt;/code&amp;gt;&#039;&#039;&#039;) oder Löschen (&#039;&#039;&#039;&amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;&#039;&#039;&#039;) eines bereits bestehenden Knotens zur Verfügung. Zusätzlich können Knoten in einer Konstanten gespeichert (&#039;&#039;&#039;&amp;lt;code&amp;gt;variable&amp;lt;/code&amp;gt;&#039;&#039;&#039;) oder ihr Wert ausgelesen (&#039;&#039;&#039;&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;of&amp;lt;/code&amp;gt;&#039;&#039;&#039;) werden. Auch das Einfügen von Kommentaren (&#039;&#039;&#039;&amp;lt;code&amp;gt;comment&amp;lt;/code&amp;gt;&#039;&#039;&#039;) ist möglich.&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;&amp;lt;code&amp;gt;select&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Attribut wird für &amp;lt;code&amp;gt;expr&amp;lt;/code&amp;gt; ein XPath-Ausdruck angegeben. Es kann im Dokument navigiert und Elemente ausgewählt werden. Hierbei können auch die von XPath zur Verfügung gestellten Funktionen und Bedingungsangaben benutzt werden.&lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;&#039;&amp;lt;code&amp;gt;xupdate:node&amp;lt;/code&amp;gt;&#039;&#039;&#039; wird ein Knoten definiert, &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; kann je nach gewünschtem Knotentyp die Ausprägungen &#039;&#039;&#039;&amp;lt;code&amp;gt;element&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;attribute&amp;lt;/code&amp;gt;&#039;&#039;&#039;oder &#039;&#039;&#039;&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;&#039;&#039;&#039;annehmen.&lt;br /&gt;
&lt;br /&gt;
folgenden Beispiel wird aus einem XML-Dokument der Nachname von Otto in der Konstanten &amp;lt;code&amp;gt;$last&amp;lt;/code&amp;gt; gespeichert. Anschließend wird ein neuer Personen-Knoten für Susi Müller hinzugefügt. Danach werden alle Personen, die nicht Müller heißen, aus dem Dokument gelöscht.&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;person gender=“m“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Müller&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Otto&amp;lt;/first&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xupdate:variable name=“last“ select=“//person[first=’Otto’]/last“&amp;gt;&lt;br /&gt;
 &amp;lt;xupdate:append select=“/personen“&amp;gt;&lt;br /&gt;
   &amp;lt;xupdate:element name=“person“&amp;gt;&lt;br /&gt;
     &amp;lt;xupdate:attribute&amp;gt;f&amp;lt;/xupdate:attribute&amp;gt;&lt;br /&gt;
     &amp;lt;xupdate:element name=“last“&amp;gt;&amp;lt;xupdate:value-of select=&amp;quot;$last&amp;quot;/&amp;gt;&amp;lt;/xupdate:element&amp;gt;&lt;br /&gt;
     &amp;lt;xupdate:element name=“first“&amp;gt;Susi&amp;lt;/xupdate:element&amp;gt;&lt;br /&gt;
   &amp;lt;/xupdate:element&amp;gt;&lt;br /&gt;
 &amp;lt;/xupdate:append&amp;gt;&lt;br /&gt;
 &amp;lt;xupdate:remove select=“//person[last!=&#039;Müller&#039;]“/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Müller&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Susi&amp;lt;/first&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
 &amp;lt;person gender=“m“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Müller&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Otto&amp;lt;/first&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.xmldb.org/xupdate http://www.xmldb.org/xupdate]&lt;br /&gt;
* [http://xmldb-org.sourceforge.net http://xmldb-org.sourceforge.net]&lt;br /&gt;
* [http://www.oio.de/m/eai/xupdate.htm http://www.oio.de/m/eai/xupdate.htm]&lt;br /&gt;
* [http://www.oio.de/m/eai/xupdate-append.htm http://www.oio.de/m/eai/xupdate-append.htm]&lt;br /&gt;
* [https://www.tu-chemnitz.de/informatik/DVS/dvs.informatik.tu-chemnitz.de/Seminar-SemiDB-XML/SS04-SemiDB-XML/pdf/04-slides.pdf https://www.tu-chemnitz.de/informatik/DVS/dvs.informatik.tu-chemnitz.de/Seminar-SemiDB-XML/SS04-SemiDB-XML/pdf/04-slides.pdf]&lt;br /&gt;
* [http://www.info.uni-karlsruhe.de/~i44www/lehre/XML-WS-01-02/Vortrag15/note016.htm http://www.info.uni-karlsruhe.de/~i44www/lehre/XML-WS-01-02/Vortrag15/note016.htm]&lt;br /&gt;
* [http://www.zdnet.de/builder/print_this.htm?pid=39118709-20000202c http://www.zdnet.de/builder/print_this.htm?pid=39118709-20000202c]&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2504</id>
		<title>XML Query Language</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2504"/>
		<updated>2006-07-06T15:48:46Z</updated>

		<summary type="html">&lt;p&gt;BunzA: /* Quellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;XML Query Language&#039;&#039;&#039; ist eine Abfragesprache für XML-Datenbanken und wird von der „XML Query Working Group“, einer Untergruppe der „XML Activity“ des [http://www.w3.org W3C], entwickelt. Derzeit im Status „Working Draft“ soll XQuery bald zum W3C-Standard werden.&lt;br /&gt;
&lt;br /&gt;
Als funktionale Sprache arbeitet XQuery ohne Seiteneffekte. Das bedeutet, dass weder Daten dauerhaft oder auch nur temporär gespeichert, noch Inhalte modifiziert werden können.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Navigation innerhalb der Dokumente erfolgt mit Hilfe von [http://www.w3.org/TR/xpath XPath]. Durch XPath kann jeder Knoten des durch das XML-Dokument erstellten Baums erreicht werden. Die in XPath vorhandenen Funktionen und elementaren Ausdrücke können ebenfalls verwendet werden. Man spricht deshalb von XPath als einer Untermenge von XQuery.&lt;br /&gt;
&lt;br /&gt;
=== Das FLWOR-Muster ===&lt;br /&gt;
&lt;br /&gt;
Komplexere Ausdrücke werden nach dem &#039;&#039;&#039;FLWOR&#039;&#039;&#039;-Muster (&#039;&#039;&#039;f&#039;&#039;&#039;or-&#039;&#039;&#039;l&#039;&#039;&#039;et-&#039;&#039;&#039;w&#039;&#039;&#039;here-&#039;&#039;&#039;o&#039;&#039;&#039;rder-&#039;&#039;&#039;b&#039;&#039;&#039;y-&#039;&#039;&#039;r&#039;&#039;&#039;eturn) aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;for&#039;&#039;&#039; $var1 &#039;&#039;&#039;at&#039;&#039;&#039; $pos &#039;&#039;&#039;in&#039;&#039;&#039; &amp;lt;expr1&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;let&#039;&#039;&#039; $var2 := &amp;lt;expr2&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;where&#039;&#039;&#039; &amp;lt;bool&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;order by&#039;&#039;&#039; &amp;lt;expr3&amp;gt; &#039;&#039;&#039;ascending/descending&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;return&#039;&#039;&#039; &amp;lt;expr4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend der SELECT-Anweisung in SQL kann auch in XQuery zur Abfrage der Daten eine Schleife (&#039;&#039;&#039;&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;&#039;&#039;&#039;) durchlaufen werden. Das Element des jeweiligen Schleifenschritts wird dabei in einer Konstanten (&amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt;, s. o.) gespeichert, über die in den folgenden Anweisungen auf dessen Inhalt zugegriffen werden kann. In einer Konstanten (&amp;lt;code&amp;gt;$pos&amp;lt;/code&amp;gt;) kann die Position des Elementes gespeichert und auf diese, beispielsweise in der where-Bedingung, zugegriffen werden (z.B. &amp;lt;code&amp;gt;where $posvar1 mod 2 = 0&amp;lt;/code&amp;gt; bedeutet jeder 2te).&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Abschnitt können Konstanten definiert, mit Werten belegt und Berechnungen durchgeführt werden. In jedem Schritt werden diese Konstanten neu definiert, ihr Inhalt wird also nicht über den Schleifenschritt hinaus gespeichert. &lt;br /&gt;
&lt;br /&gt;
Es ist zudem möglich mehrere weitere &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisungen vor dem Aufruf der for-Schleife(n) zu platzieren. Auf diese Daten kann während des gesamten Schleifendurchlaufs zugegriffen werden. Um Berechnungen mit Daten aus einer Abfrage auszuführen, müssen diese jedoch nach der Zuweisung für &amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt; durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;&amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Bedingung wird jedes Element auf die angegebenen Kriterien geprüft. Hier können mehrere Bedingungen, die entweder mit &#039;&#039;&#039;&amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;&#039;&#039;&#039; verknüpft werden, angegeben werden. Im Gegensatz zu SQL können mit Xquery keine negativen Bedingungen (&amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt;) angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Erfüllt dieses die Bedingungen, so wird es in der &#039;&#039;&#039;&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisung verarbeitet und alle gefundenen Daten nach dem &#039;&#039;&#039;&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;by&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Kriterium geordnet zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel werden aus einem XML-Dokument die Nach- und Vornamen aller Personen ausgewählt und als neues XML-Dokument ausgegeben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Mayr&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Ute&amp;lt;/firste&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
 for $person in  document(“personen.xml“)//person&lt;br /&gt;
 let $l:=string($person/last),&lt;br /&gt;
     $f:= string($person/first)&lt;br /&gt;
 return &lt;br /&gt;
   &amp;lt;anrede&amp;gt;{$l}{“ “}{$f}&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
   &amp;lt;anrede&amp;gt;Mayr Ute&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konstanten in XQuery-Ausdrücken werden jeweils mit einem vorangehenden &#039;&#039;&#039;&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Zeichen gekennzeichnet. &lt;br /&gt;
&lt;br /&gt;
Den Konstanten, aber auch den Inhalten der Knoten, können explizit bestimmte Datentypen zugewiesen werden. Diese können als Bezeichner, zur Typüberprüfung oder auch für explizite Typecasts verwendet werden (Bsp.: &amp;lt;code&amp;gt;string($person/last)&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Bei der Rückgabe der Elemente muss jeder neue Knotentyp (Attribute, Elemente, Text, etc.) in geschweifte Klammern eingefasst werden. Ausschließlich XML-Tags können ohne diesen Rahmen ausgegeben werden. (z.B.: &amp;lt;code&amp;gt;&amp;lt;anrede&amp;gt;{“Frau“}{$last}&amp;lt;/anrede&amp;gt;&amp;lt;/code&amp;gt;) Hierbei muss man darauf achten, wiederum wohlgeformtes XML zu produzieren.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben der where-Klauseln muss eine Besonderheit beachtet werden. Da im XML-Umfeld stets zwischen dem kompletten Knoten und dessen Inhalt unterschieden wird, werden auch hier unterschiedliche Vergleichsoperatoren angeboten. &lt;br /&gt;
&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung des Wertes eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;eq&#039;&#039;&#039; (equal), &#039;&#039;&#039;ne&#039;&#039;&#039; (not equal), &#039;&#039;&#039;lt&#039;&#039;&#039; (less than), &#039;&#039;&#039;le&#039;&#039;&#039; (less or equal), &#039;&#039;&#039;gt&#039;&#039;&#039; (greater than), &#039;&#039;&#039;ge&#039;&#039;&#039; (greater or equal)&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Existenz eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;=&#039;&#039;&#039;, &#039;&#039;&#039;!=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Abfolge von Elementen: &lt;br /&gt;
 &#039;&#039;&#039;is&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Weitere Elemente ===&lt;br /&gt;
&lt;br /&gt;
Neben den bereits genannten FLWOR-Ausdrücken verfügt XQuery über weitere Elemente, die seine Funktionalität und Möglichkeiten erweitern. So können auch Listen (z.B.: &amp;lt;code&amp;gt;(1, 2, 4)&amp;lt;/code&amp;gt;) oder Integerränge (z.B.: &amp;lt;code&amp;gt;1 to 3&amp;lt;/code&amp;gt;, d. h. die Zahlen 1, 2 und 3) definiert werden.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Knotenfolgen zu kombinieren, können, wie in SQL auch, die Operatoren &#039;&#039;&#039;&amp;lt;code&amp;gt;union&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;intersect&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;except&amp;lt;/code&amp;gt;&#039;&#039;&#039; verwendet werden. Die Auswertung der Knoten und ihres Inhalts anhand von Bedingungen ist in XQuery möglich. Hierzu kann das &#039;&#039;&#039;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;then&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Konstrukt verwendet werden. Knotenmengen können auch anhand quantifizierender Ausdrücke überprüft werden (&#039;&#039;&#039;&amp;lt;code&amp;gt;some&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;every&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In XQuery können Kommentare, auch geschachtelt, verwendet werden. Diese werden jeweils durch einen Smilie eingeleitet und abgeschlossen (z.B.: &amp;lt;code&amp;gt;(: Kommentar :)&amp;lt;/code&amp;gt;). Auch Kommentare im XML-Format sind erlaubt (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar --&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Benutzerdefinierte Funktionen ===&lt;br /&gt;
&lt;br /&gt;
In XQuery können XPath-Funktionen verwendet werden. &lt;br /&gt;
&lt;br /&gt;
Ein Besonderheit, die XQuery bietet, ist jedoch die Möglichkeit zur Definition benutzerdefinierter Funktionen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;declare function&#039;&#039;&#039; namespace:function (para1 &#039;&#039;&#039;as&#039;&#039;&#039; type1, ...)&lt;br /&gt;
 &#039;&#039;&#039;as&#039;&#039;&#039; ret&lt;br /&gt;
 { &lt;br /&gt;
   &amp;lt;expr&amp;gt; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
In diesen Funktionen können weitere Funktionen aufgerufen werden. Auch der rekursi-ve Aufruf von Funktionen ist an dieser Stelle möglich. Gerade die Möglichkeit zur Verwendung von Rekursion in den benutzerdefinierten Funktionen unterscheidet XQuery grundlegend von SQL.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel gibt aus einem XML-Dokument, in dem Familienmitglieder über eine ID verknüpft sind, den Stammbaum aller Ottos aus. Dazu wird zuerst eine lokale benutzerdefinierte Funktion erstellt, die sich rekursiv selbst aufruft, bis keine Vorfahren mehr gefunden werden können. Diese Funktion kann anschließend unter Angabe ihres Namespaces beispielsweise aus einer for-Schleife aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
 declare function local:getfamilie($id as xs:string) as node()* {&lt;br /&gt;
   &amp;lt;mitglied&amp;gt;&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/last}&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/first}&lt;br /&gt;
     &amp;lt;mutter&amp;gt; {let $mid as xs:string := //person[id=$id]/mutter&lt;br /&gt;
              return if ($mid) then local:getfamilie(string($mid)) else ()&lt;br /&gt;
     }&amp;lt;/mutter&amp;gt;&lt;br /&gt;
     &amp;lt;vater&amp;gt; {let $vid as xs:string := //person[id=$id]/vater&lt;br /&gt;
              return if ($vid) then local:getfamilie(string($vid)) else ()&lt;br /&gt;
     }&amp;lt;/vater&amp;gt;&lt;br /&gt;
   &amp;lt;/mitglied&amp;gt;&lt;br /&gt;
 };&lt;br /&gt;
 for $e in document(“personen.xml“)//person[first=&amp;quot;Otto&amp;quot;]&lt;br /&gt;
 return &amp;lt;familie&amp;gt;{local:getfamilie(string($e/id))}&amp;lt;/familie&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/xquery http://www.w3.org/TR/xquery]&lt;br /&gt;
* [http://www.w3.org/XML/Query http://www.w3.org/XML/Query]&lt;br /&gt;
* [http://www.w3schools.com/xquery/xquery_intro.asp http://www.w3schools.com/xquery/xquery_intro.asp]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://demo.exist-db.org/xquery/functions.xq http://demo.exist-db.org/xquery/functions.xq]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/XQuery http://de.wikipedia.org/wiki/XQuery]&lt;br /&gt;
* Lehner, Wolfgang. Schöning, Harald. „XQuery“ – Ein Überblick. Datenbank-Spektrum. Ausgabe 11/2004.&lt;br /&gt;
* Sasaki, Felix. Milde, Jan-Torsten. Fragestunde. Neuerungen in XQuery und XSLT.XML &amp;amp; Web Services Magazin. Ausgabe 4.05. Software und Support Verlag GmbH.&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2503</id>
		<title>XML Query Language</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2503"/>
		<updated>2006-07-06T15:48:08Z</updated>

		<summary type="html">&lt;p&gt;BunzA: /* Weitere Elemente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;XML Query Language&#039;&#039;&#039; ist eine Abfragesprache für XML-Datenbanken und wird von der „XML Query Working Group“, einer Untergruppe der „XML Activity“ des [http://www.w3.org W3C], entwickelt. Derzeit im Status „Working Draft“ soll XQuery bald zum W3C-Standard werden.&lt;br /&gt;
&lt;br /&gt;
Als funktionale Sprache arbeitet XQuery ohne Seiteneffekte. Das bedeutet, dass weder Daten dauerhaft oder auch nur temporär gespeichert, noch Inhalte modifiziert werden können.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Navigation innerhalb der Dokumente erfolgt mit Hilfe von [http://www.w3.org/TR/xpath XPath]. Durch XPath kann jeder Knoten des durch das XML-Dokument erstellten Baums erreicht werden. Die in XPath vorhandenen Funktionen und elementaren Ausdrücke können ebenfalls verwendet werden. Man spricht deshalb von XPath als einer Untermenge von XQuery.&lt;br /&gt;
&lt;br /&gt;
=== Das FLWOR-Muster ===&lt;br /&gt;
&lt;br /&gt;
Komplexere Ausdrücke werden nach dem &#039;&#039;&#039;FLWOR&#039;&#039;&#039;-Muster (&#039;&#039;&#039;f&#039;&#039;&#039;or-&#039;&#039;&#039;l&#039;&#039;&#039;et-&#039;&#039;&#039;w&#039;&#039;&#039;here-&#039;&#039;&#039;o&#039;&#039;&#039;rder-&#039;&#039;&#039;b&#039;&#039;&#039;y-&#039;&#039;&#039;r&#039;&#039;&#039;eturn) aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;for&#039;&#039;&#039; $var1 &#039;&#039;&#039;at&#039;&#039;&#039; $pos &#039;&#039;&#039;in&#039;&#039;&#039; &amp;lt;expr1&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;let&#039;&#039;&#039; $var2 := &amp;lt;expr2&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;where&#039;&#039;&#039; &amp;lt;bool&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;order by&#039;&#039;&#039; &amp;lt;expr3&amp;gt; &#039;&#039;&#039;ascending/descending&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;return&#039;&#039;&#039; &amp;lt;expr4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend der SELECT-Anweisung in SQL kann auch in XQuery zur Abfrage der Daten eine Schleife (&#039;&#039;&#039;&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;&#039;&#039;&#039;) durchlaufen werden. Das Element des jeweiligen Schleifenschritts wird dabei in einer Konstanten (&amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt;, s. o.) gespeichert, über die in den folgenden Anweisungen auf dessen Inhalt zugegriffen werden kann. In einer Konstanten (&amp;lt;code&amp;gt;$pos&amp;lt;/code&amp;gt;) kann die Position des Elementes gespeichert und auf diese, beispielsweise in der where-Bedingung, zugegriffen werden (z.B. &amp;lt;code&amp;gt;where $posvar1 mod 2 = 0&amp;lt;/code&amp;gt; bedeutet jeder 2te).&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Abschnitt können Konstanten definiert, mit Werten belegt und Berechnungen durchgeführt werden. In jedem Schritt werden diese Konstanten neu definiert, ihr Inhalt wird also nicht über den Schleifenschritt hinaus gespeichert. &lt;br /&gt;
&lt;br /&gt;
Es ist zudem möglich mehrere weitere &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisungen vor dem Aufruf der for-Schleife(n) zu platzieren. Auf diese Daten kann während des gesamten Schleifendurchlaufs zugegriffen werden. Um Berechnungen mit Daten aus einer Abfrage auszuführen, müssen diese jedoch nach der Zuweisung für &amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt; durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;&amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Bedingung wird jedes Element auf die angegebenen Kriterien geprüft. Hier können mehrere Bedingungen, die entweder mit &#039;&#039;&#039;&amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;&#039;&#039;&#039; verknüpft werden, angegeben werden. Im Gegensatz zu SQL können mit Xquery keine negativen Bedingungen (&amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt;) angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Erfüllt dieses die Bedingungen, so wird es in der &#039;&#039;&#039;&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisung verarbeitet und alle gefundenen Daten nach dem &#039;&#039;&#039;&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;by&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Kriterium geordnet zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel werden aus einem XML-Dokument die Nach- und Vornamen aller Personen ausgewählt und als neues XML-Dokument ausgegeben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Mayr&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Ute&amp;lt;/firste&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
 for $person in  document(“personen.xml“)//person&lt;br /&gt;
 let $l:=string($person/last),&lt;br /&gt;
     $f:= string($person/first)&lt;br /&gt;
 return &lt;br /&gt;
   &amp;lt;anrede&amp;gt;{$l}{“ “}{$f}&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
   &amp;lt;anrede&amp;gt;Mayr Ute&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konstanten in XQuery-Ausdrücken werden jeweils mit einem vorangehenden &#039;&#039;&#039;&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Zeichen gekennzeichnet. &lt;br /&gt;
&lt;br /&gt;
Den Konstanten, aber auch den Inhalten der Knoten, können explizit bestimmte Datentypen zugewiesen werden. Diese können als Bezeichner, zur Typüberprüfung oder auch für explizite Typecasts verwendet werden (Bsp.: &amp;lt;code&amp;gt;string($person/last)&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Bei der Rückgabe der Elemente muss jeder neue Knotentyp (Attribute, Elemente, Text, etc.) in geschweifte Klammern eingefasst werden. Ausschließlich XML-Tags können ohne diesen Rahmen ausgegeben werden. (z.B.: &amp;lt;code&amp;gt;&amp;lt;anrede&amp;gt;{“Frau“}{$last}&amp;lt;/anrede&amp;gt;&amp;lt;/code&amp;gt;) Hierbei muss man darauf achten, wiederum wohlgeformtes XML zu produzieren.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben der where-Klauseln muss eine Besonderheit beachtet werden. Da im XML-Umfeld stets zwischen dem kompletten Knoten und dessen Inhalt unterschieden wird, werden auch hier unterschiedliche Vergleichsoperatoren angeboten. &lt;br /&gt;
&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung des Wertes eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;eq&#039;&#039;&#039; (equal), &#039;&#039;&#039;ne&#039;&#039;&#039; (not equal), &#039;&#039;&#039;lt&#039;&#039;&#039; (less than), &#039;&#039;&#039;le&#039;&#039;&#039; (less or equal), &#039;&#039;&#039;gt&#039;&#039;&#039; (greater than), &#039;&#039;&#039;ge&#039;&#039;&#039; (greater or equal)&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Existenz eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;=&#039;&#039;&#039;, &#039;&#039;&#039;!=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Abfolge von Elementen: &lt;br /&gt;
 &#039;&#039;&#039;is&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Weitere Elemente ===&lt;br /&gt;
&lt;br /&gt;
Neben den bereits genannten FLWOR-Ausdrücken verfügt XQuery über weitere Elemente, die seine Funktionalität und Möglichkeiten erweitern. So können auch Listen (z.B.: &amp;lt;code&amp;gt;(1, 2, 4)&amp;lt;/code&amp;gt;) oder Integerränge (z.B.: &amp;lt;code&amp;gt;1 to 3&amp;lt;/code&amp;gt;, d. h. die Zahlen 1, 2 und 3) definiert werden.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Knotenfolgen zu kombinieren, können, wie in SQL auch, die Operatoren &#039;&#039;&#039;&amp;lt;code&amp;gt;union&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;intersect&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;except&amp;lt;/code&amp;gt;&#039;&#039;&#039; verwendet werden. Die Auswertung der Knoten und ihres Inhalts anhand von Bedingungen ist in XQuery möglich. Hierzu kann das &#039;&#039;&#039;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;then&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Konstrukt verwendet werden. Knotenmengen können auch anhand quantifizierender Ausdrücke überprüft werden (&#039;&#039;&#039;&amp;lt;code&amp;gt;some&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;every&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In XQuery können Kommentare, auch geschachtelt, verwendet werden. Diese werden jeweils durch einen Smilie eingeleitet und abgeschlossen (z.B.: &amp;lt;code&amp;gt;(: Kommentar :)&amp;lt;/code&amp;gt;). Auch Kommentare im XML-Format sind erlaubt (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar --&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Benutzerdefinierte Funktionen ===&lt;br /&gt;
&lt;br /&gt;
In XQuery können XPath-Funktionen verwendet werden. &lt;br /&gt;
&lt;br /&gt;
Ein Besonderheit, die XQuery bietet, ist jedoch die Möglichkeit zur Definition benutzerdefinierter Funktionen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;declare function&#039;&#039;&#039; namespace:function (para1 &#039;&#039;&#039;as&#039;&#039;&#039; type1, ...)&lt;br /&gt;
 &#039;&#039;&#039;as&#039;&#039;&#039; ret&lt;br /&gt;
 { &lt;br /&gt;
   &amp;lt;expr&amp;gt; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
In diesen Funktionen können weitere Funktionen aufgerufen werden. Auch der rekursi-ve Aufruf von Funktionen ist an dieser Stelle möglich. Gerade die Möglichkeit zur Verwendung von Rekursion in den benutzerdefinierten Funktionen unterscheidet XQuery grundlegend von SQL.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel gibt aus einem XML-Dokument, in dem Familienmitglieder über eine ID verknüpft sind, den Stammbaum aller Ottos aus. Dazu wird zuerst eine lokale benutzerdefinierte Funktion erstellt, die sich rekursiv selbst aufruft, bis keine Vorfahren mehr gefunden werden können. Diese Funktion kann anschließend unter Angabe ihres Namespaces beispielsweise aus einer for-Schleife aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
 declare function local:getfamilie($id as xs:string) as node()* {&lt;br /&gt;
   &amp;lt;mitglied&amp;gt;&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/last}&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/first}&lt;br /&gt;
     &amp;lt;mutter&amp;gt; {let $mid as xs:string := //person[id=$id]/mutter&lt;br /&gt;
              return if ($mid) then local:getfamilie(string($mid)) else ()&lt;br /&gt;
     }&amp;lt;/mutter&amp;gt;&lt;br /&gt;
     &amp;lt;vater&amp;gt; {let $vid as xs:string := //person[id=$id]/vater&lt;br /&gt;
              return if ($vid) then local:getfamilie(string($vid)) else ()&lt;br /&gt;
     }&amp;lt;/vater&amp;gt;&lt;br /&gt;
   &amp;lt;/mitglied&amp;gt;&lt;br /&gt;
 };&lt;br /&gt;
 for $e in document(“personen.xml“)//person[first=&amp;quot;Otto&amp;quot;]&lt;br /&gt;
 return &amp;lt;familie&amp;gt;{local:getfamilie(string($e/id))}&amp;lt;/familie&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/xquery]&lt;br /&gt;
* [http://www.w3.org/XML/Query]&lt;br /&gt;
* [http://www.w3schools.com/xquery/xquery_intro.asp]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://demo.exist-db.org/xquery/functions.xq]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/XQuery]&lt;br /&gt;
* Lehner, Wolfgang. Schöning, Harald. „XQuery“ – Ein Überblick. Datenbank-Spektrum. Ausgabe 11/2004.&lt;br /&gt;
* Sasaki, Felix. Milde, Jan-Torsten. Fragestunde. Neuerungen in XQuery und XSLT.XML &amp;amp; Web Services Magazin. Ausgabe 4.05. Software und Support Verlag GmbH.&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2502</id>
		<title>XML Query Language</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2502"/>
		<updated>2006-07-06T15:47:28Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;XML Query Language&#039;&#039;&#039; ist eine Abfragesprache für XML-Datenbanken und wird von der „XML Query Working Group“, einer Untergruppe der „XML Activity“ des [http://www.w3.org W3C], entwickelt. Derzeit im Status „Working Draft“ soll XQuery bald zum W3C-Standard werden.&lt;br /&gt;
&lt;br /&gt;
Als funktionale Sprache arbeitet XQuery ohne Seiteneffekte. Das bedeutet, dass weder Daten dauerhaft oder auch nur temporär gespeichert, noch Inhalte modifiziert werden können.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Navigation innerhalb der Dokumente erfolgt mit Hilfe von [http://www.w3.org/TR/xpath XPath]. Durch XPath kann jeder Knoten des durch das XML-Dokument erstellten Baums erreicht werden. Die in XPath vorhandenen Funktionen und elementaren Ausdrücke können ebenfalls verwendet werden. Man spricht deshalb von XPath als einer Untermenge von XQuery.&lt;br /&gt;
&lt;br /&gt;
=== Das FLWOR-Muster ===&lt;br /&gt;
&lt;br /&gt;
Komplexere Ausdrücke werden nach dem &#039;&#039;&#039;FLWOR&#039;&#039;&#039;-Muster (&#039;&#039;&#039;f&#039;&#039;&#039;or-&#039;&#039;&#039;l&#039;&#039;&#039;et-&#039;&#039;&#039;w&#039;&#039;&#039;here-&#039;&#039;&#039;o&#039;&#039;&#039;rder-&#039;&#039;&#039;b&#039;&#039;&#039;y-&#039;&#039;&#039;r&#039;&#039;&#039;eturn) aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;for&#039;&#039;&#039; $var1 &#039;&#039;&#039;at&#039;&#039;&#039; $pos &#039;&#039;&#039;in&#039;&#039;&#039; &amp;lt;expr1&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;let&#039;&#039;&#039; $var2 := &amp;lt;expr2&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;where&#039;&#039;&#039; &amp;lt;bool&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;order by&#039;&#039;&#039; &amp;lt;expr3&amp;gt; &#039;&#039;&#039;ascending/descending&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;return&#039;&#039;&#039; &amp;lt;expr4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend der SELECT-Anweisung in SQL kann auch in XQuery zur Abfrage der Daten eine Schleife (&#039;&#039;&#039;&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;&#039;&#039;&#039;) durchlaufen werden. Das Element des jeweiligen Schleifenschritts wird dabei in einer Konstanten (&amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt;, s. o.) gespeichert, über die in den folgenden Anweisungen auf dessen Inhalt zugegriffen werden kann. In einer Konstanten (&amp;lt;code&amp;gt;$pos&amp;lt;/code&amp;gt;) kann die Position des Elementes gespeichert und auf diese, beispielsweise in der where-Bedingung, zugegriffen werden (z.B. &amp;lt;code&amp;gt;where $posvar1 mod 2 = 0&amp;lt;/code&amp;gt; bedeutet jeder 2te).&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Abschnitt können Konstanten definiert, mit Werten belegt und Berechnungen durchgeführt werden. In jedem Schritt werden diese Konstanten neu definiert, ihr Inhalt wird also nicht über den Schleifenschritt hinaus gespeichert. &lt;br /&gt;
&lt;br /&gt;
Es ist zudem möglich mehrere weitere &#039;&#039;&#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisungen vor dem Aufruf der for-Schleife(n) zu platzieren. Auf diese Daten kann während des gesamten Schleifendurchlaufs zugegriffen werden. Um Berechnungen mit Daten aus einer Abfrage auszuführen, müssen diese jedoch nach der Zuweisung für &amp;lt;code&amp;gt;$var1&amp;lt;/code&amp;gt; durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;&amp;lt;code&amp;gt;where&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Bedingung wird jedes Element auf die angegebenen Kriterien geprüft. Hier können mehrere Bedingungen, die entweder mit &#039;&#039;&#039;&amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;&#039;&#039;&#039; verknüpft werden, angegeben werden. Im Gegensatz zu SQL können mit Xquery keine negativen Bedingungen (&amp;lt;code&amp;gt;not&amp;lt;/code&amp;gt;) angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Erfüllt dieses die Bedingungen, so wird es in der &#039;&#039;&#039;&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Anweisung verarbeitet und alle gefundenen Daten nach dem &#039;&#039;&#039;&amp;lt;code&amp;gt;order&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;by&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Kriterium geordnet zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel werden aus einem XML-Dokument die Nach- und Vornamen aller Personen ausgewählt und als neues XML-Dokument ausgegeben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Mayr&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Ute&amp;lt;/firste&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
 for $person in  document(“personen.xml“)//person&lt;br /&gt;
 let $l:=string($person/last),&lt;br /&gt;
     $f:= string($person/first)&lt;br /&gt;
 return &lt;br /&gt;
   &amp;lt;anrede&amp;gt;{$l}{“ “}{$f}&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
   &amp;lt;anrede&amp;gt;Mayr Ute&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konstanten in XQuery-Ausdrücken werden jeweils mit einem vorangehenden &#039;&#039;&#039;&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Zeichen gekennzeichnet. &lt;br /&gt;
&lt;br /&gt;
Den Konstanten, aber auch den Inhalten der Knoten, können explizit bestimmte Datentypen zugewiesen werden. Diese können als Bezeichner, zur Typüberprüfung oder auch für explizite Typecasts verwendet werden (Bsp.: &amp;lt;code&amp;gt;string($person/last)&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Bei der Rückgabe der Elemente muss jeder neue Knotentyp (Attribute, Elemente, Text, etc.) in geschweifte Klammern eingefasst werden. Ausschließlich XML-Tags können ohne diesen Rahmen ausgegeben werden. (z.B.: &amp;lt;code&amp;gt;&amp;lt;anrede&amp;gt;{“Frau“}{$last}&amp;lt;/anrede&amp;gt;&amp;lt;/code&amp;gt;) Hierbei muss man darauf achten, wiederum wohlgeformtes XML zu produzieren.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben der where-Klauseln muss eine Besonderheit beachtet werden. Da im XML-Umfeld stets zwischen dem kompletten Knoten und dessen Inhalt unterschieden wird, werden auch hier unterschiedliche Vergleichsoperatoren angeboten. &lt;br /&gt;
&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung des Wertes eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;eq&#039;&#039;&#039; (equal), &#039;&#039;&#039;ne&#039;&#039;&#039; (not equal), &#039;&#039;&#039;lt&#039;&#039;&#039; (less than), &#039;&#039;&#039;le&#039;&#039;&#039; (less or equal), &#039;&#039;&#039;gt&#039;&#039;&#039; (greater than), &#039;&#039;&#039;ge&#039;&#039;&#039; (greater or equal)&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Existenz eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;=&#039;&#039;&#039;, &#039;&#039;&#039;!=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Abfolge von Elementen: &lt;br /&gt;
 &#039;&#039;&#039;is&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Weitere Elemente ===&lt;br /&gt;
&lt;br /&gt;
Neben den bereits genannten FLWOR-Ausdrücken verfügt XQuery über weitere Elemente, die seine Funktionalität und Möglichkeiten erweitern. So können auch Listen (z.B.: &amp;lt;code&amp;gt;(1, 2, 4)&amp;lt;/code&amp;gt;) oder Integerränge (z.B.: &amp;lt;code&amp;gt;1 to 3&amp;lt;/code&amp;gt;, d. h. die Zahlen 1, 2 und 3) definiert werden.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Knotenfolgen zu kombinieren, können, wie in SQL auch, die Operatoren &#039;&#039;&#039;&amp;lt;code&amp;gt;union&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;intersect&amp;lt;/code&amp;gt;&#039;&#039;&#039; oder &#039;&#039;&#039;&amp;lt;code&amp;gt;except&amp;lt;/code&amp;gt;&#039;&#039;&#039; verwendet werden. Die Auswertung der Knoten und ihres Inhalts anhand von Bedingungen ist in XQuery möglich. Hierzu kann das &#039;&#039;&#039;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;then&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;&#039;&#039;&#039;-Konstrukt verwendet werden. Knotenmengen können auch anhand quantifizierender Ausdrücke überprüft werden (&#039;&#039;&#039;&amp;lt;code&amp;gt;some&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;code&amp;gt;every&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;in&amp;lt;/code&amp;gt;&#039;&#039;&#039;-&#039;&#039;&#039;&amp;lt;code&amp;gt;satisfies&amp;lt;/code&amp;gt;&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In XQuery können Kommentare, auch geschachtelt, verwendet werden. Diese werden jeweils durch einen Smilie eingeleitet und abgeschlossen (z.B.: &amp;lt;code&amp;gt;(: Kommentar :)&amp;lt;7code&amp;gt;). Auch Kommentare im XML-Format sind erlaubt (z.B.: &amp;lt;code&amp;gt;&amp;lt;!-- Kommentar --&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Benutzerdefinierte Funktionen ===&lt;br /&gt;
&lt;br /&gt;
In XQuery können XPath-Funktionen verwendet werden. &lt;br /&gt;
&lt;br /&gt;
Ein Besonderheit, die XQuery bietet, ist jedoch die Möglichkeit zur Definition benutzerdefinierter Funktionen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;declare function&#039;&#039;&#039; namespace:function (para1 &#039;&#039;&#039;as&#039;&#039;&#039; type1, ...)&lt;br /&gt;
 &#039;&#039;&#039;as&#039;&#039;&#039; ret&lt;br /&gt;
 { &lt;br /&gt;
   &amp;lt;expr&amp;gt; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
In diesen Funktionen können weitere Funktionen aufgerufen werden. Auch der rekursi-ve Aufruf von Funktionen ist an dieser Stelle möglich. Gerade die Möglichkeit zur Verwendung von Rekursion in den benutzerdefinierten Funktionen unterscheidet XQuery grundlegend von SQL.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel gibt aus einem XML-Dokument, in dem Familienmitglieder über eine ID verknüpft sind, den Stammbaum aller Ottos aus. Dazu wird zuerst eine lokale benutzerdefinierte Funktion erstellt, die sich rekursiv selbst aufruft, bis keine Vorfahren mehr gefunden werden können. Diese Funktion kann anschließend unter Angabe ihres Namespaces beispielsweise aus einer for-Schleife aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
 declare function local:getfamilie($id as xs:string) as node()* {&lt;br /&gt;
   &amp;lt;mitglied&amp;gt;&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/last}&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/first}&lt;br /&gt;
     &amp;lt;mutter&amp;gt; {let $mid as xs:string := //person[id=$id]/mutter&lt;br /&gt;
              return if ($mid) then local:getfamilie(string($mid)) else ()&lt;br /&gt;
     }&amp;lt;/mutter&amp;gt;&lt;br /&gt;
     &amp;lt;vater&amp;gt; {let $vid as xs:string := //person[id=$id]/vater&lt;br /&gt;
              return if ($vid) then local:getfamilie(string($vid)) else ()&lt;br /&gt;
     }&amp;lt;/vater&amp;gt;&lt;br /&gt;
   &amp;lt;/mitglied&amp;gt;&lt;br /&gt;
 };&lt;br /&gt;
 for $e in document(“personen.xml“)//person[first=&amp;quot;Otto&amp;quot;]&lt;br /&gt;
 return &amp;lt;familie&amp;gt;{local:getfamilie(string($e/id))}&amp;lt;/familie&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/xquery]&lt;br /&gt;
* [http://www.w3.org/XML/Query]&lt;br /&gt;
* [http://www.w3schools.com/xquery/xquery_intro.asp]&lt;br /&gt;
* [http://www.jeckle.de/vorlesung/xml/script.html]&lt;br /&gt;
* [http://demo.exist-db.org/xquery/functions.xq]&lt;br /&gt;
* [http://de.wikipedia.org/wiki/XQuery]&lt;br /&gt;
* Lehner, Wolfgang. Schöning, Harald. „XQuery“ – Ein Überblick. Datenbank-Spektrum. Ausgabe 11/2004.&lt;br /&gt;
* Sasaki, Felix. Milde, Jan-Torsten. Fragestunde. Neuerungen in XQuery und XSLT.XML &amp;amp; Web Services Magazin. Ausgabe 4.05. Software und Support Verlag GmbH.&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2501</id>
		<title>XML Query Language</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=XML_Query_Language&amp;diff=2501"/>
		<updated>2006-07-06T15:35:51Z</updated>

		<summary type="html">&lt;p&gt;BunzA: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die &#039;&#039;&#039;XML Query Language&#039;&#039;&#039; ist eine Abfragesprache für XML-Datenbanken und wird von der „XML Query Working Group“, einer Untergruppe der „XML Activity“ des [http://www.w3.org W3C], entwickelt. Derzeit im Status „Working Draft“ soll XQuery bald zum W3C-Standard werden.&lt;br /&gt;
&lt;br /&gt;
Als funktionale Sprache arbeitet XQuery ohne Seiteneffekte. Das bedeutet, dass weder Daten dauerhaft oder auch nur temporär gespeichert, noch Inhalte modifiziert werden können.&lt;br /&gt;
&lt;br /&gt;
== Sprachelemente ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Navigation innerhalb der Dokumente erfolgt mit Hilfe von [http://www.w3.org/TR/xpath XPath]. Durch XPath kann jeder Knoten des durch das XML-Dokument erstellten Baums erreicht werden. Die in XPath vorhandenen Funktionen und elementaren Ausdrücke können ebenfalls verwendet werden. Man spricht deshalb von XPath als einer Untermenge von XQuery.&lt;br /&gt;
&lt;br /&gt;
=== Das FLWOR-Muster ===&lt;br /&gt;
&lt;br /&gt;
Komplexere Ausdrücke werden nach dem &#039;&#039;&#039;FLWOR&#039;&#039;&#039;-Muster (&#039;&#039;&#039;f&#039;&#039;&#039;or-&#039;&#039;&#039;l&#039;&#039;&#039;et-&#039;&#039;&#039;w&#039;&#039;&#039;here-&#039;&#039;&#039;o&#039;&#039;&#039;rder-&#039;&#039;&#039;b&#039;&#039;&#039;y-&#039;&#039;&#039;r&#039;&#039;&#039;eturn) aufgebaut:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;for&#039;&#039;&#039; $var1 &#039;&#039;&#039;at&#039;&#039;&#039; $pos &#039;&#039;&#039;in&#039;&#039;&#039; &amp;lt;expr1&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;let&#039;&#039;&#039; $var2 := &amp;lt;expr2&amp;gt;, ...&lt;br /&gt;
 &#039;&#039;&#039;where&#039;&#039;&#039; &amp;lt;bool&amp;gt;&lt;br /&gt;
 &#039;&#039;&#039;order by&#039;&#039;&#039; &amp;lt;expr3&amp;gt; &#039;&#039;&#039;ascending/descending&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;return&#039;&#039;&#039; &amp;lt;expr4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Entsprechend der SELECT-Anweisung in SQL kann auch in XQuery zur Abfrage der Daten eine Schleife (&#039;&#039;&#039;for&#039;&#039;&#039;) durchlaufen werden. Das Element des jeweiligen Schleifenschritts wird dabei in einer Konstanten (&#039;&#039;$var1&#039;&#039;, s. o.) gespeichert, über die in den folgenden Anweisungen auf dessen Inhalt zugegriffen werden kann. In einer Konstanten (&#039;&#039;$pos&#039;&#039;) kann die Position des Elementes gespeichert und auf diese, beispielsweise in der where-Bedingung, zugegriffen werden (z.B. &#039;&#039;where $posvar1 mod 2 = 0&#039;&#039; bedeutet jeder 2te).&lt;br /&gt;
&lt;br /&gt;
Im &#039;&#039;&#039;let&#039;&#039;&#039;-Abschnitt können Konstanten definiert, mit Werten belegt und Berechnungen durchgeführt werden. In jedem Schritt werden diese Konstanten neu definiert, ihr Inhalt wird also nicht über den Schleifenschritt hinaus gespeichert. &lt;br /&gt;
&lt;br /&gt;
Es ist zudem möglich mehrere weitere &#039;&#039;&#039;let&#039;&#039;&#039;-Anweisungen vor dem Aufruf der for-Schleife(n) zu platzieren. Auf diese Daten kann während des gesamten Schleifendurchlaufs zugegriffen werden. Um Berechnungen mit Daten aus einer Abfrage auszuführen, müssen diese jedoch nach der Zuweisung für &#039;&#039;$var1&#039;&#039; durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
In der &#039;&#039;&#039;where&#039;&#039;&#039;-Bedingung wird jedes Element auf die angegebenen Kriterien geprüft. Hier können mehrere Bedingungen, die entweder mit &#039;&#039;&#039;and&#039;&#039;&#039; oder &#039;&#039;&#039;or&#039;&#039;&#039; verknüpft werden, angegeben werden. Im Gegensatz zu SQL können mit Xquery keine negativen Bedingungen (&#039;&#039;not&#039;&#039;) angegeben werden.&lt;br /&gt;
&lt;br /&gt;
Erfüllt dieses die Bedingungen, so wird es in der &#039;&#039;&#039;return&#039;&#039;&#039;-Anweisung verarbeitet und alle gefundenen Daten nach dem &#039;&#039;&#039;order&#039;&#039;&#039;-&#039;&#039;&#039;by&#039;&#039;&#039;-Kriterium geordnet zurück gegeben.&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel werden aus einem XML-Dokument die Nach- und Vornamen aller Personen ausgewählt und als neues XML-Dokument ausgegeben.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;person gender=“f“&amp;gt;&lt;br /&gt;
   &amp;lt;last&amp;gt;Mayr&amp;lt;/last&amp;gt;&lt;br /&gt;
   &amp;lt;first&amp;gt;Ute&amp;lt;/firste&amp;gt;&lt;br /&gt;
 &amp;lt;/person&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
 for $person in  document(“personen.xml“)//person&lt;br /&gt;
 let $l:=string($person/last),&lt;br /&gt;
     $f:= string($person/first)&lt;br /&gt;
 return &lt;br /&gt;
   &amp;lt;anrede&amp;gt;{$l}{“ “}{$f}&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;anreden&amp;gt;&lt;br /&gt;
   &amp;lt;anrede&amp;gt;Mayr Ute&amp;lt;/anrede&amp;gt;&lt;br /&gt;
 &amp;lt;/anreden&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konstanten in XQuery-Ausdrücken werden jeweils mit einem vorangehenden &#039;&#039;&#039;$&#039;&#039;&#039;-Zeichen gekennzeichnet. &lt;br /&gt;
&lt;br /&gt;
Den Konstanten, aber auch den Inhalten der Knoten, können explizit bestimmte Datentypen zugewiesen werden. Diese können als Bezeichner, zur Typüberprüfung oder auch für explizite Typecasts verwendet werden (Bsp.: &#039;&#039;string($person/last&#039;&#039;)).&lt;br /&gt;
&lt;br /&gt;
Bei der Rückgabe der Elemente muss jeder neue Knotentyp (Attribute, Elemente, Text, etc.) in geschweifte Klammern eingefasst werden. Ausschließlich XML-Tags können ohne diesen Rahmen ausgegeben werden. (z.B.: &#039;&#039;&amp;lt;anrede&amp;gt;{“Frau“}{$last}&amp;lt;/anrede&amp;gt;&#039;&#039;) Hierbei muss man darauf achten, wiederum wohlgeformtes XML zu produzieren.&lt;br /&gt;
&lt;br /&gt;
Beim Schreiben der where-Klauseln muss eine Besonderheit beachtet werden. Da im XML-Umfeld stets zwischen dem kompletten Knoten und dessen Inhalt unterschieden wird, werden auch hier unterschiedliche Vergleichsoperatoren angeboten. &lt;br /&gt;
&lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung des Wertes eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;eq&#039;&#039;&#039; (equal), &#039;&#039;&#039;ne&#039;&#039;&#039; (not equal), &#039;&#039;&#039;lt&#039;&#039;&#039; (less than), &#039;&#039;&#039;le&#039;&#039;&#039; (less or equal), &#039;&#039;&#039;gt&#039;&#039;&#039; (greater than), &#039;&#039;&#039;ge&#039;&#039;&#039; (greater or equal)&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Existenz eines Elements: &lt;br /&gt;
 &#039;&#039;&#039;=&#039;&#039;&#039;, &#039;&#039;&#039;!=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;=&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;=&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Operatoren für die Prüfung der Abfolge von Elementen: &lt;br /&gt;
 &#039;&#039;&#039;is&#039;&#039;&#039;, &#039;&#039;&#039;&amp;lt;&amp;lt;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;gt;&amp;gt;&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== Weitere Elemente ===&lt;br /&gt;
&lt;br /&gt;
Neben den bereits genannten FLWOR-Ausdrücken verfügt XQuery über weitere Elemente, die seine Funktionalität und Möglichkeiten erweitern. So können auch Listen (z.B.: &#039;&#039;(1, 2, 4)&#039;&#039;) oder Integerränge (z.B.: &#039;&#039;1 to 3&#039;&#039;, d. h. die Zahlen 1, 2 und 3) definiert werden.&lt;br /&gt;
&lt;br /&gt;
Um mehrere Knotenfolgen zu kombinieren, können, wie in SQL auch, die Operatoren &#039;&#039;&#039;union&#039;&#039;&#039;, &#039;&#039;&#039;intersect&#039;&#039;&#039; oder &#039;&#039;&#039;except&#039;&#039;&#039; verwendet werden. Die Auswertung der Knoten und ihres Inhalts anhand von Bedingungen ist in XQuery möglich. Hierzu kann das if-then-else-Konstrukt verwendet werden. Knotenmengen können auch anhand quantifizierender Ausdrücke überprüft werden (&#039;&#039;&#039;some-in-satisfies&#039;&#039;&#039;, &#039;&#039;&#039;every-in-satisfies&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Benutzerdefinierte Funktionen ===&lt;br /&gt;
&lt;br /&gt;
In XQuery können XPath-Funktionen verwendet werden. &lt;br /&gt;
&lt;br /&gt;
Ein Besonderheit, die XQuery bietet, ist jedoch die Möglichkeit zur Definition benutzerdefinierter Funktionen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;declare function&#039;&#039;&#039; namespace:function (para1 &#039;&#039;&#039;as&#039;&#039;&#039; type1, ...)&lt;br /&gt;
 &#039;&#039;&#039;as&#039;&#039;&#039; ret&lt;br /&gt;
 { &lt;br /&gt;
   &amp;lt;expr&amp;gt; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
In diesen Funktionen können weitere Funktionen aufgerufen werden. Auch der rekursi-ve Aufruf von Funktionen ist an dieser Stelle möglich. Gerade die Möglichkeit zur Verwendung von Rekursion in den benutzerdefinierten Funktionen unterscheidet XQuery grundlegend von SQL.&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel gibt aus einem XML-Dokument, in dem Familienmitglieder über eine ID verknüpft sind, den Stammbaum aller Ottos aus. Dazu wird zuerst eine lokale benutzerdefinierte Funktion erstellt, die sich rekursiv selbst aufruft, bis keine Vorfahren mehr gefunden werden können. Diese Funktion kann anschließend unter Angabe ihres Namespaces beispielsweise aus einer for-Schleife aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
 declare function local:getfamilie($id as xs:string) as node()* {&lt;br /&gt;
   &amp;lt;mitglied&amp;gt;&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/last}&lt;br /&gt;
     {document(“personen.xml“)//person[id=$id]/first}&lt;br /&gt;
     &amp;lt;mutter&amp;gt; {let $mid as xs:string := //person[id=$id]/mutter&lt;br /&gt;
              return if ($mid) then local:getfamilie(string($mid)) else ()&lt;br /&gt;
     }&amp;lt;/mutter&amp;gt;&lt;br /&gt;
     &amp;lt;vater&amp;gt; {let $vid as xs:string := //person[id=$id]/vater&lt;br /&gt;
              return if ($vid) then local:getfamilie(string($vid)) else ()&lt;br /&gt;
     }&amp;lt;/vater&amp;gt;&lt;br /&gt;
   &amp;lt;/mitglied&amp;gt;&lt;br /&gt;
 };&lt;br /&gt;
 for $e in document(“personen.xml“)//person[first=&amp;quot;Otto&amp;quot;]&lt;br /&gt;
 return &amp;lt;familie&amp;gt;{local:getfamilie(string($e/id))}&amp;lt;/familie&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In XQuery können Kommentare, auch geschachtelt, verwendet werden. Diese werden jeweils durch einen Smilie eingeleitet und abgeschlossen (z.B.: &#039;&#039;(: Kommentar :)&#039;&#039;). Auch Kommentare im XML-Format sind erlaubt (z.B.: &#039;&#039;&amp;lt;!-- Kommentar --&amp;gt;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>BunzA</name></author>
	</entry>
</feed>