Kapitel 19: XML Flashcards
Formulieren Sie die zuvor in SQL bearbeiteten Anfragen zur Universita ̈tsdatenbank in XQuery. Erstellen Sie insbesondere XQuery-Anfragen, um folgende Fragestellungen zu be- antworten 1:
a) Suchen Sie die Professoren, die Vorlesungen halten.
b) Finden Sie die Studenten, die alle Vorlesungen geho ̈rt haben.
c) Finden Sie die Studenten, die alle vierstu ̈ndigen Vorlesungen geho ̈rt haben.
d) Finden Sie die Studenten mit der gro ̈ßten Semesterzahl unter Verwendung von Aggregatfunktionen.
e) Berechnen Sie die Gesamtzahl der Semesterwochenstunden, die die einzelnen Profes- soren erbringen. Dabei sollen auch die Professoren beru ̈cksichtigt werden, die keine Vorlesungen halten.
f) Finden Sie die Namen der Studenten, die in keiner Pru ̈fung eine bessere Note als 3.0 hatten.
g) Berechnen Sie den Umfang des Pru ̈fungsstoffes jedes Studenten. Es sollen der Name des Studenten und die Summe der Semesterwochenstunden der Pru ̈fungsvorlesungen ausgegeben werden.
h) Finden Sie Studenten, deren Namen den eines Professors enthalten.
i) Ermitteln Sie den Bekanntheitsgrad der Professoren unter den Studenten, wobei wir annehmen, dass Studenten die Professoren nur durch Vorlesungen oder Pru ̈fungen kennen lernen.
Sie ko ̈nnen zusa ̈tzlich zum bekannten Syntax noch die folgenden Funktionen benutzten: max(NUM), count(X), tokenize(STR,SEP), sum(NUM), contains(HAY,NEEDLE)
(: a) Suchen Sie die Professoren, die Vorlesungen halten. :) doc(’uni2’)//ProfessorIn[.//Vorlesung]/Name
(: b) Finden Sie die Studenten, die alle Vorlesungen geh ̈ort haben. :) doc(’uni2’)//Student[count(tokenize(hoert/@Vorlesungen,” “))=count(//Vorlesung)]/Name
(: c) Finden Sie die Studenten, die alle vierstundigen Vorlesungen geh ̈ort haben. :)
let $fourcount:=count(doc(’uni2’)//Vorlesung[SWS=4]) for $s in doc(’uni2’)//Student where count(
for $h in tokenize($s/hoert/@Vorlesungen,” “) where doc(’uni2’)//Vorlesung[@VorlNr=$h and SWS=4] return $h
) = $fourcount return $s/Name
(: d) Finden Sie die Studenten mit der gr ̈oßten Semesterzahl unter Verwendung von Aggregatfunktionen. :)
let $maxsws:=max(data(doc(’uni2’)//Student/Semester)) return doc(’uni2’)//Student[Semester=$maxsws]
(: e) Berechnen Sie die Gesamtzahl der Semesterwochenstunden, die die einzelnen Professoren erbringen. Dabei sollen auch die Professoren ber ̈ucksichtigt werden, die keine Vorlesungen halten. :)
for $p in doc(’uni2’)//ProfessorIn return <prof>{$p/Name}<summe>{sum(data($p//SWS))}</summe></prof>
(: f) Finden Sie die Namen der Studenten, die in keiner Prufung eine bessere Note als 3.0 hatten. :)
for $s in doc(’uni’)//Student where count(
for $p in $s//Pruefung where $p/@Note < 3 return $p
)=0 return $s
(: g) Berechnen Sie den Umfang des Pr ̈ufungsstoffes jedes Studenten.
Es sollen der Name des Studenten und die Summe der Semesterwochenstunden der Pr ̈ufungsvorlesungen ausgegeben werden. :)
for $s in doc(’uni’)//Student return <student>{$s/Name}<sum>{<br></br>sum(for $p in $s//Pruefung return doc(’uni’)//Vorlesung[@VorlNr=$p/@Vorlesung]/SWS)}<br></br></sum></student>
(: h) Finden Sie Studenten, deren Namen den eines Professors enthalten. :) for $s in doc(’uni’)//Student where doc(’uni’)//ProfessorIn[contains($s/Name,Name)] return $s/Name
(: i) Ermitteln Sie den Bekanntheitsgrad der Professoren unter den Studenten, wobei wir annehmen, dass Studenten die Professoren nur durch Vorlesungen oder Pr ̈ufungen kennen lernen. :)
for $p in doc(’uni’)//ProfessorIn return
<professor> {$p/Name} <bekanntheit> {<br></br>count( doc(’uni’)//Student[.//Pruefung[@Pruefer=$p/@PersNr]]/Name union ( for $v in $p//Vorlesung/@VorlNr<br></br>return doc(’uni’)//Student[contains(hoert/@Vorlesungen,$v)]/Name) )</bekanntheit></professor>
}
Was ist das XML Datenmodell?
Liegt irgendwo dazwischen
- HTML
- Schema-los
- Beliebige Daten, solange Syntax stimmt
- Relationen
- Schema
- Keine Abweichungen
- Semi-strukturierte Daten
- Teilweise schematisch
- Aber Ausnahmen
- Wenn Schema, dann muss es eingehalten werden
Was bedeutet FLOWOR Ausdrücke?
FLOWOR-Ausdrücke
- For ..
- Let …
- Where …
- Order by …
- Return …