Klausur Semistrukturierte Daten und XML Sommersemester 2011 Prof. Dr. Wolfgang May 14. Juli 2011, Uhr Bearbeitungszeit: 90 Minuten

Ähnliche Dokumente
Klausur Semistrukturierte Daten und XML Sommersemester 2008 Prof. Dr. Wolfgang May 16. Juli 2008, Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2013/2014 Prof. Dr. Wolfgang May 29. Januar 2014, Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2011/2012 Prof. Dr. Wolfgang May 8. Februar 2012, Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2012/2013 Prof. Dr. Wolfgang May 6. Februar 2013, Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2015/2016 Prof. Dr. Wolfgang May 2. März 2016, Uhr Bearbeitungszeit: 90 Minuten

Klausur Semistrukturierte Daten und XML Sommersemester 2009 Prof. Dr. Wolfgang May 16. Juli 2009, Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2004/2005 Prof. Dr. Wolfgang May 10. Februar 2004, Uhr Bearbeitungszeit: 90 Minuten

Klausur Semistrukturierte Daten und XML Sommersemester 2009 Prof. Dr. Wolfgang May 16. Juli 2009, Uhr Bearbeitungszeit: 90 Minuten

Klausur zur Vorlesung Einführung in XML

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Klausur zur Vorlesung Einführung in XML

Klausur Semistrukturierte Daten und XML Sommersemester 2007 Prof. Dr. Wolfgang May 19. Juli 2007, 13:30-15:30 Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2011/2012 Prof. Dr. Wolfgang May 8. Februar 2012, Uhr Bearbeitungszeit: 90 Minuten

Vorlesung Suchmaschinen Semesterklausur Wintersemester 2013/14

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Klausur Datenbanken Wintersemester 2005/2006 Prof. Dr. Wolfgang May 14. Februar 2006, Uhr Bearbeitungszeit: 90 Minuten

Klausur Interoperabilität

Klausur Semistrukturierte Daten und XML Sommersemester 2007 Prof. Dr. Wolfgang May 19. Juli 2007, 13:30-15:30 Uhr Bearbeitungszeit: 90 Minuten

Tutorial: Anbindung einer SQL-Datenquelle. Version: 1.1 Autoren: David Haasler, Stefan Suermann

Klausur Datenbanken Wintersemester 2013/2014 Prof. Dr. Wolfgang May 29. Januar 2014, Uhr Bearbeitungszeit: 90 Minuten

Klausur Datenbanken Wintersemester 2004/2005 Prof. Dr. Wolfgang May 10. Februar 2004, Uhr Bearbeitungszeit: 90 Minuten

5. Programmierschnittstellen für XML

Projektseminar Texttechnologische Informationsmodellierung

Vorlesung Datenbanken I Endklausur

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

XQuery Implementation in a Relational Database System

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Duale Zustellung. Standardprofile. Version 1.0.0, DI Arne Tauber

extended Markup Language (XML)

5. Programmierschnittstellen für XML

XML Kurs LRZ 1

Speicherung von XML in (objekt-)relationalen Datenbanken. Burkhard Schäfer

IV. Datenbankmanagement

IT-Zertifikat: Daten- und Metadatenstandards. Transformation von XML-Dokumenten mit XSLT (und XPATH) XSLT kurz und knackig. XSLT und die Praxis

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Fachhochschule Kaiserslautern Labor Datenbanken mit MySQL SS2006 Versuch 1

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS XMLType. Christian Senger/Andreas Schmidt XMLType 1/32

Einteilung von Datenbanken

Hans Buschmann. InnoData GmbH

Implementierung der XPath-Anfragesprache für XML-Daten in RDBMS unter Ausnutzung des Nummerierungsschemas DLN

Grundlagen der Extensible Stylesheet Language

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

3.1 Sinn und Zweck von Namensräumen

Transformation von XML-Dokumenten. IDE SummerSchool 2013, Chemnitz

Datenbanksysteme I. Klausur zum Praktikum. Mehrere Professoren prüfen mit genau einem Beisitzer genau einen Studenten.

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

FACHHOCHSCHULE MANNHEIM. Hochschule für Technik und Gestaltung. Beispielklausur zur Vorlesung:

Datenbanken 1 Sommersemester 2014/

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS noch einmal. XQuery... Andreas Schmidt Oracle XQuery 1/12

