Skip to content
AarRei edited this page Apr 12, 2013 · 5 revisions

Dokumentation

Aufgabe 1

Wohlgeformtheit

Ein XML-Dokument sollte sich an diverse Syntaxregeln halten. Wenn alle Syntaxregeln eingehalten werden, dann wird das Dokument als „Wohlgeformt“ bezeichnet. Die Syntaxregeln lauten:

XML-Dokumente müssen ein root-Element haben. XML-Elemente müssen ein schließendes Tag haben. XML-Tags sind Case Sensitive. XML-Elemente müssen korrekt verschachtelt werden. XML-Attributewerte müssen in Anführungszeichen stehen.

<?xml version="1.0" encoding="UTF-8"?> <brief> <absender>Tove</absender> <empfaenger>Jani</empfaenger> <titel>Reminder</titel> <inhalt>Don't forget me this weekend!</inhalt> </brief>

Validität

Ein Valides XML-Dokument ist ein Wohlgeformtes XML-Dokument, welches zudem noch an Regeln einer Document Type Definition (DTD) hält. Beispiel:

`

Tove Jani Reminder Don't forget me this weekend! `

Die DTD:

`<!DOCTYPE brief [

]> `

Alternativ zu DTD ist es auch möglich das XML-Basierte XML-Schema zu verwenden, welches wie folgt aussieht:

`<xs:element name="brief">

xs:complexType   xs:sequence     <xs:element name="absender" type="xs:string"/>     <xs:element name="empfaenger" type="xs:string"/>     <xs:element name="titel" type="xs:string"/>     <xs:element name="inhalt" type="xs:string"/>   </xs:sequence> </xs:complexType>

</xs:element> `

Namespaces

Namespaces sind dazu da potentielle Namenskonflikte zwischen den verschiedenen Elementen zu verhindern. Wenn man z.B. ein element

nennt, weil man einen Tisch ansprechen will, es aber auch das HTML-Element
gibt um Tabellen zu erstellen, dann kommt es zu einem Namenskonflikt, da es ein Element zweimal mit verschiedenen Bedeutungen gibt. Dieses Problem lässt sich mit Präfixen lösen, welche man den Tags zuweist. Als beispiel:

`<h:table> <h:tr> <h:td>Stuff</h:td> <h:td>Other Stuff</h:td> </h:tr> </h:table>

<m:table> <m:name>Tischi</m:name> <m:holz>Teak</m:holz> <m:preis>200€</m:preis> </m:table>`

Der namespace des Präfix' muss definiert werden. Dies geschieht über das xmlns-Attribut im öffnenden Tag eines Elements. Sie können im root-Tag oder erst wenn sie verwendet werden definiert werden. Der Syntax ist wie folgt xmlns:prefix="URI".

`

<h:table> [...] </h:table>

<m:table> [...] </m:table>

`

Aufgabe 2

Als erstes wird ein root-Tag erstellt, welches hier einfach „form“ (als kurzform von Formular) genannt wird. Damit hat man dann <form></form> Nun hat man einen Gruppenleiter und kann noch beliebig viele zusätzliche Personen hinzufügen. Somit wir also ein Element namens „person“ erstellt, welches das Attribut „typ“, dessen Wert entweder „leiter“ oder „mitglied“ sein kann. Alternativ hätte man auch ein eigenes Element für den Gruppenleiter und die Mitglieder erstellen können, aber dies wäre spätestens beim erstellen eines XML-Schema äußerst umständlich. Somit hat man nun:

`

[...] `

Nun muss das Element „person“ nur noch mit den passenden Elementen befüllt werden. In diesem Fall sind es „vorname“, „nachname“, „email“, „geburtsdatum“, „erfahrung“, „schlagzeug“ und „anmerkungen“. Nachdem diese eingefügt wurden ist das Formular vollständig:

`

`

Um eine equivalente JSON-Datei zu erstellen nimmt man „form“ wieder als root-Element.

{ "form": { } }

Da es mehrere Personen geben kann, werden eckige Klammern gesetzt um dies zu signalisieren (siehe Array).

{ "form": { "person": [ ] } }

In diese Klammern kann man nun eine unbegrenzte Anzahl von Personen hineinschreiben.

