Aufgaben zu XPath und XQuery Dr. Arno Schmidhauser Letzte Revision: März 2005 Email: [email protected] Webseite: http://www.sws.bfh.ch/db Inhalt 1 2 3 4 XPath ....................................................................................... XQuery..................................................................................... XPath/SQL Umsetzung................................................................ Lokale Installation des XQuery-Servlets ........................................ 2 2 3 5 Aufgabensammlung zu XPath und XQuery 1 2 XPath Eine Webapplikation (XQuery-Servlet) für diese Aufgaben steht gebrauchsfertig unter http://swsdb.hta-be.bfh.ch/XQuery.html zur Verfügung. Alle folgenden Aufgaben beziehen sich auf die XML-Datei catalog-extended.xml, welche sich auch im Input-Fenster des Browsers befindet. 1. Suchen Sie die Menge aller title-Elemente, unabhängig davon, ob sie zu einem Buch oder einem einzelnen Band eines Buches gehören, welche das Wort 'Java' enthalten ( contains()-Funktion verwenden) 2. Suchen Sie alle Buchtitel vom Autor Elliotte Rusty Harold. 3. Suchen Sie den Titel vom ersten Band (volume) aller Bücher, die Bände haben. 4. Suchen Sie alle book-Elemente, die ein keyword-Element mit dem Wert 'XPath' haben. 5. Suchen Sie die Titel aller Bücher, die von Steven Holzner oder Lisa Rein geschrieben wurden. 6. Suchen Sie die Titel aller Bücher, die von Elliotte Rusty Harold und W. Scott Means geschrieben wurden. 7. Suchen Sie alle Buchtitel, die mehr als 2 Bände haben. 8. Suchen Sie das Buch, dessen zweiter Band den Titel 'Use cases' trägt. 2 XQuery Eine Webapplikation (XQuery-Servlet) für diese Aufgaben steht gebrauchsfertig unter http://swsdb.hta-be.bfh.ch/XQuery.html zur Verfügung. Alle folgenden Aufgaben beziehen sich auf die XML-Datei catalog-extended.xml, welche sich auch im Input-Fenster des Browsers befindet. 9. Erstellen Sie eine Abfrage welche alle Bücher mit Titel und ISBNNummer, sortiert nach Titel, ausgibt. 10. Ändern Sie die Abfrage so, dass eine HTML-Tabelle ausgegeben wird. März 2005 Arno Schmidhauser SWS Aufgabensammlung zu XPath und XQuery 3 11. Suchen Sie alle Bücher, deren Titel mit 'XML' beginnt. Verwenden Sie einen regulären Ausdruck zum Suchen. 12. Join: Erstellen Sie eine Abfrage, welche alle Reservationen für Bücher als HTML-Tabelle ausgibt. Die Buchdaten sind wie unter Aufgabe 10 verfügbar, die Reservationsdaten unter doc( 'http://localhost/reservations.xml' ). Es sollen Buchtitel, ISBN-Nummer, Priorität, Reservationsdatum und Email der Person aufgeführt werden. Sortierung nach Priorität. 13. Gruppierung: Erstellen Sie eine Abfrage welche die durchschnittliche Anzahl Seiten pro Buch für jeden Author ausgibt. Autoren mit nur einem Buch sollen weggelassen werden. Sortierung nach Anzahl Seiten, kleinste Anzahl zuerst. 14. Outer Join: Erweitern Sie die Abfrage so, dass jedes Buch angezeigt wird, auch wenn keine Reservation besteht. Für Bücher ohne Reservation soll also nur Buchtitel und ISBN-Nummer angezeigt werden. Tipp 1: Zuerst ohne HTML-Ausgabe arbeiten. Tipp 2: Innerhalb der return-Klausel einen eingeschachteltn FLWOR Ausdruck verwenden. Sortierung nach Buchtitel. 15. Suchen Sie Anwendungsbeispiele zu XQuery, beispielsweise unter http://www.devx.com/xml/Article/15618/ Kurzfassung, Kommentar? 3 XPath/SQL Umsetzung Eine Webapplikation (XDB-Servlet) für diese Aufgaben steht gebrauchsfertig unter http://swsdb.hta-be.bfh.ch/XDB.html zur Verfügung. 16. Orientieren Sie sich über die Begriffe XML-sensitiver Volltextindex, Dietzsches Nummerierungschema und XASR. Welche Ziele verfolgen diese Ansätze? Gegeben sei folgende Tabelle zur Aufnahme von XML-Dokumenten1: create table Node ( idNode numeric(10,0) idParentNode numeric(10,0) nodeType varchar(32) nodeName varchar(64) nodeValue varchar(512) beginSeqNr numeric(10,0) endSeqNr numeric(10,0) not null, null, not null, not null, null, not null, null, 1 Theoretische Erläuterung dazu finden Sie im Buch "XML & Datenbanken", M.Klettke und H. Meyer, dpunkt Verlag, 2003, Kapitel 9.4.1 bis 9.4.3. Diese Tabelle ist eine Kombination eine XML-sensitiven Volltext-Index und einer XASR. März 2005 Arno Schmidhauser SWS Aufgabensammlung zu XPath und XQuery 4 primary key( idNode ), foreign key( idParentNode ) references Node( idNode ) on delete cascade, check ( nodeType in ( 'attribute', 'element', 'end-element', 'document', 'text', 'comment', 'processing-instruction' ) ) ); Die Beispieldaten sind diesselben wie für Kapitel 1 und 2. 17. Mit welcher Abfrage erhalten Sie den gesamten Inhalt der NodeTabelle (das originale Dokument) in XML-Form zurück? 18. Mit welcher Abfrage erhalten Sie den gesamten, textuellen Inhalt (ohne Elemente, Kommentare, Processing-Instruction) aus der Node-Tabelle zurück? Das Resultat dieser Abfrage wird bei XPath und XQuery als Atomisierung bezeichnet und recht häufig bei der Resultatausgabe verwendet. 19. Erstellen Sie eine SQL-Abfrage für alle 'title'-Elemente (ohne den Text-Inhalt). 20. Erstellen Sie eine SQL-Abfrage für alle 'title'-Elemente (inklusive Text-Inhalt), entsprechend der XPath-Abfrage //title 21. Erstellen Sie eine SQL-Abfrage, welche dem XPath-Ausdruck //title[ .= 'Learning XML' ] entspricht. 22. Erstellen Sie eine SQL-Abfrage, die gleichbedeutend zu folgender XPath-Abfrage ist: /catalog/book/title. 23. Setzen Sie folgende SQL-Abfrage in eine gleichbedeutende XPathAbfrage um: select n4.nodeType nt, n4.nodeName nn, n4.nodeValue nv from Node n0, Node n1, Node n2, Node n3, Node n4 where n3.beginSeqNr <= n4.beginSeqNr and n3.endSeqNr >= n4.endSeqNr and n3.nodeName = 'title' and n3.nodeType = 'element' and n3.idParentNode = n2.idNode and n2.nodeName = 'book' and n2.nodeType = 'element' and n2.idNode in ( select idParentNode from Node where nodeType = 'element' and nodeName = 'author' and idNode in ( select idParentNode from Node where nodeType = 'text' and nodeName = '#text' März 2005 Arno Schmidhauser SWS Aufgabensammlung zu XPath und XQuery 5 and nodeValue = 'Steven Holzner' ) ) and n2.idParentNode = n1.idNode and n1.nodeName = 'catalog' and n1.nodeType = 'element' and n1.idParentNode = n0.idNode and n0.nodeName = '#document' and n0.nodeType = 'document' order by n4.beginSeqNr 4 Lokale Installation des XQuery-Servlets Für den lokalen Gebrauch des XQuery-Servlets gehen Sie wie folgt vor: Laden und entpacken Sie das Zip-File von der Datenbank-Homepage www.sws.bfh.ch/db/WORKSHOPS/xml-db-workshop.zip Im Verzeichnis XQuery-Servlet finden Sie die Installation. In der Datei setenv.bat müssen Sie den Pfad für die Variablen APP_HOME und JAVA_HOME für ihre Umgebung anpassen. Java JDK 1.5 ist in der Umgebung der SWS-Installation wahrscheinlich unter \\Rznt\XPApps\jdk1.5.0 zu finden. Starten Sie anschliessend im Lösungsverzeichnis das Batch-File startWebServer.bat. Danach können Sie einen Browser mit dem URL http://localhost/XQuery.html öffnen. März 2005 Arno Schmidhauser SWS