Aufgaben eines Codegenerators

Dieser Foliensatz darf frei verwendet werden unter der Bedingung, dass diese Titelfolie nicht entfernt wird.

Views in SQL. 2 Anlegen und Verwenden von Views 2

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

FileMaker Konferenz 2010 XML / XSLT. Ein Workshop mit [x] cross solution Armin Egginger

XML and Semantic Web Technologies

Inhaltsverzeichnis. Teil 1 Grundlagen 5. Teil 2 Formatierung 31 INHALTSVERZEICHNIS

1 Lieferantenbewertung

Datenbanken für Online Untersuchungen

Vorlesung Datenbank-Entwurf Klausur

Vorlesung Suchmaschinen Semesterklausur Sommersemester 2014

Datenbanksysteme. XML und Datenbanken. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen

Datenaustauschformate. Datenaustauschformate - FLV

DTD: Syntax-Zusammenfassung

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

XML Vorlesung ETHZ SS XQuery XML Vorlesung ETHZ SS XML Vorlesung ETHZ SS

Übungsbeispiel 1 Erstellen Sie eine Homepage für Ihre Gruppe in XML und überprüfen Sie die Wohlgeformtheit in einem Editor/Browser.

TimeSafe Leistungserfassung

Erste Schritte mit XHTML

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Einführung in Datenbanken - XML - Philipp Cimiano AG Semantische Datenbanken und Wissensverarbeitung

Vorlesung Datenbanken II A Klausur

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: Übung WS 2014/2015

PROBEKlausur XML-Technologien, Sommersemester 2011 Matrikelnummer Vorname. korrigiert von Gesamtpunktzahl von 30 Note

Probeklausur Grundlagen der Datenbanksysteme II

1 Was ist XML? Hallo XML! Kommentare in XML 52

Bibliografische Informationen digitalisiert durch

Praktikum zur Veranstaltung XML-Technologie: Übung 09

Institut für Dokumentologie und Editorik. XML-Datenbanken und XQuery

Datumsangaben, enthält mindestens Jahr, Monat, Tag

SQL und MySQL. Kristian Köhntopp

Modell/Metamodell. Generated Source Code. Generator. Model. Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014

DB2 SQL, der Systemkatalog & Aktive Datenbanken

Anfragen & Transformation

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Projektseminar "Texttechnologische Informationsmodellierung"

5.8 Bibliotheken für PostgreSQL

Vertraulich. Nachname: Vorname: Matrikel-Nummer: Studiengang: Datum: 30. Januar 2015

Unterabfragen (Subqueries)

Klausur zur Vorlesung Einführung in XML

XSL Transformationen. -Teil 2 - Schwerpunkt: Templates und Kontrollstrukturen. XSL Transformationen - Teil 2 Christina Krieglstein / 66

Bitte hier unbedingt Matrikelnummer und Adresse eintragen, sonst keine Bearbeitung möglich. Aufgabe Summe

Objektrelationale und erweiterbare Datenbanksysteme

Vorlesung Informatik II

Gegeben ist das folgende XML-Dokument.

DBMS-Übungsserver. Seite 1 von 13

Klaus Schild, XML Clearinghouse Transformation von XML-Dokumenten

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Klausur Datenbanksysteme

Kapitel 6 Abbildung von Datenbanken auf XML

XSL und XSLT. Inhalt. Mathias Heilig XSL Übersicht. Formatierungsprozess. Sprachbeschreibung. Vorführung Resümee

Transkript:

Klausur Semistrukturierte Daten und XML Sommersemester 2011 Prof. Dr. Wolfgang May 14. Juli 2011, 14-16 Uhr Bearbeitungszeit: 90 Minuten Vorname: Nachname: Matrikelnummer: Bei der Klausur sind keine Hilfsmittel (Skripten, Taschenrechner etc.) erlaubt. Handies müssen ausgeschaltet sein. Papier wird gestellt. Benutzen Sie nur die ausgeteilten, zusammengehefteten Blätter für Ihre Antworten. Schreiben Sie mit blauem/schwarzem Kugelschreiber, Füller etc.; Bleistift ist nicht erlaubt. Zum Bestehen der Klausur sind 45 Punkte hinreichend. meine Note soll mit Matrikelnummer so bald wie möglich auf der Vorlesungs-Webseite veröffentlicht werden. meine Note soll nicht veröffentlicht werden; ich erfahre sie dann vom Prüfungsamt (bzw. für nicht von einem Prüfungsamt verwaltete Teilnehmer: beim Abholen des Scheins). Max. Punkte Schätzung für 4 Aufgabe 1 (XML-Entwurf) 30 20 Aufgabe 2 (XPath, XQuery) 40 24 Aufgabe 3 (XSLT) 20 6 Summe 90 50 Note:

Themenstellung: Fernbuslinien Alle Klausuraufgaben basieren auf einem gemeinsamen Auftrag : Seit 2011 ist die Einrichtung von Fernbuslinien in Deutschland erlaubt (wie sie bereits in vielen Ländern existieren). In der Klausur soll eine Datenbank eines Fernbuslinienbetreibers entworfen werden: Der Betreiber will mehrere Fernbuslinien einrichten. Die meisten Linien sammeln ihre Fahrgäste in einer Region schrittweise auf, fahren dann eine längere Strecke am Stück, und lassen die Fahrgäste in der Zielregion an einer oder mehreren Stationen wieder aussteigen. Jede Haltestelle hat einen eindeutigen Namen (meistens der Name der Stadt; z.b. Frankfurt, aber auch Frankfurt Flughafen ). Für jede Haltestelle ist der Name sowie die Strasse bzw. nähere Bezeichnung gespeichert (z.b. (Göttingen, ZOB Bahnhofsplatz)). Im den folgenden Aufgaben wird angenommen, dass in XY zu lesen ist als an der Haltestelle, deren Name XY ist. Jede Linie hat eine eindeutige Nummer und besteht aus einer Liste der Haltestellen mit (relativen) Abfahrtszeiten und Fahrpreisen (jeweils bezogen auf den Startort; bei späterem Zustieg wird der entsprechende Teil des Preises abgezogen); vgl. Spezifikation der Linien 2460 (Flensburg-Hamburg-Frankfurt) und 2060 (Hamburg- Frankfurt) auf dem letzten Blatt der Klausur. Der Fahrplan gibt für jede Linie Wochentage und die absoluten Startzeiten am Startort an. Zum Beispiel fährt Linie 2460 werktags um 5:30, 8:00, 12:00 und 17:30 Uhr in Hamburg ab; samstags/sonntags aber um 8:00, 13:00 und 16:30 Uhr. Nehmen Sie an, dass jede Linie zumindest werktags einmal befahren wird. Der konkrete Einsatzplan ordnet jeder durchzuführenden Fahrt (Tag, Zeit) einen Bus sowie einen Fahrer zu: Jeder Bus hat eine (eindeutige) Nummer. Jeder Fahrer hat einen Namen (Annahme: Vor- und Nachname sind zusammen eindeutig). Für jeden Tag (Datum) ist jeder an dem Tag durchzuführenden Fahrt ein Bus sowie ein Fahrer zugeordnet. So wird z.b. die erste Fahrt der Linie 2060 (Hamburg Frankfurt) am 14.07.2011 um 05:30 von Hans Meier mit dem Bus 278 durchgeführt. Derselbe Bus fährt dann um 14:00 als Linie 6020 mit Fahrer Hans Meier wieder nach Hamburg. Aufgabe 1 (XML-Entwurf [30 Punkte]) Die Datenspeicherung soll in XML stattfinden (nicht nur, weil das so in dieser Vorlesung behandelt wurde, sondern auch weil es für diesen Anwendungsfall ein sehr sinnvolles Datenformat ist; siehe auch Aufgabe 2d). a) Geben Sie die DTD Ihrer an (15 P). b) Geben Sie eine XML-Instanz an, die Ihre u.a. anhand der in der Spezifikation aufgeführten Beispieldaten illustriert. (10 P) c) Geben Sie einen Automaten an, mit dem der Elementtyp validiert werden kann, in dem Sie die einzelnen Buslinien speichern. (5 P) 1

