Leichter Einstieg in XML-Schema
Im vorigen Artikel: Leichter Einstieg in XML habe ich euch gezeigt was XML ist, wo die Einschränkungen von HTML liegen und welche Möglichkeiten man daher mit XML hat. Ich habe euch am Beispiel eines fiktiven Online-Sandwich-Ladens gezeigt, wie man XML (mehr oder weniger) sinnvoll einsetzen kann um sich sein eigenes Online-Sandwich zu basteln.
<sandwich>
<brot>
<kaese></kaese>
<gurken></gurken>
<mayonaise></mayonaise>
</brot>
</sandwich>
Derzeit würde uns aber noch nichts davon abhalten, einfach die Reihenfolge der selbstdefinierten-Tags zu ändern, dafür brauchen wir nämlich XML-Schema.
Was ist XML-Schema und warum gibt es die Abkürzung DTD?
Ich fange erstmal mit DTD (Document Type Definition) an: Als Webentwickler benutzen wir ständig HTML oder XHtml und basteln nach uns bekannten Mustern den Quellcode zusammen. Zum Beispiel würde niemand in einem XHtml-Dokument zuerst den “body”-Teil erstellen und zum Schluß den “Header”-Bereich und warum nicht? Weil das XHtml-Dokument sonst fehlerhaft ist. Aber wer sagt meinem XHtml-Dokument das es fehlerhaft ist, wer prüft das ganze?
Dies erfolgt über die DTD, die Document Type Definition, ein Dokument welches die Regeln für den Aufbau einer Datei spezifiziert. Dabei ist man nicht auf XHtml-Dateien beschränkt, sondern kann beliebige Regeln für Dokumente definieren (ein weiteres Beispiel ist SVG).
Also die DTD läßt uns den Aufbau eines Dokuments festlegen, in unserem Sandwich-Beispiel würde die DTD folgendes spezifizieren:
- In meinem Sandwich-Objekt darf ich nur zwei Scheiben Brot haben
- diese beiden Scheiben Brot dienen als äußerer Rahmen meines Sandwichs, demnach darf man auch nicht Mayoinaise auf beide Seiten einer Brotscheibe schmieren
- Zwischen den beiden Brotscheiben darf man mehrere Zutaten packen
- allerdings darf die Anzahl der verwendeten Zutaten zum Beispiel nicht 7 Zutaten überschreiten
- In einem Sandwich darf man nur einmal die Zutat “Salami” verwenden, aber mehrmals die Zutat “Käse”
Nun kommt aber die Frage auf, warum es dann noch XML-Schema gibt, wenn doch die DTD schon all unsere Anforderungen erfüllt? XML-Schema ist speziell für XML-Dokumente und bietet mehr Möglichkeiten als die DTD. Ein Beispiel: In XML-Schema kann man Tags deklarieren und ihnen ganz spezielle Typen zuordnen, das ist in einer DTD nicht möglich:
XML-Schema – Pseudocode
XML-Schema besagt:
name = string {text}
alter = integer {zahl}
<name>Christian</name>
<alter>22</alter>
Manche würden sagen Nachteil, ich finde es aber eher als Vorteil, ist die Komplexität von XML-Schema-Dokumenten im Gegensatz zur DTD. Dadurch ist der Einstieg zwar schwieriger, der Funktionsumfang aber auch größer.
Für dieses Beispiel soll als nächstes ein XML-Schema-Dokument erzeugt werden:
<sandwich>
<brot>
<kaese></kaese>
<gurken></gurken>
<mayonaise></mayonaise>
</brot>
</sandwich>
Im XML-Schema-Dokument wollen wir nun die Regeln definieren, nachdem ein Sandwich in unserem Online-Sandwich-Laden zusammengebastelt werden darf.
Ein XML-Schema-Dokument für unsere Sandwiches
<xsd:complexType name="sandwiches">
<xsd:element name="brot" minOccurs="0" maxOccurs="unbounded" use="required">
<xsd:choice>
<xsd:element name="graubrot" type="graubrot"/>
<xsd:element name="weißbrot" type="weißbrot"/>
</xsd:choice>
<xsd:complexType>
<xsd:element name="kaese" type="xsd:string"/>
<xsd:element name="salami" type="xsd:string"/>
<xsd:element name="mayonaise" type="xsd:integer" minOccurs="10" maxOccurs="100"/>
<xsd:element name="gurken" type="xsd:integer" minOccurs="0" maxOccurs="100"/>
</xsd:complexType>
</xsd:element>
</xsd:complexType>
Leider wird der Quellcode nicht eingerückt dargestellt, darum ist die Struktur schwerer zu erkennen (etwas besser läßt sich der Quellcode in meinem Code-Blog lesen: Xml und Xml-Schema – Einstiegsbeispiel). Ich erläutere nun von oben nach unten die einzelnen Bereiche (könnte noch Fehler beinhalten):
- Zuerst wird der komplexe Typ “Sandwich” erstellt, er ist komplex da in ihm viele Elemente liegen
- Das erste Element welches im “Sandwich” liegt ist unser “Brot”.
- Mit “minOccurs” gegeben wir die Mindestanzahl an, also wir haben sogar die Möglichkeit garkein Sandwich zu erstellen. Die maximale Anzahl ist unbegrenzt (unbounded)
- Das Brot wird definitiv für unser Sandwich benötigt, daher auch use=”required”
- Nun kommt das “choice”-Element, wir können also beim Brot zwischen 2 Brotsorten wählen
- “Brot” ist selbst wieder ein komplexer Typ, da auch in ihm mehrere Elemente liegen
- die Elemente sollten selbsterklärend sein, vielleicht einen Hinweis zur Mayonaise: die Mindestgröße ist 10 (ml), man darf aber nicht mehr als 100 ml Mayonaise auf sein Sandwich packen, da sonst das Sandwich überquillt
- Man kann auf Gurken verzichten, aber nur maximal 3 Stück auf seinem Sandwich platzieren
- als letztes schliesst man noch die vorher geöffneten XML-Schema-Tags und dann ist das XML-Schema-Dokument fertig (zumindest als Pseudo-code)
Dieses Beispiel umfasst nur einen geringen Bereich der Möglichkeiten von XML-Schema, es ist noch viel mehr möglich, zum Beispiel kann man komplexeTypen auch noch später mit Elementen erweitern oder man kann einem Element als Typ eine RexExpression geben (z.b. akzeptiere nur Werte in denen die Buchstabenkombination “abc” vorkommt).
Zwei gute Quellen zu XML-Schema:
Verwandte Artikel
- Leichter Einstieg in XSLT
- Leichter Einstieg in XML
- Webdesign Quickreferenz
- Kompendium – Techniken und Bereiche des Webdesign
- Selbes Layout in IE und Firefox – Margin anstelle von Padding nutzen
- Pingback: Leichter Einstieg in XSLT » Webdesignblog on Juni 21, 2006
Tut mir leid, die Kommentarfunktion für diesen Beitrag ist geschlossen.