{ "form": { "person": [ { "-typ": "leiter", "vorname": "Hans", "nachname": "Anderson", "email": "[email protected]", "geburtsdatum": "01.01.1970", "erfahrung": "Profi", "schlagzeug": "vorhanden", "anmerkungen": "Wichtig für meine Gruppe ist gutes Essen" }, [...] ] } }

Aufgabe 3

a)

Um das Rezept für den Kuchen in XML umzusetzen beginnt man wie immer erstmal mit dem root-Element, welches in diesem Fall das Rezept an sich ist.

<rezept></rezept>

Wenn man sich das Rezept betrachtet erkennt man drei Hauptstrukturen: einen Titel, welcher den Namen der Speise angibt, die Zutaten die für die Zubereitung der Speise von Nöten sind und schließlich die Zubereitung an sich. Fügt man diese hinzu sollte das Dokument so aussehen:

<rezept> <titel></titel> <zutaten> </zutaten> <zubereitung> </zubereitung> </rezept>

Nun gibt es nicht nur eine Zutat pro Speise, sondern mehrere und diese haben eine Art und eine Menge. Also versieht man das Element „Zutaten“ mit einem Unterelement „Zutat“, welches wiederum die Unterelemente „Menge“ und „Art“ hat. Alternativ hätte man auch dem Element „Zutat“ auch die Menge und die Art als Attribute zuweisen können. Das Ergebnis sieht dann so aus:

<rezept> <titel></titel> <zutaten> <zutat> <menge></menge> <art></art> </zutat> [...] </zutaten> <zubereitung> </zubereitung> </rezept>

Nun ist das Werk auch fast vollbracht. Unter die Zubereitung fallen dann noch Punkte, wie Schwierigkeitsgrad, Brennwert, Arbeitsdauer und die einzelnen Arbeitsschritte, wovon es wieder bliebig viele geben kann. Alternativ hätte man auch nur ein Element für die Gsamtheit der Arbeitsschritte machen können. Fertig sieht das XML-Dokument dann so aus:

<rezept> <titel></titel> <zutaten> <zutat> <menge></menge> <art></art> </zutat> [...] </zutaten> <zubereitung> <portionen></portionen> <arbeitszeit></arbeitszeit> <schwierigkeit></schwierigkeit> <brennwert></brennwert> <anleitung> <schritt></schritt> [...] </anleitung> </zubereitung> </rezept>

b)

Andere Rezepte auf der Seite chefkoch.de haben die gleiche Struktur und meistens auch die gleichen oder ähnliche Parameter. Alle Rezepte haben einen Titel, eine Zutatenliste und eine Zubereitungsanleitung. Punkte wie Arbeitszeit, Schwierigkeit und Brennwert können variieren. Auch können die Zutaten unterteilt werden, falls man gewisse Dinge getrennt anfertigt (wie z.B. Kuchen und eine spezielle Glasur).

d)

Da dieses mal mehrere Rezepte möglich sind wird zunächst das root-Element „rezepte“ definiert. Dieses Element kann beliebig viele Elemente vom Typ „rezept“ beinhalten. Dies wird durch die Attribute minOccurs="1" und maxOccurs="unbounded" erreicht. Das ganze sieht dann etwa so aus:

<xsd:element name="rezepte"> <xsd:complexType> <xsd:sequence> <xsd:element ref="rezept" minOccurs="1" maxOccurs="unbounded"></xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>

Nun wird das Element „rezept“ definiert. „rezept“ enthält ein Element des Typs „titel“, eins des Typs „zutaten“ und eins des Typs „zubereitung“. Der Titel an sich ist ein simples Element und enthält lediglich Text. Dies wird duch das Attribut type="xsd:string" festgelegt. Das Element „zutaten“ enthält eine beliebige Anzahl vom Element „zutat“, welches wieder durch minOccurs="1" und maxOccurs="unbounded" ermöglicht wird. Das gleiche gilt für das Element „schritt“, welches in „zubereitung“ und „anleitung“ verschachtelt ist.

Die restlichen Elemente werden ihren parent-Elementen zugeordnet. Jede „zutat“ hat eine „art“ und „menge“. Die Zubereitung hat neben der „anleitung“ noch „schwierigkeit“, „brennwert“ und „arbeitszeit“.

Aufgabe 4

Aufgabe 5

Clone this wiki locally