hier DTD (und wenn man will XML) angeben Die Speicherung der Daten zu Haltestellen und die Zeiten/Preise der Linien, sowie die Zuordnung von Fahrern zu Touren ist relativ klar. Den Fahrplan, d.h. Linie/Wochentage/Zeiten kann man entweder zu Linie reinnehmen, oder separat ablegen (wie man es bei einer relationalen DB tun würde). <!ELEMENT db (haltestelle+, linie+, fahrerzuordnung*)> <!ELEMENT haltestelle EMPTY> <!ATTLIST haltestelle id ID #REQUIRED name CDATA #REQUIRED adresse CDATA #REQUIRED> <!ELEMENT linie (stop,stop+, tour+)> <!ATTLIST linie nr CDATA #REQUIRED> <!ELEMENT stop EMPTY> <!ATTLIST stop haltestelle IDREF #REQUIRED minuten CDATA #REQUIRED preis CDATA #REQUIRED> <!ELEMENT tour EMPTY> <!ATTLIST tour wochentag NMTOKEN #REQUIRED abfahrt CDATA #REQUIRED> <!ELEMENT zuordnung EMPTY> <!ATTLIST zuordnung linie CDATA #REQUIRED datum CDATA #REQUIRED zeit CDATA #REQUIRED bus CDATA #REQUIRED fahrer CDATA #REQUIRED> 2

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE db SYSTEM "buslinien.dtd"> <db> <haltestelle id="hambg" name="hamburg" adresse="hauptbahnhof"/> <haltestelle id="flensbg" name="flensburg" adresse="zob"/> <haltestelle id="soltau" name="soltau" adresse="dorfplatz"/> <haltestelle id="hannover" name="hannover" adresse="hbf"/> <haltestelle id="goe" name="goettingen" adresse="zob Bahnhofsplatz"/> <haltestelle id="kassel" name="kassel" adresse="karlsaue"/> <haltestelle id="ffm" name="frankfurt" adresse="bahnhofsvorplatz"/> <haltestelle id="fra" name="frankfurt Flughafen" adresse="terminal A Level 1"/> <haltestelle id="saarbr" name="saarbruecken" adresse="hbf"/> <haltestelle id="berlin" name="berlin" adresse="potsdamer Platz"/> <linie nr="2060"> <stop haltestelle="hambg" minuten="0" preis="0"/> <stop haltestelle="soltau" minuten="50" preis="6.00"/> <stop haltestelle="hannover" minuten="100" preis="12.00"/> <stop haltestelle="goe" minuten="190" preis="20.00"/> <stop haltestelle="kassel" minuten="230" preis="25.00"/> <stop haltestelle="ffm" minuten="370" preis="39.00"/> <stop haltestelle="fra" minuten="390" preis="40.00"/> <tour wochentag="werktag" abfahrt="05:30:00"/> <tour wochentag="werktag" abfahrt="08:00:00"/> <tour wochentag="werktag" abfahrt="14:00:00"/> <tour wochentag="saso" abfahrt="08:00:00"/> <tour wochentag="saso" abfahrt="13:00:00"/> </linie> <linie nr="6020"> <stop haltestelle="fra" minuten="0" preis="0"/> <stop haltestelle="ffm" minuten="15" preis="1.00"/> <stop haltestelle="kassel" minuten="160" preis="15.00"/> <stop haltestelle="goe" minuten="200" preis="20.00"/> <stop haltestelle="hannover" minuten="290" preis="28.00"/> <stop haltestelle="soltau" minuten="340" preis="34.00"/> <stop haltestelle="hambg" minuten="390" preis="40.00"/> <tour wochentag="werktag" abfahrt="09:00:00"/> <tour wochentag="werktag" abfahrt="14:00:00"/> <tour wochentag="saso" abfahrt="10:00:00"/> <tour wochentag="saso" abfahrt="16:00:00"/> </linie> <linie nr="6610"> <stop haltestelle="saarbr" minuten="0" preis="0"/> <stop haltestelle="fra" minuten="150" preis="20.00"/> <stop haltestelle="berlin" minuten="610" preis="65.00"/> <tour wochentag="werktag" abfahrt="08:00:00"/> <tour wochentag="werktag" abfahrt="10:00:00"/> </linie> <zuordnung linie="2060" datum="2011-14-07" zeit="05:30:00" bus="278" fahrer="hans Meier"/> <zuordnung linie="6020" datum="2011-14-07" zeit="14:00:00" bus="278" fahrer="hans Meier"/> 3 </db>

