Bisher haben wir außer Acht gelassen, worum es sich bei dem Ergebnis einer Konstruktionsregel handelt. Das Ergebnis soll natürlich ein formatiertes Objekt sein, etwa ein Absatz, eine Überschrift, eine Tabelle, Fußnote oder ein anderes typografisches Objekt. Ein solches Objekt heißt hier Flow Object. In CSS gibt es nur eine grobe Unterscheidung: Blöcke, Listen oder Zeichenelemente. In DSSSL gibt es eine große Anzahl von Flow-Object-Klassen. Eine ganze Seite ist ein Flow Object, aber auch ein einzelnes Zeichen. Flow Objects können also andere enthalten, sie bilden eine Hierachie, ähnlich zu der Verschachtelung von XML-Elementen. Diese Hierachie heißt Flow Object Tree und ist das Ergebnis der Formatierung.
Da es so unterschiedliche Klassen gibt, ist es
natürlich, dass sie ganz unterschiedliche Eigenschaften
auszeichnen. Ein Absatz hat beispielsweise eine Zeilenhöhe
;
bei einem einzelnen Buchstaben macht das keinen Sinn. Jede Klasse
hat seine eigenen Charakteristika. Die
Formatierung mit DSSSL besteht nun darin, zu
bestimmen, welchen Elementen (was
) welche Charakteristika
(wie
) zugeordnet werden.
Ein Beispiel:
(element (AWLINET TITELEI BUCHTITEL) (make paragraph quadding: 'center font-size: 30pt line-spacing: 35pt font-weight: 'bold font-family-name: "Avant Garde"))
Mit dieser Konstruktionsregel formatieren wir den
BUCHTITEL, der sich innerhalb der
TITELEI des Dokuments AWLINET befindet. Bei dem Ausgabeobjekt
handelt es sich um einen Absatz (paragraph). Es gibt keine
speziellen Klassen für Überschriften
oder ähnliches, da auf dem
Ausdruck solche Dinge nur an ihrem Äußeren zu erkennen
sind. Papier ist nicht Generic-Markup-fähig. Als Charakteristika
legen wir fest:
Das Wörtchen make sorgt übrigens dafür, dass ein Flow Object erzeugt wird.
Um für alle Elemente einer DTD auf die Weise die Formatierung zu bestimmen, müsste man sehr viel schreiben. Dies wird dadurch erleichtert, dass Objekte ihre Charakteristika an ihre Kinder vererben. Ein anderer Weg besteht in der Definition eines Stils, den man mehrfach verwenden kann.
(define %absatz% (style font-weight: 'medium font-family-name: "New Century Schlbk" font-size: baseFontSize line-spacing: baseFontSize font-weight: 'medium language: 'DE quadding: 'justify )) (define fixed-font-family "Courier") (define baseFontSize 10pt) (element ABSATZ ; Absatz (make paragraph use: %absatz% (process-children))) (element LISTING ; Listings (make paragraph font-size: (* .9 baseFontSize) lines: 'asis font-family-name: fixed-font-family use: %absatz% (process-children)))
Die erste Definition führt einen Stil namens
%absatz% ein. Dieser Stil wird für Absätze benutzt
(use), aber auch für Listings. (Es ist nicht notwendig, die
Prozentzeichen zu verwenden. Zur leichteren Unterscheidung haben
wir alle Stile so gekennzeichnet.) Bei einem Listing findet auch
noch eine Veränderung der Stilvorgabe statt. Für die
Schriftgröße wird die auf den Faktor 0,9 verkleinerte
Grundschrift gewählt. Die Grundschrift ist selbst als Variable
definiert worden. Als zweites Charakteristikum besitzt ein
Listing die Zuweisung, dass Zeilenumbrüche so belassen werden (as
is
), wie sie im Dokument stehen. Letzlich wird noch die
Schriftfamilie Courier
gewählt.
Die so gemachten Formatierungen sind — wie gesagt — unabhängig vom Ausgabeformat.