Übungsblatt 13 - Technische Universität Kaiserslautern

Werbung
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 !
Herunterladen