Übungen zum XQuery-Tutorial

Hinweise zum Anfragefenster und Lösungsvergleich

Es ist möglich direkt XQuery-Anfragen online auszuführen und zu testen und diese mit der Lösung zu vergleichen.
Ist das Ergebnis der Anfrage korrekt, färbt sich das Anfragefenster grün. Stimmt die Lösung der Anfrage nicht mit der Musterlösung überein, färbt es sich rot.

Um das Ergebnis der Anfrage mit der Musterlösung vergleichen zu können, ist es wichtig, dass das Ausgabeformat der angegebenen Aufgabenstellung und DTD entspricht!
Wenn keine Sortierung angegeben wurde, wird die Ausgabe in Dokumentenreihenfolge erwartet. Das Wurzelelement res, das in vielen DTDs steht, kann auch weggelassen werden, da es nur dazu dient Sequenzen oder Texten einen Wurzelknoten zu geben.
Wenn man sich an die genannten Dinge hält, dürfte der Vergleich immer erfolgreich ausgeführt werden. Fehler kann ich jedoch keineswegs ausschließen.

Einführende Hinweise:

Altova XMLSpy

Für die Ausgabe empfiehlt es sich ein Wurzelelement zu definieren, um das Ergebnis im Text-Modus auch in Pretty-Print oder im Grid-Modus betrachten zu können.
Erzeugt der XQuery-Ausdruck eine Sequenz von Elementen, kann man sonst diese beiden Modi nicht nutzen.

Die für diese Übungen benötigten XML-Dateien mit zugehörigen Schemata befinden sich weiter unten auf dieser Seite unter Dokumente!
Der Zugriff auf die XML-Daten erfolgt über die vordefinierte Funktion fn:doc
z.B.: doc("buchliste.xml")/buchliste/buch (Sequenz von Büchern)
Der Funktion fn:doc wird dabei als String der relative bzw. absolute Pfad zur XML-Datei übergeben, ausgehend von der XQuery-Datei. Der Namespace fn kann weggelassen werden.
Bsp.: fn:doc(URI) bzw. doc(URI)

Die XML-Dateien müssen als Schema-URI eine gültige URI besitzen, d.h. die URI verweist auf das Schema selbst, z.B. durch einen absoluten oder relativen Dateipfad (siehe doc-Funktion).
Der auf dieser Seite integrierte XQuery-Prozessor wurde auf die Dokumente bestellliste.xml, buchliste.xml und person.xml beschränkt, die man über doc("buchliste.xml"), doc("buchliste.xml") und doc("buchliste.xml") aufrufen kann. Andere übergebene String-Werte führen zu Fehlern! Um andere Pfadangaben zu testen, nutzen Sie bitte ein lokales Programm mit XQuery-Unterstützung.

Oracle iSQL*Plus

In Oracle empfiehlt sich die Arbeit mit iSQL*Plus anstatt mit SQL*Plus aufgrund der optisch besser gelungenen Ausgabe.

Die XML-Dokumente werden jeweils in eine Tabelle des Typs XMLTYPE mit zugewiesenem Schema gespeichert. Ein SQL-Script, welches die benötigten Tabellen erzeugt und Schemata registriert finden Sie weiter unten auf dieser Seite unter SQL-Scripte!
Dazu müssen Sie die XML-Dateien und XML-Schemata per FTP in die Oracle-Datenbank laden und je nach Ablageordner den Pfad in den SQL-Scripten vorher anpassen. Wie Sie Dateien auf einen FTP-Server hochladen können, können sie hier am Beispiel von FileZilla nachlesen.
Derzeit wird als Pfad "/public/xquery/" verwendet. Achten Sie beim Anlegen der Tabellen darauf, dass die NamespaceSchema-URL mit der URL übereinstimmt, mit der das Schema bei Oracle registriert wurde!
Der Zugriff auf die XML-Daten erfolgt über die vordefinierte Oracle-Funktion ora:view
z.B.: ora:view("xq_buchliste_xml")/buchliste/buch (Sequenz von Büchern)

Von den drei in Oracle verfügbaren Funktionen ist die "XQUERY" Funktion, die es seit Oracle 10gR2 gibt, zu empfehlen, da diese gegenüber der "XMLQUERY" und "XMLTABLE" Funktion leichter zu verwenden ist.

Genaueres zu den Funktionen die XQuery unter Oracle unterstützen und der ora_view Funktion finden sie unter XQuery mit Oracle

XML-Dateien und zugehörige Schemata:

SQL-Scripte:

Beim registrieren der XML-Schemata und Anlegen der Tabellen mittels der gegeben SQL-Scripte ist darauf zu achten, dass der Pfad bei XDBURIType mit dem Pfad auf dem FTP übereinstimmt.
Die XML-Dateien müssen als Schema-URI die URI eingetragen haben, mit der das zugehörige XML-Schema in der Datenbank registriert wurde. (Diese URI muss nicht existent sein sondern dient nur zur eindeutigen Identifizierung!)

Dateidownload mit rechter Maustaste, "Ziel speichern unter ..."

Anfragen mittels FLWOR-Audrücken