Schemata

(Auszug aus "Perl & XML" von Erik T. Ray & Jason McIntosh)

Es gibt verschiedene Vorschläge einer verbesserten Schemasprache, die die Nachteile der DTD ausräumen sollen. Die vom W3C empfohlene Sprache heißt XML Schema. Sie sollten sich aber darüber im klaren sein, daß dies nur eine von mehreren konkurrierenden Schemasprachen ist. Eine andere könnte für Ihre Bedürfnisse besser passen. Ein wichtiger Punkt in diesem Zusammenhang dürfte sein, ob es für die von Ihnen favorisierte Sprache bereits ein passendes CPAN-Modul gibt.

Im Unterschied zur DTD-Syntax sind XML-Schemata selbst XML-Dokumente. Man kann sie also bequem mit einem der zahlreichen XML-Editoren oder -Werkzeuge bearbeiten. Ihre eigentlichen Möglichkeiten entfalten sich aber erst bei der präzisen Kontrolle der Daten, die sich in Ihrem Dokument befinden. Damit wird die Sprache speziell für Dokumenttypen attraktiv, bei denen die Datenqualität genauso wichtig oder sogar noch wichtiger als die Struktur ist. Das Beispiel unten zeigt ein Schema, wie man es zum Beispiel für Umfragen benutzen könnte, in denen eine Kontrolle der Datentypen essentiell ist.

Beispiel: Ein XML-Schema

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
  <xs:annotation>
    <xs:documentation>
      Umfrage des Wiewunderlandes
      Papierkramministerium, Edelsteinstadt
    </xs:documentation>
  </xs:annotation>
  <xs:element name="Umfrage" type="Umfragentyp"/>
  <xs:complexType name="Umfragentyp">
    <xs:element name="Qualität" type="xs:decimal" minoccurs="0"/>
    <xs:element name="Adresse" type="Adressentyp"/>
    <xs:element name="Teilnehmer" type="Teilnehmertyp"/>
    <xs:attribute name="Datum" type="xs:date"/>
  </xs:complexType>
  <xs:complexType name="Adressentyp">
    <xs:element name="Hausnummer" type="xs:decimal"/>
    <xs:element name="Straße" type="xs:string"/>
    <xs:element name="Stadt" type="xs:string"/>
    <xs:element name="Bundesland" type="xs:string"/>
    <xs:attribute name="Postleitzahl" type="PLZtyp"/>
  </xs:complexType>
  <xs:simpleType name="PLZtyp" base="xs:string">
    <xs:pattern value="[0-9]{5}"/>
  </xs:simpleType>
  <xs:complexType name="Teilnehmertyp">
    <xs:element name="Teilnehmer" minOccurs="1" maxOccurs="20">
      <xs:complexType>
        <xs:element name="Vorname" type="xs:string"/>
        <xs:element name="Nachname" type="xs:string"/>
        <xs:element name="Alter">
          <xs:simpleType base="xs:positive-integer">
            <xs:maxExclusive value="200"/>
          </xs:simpleType>
        </xs:element>
      </xs:complexType>
    </xs:element>
  </xs:complexType>
</xs:schema>

Die erste Zeile identifiziert das Dokument als ein Schema und assoziiert es mit dem Namensraum von XML Schema. Das Element <xs:annotation> soll den Zweck des Schemas und andere Details dokumentieren. Nachdem diese Dokumentation erledigt ist, können wir uns endlich dem Vergnügen widmen, Elementtypen zu deklarieren.

Wir beginnen mit unserem Wurzelelement namens <Umfrage>. Die Deklaration geschieht durch den Elementtyp <xs:element>. Seine Attribute spezifizieren den Namen »Umfrage« und den Typ »Umfragentyp« von <Umfrage>. Anders als in einer DTD trennt man häufig die Beschreibung des Inhalts von der tatsächlichen Deklaration. Das soll die Wiederverwendbarkeit generischer Elementtypen verbessern, indem viele Elemente davon abgeleitet werden. Erst weiter unten im Schema finden wir dann die tatsächliche Beschreibung des Inhalts durch ein Element <xs:complexType> mit name="Umfragentyp". Eine <Umfrage> enthält optional ein Element <Qualitaet>, gefolgt von den erforderlichen Elementen <Teilnehmer> und <Adresse>. Darüber hinaus ist das Attribut Datum zwingend.

Sowohl das Attribut Datum als auch das Element <Qualitaet> haben einen speziellen Schematyp: ein Datum bzw. eine Dezimalzahl. Wenn ein Dokument <Umfrage> irgend etwas anderes als einen Zahlenwert im Feld <Qualitaet> hätte, dann wäre das laut Schema ein Fehler. Dieser Grad der Kontrolle ist mit einer DTD undenkbar.

Ein Schema kann viele Typprüfungen durchführen, unter anderem auf Bytes, Fließkommazahlen, Ganzzahlen in verschiedenen Auflösungen, Binärzahlen oder Boolesche Werte, Uhrzeiten oder Zeitintervalle, IP-Adressen und URLs, IDs, IDREFs (also Referenzen auf eine ID) und andere, von der DTD abstammende Datentypen und zu guter Letzt natürlich auch auf ein ganz normales Textfeld mit freiem Inhalt.

Die Beschreibung eines Elementtyps benutzt sogenannte Facets (Eigenschaften), um den Inhalt des Dokuments noch genauer zu beschreiben. Im Beispiel finden wir das Element <age>, das den Datentyp positive-integer mit einem Maximalwert von 200 hat. Dieser Maximalwert wird durch die Eigenschaft max-inclusive angegeben. XML-Schemata kennen eine Reihe anderer Eigenschaften, unter anderem precision und scale (Genauigkeit und Wertebereich), encoding (Zeichensatzcodierung), pattern (regulärer Ausdruck), enumeration (Aufzählung) und max-length (maximale Länge).

Das Konzept der Pattern finden wir im Typ Adressentyp angewendet. Mit dieser Technik definieren wir den PLZtyp einer Postleitzahl als eine Folge von 5 Ziffern: [0-9]{3} . Wenn kein anderer Datentyp paßt, definiert man sich einen neuen.

Schemata sind eine aufregende neue Technologie, die XML erheblich nützlicher macht. Das gilt besonders für datenorientierte Anwendungen, die das XML-Dokument als eine Art Formular zum Einfüllen von Daten begreifen. Eine Übersicht über alle Anwendungen und Möglichkeiten muß aber einem anderen Buch vorbehalten bleiben.

Andere Schemasprachen

Obwohl es den offiziellen Segen des W3C hat, ist XML Schema keineswegs die einzige Sprache für flexible Dokumentvalidierung. Es gibt zahlreiche Programmierer, die zum Beispiel RelaxNG (siehe http://www.oasis-open.org/committees/relax-ng/) oder Schematron (http://www.ascc.net/xml/resource/schematron/schematron.html) bevorzugen. Diese Sprachen haben im großen und ganzen dieselben Ziele, verfolgen sie aber mit einer unterschiedlichen Philosophie. Da es für letzteres Perl-Implementierungen gibt, die auf CPAN verfügbar sind , werden wir darauf in XML-Grundlagen: Lesen und Schreiben noch näher eingehen.

  

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Perl & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Perl & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de