Alternative: <tour>nicht als subelement, sondern separat mit Kreuzreferenzattribut: <!ELEMENT db (haltestelle+, linie+, tour+, fahrerzuordnung*)> <!ELEMENT linie (stop,stop+)> <!ATTLIST linie nr CDATA #REQUIRED> <!ELEMENT tour EMPTY> <!ATTLIST tour linie CDATA #REQUIRED wochentag NMTOKEN #REQUIRED abfahrt CDATA #REQUIRED> @linie könnte man sich als ID/IDREF wünschen; allerdings sind dann reine Zahlwerte nicht zugelassen (wurde in der Klausur nicht als falsch bewertet), und man muss zusätzlich ids, z.b. L2060 einführen. c) Der Automat ist in diesem Fall relativ einfach, weil die Subelemente nur Attribute haben: 1 2 stop[haltest.,minuten, preis] stop[haltest.,minuten, preis] 3 stop[haltest.,minuten, preis] tour[wochentag,abfahrt] 3 tour[wochentag,abfahrt] 4

Aufgabe 2 (XPath, XQuery [40 Punkte]) Verwenden Sie für diese Aufgabe die von Ihnen entworfene XML-Datenbasis. Keine der Antworten soll Duplikate enthalten. Hinweis (Syntax): Nehmen Sie für diese Aufgabe an, dass Sie mit dem Datentyp für Zeit rechnen (+ minuten, MAX, MIN) und vergleichen können (<, > etc.). Repräsentieren Sie Zeiten als Strings der Form hh:mm und Datumswerte als Strings der Form YYYY-MM-DD. (Dies ist mit XML-Software auch (fast) genauso möglich.) Hinweis (Anwendung): Nehmen Sie für diese Aufgabe an, dass folgendes gilt: es gibt keine Fahrten über Mitternacht, in jeder Linie kann an jeder Haltestelle ein- und ausgestiegen werden a) Geben Sie eine XQuery-Anfrage an, die die Nummern aller Linien ausgibt, die werktags in Göttingen halten. (3 P) //linie[stop/id(@haltestelle)/@name="goettingen" and tour[@wochentag = "Werktag"]]/string(@nr) for $linie in //linie[stop/id(@haltestelle)/@name="goettingen"] where $linie/tour[@wochentag = "Werktag"] return $linie/string(@nr) dieser Stelle ist der Test auf Werktag eigentlich überflüssig, da vorausgesetzt wird, dass jede Linie werktags einmal fährt.) (an b) Erweiterung von a) Welche Linien halten werktags in Göttingen? Für jede Fahrt soll die Liniennummer sowie die jeweilige Abfahrtszeit angegeben werden, und die Antworten sollen nach dieser Zeit geordnet sein, z.b. <antwort linie="2060" zeit="11:10:00"/> <antwort linie="6020" zeit="13:20:00"/> <antwort linie="2060" zeit="16:10:00"/> <antwort linie="6020" zeit="19:20:00"/> (4 P) for $linie in //linie[stop/id(@haltestelle)/@name="goettingen"], $tour in $linie/tour[@wochentag = "Werktag"] let $minuten := $linie/stop[id(@haltestelle)/@name="goettingen"]/@minuten, $time := xs:time($tour/@abfahrt) + xs:daytimeduration(concat("pt",$minuten,"m")) (: $tour/@abfahrt + $minuten :) order by $time return <antwort linie="{$linie/@nr}" zeit="{$time}"/> c) Geben Sie eine HTML-Liste aller Linien mit ihren Strecken als Liste der Haltestellen in folgender Form aus: (4 P) 5

