Nachname: Klausur zur Vorlesung Einführung in XML MUSTERLÖSUNG Vorname: Matr.Nr.: Studiengang: Bearbeiten Sie alle Aufgaben! Hilfsmittel sind nicht zugelassen. Die Bearbeitungszeit ist 90 Minuten. Aufgabe Punkte max. Punkte erreicht 1 1 + 2 2 4 3 6 4 4 5 4 6 3 7 4 Summe 28 1 von 10
Aufgabe 1: Wir betrachten das Inhaltsverzeichnis eines fiktiven Sammelbandes mit Autoren, Beitragstiteln und Seitenzahlen. <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="sammelbandstyle.xsl"?> <!DOCTYPE Band SYSTEM "Sammelband.dtd"> <Band Titel="All you didn't want to know about XML" Jahr="2015"> <Autoren> <Autor AID="SA">Stefan Achler</Autor> <Autor AID="SP">Sebastian Pape</Autor> <Autor AID="CS">Christof Schöch</Autor> <Autor AID="KS">Kai Schweinsberg</Autor> <Autor AID="LW">Lutz Wegner</Autor> </Autoren> <Inhalt> <Beitrag Seiten="12"> <AutorRef RID="SA"/> <Titel>Gesture-Based Data Exploration</Titel> <Quelle Quelltyp="Proceedings">MEDI2014, Larnaca</Quelle> </Beitrag> <Beitrag Seiten="12"> <AutorRef RID="KS"/><AutorRef RID="LW"/> <Titel>Mapping XML Documents</Titel> <Quelle Quelltyp="Proceedings">MEDI2014, Larnaca</Quelle> </Beitrag> <Beitrag Seiten="2"> <AutorRef RID="SA"/><AutorRef RID="CS"/> <Titel>Bringing TEI Lite to Drupal</Titel> <Quelle Quelltyp="Poster">Digital Humanities Conf.</Quelle> </Beitrag> <Beitrag Seiten="14"> <AutorRef RID="SP"/><AutorRef RID="CS"/><AutorRef RID="LW"/> <Titel>TEICHI and the Tools Paradox</Titel> <Quelle Quelltyp="Article"> The Journal of the Text Encoding Initiative </Quelle> </Beitrag> </Inhalt> </Band> 2 von 10
(a) Ist das Dokument ein wohlgeformtes XML-Dokument? Wenn nein, welche Fehler enthält es? Das Dokument ist wohlgeformt. (b) Die Reihenfolge der Autoren ist bei den Beiträgen wichtig. Ist sie durch die Reihenfolge der AutorRef-Elemente vorgegeben? Wenn nein, wie kann man eine zusätzliche Nummerierung über Attribute einführen? Die Reihenfolge der Autoren ist durch die Reihenfolge der AutorRef- Elemente bestimmt. Aufgabe 2: Ergänzen Sie die unterstrichenen Lücken in der DTD für das (ggf. korrigierte) Sammelband- Dokument von oben! Es gelten die folgenden Vorgaben: Das Quelle-Element darf höchstens einmal auftreten. Alle Attribute außer Quelltyp sind verpflichtend, Quelltyp hat keinen Default-Wert. Das Attribut AID ist ein eindeutiger Bezeichner für den Autor. Das Attribut RID zeigt auf diesen Bezeichner. Jeder Beitrag hat mindestens einen Autor. <!-- DTD fuer das Sammelband-Dokument --> <!ELEMENT Band (Autoren, Inhalt)> <!ATTLIST Band Titel CDATA #REQUIRED Jahr CDATA #REQUIRED> <!ELEMENT Autoren (Autor)+> <!ELEMENT Autor (#PCDATA)> <!ATTLIST Autor AID ID #REQUIRED> <!ELEMENT Inhalt (Beitrag)+> <!ELEMENT Beitrag ( AutorRef+, Titel, Quelle? )> <!ATTLIST Beitrag Seiten CDATA #REQUIRED> <!ELEMENT AutorRef EMPTY> <!ATTLIST AutorRef RID IDREF #REQUIRED> <!ELEMENT Titel (#PCDATA)> <!ELEMENT Quelle (#PCDATA)> <!ATTLIST Quelle Quelltyp ( Proceedings Monograph Article Poster ) #IMPLIED > 3 von 10
Aufgabe 3: Füllen Sie die Lücken im XML-Schema zum Sammelband-Dokument. Orientieren Sie sich bei den gewünschten Angaben an den Vorgaben der DTD aus Aufgabe 2. Zusätzlich bzw. abweichend soll gelten, dass die Attribute Jahr und Seiten positive ganze Zahlen sind. <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name=" Band " type=" BandType "/> <xsd:complextype name="bandtype"> <xsd:sequence> <xsd:element name="autoren" type="autorentype"/> <xsd:element name="inhalt" type="inhalttype"/> </xsd:sequence> <xsd:attribute name="titel" type="xsd:string" use="required"/> <xsd:attribute name="jahr" type=" xsd:positiveinteger " use="required"/> <xsd:complextype name="autorentype"> <xsd:sequence> <xsd:element name="autor" type="autortype" maxoccurs="unbounded" /> </xsd:sequence> <xsd:complextype name="autortype"> <xsd:simplecontent> <xsd:extension base="xsd:string"> <xsd:attribute name="aid" type=" xsd:id " use="required"/> </xsd:extension> </xsd:simplecontent> <xsd:complextype name="inhalttype"> <xsd:sequence> <xsd:element name="beitrag" type="beitragtype" maxoccurs="unbounded" /> </xsd:sequence> 4 von 10
<xsd:complextype name="beitragtype"> <xsd:sequence> <xsd:element name="autorref" type="autorreftype" maxoccurs="unbounded"/> <xsd:element name="titel" type="xsd:string"/> <xsd:element name="quelle" type="quelletype" minoccurs="0" /> </xsd:sequence> <xsd:attribute name="seiten" type=" xsd:positiveinteger " use="required"/> <xsd:complextype name="autorreftype"> <xsd:attribute name="rid" type=" xsd:idref " use="required"/> <xsd:complextype name="quelletype"> <xsd:simplecontent> <xsd:extension base="xsd:string"> <xsd:attribute name="quelltyp"> <xsd:simpletype> <xsd: restriction base=" xsd:string "> <xsd:enumeration value="proceedings"/> <xsd:enumeration value="monograph"/> <xsd:enumeration value="article"/> <xsd:enumeration value="poster"/> </xsd: restriction > </xsd:simpletype> </xsd:attribute> </xsd:extension> </xsd:simplecontent> </xsd:schema> 5 von 10
Aufgabe 4: Ergänzen Sie die Lücken im Stylesheet, damit unser, ggf. korrigiertes Sammelband-Dokument aus Aufgabe 1 die gezeigte Ausgabe erzeugt. <?xml version='1.0'?> <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <head> <title>inhaltsverzeichnis</title> </head> <body> <h1><xsl:value-of select=" Band/@Titel "/></h1> <table border="1"> <xsl:apply-templates select=" Band/Inhalt/Beitrag "/> </table> </body> </html> </xsl:template> <xsl:template match="beitrag"> <tr> <td><xsl: apply-templates select="autorref"/></td> <td><xsl:value-of select="titel"/></td> 6 von 10
<td> <xsl:value-of select="quelle"/> (<xsl:value-of select="quelle/@quelltyp"/>) </td> </tr> </xsl:template> <xsl:template match="autorref"> <xsl:value-of select="//autor[_@aid_=current()/ @RID ]"/><br/> </xsl:template> </xsl:stylesheet> Aufgabe 5: Wir erstellen eine Autorenstatistik, die alle Autoren in alphabetischer Reihenfolge ihrer Namen und die Anzahl der Beiträge im Sammelband, an denen sie beteiligt sind, auflistet. Füllen Sie die Lücken in der folgenden XQuery auf dem ggf. korrigierten Dokument Sammelband.xml, sodass das unten gezeigte Ergebnis geliefert wird! <Autorenstatistik> { let $doc := fn:doc("sammelband.xml") for $a in $doc/band/autoren/autor order by $a return <Autor Name="{ $a }"> { fn:count($doc/band/inhalt/beitrag[autorref/@rid= $a/@aid ]) } </Autor> } </Autorenstatistik> Ausgabe: <Autorenstatistik> <Autor Name="Christof Schöch">2</Autor> <Autor Name="Kai Schweinsberg">1</Autor> <Autor Name="Lutz Wegner">2</Autor> <Autor Name="Sebastian Pape">1</Autor> <Autor Name="Stefan Achler">2</Autor> </Autorenstatistik> 7 von 10
Aufgabe 6: Gegeben seien die drei folgenden Datenbanktabellen AUTOREN, BEITRAEGE und AB. AUTOREN BEITRAEGE AB AID NAME BID TITEL AID BID SA Stefan Achler MEDA Gesture-Based Data Exploration SA MEDA SP Sebastian Pape MEDB Mapping XML Documents SA DHC CS Christof Schöch DHC Bringing TEI Lite to Drupal SP JTEI KS Kai Schweinsberg JTEI TEICHI and the Tools Paradox CS DHC LW Lutz Wegner CS JTEI KS MEDB LW MEDB LW JTEI Füllen Sie die Lücken in der SQL/XML-Abfrage unten. Geliefert werden soll die gezeigte Ausgabe, die bis auf das umgebende Element Autorenstatistik gleich ist der Ausgabe aus Aufgabe 5. SELECT XMLELEMENT( NAME "Autor", XMLATTRIBUTES( AUTOREN.NAME AS "Name" ), COUNT(AB.BID) ) FROM AUTOREN, AB WHERE AUTOREN.AID = AB.AID GROUP BY AUTOREN.NAME ORDER BY AUTOREN.NAME; Ergebnis: <Autor Name="Christof Schöch">2</Autor> <Autor Name="Kai Schweinsberg">1</Autor> <Autor Name="Lutz Wegner">2</Autor> <Autor Name="Sebastian Pape">1</Autor> <Autor Name="Stefan Achler">2</Autor> 8 von 10
Aufgabe 7: Auch wenn es nicht ganz in eine Klausur im Sommersemester passt, heute betrachten wir aus unserer Sammlung animierter Verkehrszeichen das Gefahrenzeichen 113 Schnee- oder Eisglätte. Ergänzen Sie die Lücken durch Angabe der passenden Ziffer! Hinweis: Nicht alle Ergänzungen werden gebraucht, manche aber mehrfach. 1 defs 2 #flake 3 path 4 #arrow 5 rotate 6 #strunk 7 translate 8 rect <?xml version="1.0"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect x="0" y="0" width="600" height="600" fill="white"/> <line x1="50" y1="500" x2="550" y2="500" style="stroke:red; stroke-width:50px; stroke-linecap:round"/> <line x1="50" y1="500" x2="300" y2="67" style="stroke:red; stroke-width:50px; stroke-linecap:round"/> <line x1="300" y1="67" x2="550" y2="500" style="stroke:red; stroke-width:50px; stroke-linecap:round"/> < 3 style="stroke:black; stroke-width:2px" fill="none" d="m 260 50 A 43 43 60 0 1 340 50 L 590 480 A 43 43-60 0 1 550 545 L 50 545 A 43 43-60 0 1 10 480 L 260 50"/> < 1 > <polygon id="arrow" points="300,260 310,265 310,300 290,300 290,265" fill="black"/> <g id="flake"> <rect id="strunk" x="290" y="300" width="20" height="60" fill="black"/> <use xlink:href=" 4 "/> 9 von 10
<use xlink:href=" 4 " transform="rotate(-60, 300, 300)"/> <use xlink:href=" 4 " transform="rotate(60, 300, 300)"/> </g> </ 1 > <g> <use xlink:href=" 2 "/> <use xlink:href=" 2 " transform="rotate(60, 300, 360)"/> <use xlink:href=" 2 " transform="rotate(120, 300, 360)"/> <use xlink:href=" 2 " transform="rotate(180, 300, 360)"/> <use xlink:href=" 2 " transform="rotate(-60, 300, 360)"/> <use xlink:href=" 2 " transform="rotate(-120, 300, 360)"/> <animatetransform attributename="transform" type=" 5 " from="0 300 360" to="360 300 360" dur="6s" repeatcount="indefinite"/> </g> </svg> ENDE DER KLAUSUR 10 von 10