Document Style Semantics and Specification Language —
Was sich so kompliziert anhört, kann man einerseits leichter
aussprechen und andererseits auch erlernen. Zu beidem wollen wir
hier Beihilfe leisten. Für die Aussprache ist schon die Schreibweise
als Akronym hilfreich: DSSSL. Versuchen Sie das
vorzulesen und es müsste so etwas wie Dissel
herauskommen. Das
jedenfalls ist die übliche Aussprache. Nachdem wir nun schon die
erste Hälfte unseres Ziels erreicht haben, wenden wir uns dem
zweiten Teil zu: Was ist DSSSL und warum behandeln wir
diese Sprache in diesem Buch?
Die Sprache wurde dazu entworfen, SGML-Dokumente zu verarbeiten (formatieren). Dabei wurde viel Wert auf weit gehende Flexibilität gelegt. So ist die Ausgabe von DSSSL grundsätzlich in beliebigen Formaten (RDF, PostScript usw.) möglich, sofern das Formatierungsprogramm dazu in der Lage ist.
Grundlegende Ideen und Konzepte von DSSSL wurden unverändert in die neuen, vom W3C definierten Sprachen XSLT und XSL übernommen, allerdings mit völlig anderer Syntax. Aus diesem Grund und weil DSSSL problemlos für XML eingesetzt werden kann, beschreiben wir hier auch DSSSL. Weil die Funktion von DSSSL und XSLT/XSL im Wesentlichen gleich ist, zeigt die Abbildung 31, welche Sprache welche Aufgabe übernimmt.
Abbildung 31: Der Verarbeitungsprozeß von DSSSL. Die grau unterlegten Teile werden vom DSSSL-Standard definiert. Die Auswahl der Ausgabeformate ist prinzipiell nicht beschränkt. XSLT und XSL teilen sich die Arbeit, die DSSSL alleine übernimmt, untereinander auf.
DSSSL besteht aus zwei Komponenten: der Transformationssprache (transformation language) und der Stilsprache (style language). Erstere soll (SGML-)Dokumente, die nach einer bestimmten DTD (oder mehreren) kodiert sind, in ein Format wandeln, in dem sie anderen DTDs entsprechen. Die zweite (Stil) legt für Teile eines Dokuments fest, wie sie aussehen sollen.
Wichtige Bestandteile von DSSSL sind die Flow Object Classes, die Standard Document Query Language (SDQL) und die Expression Language, die sich insofern überlappen, als etwa die Expression Language sowohl in SDQL als auch in der Transformationssprache und der Stilsprache vorkommt.
Ein DSSSL-ProgrammMeistens reden wir
von
Style Sheets
; da DSSSL aber eine vollwertige
Programmiersprache beinhaltet, scheint der Begriff Style
Sheet
zu gering. legt im Wesentlichen zwei Dinge
fest:
Dies ist die aus CSS bekannte Vorgehensweise: Einem Element wird ein Aussehen zugeordnet. In DSSSL nennt man das eine Konstruktionsregel. Stark vereinfacht kann man eine solche Regel wie folgt schreiben:
(was (wie))
Die Schreibweise mit den Klammern stammt daher, dass DSSSL auf Scheme, einem Lisp-Dialekt, basiert.
Zunächst ein Beispiel dafür, wie man das was
bestimmen kann:
(element ABSATZ (...))
Diese Regel ist für alle Elemente des Typs ABSATZ gültig. Möchten Sie eine eigene Regel für Absätze, die sich im Element GLOSSAR befinden, so ist die nächste Regel dafür geeignet:
(element (GLOSSAR ABSATZ) (...))
Das Abfragen von Attributwerten ist mit der Funktion attribute-string möglich. Sie liefert zu einem gegebenen Attributnamen den Wert zurück. Falls es das Attribut bei dem aktuellen Element nicht gibt, liefert attribute-string den Wert falsch (#f) als Ergebnis.
(element KAPITEL (let ((kapitel-typ (attribute-string "typ"))) (if (and kapitel-typ (string=? kapitel-typ "vorwort")) (hier stehen die Anweisungen für das Vorwort) (hier stehen die Anweisungen für andere Kapitel))))
Dies sieht auf den ersten Blick etwas kompliziert aus, ist jedoch mit einigen Programmierkenntnissen leicht zu handhaben. Dennoch kann man schon hier sagen, dass die gegenüber CSS erheblich umfangreicheren Fähigkeiten von DSSSL auch ihren Preis haben.