<ul> : <li> 2060 <ul><li>hamburg</li> <li>soltau</li>... <li>frankfurt Flughafen</li><ul> </li> <li> 2061 <ul>... </ul> </li> : </ul> <ul> { for $linie in //linie order by number($linie/@nr) return <li> {string($linie/@nr)} <ul> { for $s in $linie/stop return <li> { $s/id(@haltestelle)/@name/string() } </li> } </ul> </li> } </ul> d) Warum ist XML für diese Anwendung wesentlich besser geeignet, als eine relationale Datenbank und SQL? (überlegen Sie sich, wie man Aufgabenteil (c) in SQL lösen müsste). (4 P) XML-Daten sind geordnet. D.h., man kann die Haltestellen einfach der zeitlichen Abfolge nach ablegen, und in Dokumentordnung verarbeiten oder ausgeben. Mit einer SQL-Relation (deren Tupel ungeordnet sind), wie etwa auf dem letzten Blatt angegeben, müsste man schon zum Finden der Abfahrtshaltestelle einer Linie SELECT * FROM linie l1 WHERE minuten = (select min(minuten) from linie l2 where l1.nr = l2.nr) berechnen (anstatt //linie/stop[1]), und entsprechend dann für jede weitere. e) Geben Sie eine Anfrage an, die die Nummern aller Linien ausgibt, mit denen man werktags ohne Umsteigen von Soltau nach Kassel fahren kann. (5 P) 6

//linie[stop[id(@haltestelle)/@name="soltau" and following-sibling::stop/id(@haltestelle)/@name = "Kassel"] and tour[@wochentag="werktag"]]/string(@nr) //linie[number(stop[id(@haltestelle)/@name="soltau"]/@minuten) < number(stop[id(@haltestelle)/@name = "Kassel"]/@minuten) and tour[@wochentag="werktag"]]/string(@nr) f) Geben Sie eine XQuery-Anfrage an, die ausgibt, an welchem Ort der Fahrer Hans Meier am 14.7. seinen Dienst beendet. (5 P) //linie[@nr = //zuordnung[@datum="2011-14-07" and @fahrer="hans Meier" and @zeit = max(//zuordnung[@datum="2011-14-07" and @fahrer="hans Meier"] /xs:time(@zeit))] /@linie] /stop[last()]/id(@haltestelle)/string(@name) let $meierszuordnungen := //zuordnung[@datum="2011-14-07" and @fahrer="hans Meier"], $letztezuordnung := $meierszuordnungen[@zeit = max($meierszuordnungen/xs:time(@zeit))], $linie := //linie[@nr = $letztezuordnung/@linie] return $linie/stop[last()]/id(@haltestelle)/string(@name) let $zuordnungen := ( for $z in //zuordnung[@datum="2011-14-07" and @fahrer="hans Meier"] order by $z/xs:time(@zeit) return $z) let $letzte := $zuordnungen[last()] return //linie[@nr = $letzte/@linie]/stop[last()]/id(@haltestelle)/string(@name) g) Geben Sie eine XQuery-Anfrage an, die ausgibt, welche Orte man werktags mit 1x umsteigen von Soltau aus erreichen kann. (10 P) 7

for $linie1 in //linie[stop/id(@haltestelle)/@name="soltau"], $tour1 in $linie1/tour[@wochentag="werktag"], $stop0 in $linie1/stop[id(@haltestelle)/@name="soltau"], $stop1 in $stop0/following-sibling::stop, $linie2 in //linie, $tour2 in $linie2/tour[@wochentag="werktag"], $stop2 in $linie2/stop[@haltestelle = $stop1/@haltestelle] let $zeit1 := xs:time($tour1/@abfahrt) + xs:daytimeduration(concat("pt",$stop1/@minuten,"m")), $zeit2 := xs:time($tour2/@abfahrt) + xs:daytimeduration(concat("pt",$stop2/@minuten,"m")) where $zeit1 < $zeit2 return (for $stop3 in $stop2/following-sibling::stop [not (@haltestelle = $linie1/stop/@haltestelle)] return <verbindung ab="{xs:time($tour1/@abfahrt) + xs:daytimeduration(concat("pt",$stop0/@minuten,"m"))}" umsteigenin="{$stop1/id(@haltestelle)/@name}" ankunftumsteigen="{$zeit1}" abfahrtumsteigen="{$zeit2}" ziel="{$stop3/id(@haltestelle)/@name}" ankunft = "{xs:time($tour2/@abfahrt) + xs:daytimeduration(concat("pt",$stop3/@minuten,"m"))}"/>) h) (Updates, abstrakte Sprachsyntax) Linie 2060 soll zusätzlich zwischen Hannover und Göttingen noch in Hildesheim (30 Minuten ab Hannover, 3.50E zusätzlich) halten. Geben Sie ein Statement in einer Syntax an, die auf XQuery aufbaut (Sie können XQuery+Updates verwenden, können sich aber auch prinzipiell an der SQL-Syntax orientieren), das dieses Update auf Ihrem XML-Dokument sinnvoll spezifiziert. (5 P) Die folgende Syntax ist nicht XQuery+Updates update //linie[@nr="2060"] insert <stop haltestelle="{//haltestelle[@name="hildesheim"]/@id}" minuten="130" preis="15.50"/> after stop[id(@haltestelle)/@name="hannover"] Als hypothetical Update in XQuery+Updates: return insert <stop haltestelle="{//haltestelle[@name="hildesheim"]/@id}" minuten="130" preis="15.50"/> after //linie[@nr="2060"]/stop[id(@haltestelle)/@name="hannover"] 8

9

Aufgabe 3 (XSLT [20 Punkte]) Geben Sie ein XSLT-Stylesheet an, das eine XML-to-HTML-Transformation ausführt, das für jede Linie den Fahrplan in der folgenden Form als HTML-Tabelle ausgibt: (Erzeugen Sie die richtige Struktur; Zentrierung, Linien etc. sind unwichtig. Wenn Sie sich bei bestimmten XSL-Kommandos nicht sicher sind, erfinden Sie eine sinnvolle Syntax.) 2060 Preis Hamburg 0 5:30 8:00 14:00 Soltau 6.00 6:20 8:50 14:50 Hannover 12.00 7:10 9:40 15:40 Göttingen 20.00 8:40 11:10 17:10 Kassel 25.00 9:20 11:50 17:50 Gießen 33.00 10:50 13:20 19:20 Frankfurt 39.00 11:40 14:10 20:10 Frankfurt Flughafen 40.00 12:00 14:30 20:30 Betrachten Sie dabei nur den Werktags-Fahrplan. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:xs="http://www.w3.org/2001/xmlschema" version="2.0"> <xsl:output method="html" indent="yes"/> <xsl:template match="db"> <xsl:apply-templates select="linie"/> </xsl:template> <xsl:template match="linie"> <table> <tr> <td> <xsl:value-of select="@nr"/> </td> <td> Preis </td> </tr> <xsl:for-each select="stop"> <xsl:variable name="minuten" select="@minuten"/> <!-- minuten muss man in einer Variable festhalten --> <tr> <td> <xsl:value-of select="id(@haltestelle)/@name"/></td> <td> <xsl:value-of select="@preis"/></td> <xsl:for-each select="../tour[@wochentag= Werktag ]"> <td> <xsl:value-of select="xs:time(@abfahrt) + xs:daytimeduration(concat( PT,$minuten, M ))"/> <!-- <xsl:value-of select="@abfahrt + $minuten"/> --> </td> </xsl:for-each> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> 10

Anmerkung: auch hier nutzt man es aus, dass die einzelnen Fahrten einer Linie in XML zeitlich geordnet sind und man sie einfach der Reihe nach durchgehen kann, um die Spalten zu erzeugen. 11

[Trennen Sie dieses Blatt am besten vor Beginn der Bearbeitung ab] Die folgenden Basisdaten für die Linie 2460 (Flensburg nach Frankfurt), 2060 (Hamburg nach Frankfurt mit mehreren Zwischenstops), und 6020 sollen(unter anderem) gespeichert werden: Linie Nr Ort Minuten Preis : : : : 2460 Flensburg 0 0.00 2460 Schleswig 25 2.00 2460 Rendsburg 55 4.00 2460 Neumünster 85 6.00 2460 Quickborn 120 9.00 2460 Pinneberg 135 10.00 2460 Hamburg 155 12.00 2460 Frankfurt 615 42.00 2460 Frankfurt Flughafen 640 43.00 2060 Hamburg 0 0.00 2060 Soltau 50 6.00 2060 Hannover 100 12.00 2060 Göttingen 190 20.00 2060 Kassel 230 25.00 2060 Gießen 320 33.00 2060 Frankfurt 370 39.00 2060 Frankfurt Flughafen 390 40.00 6020 Frankfurt Flughafen 00 0.00 6020 Frankfurt 20 1.00 : : : : 6020 Hamburg 390 40.00 : : : : Z.B. Linie 2060 ist 190 Minuten nachdem der Bus in Hamburg losgefahren ist, in Göttingen. Bis dahin kostet die Fahrt 20.00E. 12