Dokumenttypen und Schemata
(Auszug aus "Python & XML" von Christopher A. Jones & Fred L. Drake, Jr.)
Wenn wir von Dokumenttypen sprechen, meinen wir etwas, das dem Begriff eines Typs in einer Programmiersprache ziemlich nahekommt. Typen in Programmiersprachen werden zur Beschreibung von Strukturen benutzt, die auf bestimmte Art zusammengesetzt werden können, und Dokumenttypen tun das gleiche. Die Grundkomponenten und die erlaubten Arten der Zusammensetzung sind verschieden, aber man kann sie konzeptionell miteinander vergleichen. Ein Dokumenttyp wird gewöhnlich als Schema bezeichnet. Der Unterschied zwischen einem Dokumenttyp und einem Datenbankschema kann in vielen Anwendungen sehr gering sein, obwohl die Ähnlichkeit nicht immer von Bedeutung ist. Wir verwenden oft den Begriff Schema, um uns auf einen Dokumenttyp zu beziehen, wenn es unwichtig ist, wie er definiert wurde, weil der Begriff »Dokumenttyp« historische Assoziationen zu einer speziellen Schemasprache weckt.
Schemata sind aus mehreren Gründen wertvoll, von denen zwei aber besonders wichtig sind: Man muß dabei sorgfältig über die zu entwerfenden Anwendungen und Daten nachdenken, und sie können hilfreich bei der Spezifikation dessen sein, wie Dokumente aufgebaut und interpretiert werden sollen, wenn sie über die Grenzen von Organisationen hinweg ausgetauscht werden. Letzteres kann entscheidend bei Anwendungen im Bereich Supply-Chain-Integration sein, wo der automatische Austausch von dynamisch erzeugten Dokumenten mit vertraglichen Verpflichtungen einhergehen kann. Dann ist es besonders wichtig, daß alle Beteiligten in der Bedeutung der Dokumente übereinstimmen, weil eine Fehlinterpretation sehr teuer zu stehen kommen kann!
Dokumenttypen bauen auf Datentypen auf, ebenso wie auf Strukturierungsregeln, in denen sich Datentypen äußerst analog zu den in den meisten Programmiersprachen enthaltenen einfachen Typen verhalten. Verschiedene Schemasprachen verwenden verschiedene Mengen von Datentypen, von denen einige erweiterbar sind und andere die Verwendung beliebiger Typsysteme erlauben, statt ein eigenes System zu definieren. Einige Schemasprachen erlauben es, Datentypen für beliebige Dokumentinhalte zu spezifizieren, während andere die Anwendung von Datentypen auf spezielle Konstrukte einschränken.
In allen Schemasprachen kann die erlaubte Ordnung und Verschachtelung von Elementen definiert werden, und Attribute können mit Elementtypen assoziiert werden. Alles andere kann variiert werden, daher ist es hilfreich, sich der allgemeinen Unterschiede bewußt zu sein und eine Schemasprache auszuwählen, die auf den Anforderungen der Anwendung, der Verfügbarkeit von Werkzeugen und dem Grad der benötigten Interoperabilität basiert.
Dokumenttyp-Definitionen
Die XML 1.0-Empfehlung gibt eine spezielle Art an, einen Dokumenttyp zu definieren, die als Dokumenttyp-Definition oder DTD bekannt ist. Die Sprache, in der eine DTD angegeben wird, ist tatsächlich nur ein Bestandteil von XML selbst, wird aber informell auch als DTD-Sprache bezeichnet. Es ist eine Untermenge von XML, die eine leicht unterschiedliche Menge syntaktischer Regeln besitzt und die es nicht gestattet, beliebigen Inhalt mit den Auszeichnungen zu mischen.
Die DTD-Sprache für XML leitet sich von der DTD-Sprache für SGML ab, läßt aber viele der weniger oft verwendeten Konstrukte aus Gründen der Einfachheit weg. Die gewonnene Einfachheit bezieht sich sowohl auf die Sprache selbst als auch auf verarbeitende Werkzeuge. Die Eigenschaften, die im Detail weggelassen wurden, sind nur von Interesse, wenn Sie bereits die SGML-Version der Sprache kennen, und werden daher in diesem Buch nicht besprochen. Bitte konsultieren Sie die XML-Empfehlung sowie Bücher, die speziell die Entwicklung von Dokumenttypen behandeln, um mehr über die Unterschiede zu lernen.
Wir erläutern die eigentliche Konstruktion und Interpretation von DTDs später in diesem Abschnitt, aber es ist interessant, daß, obwohl die DTD-Sprache eine sehr flexible Komposition von Elementen erlaubt, sie sehr wenige Datentypen definiert, mit denen der Typ von Attributinhalten definiert werden kann, und sie fast keine Möglichkeit bietet, die Menge der Datentypen zu erweitern. Trotz der Beschränkungen von DTDs sind sie noch immer ein wichtiger Schematatyp, vor allem wegen ihrer frühen Spezifikation als Teil der XML 1.0-Empfehlung, ihrer Ähnlichkeit zu SGML-DTDs, der breiten Verfügbarkeit von Werkzeugen und der relativen Leichtigkeit, mit der man lernt, sie zu erzeugen und zu benutzen.
Alternative Schemasprachen
Die XML-Untersprache, mit der Dokumenttypen spezifiziert werden, wurde größtenteils mit den SGML-Wurzeln von XML geerbt und stellt vielleicht den am wenigsten geschätzten Aspekt der Spezifikation dar. Die Verwendung dieser Sprache ist jedoch ein Kompromiss, egal wie nützlich sie in einigen Projekten sein mag. Obwohl kein Zweifel herrscht, daß sie besser als von der XML-Anwendung definiertes, wohlgeformtes XML ist, gibt es einen weithin spürbaren Bedarf für etwas Besseres. Wie bei allen Standards gilt jedoch, daß eine einzige Konfektionsgröße nicht allen paßt, weshalb eine Reihe von alternativen Sprachen zur Spezifikation von Dokumenttypen entwickelt wurde. Man bezeichnet diese zusammenfassend als Schemasprachen.
Der Anwendungsbereich variiert bei jeder Sprache, ebenso wie der Grad an Komplexität und Verfügbarkeit von Werkzeugen. In diesem Abschnitt untersuchen wir einige der beliebteren Sprachen und beschreiben für jede das anvisierte Anwendungsgebiet sowie die Formen verfügbarer Unterstützung für Python-Programmierer. Zwei gemeinsame Aspekte der hier beschriebenen Schemasprachen sind, daß sie alle ihre eigene Syntax in XML angeben und daß sie alle namensraumfähig sind: Die Schemata, die sie definieren, können Elemente und Attribute aus mehreren Namensräumen enthalten. Beide sind grundverschieden von der DTD-Sprache, und bei beiden kann man leicht argumentieren, daß es sich um wesentliche Verbesserungen handelt.
XML Schema
Das World Wide Web Consortium war an Anstrengungen beteiligt, eine für alle brauchbare Schemasprache zu entwickeln und zu standardisieren, und XML Schema ist das Ergebnis. Wie bei allen von Komitees verabschiedeten Entwürfen gibt es eine weitverbreitete Unzufriedenheit mit XML Schema, nicht weil es nicht mächtig genug ist, sondern weil es von vielen Anwendern als zu komplex angesehen wird. Es definiert Wege, die für einen Dokumenttyp erlaubten Strukturen zu beschreiben, ebenso wie Datentypen, um Element- und Attributinhalte sehr viel genauer und flexibler zu beschreiben, als es die DTD-Sprache gestattet.
XML Schema bietet jedoch den Vorteil, daß es sowohl Dokumenttypen als auch Datentypen definiert, und es enthält eine Auswahl von einfachen Datentypen, auf die man aufbauen kann. Diese Typen reichen von Zahlen und Strings, die einem bestimmten regulären Ausdruck entsprechen müssen, bis zu komplexeren Typen wie Datums- und Zeitangaben. Datentypen in XML Schema sind sehr reichhaltig, verglichen mit den in der DTD-Sprache unterstützten Datentypen. Es können Schemata definiert werden, die Attributwerte oder Elementinhalte auf solche Typen einschränken, sodass man größere Dokumenttypen sehr viel genauer als mit der DTD-Sprache beschreiben kann. Dadurch kann man Werkzeuge bauen, um ein Dokument gegen ein Schema zu validieren, was einen großen Teil an speziellem Fehlerbehandlungscode in einer Anwendung überflüssig macht. Die Datentypen in XML Schema werden kurz in Python, Webdienste und SOAP benutzt, aber nicht im Detail erklärt.
Es gibt einen Validierer für XML Schema in Python; siehe Weitere Python-XML-Werkzeuge für weitere Informationen.
TREX
Tree Regular Expressions for XML (TREX) ist eine Schemasprache, die von James Clark entworfen wurde, der seit der Anfangszeit von XML im Bereich der Entwicklung nützlicher XML-Standards aktiv ist und für seine wichtigen Beiträge in der SGML-Gemeinde aus der Zeit vor XML bekannt ist. TREX definiert keine feingliedrigen Datentypen wie XML Schema. Es ist für Datentypen gedacht, die in externen Spezifikationen definiert werden, wozu auch Datentypen in XML Schema gehören können.
Das PyXML-Paket enthält einen TREX-Validierer im Modul xml.schema.trex, das in der Version 0.7.0 von PyXML hinzugekommen ist.
RELAX NG
RELAX NG ist eine aus zwei positiv aufgenommenen Schemasprachen entstandene Sprache, TREX und RELAX. An der Spezifikation wird beim Schreiben dieser Zeilen noch aktiv gearbeitet. Sie ist das Resultat der gemeinschaftlichen Bemühungen von James Clark und Makoto Murata, den Autoren von TREX und RELAX, und wird von der Organization for the Advancement of Structured Information Standards (OASIS) gesponsert. RELAX NG verwendet den gleichen Ansatz bei Datentypen wie schon TREX. Vollständige Informationen zu RELAX NG sind unter OASIS RELAX NG TC verfügbar. Eine alternative, nicht auf XML aufbauende Syntax wurde auch vorgeschlagen.
Schematron
Die von Rick Jelliffe definierte Schematron Assertion Language ist ein wenig anders als die anderen Schemasprachen. Anstatt zu definieren, welche Elemente erlaubt sind, bzw. Modelle für ihre Inhalte und Attribute zu definieren, macht Schematron Aussagen über die Beziehungen zwischen Elementen und Attributen.
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema Python & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © 2002 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 "Python & 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