eTutor XQuery und Datalog - Data & Knowledge Engineering
eTutor XQuery und Datalog - Data & Knowledge Engineering
eTutor XQuery und Datalog - Data & Knowledge Engineering
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
28 Kapitel 3. Lösungsansatz<br />
sortierenden XML-Elemente werden anhand von XPath-Ausdrucken definiert. Ein<br />
solcher Ausdruck wird auf das Ergebnis einer bestimmten Musterlösung, das wie<br />
beschrieben als XML-Dokument vorliegt, ausgewertet. Das Resultat sind je<br />
definiertem XPath-Ausdruck eine Anzahl von XML-Elementen. In Abbildung<br />
3.16 wird mit (a) <strong>und</strong> (b) noch einmal das eingangs beschriebene Beispiel<br />
dargestellt, das anhand der Datenbasis in Abbildung 3.10 ausgewertet wird. Wenn<br />
sich nun bei der Analyse der abgegebenen Lösung (c) herausstellt, das ein XML-<br />
Element im Auswertungsergebnis (d) an sich mit dem entsprechenden XML-<br />
Element der Musterlösung übereinstimmt, so wird im nächsten Schritt untersucht,<br />
ob dieses XML-Element auch richtig sortiert ist, bzw. ob diese Sortierung<br />
überhaupt vorgeschrieben ist. Dazu werden alle definierten XPath-Ausdrücke<br />
ausgewertet <strong>und</strong> überprüft, ob sich das aktuelle XML-Element darunter befindet.<br />
Im gezeigten Beispiel ist das XML-Element mit der Nummer p2 jedenfalls falsch<br />
sortiert. Ist nun der XPath-Ausdruck //person gegeben, so befindet sich dieses<br />
XML-Element unter den XML-Elementen, die durch die Auswertung dieses<br />
Ausdruckes geliefert werden, weshalb dieser Fehler tatsächlich bewertet wird.<br />
let $db := doc(' http://etutor.dke.unilinz.ac.at/XML?id=1')/db,<br />
$personen := $db/person<br />
return (<br />
for $p in $personen[startswith(name,'M')]<br />
order by $p/name<br />
return $p)<br />
(a)<br />
let $db := doc(' http://etutor.dke.unilinz.ac.at/XML?id=1')/db,<br />
$personen := $db/person<br />
return (<br />
for $p in $personen[startswith(name,'M')]<br />
order by $p/stand<br />
return $p)<br />
(c)<br />
<br />
Maria<br />
ledig<br />
<br />
<br />
Max<br />
verheiratet<br />
<br />
<br />
Michael<br />
ledig<br />
<br />
(b)<br />
<br />
Maria<br />
ledig<br />
<br />
<br />
Michael<br />
ledig<br />
<br />
<br />
Max<br />
verheiratet<br />
<br />
(d)<br />
Abbildung 3.16: Analyse der Sortierung von XML-Elementen