Die erste Frage, die man sich stellt, ist die nach der
geeigneten Software, um XML zu verarbeiten. Dank
der Nähe zu SGML kann man bereits heute auf
die recht große Auswahl der
SGML-verarbeitenden Programme
zurückgreifen. Für die kleinen Beispiele des letzten
Abschnitts verwenden wir hier einmal das Programm
Cost 2Es hätte auch ein anderes
Programm sein können. Die Universalität von
SGML/XML besteht ja gerade darin, dass man nicht
auf ein bestimmtes Programm festgelegt ist.
(Nachfolger des Copenhagen
SGML
Tool). Cost basiert auf der Tool Command
Language (Tcl).TCLTool Command
Language Wer
diese Sprache beherrscht, kann sicherlich sehr schnell mit dem
Programm umgehen. Aber keine Sorge, die folgenden Beispiele
sind auch ohne Tcl leicht zu verstehen.
Zunächst soll die erste E-Mail in eine
besser lesbare Form gebracht werden. Im Wesentlichen besteht
die Aufgabe darin, die Elementtypen der selbst geschriebenen
DTD in eine gewünschte Formatierung zu
übersetzen. Zu diesem Zweck bietet Cost eine einfache
Funktion namens translate
an.
require Simple.tcl specification translate { {element EMPFAENGER} { prefix "----------------------------------------\nAn: \t" suffix "\n" } {element ABSENDER} { prefix "Von: \t" suffix "\n" } {element THEMA} { prefix "Betreff:\t" suffix "\n" } {element NACHRICHT} { prefix "----------------------------------------\n" suffix "\n----------------------------------------\n" } }
Hier formatiert Cost die DTD-Elemente von empfaenger bis nachricht durch Trennlinien, Zeilenumbrüche (\n), Tabulatoren (\t) und kurze Kommentare. Der Programmaufruf sieht unter Unix folgendermaßen aus:
nsgmls -wxml email1.xml | costsh -S email1-1.cost
Bei dem Programm nsgmlsnsgmls handelt es sich um James Clarks SGML-Parser, der mit der Option -wxml darüber informiert wird, dass es sich um eine XML-Instanz handelt. Die Ausgabe des Parsers wird dann in Cost umgelenkt. Als Ergebnis erhält man folgende Ausgabe:
---------------------------------------- An: Henning Behme Von: Stefan Mintert Betreff: Aus dem Urlaub zurück? ---------------------------------------- Hallo Henning, ich hoffe, Du bist bald aus dem Urlaub zurück und hast auch an dem XML-Buch gearbeitet. Bis bald, Stefan. ----------------------------------------
Möchten Sie statt der Ausgabe in reinem ASCII doch lieber eine HTML-Ausgabe, so genügen schon kleine Modifikationen an dem Cost-Programm:
require Simple.tcl specification translate { {element EMPFAENGER} { prefix "<HTML><HEAD>\n<TITLE>EMail</TITLE>\n\ </HEAD>\n<BODY>\n<TABLE BORDER=1>\ <TR><TH>Empfänger\n<TD>" suffix "\n" } {element ABSENDER} { prefix "<TR><TH>Absender\n<TD>" suffix "\n" } {element THEMA} { prefix "<TR><TH>Betreff\n<TD>" suffix "\n" } {element NACHRICHT} { prefix "<TR><TH>Nachricht\n<TD><pre>\n" suffix "</pre>\n</TABLE></BODY></HTML>" } }
Mit diesen Anweisungen produziert Cost die folgende HTML-Datei, die jeder Web-Browser einlesen und darstellen kann (vgl. Abbildung 7).
<HTML><HEAD> <TITLE>EMail</TITLE> </HEAD> <BODY> <TABLE BORDER=1><TR><TH>Empfänger <TD>Henning Behme <TR><TH>Absender <TD>Stefan Mintert <TR><TH>Betreff <TD>Aus dem Urlaub zurück? <TR><TH>Nachricht <TD><pre> Hallo Henning, ich hoffe, Du bist bald aus dem Urlaub zurück und hast auch an dem XML-Buch gearbeitet. Bis bald, Stefan. </pre> </TABLE></BODY></HTML>