Forschungsgruppe Datenbanken Prof. Dr. Carl-Christian Kanne B6, 29, Raum C0.06 68131 Mannheim Telefon: (0621) 181 2586 Email: kanne@informatik.uni-mannheim.de XML Data Management 11. Übungsblatt Herbst-/Wintersemester 2007 12. Dezember 2007 Aufgabe 1 Gegeben sei das folgende XML-Dokument: <bauplan id="a380"> <gewicht masseinheit="kg">277000</gewicht> <bauteilarten> <bauplan id="fluegel"> <gewicht masseinheit="t">32</gewicht> <bauteilarten> <bauteilart id="triebwerk" href="prattwhitney.com/t72.xml"/> <bauteilart id="tragflaeche" href="airbus.com/w12.xml"/> </bauteilarten> <konstruktion> <verbindung typ="geschraubt" material="spax 17"> <bauteil id="t1" typ="triebwerk" /> <bauteil id="f1" typ="tragflaeche" /> </verbindung> <verbindung typ="geschraubt" material="spax 17"> <bauteil id="t2" typ="triebwerk" /> <bauteilref id="f1"/> <verbindung> </konstruktion> </bauplan> <bauteilart id="rumpf" href="eads.com/c42.xml"/> </bauteilarten> <konstruktion> <verbindung typ="genietet" material="bolt 12"> <bauteil id="r0" typ="rumpf"/> <bauteil id="w0" typ="fluegel"/> </verbindung> <verbindung typ="genietet" material="bolt 12"> <bauteilref id="r0"/> <bauteil id="w1" typ="fluegel"/> </verbindung> </konstruktion> </bauplan> 1
Geben Sie ein XMLSchema für das Dokument an. Die bauteilarten beschreiben dabei die in der konstruktion vorkommenden Arten von Bauteilen. Diese Bauteilarten können entweder durch einen eingebetteten bauplan oder durch einen externen Bauplan (bauteilart) spezifiziert sein. Die konstruktion beschreibt dann, wie oft die Teile benötigt werden und wie sie zusammengebaut werden. Wenn ein Teil an mehreren Verbindungen teilnimmt, wird es nur einmal mit bauteil erzeugt und danach mit bauteilref referenziert. Eine Verbindung enthält mindestens zwei Bauteile, ggf. aber auch mehr. Aufgabe 2 Geben Sie XPath-Ausdrücke für die folgenden Anfragen auf dem Dokument aus Aufgabe 1 an. Aufgabe 2 a) Alle IDs von Bauteilarten. Aufgabe 2 b) Alle verwendeten Masseinheiten für Gewichte aufzählen. Aufgabe 2 c) Alle IDs von Komponenten, die an einer Schraubverbindung beteiligt sind. Aufgabe 2 d) IDs von Komponenten, die nicht an einer Schraubverbindung beteiligt sind. Aufgabe 3 Geben Sie jeweils den Typ und das Ergebnis (bzgl. des Dokuments aus Aufgabe 1) der folgenden Ausdrücke an. Aufgabe 3 a) count(/self::bauplan) Aufgabe 3 b) count(/self::*) Aufgabe 3 c) count(/self::node()) 2
Aufgabe 3 d) //bauplan Aufgabe 3 e) /descendant-or-self::bauplan Aufgabe 3 f) /descendant-or-self::bauplan/descendant-or-self::bauplan Aufgabe 3 g) //bauplan[1] Aufgabe 3 h) /descendant-or-self::bauplan[1] Aufgabe 3 i) //*[(name()= bauteil or name()= bauteilref ) and parent::verbindung/@typ= genietet ]/@id = //*[(name()= bauteil or name()= bauteilref ) and parent::verbindung/@typ= geschraubt ]/@id Aufgabe 4 Verwenden Sie XSLT, um das Dokument aus Aufgabe 1 wie folgt umzuformen: Aufgabe 4 a) Erzeugen Sie eine Version des Dokuments, in der alle Gewichtsangaben in Zentnern angegeben sind. Aufgabe 4 b) Erzeugen Sie eine Version des Dokuments, in der alle bauteil-tags als Inhalt den dazugehörigen Bauplan enthalten, wenn er lokal vorhanden ist. Stellen Sie sicher, das ihr Stylesheet auch bei beliebig tief geschachtelten Bauplänen korrekt arbeitet. Aufgabe 4 c) Erzeugen Sie ein Ausgabedokument, das eine Matrix enthält, die zu jeder Kombina- 3
tion von Bauteilarten auflistet, welche Verbindungstypen zwischen den Bauteilarten existieren. Falls mehrere Verbindungsarten existieren, soll nur die erste vorkommende aufgelistet werden. <matrix> <header><typ>rumpf</typ><typ>fluegel</typ>...</header> <row><typ>rumpf</typ><verbindung>keine</verbindung> <verbindung>geschraubt</verbindung>...</row> <row><typ>fluegel</typ><verbindung>... </row>... </matrix> Aufgabe 5 Formulieren Sie folgende Anfragen auf dem Dokument aus Aufgabe 1 in XQuery. Aufgabe 5 a) Geben sie zu jedem als bauteil vorkommenden Objekt an, ob ein lokaler Bauplan vorliegt oder ein externer. Verwenden Sie XML-Tags, um das Ergebnis zu strukturieren. Aufgabe 5 b) Geben Sie zu jeder Art von Verbindung die Bauteilarten an, die an einer solchen Verbindung beteiligt sind. Verwenden Sie XML-Tags, um das Ergebnis zu strukturieren. Aufgabe 5 c) Erzeugen Sie ein Ausgabedokument, das eine Matrix enthält, die zu jeder Kombination von Bauteilarten auflistet, welche Verbindungstypen zwischen den Bauteilarten existieren. Falls mehrere Verbindungsarten existieren, soll nur die erste vorkommende aufgelistet werden (siehe Aufgabe 4c). Aufgabe 5 d) Welches Problem taucht auf, wenn man die Zahl der Triebwerke des A380 aus dem Bauplan berechnen will. Geht das in XQuery? Geht das in XSLT? Wenn ja, wie? Aufgabe 6 Geben Sie für die folgenden Aussagen jeweils an, ob Sie wahr oder falsch sind. Begründen Sie Ihre Antwort kurz. Aufgabe 6 a) XML-Attributnamen ohne Prefix gehören keinem Namensraum an. 4
Aufgabe 6 b) XML-Elementnamen ohne Prefix gehören keinem Namensraum an. Aufgabe 6 c) Nur in einem XML-Schema global definierte Elemente dürfen als Wurzelelement eines XML-Dokuments verwendet werden. Aufgabe 6 d) Jeder Typ in XML Schema muss einen Namen haben. Aufgabe 7 Die folgende DTD beschreibt Anfrage-Auswertungsplaene mit Hilfe relationaler Algebraausdruecke. Dabei entsprechen die rekursiv geschachtelten expr-tags den Knoten im relationalen Operatorbaum, und das operator-attribut gibt den jeweiligen Operator an, wobei die Operatoren Selektion, Projektion, Theta-Verbund, Vereinigung, Kreuzprodukt und Zugriff auf Basisrelationen (Scan) möglich sind. <!ELEMENT plan (base*,expr,comment?) > <!ELEMENT expr (rschema?,((expr?) (expr,expr)),pred?,comment?) > <!ATTLIST expr operator (select project join union crossprod scan) #REQUIRED attrs NMTOKENS #IMPLIED baserel IDREF #IMPLIED > <!ELEMENT base (rschema)> <!ATTLIST base id ID #REQUIRED> <!ELEMENT rschema (attr)*> <!ELEMENT attr EMPTY> <!ATTLIST attr name NMTOKEN #REQUIRED domain CDATA #IMPLIED> <!ELEMENT comment (#PCDATA)> <!ELEMENT pred (#PCDATA)> Aufgabe 7 a) Wandeln Sie die DTD in ein XML-Schema-Dokument um. Stellen Sie sicher, dass nur plan-tags als Wurzel eines Dokuments auftreten können. 5
Aufgabe 7 b) Diskutieren Sie ausführlich die Alternativen, das Schema mit einem Namensraum zu versehen (berücksichtigen Sie dabei insbesondere die verschiedenen Werte von elementformdefault). Geben Sie mindestens zwei verschiedene durch Namensraum erweiterte Schemadokumente an. Aufgabe 7 c) Kommentare sollen statt einfacher Strings auch in Form von XHTML angegeben werden können, d.h. man soll statt PCDATA auch einen xhtml-tag in Kommentaren verwenden können. Verändern Sie Ihr Schema entsprechend. Der Namensraum von XHTML ist http://www.w3.org/1999/xhtml. Aufgabe 7 d) Erweitern Sie Ihr XML-Schema so, dass es jeweils eigene Untertypen für Ausdrücke mit keinem, einem, und zwei Operanden enthält. Aufgabe 7 e) Verwenden Sie Substitutionsgruppen so, dass die Operatornamen direkt als tag-namen verwendet werden können, dass also z.b. statt <expr operator= select... geschrieben werden kann <select.... Hinweis: Dabei kann die Bedingung aus Teilaufgabe a, dass nur plan als Wurzelelement auftreten kann, nicht mehr aufrechterhalten werden. Aufgabe 7 f) Erzwingen Sie (fuer die Schreibweise aus der vorigen Teilaufgabe), dass jeweils die korrekte Zahl von Operanden verwendet wird (d.h. ein Scan hat keine Operanden, ein Join, die Vereinigung und das Kreuzprodukt zwei, und Selektion und Projektion einen). Aufgabe 8 Das Schema aus der vorigen Aufgabe stellt Ausführungspläne mit Hilfe der relationalen Algebra dar. Die base-elemente beschreiben eine Basisrelation, die jeweils eine ID und ein Schema haben. expr-elemente beschreiben jeweils einen Operator im Ausdruck, dessen 0-2 Operanden geschachtelt werden. attrs verweist auf Attribute, die der Operator aus der Eingabe verwendet. pred beschreibt bei Selektionen und Joins jeweils das Predikat. Für Scans gibt das Attribut baserel an, auf welche Basisrelation zugegriffen wird. Mit rschema kann das Ausgabeschema eines Teilausdrucks beschrieben werden. Beispiel: Gegeben seien die Basisrelationen A(a,b) und B(c) und der Ausdruck σ b>2 (σ a=c (A B)) Ein entsprechendes XML-Dokument ist dann 6
<plan> <base id="a"> <rschema> <attr name="a" /> <attr name="b" /> </rschema> </base> <base id="b"> <rschema> <attr name="c" /> </rschema> </base> <expr operator="select" attrs="b"> <expr operator="select" attrs="a c"> <rschema> <attr name="a" /> <attr name="b" /> <attr name="c" /> </rschema> <expr operator="crossprod"> <expr operator="scan" baserel="a"/> <expr operator="scan" baserel="b"/> </expr> <pred>a=c</pred> </expr> <pred>b>2</pred> </expr> </plan> Aufgabe 8 a) Geben Sie ein XSLT-Stylesheet an, welches die Pläne in eine Funktionsnotation umwandelt, also aus dem obigen Beispieldokument den String select[b>2](select[a=c](crossprod(a,b))) erzeugt. Aufgabe 8 b) Geben Sie ein XSLT-Stylesheet an, welches Selektionen auf Kreuzprodukten in Verbunde umwandelt, und das Dokument sonst unverändert lässt. Im Beispiel soll der Plan σ b>2 (σ a=c (A B)) umgewandelt werden in σ b>2 (A a=c B). Es sollen jeweils ALLE solchen Vorkommen ersetzt werden. Aufgabe 8 c) Geben Sie ein XSLT-Stylesheet an, welches alle Basisrelationen entfernt, die im Alge- 7
braausdruck nicht verwendet werden. 8