
Geht es um die Bearbeitung von XML-Texten oder -Daten, bietet sich neben anderen Tcl als Sprache an. Verschiedene Erweiterungen übernehmen Standardaufgaben wie das Analysieren des Dokuments oder die Bearbeitung entsprechend dem Document Object Model (DOM) des W3C. Neben der Dokumentbearbeitung existiert mit der Unterstützung von XML-RPC (Remote Procedure Calls) die Möglichkeit, eine plattformübergreifende Lösung für verteiltes Rechnen zu nutzen.
XML als Sprache zur Erstellung von strukturierten Dokumenten erfreut sich nach wie vor wachsender Popularität. Neben der Dokumentverwaltung wird es zunehmend als Format zum Datentransport verwendet. Die Bearbeitung von XML unterstützt die Scriptsprache durch eine Reihe von Funktionen.
Schon zu SGML-Zeiten war mit den Kopenhagener Software Tools (später COST) ein Paket zur Bearbeitung von strukturierten Dokumenten verfügbar. Inzwischen gilt dies für verschiedene Aspekte der XML-Bearbeitung. Zwar bietet Tcl von Haus aus einen mächtigen Satz von regulären Ausdrücken für die generelle Verarbeitung von Texten, bei XML-Dokumenten kommen jedoch zwei Arbeiten besonders häufig vor: das Analysieren existierender Dokumente und das Erzeugen oder Bearbeiten von Dokumenten nach dem DOM des W3C.
Gegenüber anderen Dokumentenformaten hat XML den Vorteil, dass ansonsten speziell zu erstellende Grundbausteine wie Parser generisch für alle XML-Dokumente verwendet werden können. Für Tcl existieren zwei solche Parser zum strukturierten Einlesen, die reine Skriptlösung TclXML sowie eine Erweiterung auf der Basis von James Clarks expat. Beide Lösungen wurden von Steve Ball geschrieben, von TclExpat gibt es im tDOM-Paket eine wesentlich schnellere Version. TclXML und TclExpat haben bis auf wenige Ausnahmen identische Schnittstellen, sodass sie problemlos gegeneinander ausgetauscht werden können (auch der Perl-Parser basiert auf Clarks Werkzeug, siehe [#lit1 [1]]). Die Parser rufen beim Einlesen des Dokuments an vorher vereinbarten Stellen (Start-Tag, End-Tag, Kommentare et cetera) Tcl-Prozeduren auf, denen die entsprechenden Dokumentteile übergeben werden. Dies ergibt eine stimmige Integration in die Event-basierte Sprache Tcl. Die jeweils aufgerufenen Prozeduren übernehmen die eigentliche Bearbeitung des Dokuments.
Obwohl die reine Tcl-Lösung TclXML in der Geschwindigkeit weit hinter TclExpat abfällt, bietet sie jetzt schon volle Unicode-Unterstützung und enthält einen undokumentierte DTD-Parser, mit dem sich neben dem Inhalt auch die Typ-Definition eines Dokuments (DTD) einlesen lässt. Allerdings handelt es sich weder bei expat noch bei TclXML um validierende Parser: Das Dokument muss zum erfolgreichen Einlesen nur wohlgeformt sein (siehe den Kasten Gültigkeit). Beim Erstellen von XML-Werkzeugen nehmen einem die Parser einen großen Teil der Arbeit ab, es verbleibt die Programmierung der aufgerufenen Prozeduren.
In diesen können Entwickler die ganze Mächtigkeit von Tcl ausnutzen; sei es die Umwandlung mit Hilfe von regulären Ausdrücken oder das Einfügen in eine Datenbank. Neben der reinen Bearbeitung von Dokumenten eignet sich Tcl auch zu ihrer Darstellung: wegen des mächtigen Text-Widgets aus Tk. Darin lassen sich Texte mit verschiedenen Auszeichnungen auf Basis von Tags versehen, was sich für die Darstellung von XML geradezu anbietet. Ein Beispiel zur Anzeige von Texten mit einer HTML-ähnlichen DTD findet sich in Listing 1.
Während die Parser in erster Linie zur Bearbeitung schon existierender Dokumente dienen sollten, ist das W3C-DOM sowohl zum Erstellen wie Bearbeiten verwendbar. In der DOM-Spezifikation sind eine ganze Reihe von Methoden spezifiziert, mit denen sich eine Baumstruktur des Dokuments auslesen und verändern lässt, wobei Token die einzelnen Knotenpunkte referenzieren. Auf diese Token können Programmierer die entsprechenden Methoden anwenden, zum Beispiel Attribute lesen oder setzen, Kind-Elemente abfragen und erzeugen. Dies ergibt auch den großen Einsatzbereich von DOM, der weit über die Dokumentenverarbeitung hinaus geht. Mit Hilfe dieses Modells lassen sich beliebig komplizierte Baumstrukturen erstellen und zur Speicherung oder Übermittlung serialisieren. Auf der Empfangsseite können Entwickler schnell wieder die Baumstruktur erstellen. Für das DOM existieren zwei unterschiedliche Implementierungen für Tcl: Steve Balls TclDOM und Jochen Löwers tDOM.
Das TclDOM-Paket ist eine reine Skriptlösung, wobei die ganze Datenhaltung der Baumstruktur auf der Tcl-Seite durchgeführt wird. In dem Paket sind die in der Spezifikation enthaltenen prozeduralen Methoden ausgeführt. Ein kleines Beispiel für die Verwendung befindet sich in Listing 2, das ein kleines Dokument erstellt und ausgibt. Neben den vom W3C spezifizierten bietet TclDOM weitere Methoden, beispielsweise um Dokumente zu lesen und zu schreiben oder zum Entfernen leerer Knoten. Da es in Tcl implementiert ist, kann es jetzt schon mit Unicode umgehen, allerdings nur, wenn man beim Einlesen TclXML als Parser verwendet. Zu dem DOM-Paket existieren weitere Hilfen. Steve Ball stellt ein generisches Widget zur Verfügung, das das DOM-Modell darstellt. Es ist Grundlage seines XML-Editors swish (siehe Abbildung), der mit Hilfe einer Plugin-Architektur erweiterbar ist. Auf der Homepage des Autors befinden sich außerdem die DOMutils. Sie stellen eine Reihe von zusätzlichen Kommandos zum Finden spezieller Knoten oder für Operationen wie Cut, Copy und Paste zur Verfügung.
|
Steve Balls erweiterbarer XML-Editor swish ist für Windows, Linux (Red Hat) und den Mac kostenlos erhältlich. |
Brandneu ist tDOM. Es beinhaltet neben einem fast kompletten DOM eine schnellere Implementierung von TclExpat und erste Ansätze von XPath- und XPointer-Unterstützung. Das Paket ist in C geschrieben, was Geschwindigkeit und Größe gegenüber TclDOM verbessert. Beim Ein- und Auslesen ist es circa zehnmal schneller und benötigt nur ein Drittel des Speichers. Während TclDOM jedoch eine komplette DOM-Implementierung bietet, wurde tDOM in Hinblick auf schnelles Einlesen und Ausgeben entworfen, eine Unicode-Unterstützung fehlt. Das Paket stellt neben Methoden für XPath und XPointer im Wesentlichen dieselben Methoden zur Verfügung wie TclDOM, allerdings in einer objektorientierten Syntax.
Weil die beiden DOM-Implementierungen anders als die Parser nicht gegeneinander ausgetauscht werden können, muss man sich von vornherein für eine der beiden entscheiden. Geht es um Textverarbeitung unter Verwendung von Verarbeitungshinweisen, Kommentaren und Unicode, wird man sich für TclDOM entscheiden. Kann man darauf verzichten, ist tDOM wegen seiner Geschwindigkeit und der organischen Syntax der Methoden die bessere Wahl. Da die Implementierung der fehlenden Objekte bei tDOM nicht schwierig ist, wird dies wohl bald die beste Wahl für das DOM unter Tcl werden.
Neben der Verarbeitung von Dokumenten dient XML inzwischen auch zur Kommunikation zwischen Prozessen als Remote-Procedure-Call-Methode. Hierbei handelt es sich nicht um die klassischen RPCs, die ursprünglich von Sun entwickelt wurden, sondern um eine Art Nachbildung dieser netzweiten Verarbeitung. Die Entwicklung von XML-RPC hat Frontier für ihre Web-Management-Lösung begonnen, neben Zope und PHP unterstützen es inzwischen alle wichtigen Skriptsprachen. XML-RPC basiert selbst auf Standardkomponenten, die Kommunikation erledigt das HTTP-Protokoll, die Nutzdaten zum Aufruf von Prozeduren, Rückgaben und Fehlermeldungen sind in XML ausgedrückt. Diese Daten werden als HTTP-Post-Anfrage verschickt, die Antwort oder gegebenenfalls die Fehlermeldung erfolgt als Nachricht vom Typ 200 OK.
Die XML-Anfrage enthält den Namen der gewünschten Methode sowie eventuelle Übergabeparameter. Einen Beispielaufruf und eine passende Antwort zeigt Listing 3. Neben den Datentypen integer, boolean, string und double werden ein Typ für datum sowie binäre Daten in Base64-Encoding unterstützt. Diese können jeweils einzeln, aber auch in Strukturen und Arrays verwendet werden. Die Antwort erfolgt ebenfalls im XML-Format (mit Unterstützung spezieller Fehlermeldungen). Anders als bei RPC oder CORBA (Common Object Request Broker Architecture) werden die Aufrufe nicht aus einer Datei mit Schnittstellenbeschreibung generiert, dies geschieht zur Zeit per Hand.
Gegenüber herkömmlichen RPC-Aufrufen hat XML-RPC mehrere Vorteile. Die Adressierung der Prozedur erfolgt über einen lesbaren Namen, anstatt über eine Programmnummer, Implementierungen existieren wegen ihrer Basis auf HTTP in vielen Sprachen und auf mehreren Plattformen, und es werden sprechende Fehlermeldungen unterstützt. XML-RPC ist eine interessante Alternative zu CORBA, wenngleich es längst nicht an dessen Leistungsfähigkeit herankommt. CORBA bietet neben anderen Vorteilen ein statusbehaftetes Protokoll, eine wesentlich größere Anzahl an Datentypen und die Services. Kann man auf diese Vorteile verzichten, ist das wesentlich kleinere XML-RPC eine brauchbare Lösung.
Da Tcl von Haus aus eine HTTP-Bibliothek mit sich bringt, liegt analog dazu eine für XML-RPC auf Basis von TclDOM auf der Hand. In nur 500 Zeilen hat Steve Ball dies mit Tcl-RPC.tcl geschafft. Damit lässt sich das XML für den Aufruf erstellen und verschicken, die Ergebnisse empfangen und auswerten. Neben der Erstellung von Clients unterstützt Tcl-RPC.tcl die Serverseite. Dabei löst der in Tcl geschriebenen tclhttpd die URI auf und ruft die Prozeduren auf. Alternativ kann man natürlich ein CGI-Script in Tcl verwenden.
Zwei Bereiche der XML-Bearbeitung unterstützt Tcl derzeit nicht: die Formatierung mit Stylesheets und validierendes Parsing. Bei Steve Ball gibt es einen Wrapper um James Clarks jade für die Steuerung von Tcl aus. Formatieren auf Basis eines Parsers mit selbst geschriebenen Skripts ist zwar problemlos möglich, allerdings nicht so flexibel wie das Arbeiten mit Stylesheets.
Carsten Zerbst
ist wissenschaftlicher Mitarbeiter der TU Hamburg-Harburg und beschäftigt sich mit CORBA.
Literatur
[1] Christian Kirsch; Perl-Know-how; Elemente mit System; XML-Parser für Perl-Scripts
| iX-TRACT |
|
Dieser Text ist der Zeitschriften-Ausgabe 02/2000 von iX entnommen.
Parallelprogrammierung - die Kunst der Multi-Core-Nutzung
Agile ALM - agile Praktiken im Application Lifecycle Management
Webentwicklung - Applikationen für mobile Clients