prev up next


Aufgabe 9.2 (20 Punkte)

Überlegen Sie sich ein XML-Format zur Beschreibung von Büchern und erstellen Sie eine dazu passende DTD. Es sollen mindestens Informationen über die Autoren (mit Vor- und Nachnamen), Titel, ISBN, Verlag, Preis und Buchtyp (broschiert, gebunden oder geheftet) enthalten sein. Erstellen Sie eine XML-Datei, die Ihrem Format entspricht und die mindestens fünf Bücher enthält.

Schreiben Sie einen XQuery-Ausdruck, der aus den Daten eine standardkonforme XHTML-Datei erzeugt, in der die Bücherdaten tabellarisch aufgelistet werden.

Musterlösung vom 29.06.2008:

<?xml version="1.0" ?>
<!DOCTYPE catalogue SYSTEM "books.dtd">
<catalogue>
  <book type="broschiert" lang="de">
    <authors>
      <author sex="m">
        <firstname>Oliver</firstname>
        <lastname>Vornberger</lastname>
      </author>
      <author sex="m">
        <firstname>Patrick</firstname>
        <lastname>Fox</lastname>
      </author>
    </authors>
    <title edition="10">Datenbanksysteme</title>
    <isbn />
    <publisher>Selbstverlag der Universitaet Osnabrueck</publisher>
    <price currency="EUR">7,50</price>
  </book>
  <book type="broschiert" lang="de">
    <authors>
      <author sex="m">
        <firstname>Alfons</firstname>
        <lastname>Kemper</lastname>
      </author>
      <author sex="m">
        <firstname>Andre</firstname>
        <lastname>Eickler</lastname>
      </author>
    </authors>
    <title edition="4">Datenbanksysteme - Eine Einfuehrung</title>
    <isbn>3-486-25706-4</isbn>
    <publisher>Oldenbourg</publisher>
    <price currency="EUR">39,80</price>
  </book>
  <book type="broschiert" lang="en">
    <authors>
      <author sex="m">
        <firstname>Elliotte Rusty</firstname>
        <lastname>Harold</lastname>
      </author>
      <author sex="m">
        <firstname>Scott</firstname>
        <lastname>Means</lastname>
      </author>
    </authors>
    <title edition="1">XML in a Nutshell</title>
    <isbn>0-596-00058-8</isbn>
    <publisher>O'Reilly</publisher>
    <price currency="USD">29,95</price>
  </book>
</catalogue>
<!ELEMENT author ( firstname, lastname ) >
<!ATTLIST author sex ( m | f ) #REQUIRED >

<!ELEMENT authors ( author+ ) >

<!ELEMENT book ( authors, title, isbn, publisher, price ) >
<!ATTLIST book lang CDATA #REQUIRED >
<!ATTLIST book type ( broschiert | gebunden | geheftet ) #REQUIRED >

<!ELEMENT catalogue ( book+ ) >

<!ELEMENT firstname ( #PCDATA ) >

<!ELEMENT isbn ( #PCDATA ) >

<!ELEMENT lastname ( #PCDATA ) >

<!ELEMENT price ( #PCDATA ) >
<!ATTLIST price currency CDATA #REQUIRED >

<!ELEMENT publisher ( #PCDATA ) >

<!ELEMENT title ( #PCDATA ) >
<!ATTLIST title edition CDATA #IMPLIED >


<html>
  <head>
    <title>Buecherliste</title>
  </head>
  <body>
    <table>{

for $buch in /catalogue/book
let $autoren := data($buch//author/firstname | $buch//author/lastname)
return 

      <tr>
        <td>{$autoren}</td>
        <td>{data($buch/title)}</td>
        <td>{data($buch/isbn)}</td>
        <td>{data($buch/publisher)}</td>
        <td>{concat(data($buch/price), ' ', data($buch/price/@currency))}</td>
      </tr>
}
    </table>
  </body>
</html>


prev up next