3.4  Schemata

XML Daten können sehr komplex werden. Da ihre Eingabe oft durch keine User-Interface Massnahmen oder sonstigte Regelungen beschränkt ist, sie im Prinzip mit jedem Texteditor verändert werden können und gewöhnlich über viele Stationen verschickt / verarbeitet werden, ist es ratsam deren formale und inhaltliche Korrektheit zu überprüfen.

Dazu wird die gute maschinelle Lesbarkeit der XML Daten von Validierungsengines ausgenützt. Es gibt viele unterschiedliche Schematypen, gegen die validiert werden kann. Das sog. Schema ist dann ein Satz von Regeln, der beim Baumdurchlauf abgeglichen wird.

Angefangen hat wohl alles mit der Dokumenttypdefinition (DTD) Schemata DTD die sowohl für XML Daten als auch für den Vorläufer SGML angewendet werden kann.

Die mangelnde Fähigkeit zur Überprüfung von sematischen Beziehungen mittels DTD, hat wohl zu XML Schema geführt.

XML Schema Schemata XML Schema ist konsequent mittels XML modelliert und hat dieselbe gute Eigenschaft bzgl. der Maschinenlesbarkeit, wie XML an sich. Somit können bei einem Baumdurchlauf auch komplexe Regeln beim Abgleich von Datenstruktur und Valdierungsregel maschinell überprüft werden.

Vllt. hat sich aber gerade dieser Vorteil, nämlich die Maschinenlesbarkeit, im Laufe der Zeit als Nachteil herauskristallisiert. Es gibt zwar einige sehr gute visuelle Modellierungswerkzeuge, die es erlauben die Regeln als einen Baum grafisch zu modellieren, sobald aber komplexere Beziehungen modelliert werden sollen, ist man mit diesen Tools ein bisschen gefangen und man wünscht sich doch wieder die Flexibilität eines Texteditors.

Grafische Werkzeuge sind bspw.:

Eine DTD wird im Near&Far Designer als aufklappbare Baumstruktur angezeigt. So könnnen auch sehr komplexe DTDs mit 1000 Elementen effizient untersucht werden. Über einen Eingabedialog lassen sich Attribute hinzufügen oder ändern. Auch das Neuanlegen von einzelnen Zweigen (= Hinzufügen von Elementen) lässt sich grafisch erledigen. Jedoch ist es ratsam, sich zumindest das Grundgerüst der DTD mit einem Texteditor zu überlegen.
figure: 4  Abbildung einer DTD Struktur im Near&Far Designer

Ähnlich wie in Programmierumgebungen zählt aber schlussendlich, wie schnell man etwas in umfangreichen Quelltexten wiederfindet und anpassen / erweitern kann. Hier ist nach-wie-vor Plain-Text unschlagbar.

Deshalb ist es nicht verwunderlich, dass sich (wieder) leichtgewichtige Validierunsformate etablieren, die sich schön mit einem Texteditor editieren lassen, wie z.B. RelaxNG Schemata RelaxNG . RelaxNG existiert zwar schon seit 2002, erfreut sich aber in letzter Zeit zunehmender Beliebtheit.

Die Kompaktform der Regeln von RelaxNG sieht ein bisschen aus, wie JSON - was gerade für Webentwickler interessant sein könnte. Zudem wird die zugrunde liegende Logik der Backus-Naur Form relativ klar herausgestellt, was die Regelfindung erleichtert.

Um einen ersten Eindruck von der Syntax zu bekommen, habe ich mal das erste Beispiel aus dem RelaxNG Tutorial gestolen:

Consider a simple XML representation of an email address book:

<addressBook>
    <card>
        <name>John Smith</name>
        <email>js@example.com</email>
    </card>
    <card>
        <name>Fred Bloggs</name>
        <email>fb@example.net</email>
    </card>
</addressBook>
Plain Text

The DTD would be as follows:

<!DOCTYPE addressBook [
<!ELEMENT addressBook (card*)>
<!ELEMENT card (name, email)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>
Plain Text

A RELAX NG pattern for this could be written as follows:

<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
    <zeroOrMore>
        <element name="card">
            <element name="name">
                <text/>
            </element>
            <element name="email">
                <text/>
            </element>
        </element>
    </zeroOrMore>
</element>
Plain Text

In der Kurzform würde dieses Beispiel so aussehen:

element addressBook {
    element card {
        element name { text },
        element email { text }
    }*
}
Plain Text

Es gibt auch ein Tutorial zur Kurzform.

Schemadateien, die in der Kurzform verfasst sind, tragen gewöhnlicherweise die Dateiendung .rnc . Dateien in der Langform haben die Endung .rng .

Mit RelaxNG kann man Schema-Grammatiken fast so elegant wie mit der Backus Naur Normalform - BNFmodellieren - wie man das im Informatik Unterricht gelernt hat.