Theoretische Grundlagen der Informatik, WS 02/03
Dozenten: J.-M. Piveteau, U.-M. Künzi
Speichern Sie den Inhalt des Beispiels eines Kontoauszugs in ein XML-Dokument (welche Informationen dürfen Sie weglassen, da sie besser durch ein Stylesheet angegeben werden sollten?).
Erstellen Sie für dieses XML-Dokument ein XML-Schema. Beachten Sie dabei folgende Punkte:
XML-Datei <?xml version="1.0" encoding="UTF-8"?> <Kontoauszug xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "C:\HSR\Uebungen\Grundlagen\xml\Uebung4\Zahlung.xsd"> <Kontonummer>230-23590.098-</Kontonummer> <Periode> <Anfangsdatum>01-10-2002</Anfangsdatum> <Enddatum>31-10-2002</Enddatum> </Periode> <Zahlung> <Waehrung>$</Waehrung> <Betrag>450.70</Betrag> <Datum>12-10-2002</Datum> <Referenznummer>456120987</Referenznummer> <Buchungstext>Zwei Übernachtungen</Buchungstext> <Empfaenger>Hotel Grand Luxe Paris</Empfaenger> <Spesen>0.00</Spesen> <Kontostand>10009.45</Kontostand> </Zahlung> <Zahlung> <Waehrung>$</Waehrung> <Betrag>237.00</Betrag> <Datum>15-10-2002</Datum> <Referenznummer>439000121</Referenznummer> <Buchungstext>Abendessen</Buchungstext> <Empfaenger>Restaurant Super Luxe Paris</Empfaenger> <Spesen>0.00</Spesen> <Kontostand>9772.45</Kontostand> </Zahlung> <Zahlung> <Waehrung>$</Waehrung> <Betrag>1893.00</Betrag> <Datum>22-10-2002</Datum> <Referenznummer>000012124</Referenznummer> <Buchungstext>Flugbillet Zürich-Paris</Buchungstext> <Empfaenger>Rappi-Travel-Agency</Empfaenger> <Spesen>0.00</Spesen> <Kontostand>7879.45</Kontostand> </Zahlung> </Kontoauszug> |
XSD-Datei <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Kontoauszug"> <xs:complexType> <xs:sequence> <xs:element name="Kontonummer"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d\d\d\-\S*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Periode"> <xs:complexType> <xs:sequence> <xs:element name="Anfangsdatum"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d\d\-\d\d\-\d\d\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Enddatum"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d\d\-\d\d\-\d\d\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Zahlung" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Waehrung"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\p{Sc}"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Betrag"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d*\.\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Datum"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d\d\-\d\d\-\d\d\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Referenznummer"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:pattern value="\d\d\d\d\d\d\d\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Buchungstext" type="xs:string" minOccurs="0"/> <xs:element name="Empfaenger" type="xs:string"/> <xs:element name="Spesen"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d*.\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Kontostand"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d*\.\d\d"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Vergleichen Sie Ihr Schema mit einem Schema, das vom XML-Spy auf der Basis des XML-Dokuments automatisch erzeugt wird.
Schreiben Sie ein XML-Schema für das unterstehende Dokument. Beachten sie dabei, dass es für jedes Buch zwei "Reviews" gibt: Stellen Sie sicher, dass sie in beliebiger Reihenfolge auftreten können.
<?xml version="1.0"?>
<booklist>
<book isbn="1-3456-0876-6">
<autor born="1929">Milan Kundera</autor>
<titel>Das Leben ist anderswo
<footnote>Originaltitel: Zivot je jinde</footnote>
<footnote>Aus dem Tschechischen von Franz Künzel</footnote>
</titel>
<personal_review>Kundera beehrrscht die Kunst, zu verhöhen, ohne zu verzerren. Jedes Detail, jede Psychologische Motivation in seinem Buch ist wahr und präzis.
<personal_reviewer>Gabriel Laub</personal_reviewer>
</personal_review>
<newspaper_review>In der Form eines realistischen Romans schafft Kundera trotz sprachlichen Geschmeidigkeit und Anmut ungemein scharfe Satire
<newspaper>Berner Tagblatt</newspaper>
</newspaper_review>
</book>
<!-- Weitere Bücher -->
</booklist>
Ergänzen Sie das XML-Dokument durch eine Meta-Information mit der RDF-Aufzeichnungsprache (Diese Metainformation muss mindestens den Autor, eine Kurzbeschreibung des Dokuments und das Datum der letzten Aktualisierung beinhalten) . Passen Sie Ihr XML-Schema entsprechend an.
XML-Datei <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <booklist xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema C:\HSR\Uebungen\Grundlagen\xml\Uebung4\Booklist.xsd"> <!-- <booklist> --> <book isbn="1-3456-0876-6"> <autor born="1929">Milan Kundera</autor> <titel>Das Leben ist anderswo <footnote>Originaltitel: Zivot je jinde</footnote> <footnote>Aus dem Tschechischen von Franz Künzel</footnote> </titel> <personal_review>Kundera beehrrscht die Kunst, zu verhöhen, ohne zu verzerren. Jedes Detail, jede Psychologische Motivation in seinem Buch ist wahr und präzis. <personal_reviewer>Gabriel Laub</personal_reviewer> </personal_review> <newspaper_review>In der Form eines realistischen Romans schafft Kundera trotz sprachlichen Geschmeidigkeit und Anmut ungemein scharfe Satire <newspaper>Berner Tagblatt</newspaper> </newspaper_review> </book> <!-- Weitere Bücher --> </booklist> <rdf:Description about=""> <dc:creator>Liebi</dc:creator> <dc:description>Dieses Dokument beschreibt verschiedene Bücher</dc:description> <dc:date>08.11.2002</dc:date> </rdf:Description> </rdf:RDF> |
XSD-Datei <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="autor"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="born" type="xs:short" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="book"> <xs:complexType mixed="true"> <xs:sequence> <xs:element ref="xs:autor"/> <xs:element ref="xs:titel"/> <xs:element ref="xs:personal_review"/> <xs:element ref="xs:newspaper_review"/> </xs:sequence> <xs:attribute name="isbn" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:element name="booklist"> <xs:complexType> <xs:sequence> <xs:element ref="xs:book"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="footnote" type="xs:string"/> <xs:element name="newspaper" type="xs:string"/> <xs:element name="newspaper_review"> <xs:complexType mixed="true"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:newspaper"/> </xs:choice> </xs:complexType> </xs:element> <xs:element name="personal_review"> <xs:complexType mixed="true"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:personal_reviewer"/> </xs:choice> </xs:complexType> </xs:element> <xs:element name="personal_reviewer" type="xs:string"/> <xs:element name="titel"> <xs:complexType mixed="true"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="xs:footnote"/> </xs:choice> </xs:complexType> </xs:element> </xs:schema> |
Die Elemente <xs:annotation>, <xs:documentation> und <xs:appinfo> erlauben Metainformationen in XML-Schemas zu speichern. Lesen Sie die Beschreibung dieser Elemente (z.B. im Buch E. Harold, S. Means, XML in a Nutshell, 2nd Edition, Chapter 16 und 21)
Es können Meta-Informationen, bzw. Kommentare in XML-Dateien eingefügt werden, die von Parsern nicht verändert werden dürfen. Bei herkömmlichen Kommentaren ist es den Parsern erlaubt, diese beispielsweise zu ignorieren. Des Weiteren erlauben es Annotations, strukturierte Kommentare aufzubauen, so dass auch automatische Kommentargenerierung vereinfacht wird. |
XSD-Datei von Aufgabe 1 (als Beispiel) <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:annotation> <xs:documentation>Schema, das einen Kontoauszug beschreibt</xs:documentation> </xs:annotation> <xs:element name="Kontoauszug"> <xs:complexType> <xs:sequence> <xs:element name="Kontonummer"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="\d\d\d\-\S*"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="Periode"> <xs:complexType> <xs:sequence> <xs:element name="Anfangsdatum"> ........ |