Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 Prof. Dr.-Ing. Stefan Deßloch AG Heterogene Informationssysteme Fachbereich Informatik Technische Universität Kaiserslautern Übungsblatt 13 Für die Übungen der Woche vom 15. bis 19. Juli 2013 Aufgabe 1: Multiple Choice – XPath und XQuery Beim Aufgabetyp "Multiple Choice" ist von den (zumeist fünf) angegebenen Lösungen A bis E immer nur eine einzige anzukreuzen. Wenn mehrere einzelne Lösungen korrekt sind, existiert immer eine Lösung, die diese korrekten Lösungen zusammenfasst, z.B.: Lösung D: "Antworten A und C". In diesem Fall ist nur diese zusammenfassende Lösung anzukreuzen. a) Was ist keine Eigenschaft des XPath/XQuery-Datenmodells? A [ ] Eine Sequenz kann Knoten und atomare Werte enthalten. B [ ] Das XQuery-Datenmodell ist abgeschlossen bzgl. der Operationen von XQuery. C [ ] Sequenzen sind ungeordnet. D [ ] Die Elemente einer Sequenz sind immer konform zum Schema das Eingabedokuments. E [ ] C und D sind keine Eigenschaften des XPath/XQuery-Datenmodells. Lösung: Anzukreuzen ist E. Zu C: Sequenzen definieren, wie der Name schon andeutet, eine Ordnung ihrer Elemente. Zu D: Ein Element einer Sequenz kann ein beliebiges XML-Fragment oder ein beliebiger atomarer Wert sein. b) Was ist keine XPath-Achse? A [ ] descendant B [ ] following-sibling C [ ] attribute D [ ] relative E [ ] C und D sind keine XPath-Achsen. Lösung: Anzukreuzen ist D. c) Für was steht FLWOR? A [ ] From, Let, Where, Order by, Return B [ ] For, Let, While, Order by, Repeat C [ ] For, Let, Where, Order by, Return D [ ] From, Let, While, Order by, Repeat E [ ] Keine der Antworten ist richtig 1 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind ! Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 Lösung: Anzukreuzen ist C. d) Welchem SQL-Konzept entspricht LET am ehesten? A [ ] GROUP BY B [ ] FROM C [ ] SELECT D [ ] Es gibt keine direkte Entsprechung für LET. E [ ] HAVING Lösung: Anzukreuzen ist D. Aufgabe 2: XPath-Achsen und -Auswertung Gegeben sei folgendes XML-Dokument: <Kunden> <Privatkunde KdNr="12342"> <Name> <Vorname>Joseph</Vorname> <Vorname>Karl</Vorname> <Nachname>Obentheuer</Nachname> </Name> <GebDat>1954-09-01</GebDat> <Adresse> <Ort PLZ="78652">Hinterkleinwaldhausen</Ort> <Straße>Großhausener Straße</Straße> <Hausnummer>5a</Hausnummer> </Adresse> <Konten> <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> <Konto KtoNr="100974847" Typ="Giro"> <Soll>1298.99</Soll> </Konto> <Konto KtoNr="500045734" Währung="EUR" Typ="Tagegeld"> <Haben>5693.34</Haben> </Konto> </Konten> </Privatkunde> <Firmenkunde KdNr="61543"> <Name>Großklos GmbH</Name> <Adresse> <Ort PLZ="84567">Karlsbach</Ort> <Straße>Bartelstraße</Straße> <Hausnummer>111</Hausnummer> </Adresse> <Konten> <Konto KtoNr="100745394" Typ="Giro"> <Soll>7955.45</Soll> </Konto> </Konten> 2 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind ! Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 </Firmenkunde> </Kunden> Gehen Sie davon aus, dass die Attribute KdNr und KtoNr vom Typ ID sind. Geben Sie die Knoten, die von folgenden XPath-Ausdrücken ausgewählt werden, in korrekter Reihenfolge an: a) /Kunden/Privatkunde/Konten/Konto b) //Konto[@Typ="Giro"] c) //Konto[@Währung] d) //node()[@KtoNr="100974847"]/following-sibling::* e) /Kunden/Privatkunde//Konto[@Typ="Tagegeld"]/preceding-sibling::* f) //Konto[@KtoNr="500045734"]/preceding-sibling::*[2] g) //node()[@KdNr="12342"]//Adresse/preceding::node() h) //Name[Nachname/text()="Obentheuer"]/../GebDat i) //Firmenkunde/ancestor-or-self::* j) //Hausnummer[text()="111"]/.. k) //Firmenkunde//Straße/following::* l) //node()[@KtoNr="300496749"]/descendant::node() m)//node()[@KtoNr="300496749"]/descendant-or-self::node() n) //Haben/ancestor::element()[not(attribute::*)] o) //Haben/ancestor::node()[not(attribute::*)] Lösung: a) /Kunden/Privatkunde/Konten/Konto Knoten 1: <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> Knoten 2: <Konto KtoNr="100974847" Typ="Giro"> <Soll>1298.99</Soll> </Konto> Knoten 3: <Konto KtoNr="500045734" Währung="EUR" Typ="Tagegeld"> <Haben>5693.34</Haben> </Konto> b) //Konto[@Typ="Giro"] Knoten 1: <Konto KtoNr="100974847" Typ="Giro"> <Soll>1298.99</Soll> </Konto> Knoten 2: <Konto KtoNr="100745394" Typ="Giro"> <Soll>7955.45</Soll> </Konto> c) //Konto[@Währung] Knoten 1: <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> Knoten 2: <Konto KtoNr="500045734" Währung="EUR" Typ="Tagegeld"> <Haben>5693.34</Haben> </Konto> 3 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind ! Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 d) //node()[@KtoNr="100974847"]/following-sibling::* <Konto KtoNr="500045734" Währung="EUR" Typ="Tagegeld"> <Haben>5693.34</Haben> </Konto> e) /Kunden/Privatkunde//Konto[@Typ="Tagegeld"]/preceding-sibling::* Knoten 1: <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> Knoten 2: <Konto KtoNr="100974847" Typ="Giro"> <Soll>1298.99</Soll> </Konto> f) //Konto[@KtoNr="500045734"]/preceding-sibling[2] Knoten 1: <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> Anmerkung: Auswertung der Positionsbedingung entgegen der Dokumentordnung (da Rückwärtsachse), Ergebnisse werden jedoch in Dokumentordnung geliefert. Hier nur eines, daher kein erkennbarer Unterschied) g) //node()[@KdNr="12342"]//Adresse/preceding::node() Knoten 1: <Name> <Vorname>Joseph</Vorname> <Vorname>Karl</Vorname> <Nachname>Obentheuer</Nachname> </Name> Knoten 2: <Vorname>Joseph</Vorname> Knoten 3: Joseph Knoten 4: <Vorname>Karl</Vorname> Knoten 5: Karl Knoten 6: <Nachname>Obentheuer</Nachname> Knoten 7: Obentheuer Knoten 8: <GebDat>1954-09-01</Gebdat> Knoten 9: 1954-09-01 h) //Name[Nachname/text()="Obentheuer"]/../GebDat Knoten 1: <GebDat>1954-09-01</Gebdat> i) //Firmenkunde/ancestor-or-self::* Knoten 1: Wurzel-Element <Kunden> ... </Kunden> Knoten 2: <Firmenkunde KdNr="61543"> <Name>Großklos GmbH</Name> <Adresse> <Ort PLZ="84567">Karlsbach</Ort> <Straße>Bartelstraße</Straße> <Hausnummer>111</Hausnummer> </Adresse> <Konten> <Konto KtoNr="100745394" Typ="Giro"> <Soll>7955.45</Soll> </Konto> </Konten> </Firmenkunde> j) //Hausnummer[text()="111"]/.. <Adresse> 4 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind ! Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 <Ort PLZ="84567">Karlsbach</Ort> <Straße>Bartelstraße</Straße> <Hausnummer>111</Hausnummer> </Adresse> k) //Firmenkunde//Straße/following::* Knoten 1: <Hausnummer>111</Hausnummer> Knoten 2: <Konten> <Konto KtoNr="100745394" Typ="Giro"> <Soll>7955.45</Soll> </Konto> </Konten> Knoten 3: <Konto KtoNr="100745394" Typ="Giro"> <Soll>7955.45</Soll> </Konto> Knoten 4: <Soll>7955.45</Soll> l) //node()[@KtoNr="300496749"]/descendant::node() Knoten 1: <Haben>45334.23</Haben> Knoten 2: 45334.23 m)//node()[@KtoNr="300496749"]/descendant-or-self::node() Knoten 1: <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> Knoten 2: <Haben>45334.23</Haben> Knoten 3: 45334.23 n) //Haben/ancestor::element()[not(attribute::*)] Knoten 1: Wurzel-Element <Kunden> ... </Kunden> Knoten 2: <Konten> <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> <Konto KtoNr="100974847" Typ="Giro"> <Soll>1298.99</Soll> </Konto> <Konto KtoNr="500045734" Währung="EUR" Typ="Tagegeld"> <Haben>5693.34</Haben> </Konto> </Konten> o) //Haben/ancestor::node()[not(attribute::*)] Knoten 1: [Dokumentknoten] Knoten 2: Wurzel-Element <Kunden> ... </Kunden> Knoten 3: <Konten> <Konto KtoNr="300496749" Währung="EUR" Typ="Sparbuch"> <Haben>45334.23</Haben> </Konto> <Konto KtoNr="100974847" Typ="Giro"> <Soll>1298.99</Soll> </Konto> <Konto KtoNr="500045734" Währung="EUR" Typ="Tagegeld"> <Haben>5693.34</Haben> </Konto> </Konten> 5 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind ! Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 Aufgabe 3: XPath-Anfragen Gegeben Sei ein XML-Dokument, das konform zu folgender DTD ist: <!ELEMENT Universität (Fachbereich+,Gebäude+)> <!ELEMENT Fachbereich (Lehrstuhl+,Dekan)> <!ATTLIST Fachbereich Name CDATA #REQUIRED FbNr ID #REQUIRED> <!ELEMENT Dekan EMPTY> <!ATTLIST Dekan ProfRef IDREF #REQUIRED> <!ELEMENT Lehrstuhl (Bezeichnung,Professor+,Mitarbeiter*)> <!ELEMENT Professor (Titel+,Name,Vorlesung+)> <!ATTLIST Professor ProfNr ID #REQUIRED RaumRef IDREF #IMPLIED> <!ELEMENT Titel (#PCDATA)> <!ELEMENT Name (Vorname+,Nachname)> <!ELEMENT Vorname (#PCDATA)> <!ELEMENT Nachname (#PCDATA)> <!ELEMENT Vorlesung (Bezeichnung, Termin+)> <!ATTLIST Vorlesung VorlNr ID #REQUIRED> <!ELEMENT Bezeichnung (#PCDATA)> <!ELEMENT Termin EMPTY> <!ATTLIST Termin Wochentag CDATA #REQUIRED Uhrzeit CDATA #REQUIRED RaumRef IDREF #REQUIRED> <!ELEMENT Mitarbeiter (Name, betreut*)> <!ATTLIST Mitarbeiter MaNr ID #REQUIRED Abschluss CDATA #IMPLIED RaumRef IDREF #IMPLIED> <!ELEMENT betreut EMPTY> <!ATTLIST betreut VorlRef IDREF #REQUIRED> <!ELEMENT Gebäude (Raum)> <!ATTLIST Gebäude GebNr ID #REQUIRED> <!ELEMENT Raum EMPTY> <!ATTLIST Raum RaumNr ID #REQUIRED Fläche CDATA #IMPLIED Plätze CDATA #IMPLIED> Beantworten Sie folgende Anfragen mit einem XPath-Ausdruck: a) Geben Sie alle Professoren aus, die im Fachbereich "Philosophie" einem Lehrstuhl angehören. b) Welche Vorlesungen (Bezeichnung) des Lehrstuhls "Anorganische Chemie" werden an Donnerstagen angeboten? c) Welche Vorlesungen (Bezeichnung) betreut der Mitarbeiter Waldemar Müller? d) Welche Vorlesungen finden am gleichen Tag und zur gleichen Uhrzeit statt wie die Vorlesung mit der Vorlesungsnummer "Vorl-13-002"? e) Welche Räume sind Professoren zugeordnet? 6 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind ! Informationssysteme SS 2013 – Lösungsvorschläge zu Übungsblatt 13 Lösung: a) Geben Sie alle Professoren aus, die im Fachbereich "Philosophie" einem Lehrstuhl angehören. //Fachbereich[@Name="Philosophie"]//Professor b) Welche Vorlesungen (Bezeichnung) des Lehrstuhls "Anorganische Chemie" werden an Donnerstagen angeboten? //Lehrstuhl[Bezeichnung="Anorganische Chemie"]//Vorlesung[Termin/@Wochentag="Do"]/ Bezeichnung c) Welche Vorlesungen (Bezeichnung) betreut der Mitarbeiter Waldemar Müller? fn:id(//Mitarbeiter[Name/Vorname ="Waldemar" and Name/Nachname ="Müller"]/betreut/ @VorlRef)/Bezeichnung/text() d) Welche Vorlesungen finden am gleichen Tag und zur gleichen Uhrzeit statt wie die Vorlesung mit der Vorlesungsnummer "Vorl-13-002"? //Vorlesung[Termin/@Wochentag=//Vorlesung[@VorlNr="Vorl-13-002"]/Termin/@Wochentag and Termin/@Uhrzeit=//Vorlesung[@VorlNr="Vorl-13-002"]/Termin/@Uhrzeit]/Bezeichnung/ text() e) Welche Räume sind Professoren zugeordnet? //Raum[@RaumNr=//Professor/@RaumRef] 7 ! Es kann durchaus vorkommen, dass die Lösungsvorschläge fehlerhaft oder unvollständig sind !