XML-Workshop, Teil 1: Rüstzeug für die Web-Zukunft
Artikel erschienen in Swiss IT Magazine 2001/12
Die Anforderungen an moderne Websites und E-Commerce-Systeme werden immer grösser. Gefragt sind heute nicht nur die Anbindung an die hausinternen Back-End-Systeme und die Integration von Business-Partnern und Web Services von Drittanbietern, sondern auch die weitgehende Automatisierung von Transaktionsprozessen und Design-Konzepten, mit der sich das eigene Angebot auch mit neuartigen Clients wie Smartphones, PDAs oder Settop-Boxen nutzen lassen. Die wohl wichtigste Technologie, mit der sich diese Herausforderungen in den Griff bekommen lassen, ist XML (eXtensible Markup Language) mit all seinen Add-on-Spezifikationen. Wer auch in Zukunft im Bereich der Webentwicklung Schritt halten will, kommt nicht mehr darum herum, sich intensiv mit der XML-Technologie auseinander zu setzen.
Bis im Sommer wollen wir mit einer Reihe von XML-Workshops die verschiedenen Aspekte und Anwendungsgebiete von XML unter die Lupe nehmen. Während dieser Artikel einen kurzen Überblick über die verschiedenen XML-Technologien geben soll und sich mit den XML-Basics befasst, werden wir uns bereits in der nächsten Ausgabe mit den Schemata, sprich dem Definieren und Modellieren von eigenen XML-Vokabularen beschäftigen. In späteren Workshops, die für Mai und Juni vorgesehen sind, folgen dann Know-how-Artikel zu Themen wie den XML-APIs DOM und SAX, der Transformationssprache XSLT und dem Transportprotokoll SOAP.
Wie HTML wurde auch XML von der bereits 1986 entwickelten Daten- und Dokumentbeschreibungssprache SGML (Standard Generalized Markup Language) abgeleitet. SGML ist zwar für den selben Zweck wie XML entwickelt worden, nämlich zum Beschreiben von Daten, war aber durch seine Mächtigkeit und Flexibilität für den breiten Durchbruch im Markt viel zu komplex. Das Entwickeln von Datenmodellen mit SGML konnte schnell einmal sehr zeitraubend und teuer werden, zudem blieb ein breites Angebot an Tools, die diesen Prozess beschleunigt hätten, bis heute aus.
Aus diesem Grund begann das Word Wide Web Consortium (W3C) 1996 mit der Entwicklung von XML, mit dem Ziel, eine massentaugliche Datenbeschreibungssprache zu schaffen. Die Kernspezifikation XML 1.0, eine Untermenge von SGML, wurde bereits 1998 verabschiedet. Das W3C stand unter grossem Zeitdruck, denn mit dem Boom des Web wurde in der IT-Branche der Ruf nach einer Lingua franca für das Internet immer grösser. Das veranlasste das W3C, sich auf das Wesentlichste zu konzentrieren. Viele Ideen und Funktionen wurden von der Kernspezifikation ausgeschlossen und sollten in den nachfolgenden Monaten und Jahren in Form von eigenen Zusatz-Standards nachgeschoben werden. XML-Spezifikationen wie Namespaces, XSLT oder XPath sind mittlerweile ebenfalls ratifiziert. Andere wie XML Schema oder XML Query befinden sich nach wie vor in der Entwicklungsphase (siehe Kasten "Die XML-Familie"). Dieser Prozess wird auch während den nächsten Jahren munter weitergehen. Laufend kommen Vorschläge für neue Funktionen und Spezifikationen hinzu. Eines der jüngsten Beispiele ist SOAP, das von Microsoft, IBM und Ariba erst im letzten Sommer beim W3C zur Standardisierung eingereicht wurde.
Generell lässt sich XML überall dort einsetzen, wo Daten zwischen Systemen und Applikationen ausgetauscht werden müssen. Man könnte XML quasi als ASCII der Internet-Ära bezeichnen. Genauer betrachtet gehen die Anwendungsgebiete aber weit über den simplen Datentransfer hinaus:
B2B-Integration und Transport: Business-Dokumente wie Bestellungen, Rechnungen, Bestätigungen etc. sind mit standardisierten XML-Formaten einfacher zwischen Firmen und unterschiedlichen Applikationen übertragbar. Dabei lassen sich nicht nur die eigentlichen Dokumente und Daten in XML formulieren, sondern auch die Abwicklung des Workflows. Informationen im Header stellen dabei sicher, dass die Daten in der richtigen Reihenfolge zu den involvierten Business-Partnern geroutet werden. So lassen sich auch mehrere Firmen in eine Business-Transaktion miteinbeziehen. Gegenüber EDI (Electronic Data Interchange), dem bisherigen Esperanto des E-Business, bietet XML zahlreiche Vorteile. So lassen sich auf XML beruhende Systeme viel kostengünstiger implementieren als EDI. Die hohen Kosten haben kleine und mittelgrosse Betriebe vom EDI-Einsatz abgehalten. Ein weiteres Plus von XML gegenüber EDI ist seine Anpass- und Erweiterbarkeit. XML-Dokumente lassen sich mit Hilfe von XSL Transformation (siehe Kasten "Die XML-Familie") relativ einfach von einem Format in ein anderes umwandeln. Somit stellt auch die Anbindung von Business-Partnern, die mit unterschiedlichen XML-Standards, EDI oder puren ASCII-Formaten arbeiten, kein grosses Problem mehr dar.
Distributed Computing: XML erlaubt plattformunabhängiges Distributed Computing via Internet. Per XML und HTTP können Funktionen anderer Systemen aufgerufen und von der eigenen Webanwendung genutzt werden (siehe auch Web Services im Kasten "Die Web-Evolution").
Multi-Client-Support: Wie bereits im Abschnitt B2B-Integration erwähnt, ist XML relativ einfach in andere Formate transferierbar. Dadurch kann XML gemeinsam mit XSLT auch für die Unterstützung von unterschiedlichen Clients herangezogen werden. XML-Dokumente können mit in XSLT geschriebenen Standardprozeduren in HTML, XHTML, WML, VoiceXML oder unterschiedliche Browserdialekte konvertiert werden.
Dokument-Management: Da sich der Inhalt von Dokumenten mit Hilfe von XML konkret beschreiben lässt, kann sowohl das Dokument-Handling als auch die Archivierung verbessert werden. Suchmaschinen können mit einer Markup-Sprache beschriebene Daten besser indexieren und dadurch genauere Auswertungsergebnisse liefern. Zudem sind XML-Dokumente derart flexibel, dass sie sich mit beliebigen Zusatzinformationen wie beispielsweise Anmerkungen, Versionsnummern, Gültigkeitsdatum oder Links versehen lassen, die später vom Benutzer oder von anderen Anwendungen für die weitere Bearbeitung herangezogen werden können.
Rendering-Vokabulare: XML kann zur Formulierung von neuen Rendering-Sprachen herangezogen werden. Dabei handelt es sich um Vokabulare, die von einer Rendering-Engine abgearbeitet werden und deren Daten in einer bestimmten Form (Bildschirmdarstellung, Sprache, Druckausgabe etc.) präsentiert werden. Die wohl bekannteste Rendering-Sprache ist HTML, das von der Engine des Browsers interpretiert und auf dem Bildschirm dargestellt wird. Weitere bekannte Vertreter der Rendering-Vokabulare sind etwa SVG (Scalable Vector Graphics), mit der sich Vektorgrafiken beschreiben lassen, WML für die Erzeugung von WAP-Seiten oder VoiceXML, mit dem Sprachein- und -ausgaben definiert werden können. Grosse Berühmtheit dürfte in den nächsten Monaten XHTML erlangen, das quasi die Neuformulierung von HTML auf Basis von XML darstellt und HTML über kurz oder lang ablösen wird.
Wie bereits erwähnt, dient XML zum Beschreiben der Daten. Während man mit HTML die Darstellung der Daten bestimmen kann, lässt sich mit XML deren Bedeutung formulieren. Das folgende Beispiel mit den Informationen eines Mitarbeiters macht diesen Unterschied deutlich:
Die Markups im HTML-Dokument geben an, dass die Mitarbeiterdaten in einer Tabelle formatiert und der Nachname fett ausgezeichnet werden soll. Im XML-File hingegen liefern die Tags konkrete Angaben darüber, was mit den einzelnen Informationen gemeint ist. So können wir aus obigem Beispiel ersehen, dass es sich bei der Zahl 120'000 in der dritten Zeile um ein Jahresgehalt dreht.
Damit wird auch gleich klar, dass es sich bei XML nicht um den Nachfolger von HTML handelt, wie dies noch vielerorts angenommen wird. Der Nachfolger von HTML heisst XHTML, wobei es sich bei der aktuellen Version 1.0 von XHTML lediglich um eine auf XML basierende Reformulierung der HTML-4.01-Spezifikation handelt. Um den Übergang von HTML auf XHTML 1.0 zu erleichtern, hat man auf das Zufügen von neuen Funktionen verzichtet. Dafür ist XHTML den strengeren Syntaxregeln von XML unterworfen und verlangt im Gegensatz zu HTML zwingend nach sauber formuliertem Code.
XML-Dokumente bestehen im wesentlichen aus den beiden Hauptbausteinen Elemente und Attribute.
• Elemente: Elemente sind Container für beliebige Inhalte. Sie können nicht nur Daten, sondern auch weitere Elemente (Kindelemente), Kommentare oder Anweisungen für die Anwendung beinhalten, die das XML-File verarbeitet. Elemente werden immer mit einem Start-Tag
XML-Dokumente setzen sich, wie in oben stehender Abbildung gezeigt, aus den drei Hauptbereichen Prolog, Rumpf und Epilog zusammen:
• Prolog: Im Prolog werden Angaben über das XML-Dokument, Kommentare und Verarbeitungsanweisungen, auch Processing Instructions (PIs) genannt, untergebracht. Der Prolog darf und sollte mit der optionalen XML-Deklaration beginnen, mit der das Dokument als XML ausgewiesen wird und mit den Attributen version und encoding weitere Angaben zum verwendeten Zeichensatz (encoding) und der XML-Version (version) gemacht werden können:
Während encoding ein optionales Attribut ist, muss version zwingend vorhanden sein. Dieser Wert muss derzeit "1.0" lauten, weil es vorläufig nur XML 1.0 geben wird. Das Attribut ist aber trotzdem wichtig, weil es die Unterstützung künftiger XML-Spezifikationen gewährleistet.
Kommentare werden wie in HTML verwendet:
Mit den PIs können der verarbeitenden Anwendung Anweisungen gegeben werden. Typische PIs sind etwa Verweise auf externe Style Sheets oder Schemata sowie Kommandos zum Einbetten von Scripts oder Server Side Includes. Die? Syntax von PIs entspricht dem folgenden Muster:
Damit wird die Anwendung angewiesen, die in katalog.css abgelegten Style-Deklarationen mit dem aktuellen XML-Dokument zu verknüpfen.
Kommentare und Verarbeitungsanweisungen können in beliebiger Reihenfolge in den Prolog eingefügt werden.
• Rumpf: Im Rumpf sind die eigentlichen Daten des XML-Dokuments in Form von baumartig verschachtelten Elementen untergebracht. Das oberste Element dieses Baums nennt man Document Element oder Wurzelelement, das das Vaterelement aller Elemente im Rumpf ist. Der Rumpf darf nur über eine einzige Baumstruktur verfügen. Daraus folgt, dass auch das Document Element nur ein einziges Mal vorkommen darf. Das Wurzelelement wird oft mit der Document Root verwechselt, ist aber keineswegs dasselbe. Die Document Root ist die Wurzel des gesamten XML-Dokuments, der alle Elemente im Prolog, Rumpf und Epilog untergeordnet sind.
• Epilog: Im Epilog, der wie der Prolog optional ist, können wiederum Kommentare und Verarbeitungsanweisungen eingefügt werden. In Expertenkreisen wird allerdings von einer Verwendung des Epilogs abgeraten, da viele Parser bereits am Ende des Rumpfs mit der Verarbeitung des XML-Dokuments abbrechen.
XML-Dokumente werden von sogenannten Parsern verarbeitet. Dabei handelt es sich um ein Programm, das XML-Dokumente auf ihre korrekte Formulierung überprüft und einer Anwendung zur weiteren Verarbeitung übergibt. Ein Parser könnte beispielsweise ein XHTML-Dokument durchchecken, bevor es der Rendering-Engine eines Browsers übergeben wird. Die heutigen Parser bieten aber weit mehr als eine simple Syntaxprüfung. Sie können XML-Dokumente auch auf ein korrektes Vokabular anhand eines Schemas untersuchen (mehr dazu nächste Woche im zweiten Teil dieses Workshops). Darüber hinaus stellen die meisten Parser Programmierschnittstellen (DOM und SAX) zur Verfügung, über die Entwickler XML-Dokumente aus ihren Anwendungen heraus manipulieren können. Einige Parser bieten sogar bereits Unterstützung für XSLT und sind dadurch in der Lage, XML-Dokumente zwischen verschiedenen Formaten zu transformieren.
Da mit XML eigene Tags definiert werden können, ist die Wahrscheinlichkeit relativ hoch, dass verschiedene Vokabular-Autoren denselben Begriff für unterschiedliche Anwendungszwecke wählen. Müssen XML-Dokumente mit unterschiedlichen Vokabularen kombiniert werden, kann es zu Namenskonflikten kommen. Wie im folgenden Beispiel zu sehen, ist in den beiden XML-Konstrukten mit dem Element titel nicht dasselbe gemeint:
Im ersten Fall handelt es sich um einen Buchtitel, im zweiten um den Titel eines Autors. Werden nun beide XML-Konstrukte, die offensichtlich auf unterschiedlichen Vokabularen basieren, im selben Dokument verwendet, ist es dem Parser unmöglich, das Element titel korrekt zu interpretieren.
Um solche Konflikte zu vermeiden, wurde XML 1.0 um die Spezifikation Namespaces erweitert. Die in Deutsch auch als Namensräume bezeichnete Methode ermöglicht es, zwischen verschiedenen Vokabularen in einem XML-Dokument zu unterscheiden.
Werden Namensräume verwendet, erhalten alle Elemente und Attribute ein Präfix vorangestellt. Definieren wir für die beiden oben gezeigten Konstrukte die Namespaces autoren und katalog, sehen die Beispiele neu so aus:
Dabei ist das Attribut xmlns das Schlüsselwort für die Namespace-Deklaration und katalog das Präfix des Namensraums, das selber bestimmt werden kann. Innerhalb der Anführungszeichen muss ein URI (Unified Resource Identifier) stehen, mit dem der Namespace eindeutig identifiziert werden kann. Ein URI kann wahlweise eine URL, wie im Beispiel gezeigt, oder ein URN (Unified Ressource Name, z.B. urn:xyz-books-publishing-katalog) sein. Der URI ist nicht dazu gedacht, auf irgendwelche Ressourcen zuzugreifen, sondern soll lediglich als eindeutiger Identifikator für den Namensraum dienen.
Die Namensraum-Deklaration wird als Attribut im Start-Tag des Elements untergebracht, für dessen Kindelemente der Namespace gelten soll:
Da der definierte Namespace automatisch für alle Kindelemente gültig ist, können die Präfixe auch weggelassen werden, was eine Menge Tipparbeit spart und das XML-Dokument übersichtlicher macht. Das oben gezeigte Beispiel lautet in abgekürzter Form wie folgt:
Noch einfacher ist die Deklaration mit Default Namespaces, die verwendet werden können, wenn innerhalb eines Elements ein eigener Namensraum Gültigkeit hat. Default Namespaces verfügen über keine Präfixe. Diese werden dann bei der Deklaration einfach weggelassen:
Innerhalb des buch-Elements gilt nun ein eigener, nicht benannter Namensraum, so dass die beiden titel-Elemente zu keinem Namenskonflikt führen.
Werden innerhalb eines XML-Dokuments oder Elements unterschiedliche Namensräume wild durcheinander verwendet, so muss mit qualifizierten Namen gearbeitet werden. Das bedeutet nichts anderes, als dass auf die komplette xmlns-Deklaration zurückgegriffen werden muss und dass die entsprechenden Präfixe in den Elementen und Attributen zwingend verwendet werden.
Document Type Definition (DTD) und XML Schema dienen zur Modellierung von XML-Dokumenten. Damit sich mehrere Partner auf ein gemeinsames Format einigen können, wird damit sichergestellt, dass sich ein XML-Dokument an bestimmte Vorgaben hält. So kann das verwendete Vokabular, die genaue Strukturierung der Elemente und Attribute sowie die Datentypisierung exakt vorgegeben werden. Der zweite Teil dieses Workshops, der bereits in der nächsten InfoWeek-Ausgabe erscheint, wird sich ausschliesslich diesem Thema widmen.