Konzepte Content-Repräsentation & Markup-Sprachen

6.2 Prozedurale Auszeichnungssprachen

Eine der typischen Anwendungen von Auszeichnungssprachen ist die Spezifikation von Formatierungsanweisungen in Dokumenten. Bereits in den 1960er Jahren wurden Computer zur Steuerung von bestimmten Fotosatzanlagen eingesetzt. Die Steuercodes wurden dazu in das Dokument eingefügt und konnten während der Ausgabe auf einer Fotosatzanlage interpretiert werden. Allerdings waren die verwendeten Codes sehr eingeschränkt und abhängig vom jeweiligen Gerätetyp. Ein Austausch von Dokumenten über Rechnergrenzen hinweg war daher nur möglich, wenn der Empfänger über eine gleichartige Fotosatzanlage für die Ausgabe verfügte.

Diese Art der Dokumentauszeichnung läßt sich auch heute noch in Sprachen zur Ansteuerung von Druckern finden. Derartige Sprachen verfügen über eine vergleichsweise einfache Grammatik, in der spezielle Zeichenfolgen als Steuercodes interpretiert werden. Folgendes Beispiel zeigt exemplarisch den Aufbau eines Kommandos der weit verbreiteten Printer Control Language (PCL). Die Leerräume innerhalb der Zeichenfolge dienen nur der Übersichtlichkeit und gehören nicht zur Sprachsyntax:


ESC *p value Y

Obiges Kommando dient zur freien Positionierung der nächsten Druckausgabe auf der Y-Achse der zur Verfügung stehenden Ausgabefläche. Parametrisierte Steuercodes in PCL bestehen immer aus einem maximal zwei Zeichen langen Funktionspräfix, das mit dem ASCII-Zeichen 27 (ESC) eingeleitet wird. Der darauf folgende numerische Parameter wird schließlich von einem zum Steuercode gehörigen Zeichen beendet, so daß immer eine Abgrenzung von nachfolgenden textuellen Daten gewährleistet ist. Hier wird die gewünschte Funktion also durch die zweiteilige Zeichenfolge ESC*p...Y bezeichnet.

Der als Parameter erforderliche numerische Wert bezeichnet in dieser Escape-Sequenz die Y-Position, an der die nachfolgenden Inhaltsinformationen ausgegeben werden sollen. Folgendes Beispiel zeigt, wie dieses Kommando benutzt werden kann, um den Text Hallo Welt untereinander an fest vorgegebenen Positionen auszugeben. Dabei wird zuerst die Zeichenkette “Welt” in der aktuellen Schriftart an der aktuellen X-Position und der Y-Position 200 — gemessen vom Ursprung des Koordinatensystems in der linken oberen Ecke des Ausgabebereichs — ausgegeben. Anschließend folgt die Ausgabe der Zeichenkette “Hallo” in der aktuellen Schriftart an der aktuellen X-Position (unmittelbar hinter dem letzten Zeichen von “Welt”) und der Y-Position 160.


ESC*p200YWeltESC*p160YHallo

Wie das Beispiel zeigt, sind diese Steuercodes sehr stark auf den Darstellungsprozeß bestimmter Ausgabegeräte ausgerichtet. Zahlreiche Hochleistungs-Drucker, aber auch die im Heimbereich lange Zeit sehr verbreiteten Nadeldrucker, erlauben beispielsweise die freie Positionierung von Texten gar nicht oder nur sehr eingeschränkt (z.B. ohne Rückwärtssprünge wie im obigen Beispiel). Für den Austausch von Dokumenten über Systemgrenzen hinweg sind diese Auszeichnungssprachen somit nicht besonders geeignet.

Mit der zunehmenden Verbreitung leistungsfähiger Rechner und Ausgabesysteme stieg jedoch bereits in den 1960er Jahren die Notwendigkeit des elektronischen Dokumentaustauschs ebenfalls sehr stark an. Da jedoch auch die Vielfalt an Systemen für die Druckausgabe gestiegen war, mußten symbolische Steuercodes her, die unabhängig von konkreten Gerätetypen waren. Denn nur so ließen sich Daten über Rechnergrenzen hinweg austauschen, ohne die Spezifika der Ausgabegeräte auf der Seite des Empfängers kennen zu müssen.

Um Dokumente mit symbolischen Steuercodes ausgeben zu können, mußte nun ein zusätzlicher Verarbeitungsschritt durchgeführt werden: die Umsetzung der symbolischen Kommandos in geräteabhängige Steuercodes, die Formatierung. Es ergibt sich somit ein zweistufiger Verarbeitungsprozeß, den Abbildung 2 schematisch dargestellt.

Abbildung 2. Schematische Darstellung des klassischen zweistufigen Verarbeitungsprozesses bei der Ausgabeerzeugung

Die Abbildung zeigt, wie aus einem mit abstrakten Steuercodes ausgezeichneten Dokument ein für ein spezielles Ausgabemedium angepaßtes Ergebnisdokument erzeugt wird (im allgemeinen ist dieses Ergebnisdokument ein Zeichenstrom, der direkt zum Ausgabegerät gesendet wird). Im ersten Teilschritt werden dazu die abstrakten Steuercodes von einem Formatierer in eine Layout-orientierte Repräsentation — das formatierte Dokument — umgewandelt. Üblicherweise werden dabei die Inhaltsinformationen direkt in das Ausgabedokument übernommen. Schriftart und -größe werden anhand der Angaben im Dokument oder auf der Basis externer Formatierer-Optionen ausgewählt. Wie auch im klassischen Buchdruck werden die auszugebenden Zeichen in Schreibrichtung aneinander gereiht. Ist der Rand des für die Ausgabe zur Verfügung stehenden Bereichs erreicht, dann wird die Zeile an einer Wortgrenze umgebrochen und der Formatierprozeß auf der nächsten Zeile fortgesetzt. Ist das Seitenende erreicht, so führt der Formatierer den Prozeß für den verbleibenden Text auf einer neu angelegten Seite fort.

Das Ergebnis des Formatierprozesses ist eine Layout-orientierte Repräsentation der Inhalte des ursprünglichen Dokuments, wobei unter Umständen Informationen weggelassen oder hinzugefügt worden sind. Wie zu Beginn dieses Abschnitts bereits dargelegt, werden solche Dokumente typischerweise in PCL oder mit Sprachmitteln vergleichbarer Ausdrucksfähigkeit kodiert. Im anschließenden Darstellungsprozeß werden die konkreten Steuercodes interpretiert und das Dokument auf dem jeweiligen Ausgabemedium angezeigt.

Zu den ersten Sprachen, die zur Unterstützung des ersten Schritts in dem gezeigten Verarbeitungsprozeß entwickelt wurden, zählt die in den 1970er Jahren entstandene und bis heute in bestimmten Anwendungsbereichen verbreitete Formatierersprache troff. Beispiel 1 zeigt ein einfaches troff-Dokument, in dem eine moderne Version des gleichnamigen Formatierprogramms beschrieben wird.

Neben den auszugebenden Texten können troff-Dokumente Kommandos — prozedurales Markup — zur Änderung des Formatiererzustands enthalten. So läßt sich z.B. der Abstand zwischen zwei Absätzen vergrößern, indem die virtuelle “Stiftposition” nach jedem Absatz um einen bestimmten Betrag entlang der Zeilenpositionierungsrichtung vergrößert wird. Dies entspricht dem Einfügen eines zusätzlichen Zeilenvorschubs auf einer mechanischen Schreibmaschine.

Wie das Beispiel zeigt, werden die Steuersequenzen in troff durch einen Punkt am Zeilenanfang kenntlich gemacht und erstrecken sich bis zum Ende der Zeile. Komplexere Kommandos können über einen einfachen Makro-Mechanismus gebildet werden. Dieser erlaubt die Zusammenfassung mehrerer Steuersequenzen unter einem beschreibenden Namen. Nach der Definition kann die komplette Sequenz über diesen Namen referenziert werden. Ein sehr gebräuchlicher Makrosatz ist man, in dem unter anderem das Makro SH für “section heading” — Abschnittsüberschrift — definiert ist (vgl. Beispiel 1).

Beispiel 1. Ausschnitt aus einem einfachen troff-Dokument

.SH NAME
troff \- format documents
.SH SYNOPSIS
.nr a \n(.j
.ad l
.nr i \n(.i
.in +\w'\fBtroff 'u
.ti \niu
.B troff
.RI "[\ " files\|.\|.\|. "\ ]"
.br
.ad \na
.SH DESCRIPTION
This manual page describes the GNU version of
.BR troff ,
which is part of the groff document formatting system.
It is highly compatible with Unix troff.
Usually it should be invoked using the groff command, which will
also run preprocessors and postprocessors in the appropriate
order and with the appropriate options.
.SH OPTIONS
.TP \w'\-dname=s'u+2n
    

Zu beachten ist, daß Formatierersprachen im allgemeinen eine reine Abstraktion einfacher Druckersprachen wie PCL darstellen, ohne daß dem Dokument durch das Markup weitere Informationen hinzugefügt werden. Zwar erhöhen die oftmals verwendeten symbolischen Makro-Bezeichner die Lesbarkeit eines Dokuments für menschliche Betrachter, doch die Interpretation durch das Formatierprogramm erfolgt ausnahmslos auf der Ebene der prozeduralen Beschreibung abstrakter Zustandsänderungen.

Eine vergleichbare Form der Layout-orientierten Auszeichnung von Dokumenten findet sich in zahlreichen Textverarbeitungssystemen, die eine sogenannte WYSIWYG-Funktionalität anbieten (“What You See Is What You Get”). Solche Systeme verfügen über einen eingebauten Formatierer, der bereits während der Bearbeitung eines Dokuments den Formatierprozeß durchführt und das Ergebnis auf dem Bildschirm als realitätsgetreue Abbildung des möglichen Druckergebnisses darstellt. Neuere WYSIWYG-Systeme erlauben die Definition sogenannter Formatvorlagen — einfache benannte Makros zur prozeduralen Auszeichnung von Textpassagen wie sie bereits von Formatierersystemen wie troff bekannt sind.

Ein Nachteil der Verwendung von prozeduralem Markup ist jedoch, daß die Verarbeitung immer eine wohldefinierte Systemumgebung voraussetzt, um auf allen Rechnern die gleichen Effekte erzielen zu können. Besonders problematisch ist dies vor dem Hintergrund verteilter Systeme, in denen der Empfänger eines Dokuments unter Umständen die benötigte Systemkonfiguration zur Ausgabe nicht einmal kennt. Der Einsatz von Seitenbeschreibungssprachen wie dem bereits aus Lerneinheit 4 bekannten PostScript-Format konnte zumindest für bereits formatierte Dokumente Abhilfe schaffen, da der zusätzliche Verarbeitungsschritt der Formatierung entfällt.

Die von der Adobe Systems Incorporated (im folgenden abkürzend als “Adobe” bezeichnet) entwickelte Sprache ermöglichte es, die erwünschte Druckausgabe unter Verwendung spezieller Grafikprimitiven zu beschreiben. Da PostScript eine vollständige Programmiersprache darstellt, läßt sich theoretisch der gesamte Formatierprozeß im Dokument selbst beschreiben. Für den Einsatz in der Praxis ist dies aus Gründen der Effizienz allerdings nicht empfehlenswert. Dennoch können dadurch gerade komplexe Grafiken sowie deren Positionierung beim Empfänger unter Einbeziehung der spezifischen Eigenschaften des verwendeten Ausgabegeräts berechnet werden.

Obwohl es sich bei PostScript um ein proprietäres Dateiformat handelt, fand es schon bald nach der Markteinführung sehr weite Verbreitung. Dies ist vor allem auf die Offenlegung der Spezifikation zurückzuführen, die es Druckerherstellern wie auch Softwareherstellern ermöglichte, dieses Dateiformat in ihren Produkten zu unterstützen. Den wichtigsten Faktor aber stellte die Entscheidung des Hardwareherstellers Hewlett-Packard (HP) dar, die eigenen Drucker mit PostScript-Interpretern auszurüsten — die Dokumente konnten nun direkt an den Drucker gesendet werden, ohne daß die enthaltenen Layout-Beschreibungen erst einmal in eine eigene Druckersprache (s.o.) umgewandelt werden mußten. Dieser Ansatz erwies sich als so erfolgreich, daß andere Druckerhersteller ihre Produkte ebenfalls mit PostScript-Unterstützung versahen und somit ebenfalls zur Beliebtheit der Sprache beitrugen.

De facto wurde mit PostScript eine einheitliche Sprache zur Beschreibung von bereits formatierten Dokumenten geschaffen. Mittlerweile ist mit dem Portable Document Format (PDF) von Adobe ein weiteres Geräte-unabhängiges Format zur Beschreibung eines seitenorientierten Layouts verfügbar, das dem Vorgänger PostScript sehr ähnlich ist (siehe auch Lerneinheit 4). Die wesentlichen Unterschiede neben einer geänderten Dateistruktur bestehen in Erweiterungen, die die interaktive Betrachtung am Bildschirm unterstützen sollen. PDF ist damit zwar weiterhin auf die Beschreibung des Dokument-Layouts ausgerichtet, weist aber auch einfache interaktive Elemente wie “klickbare” Querverweise und änderbare Formularfelder auf. Einer der Nachteile von PDF gegenüber PostScript ist die fehlende Unterstützung durch Druckerhersteller. So müssen PDF-Dokumente für die Druckausgabe im allgemeinen in ein entsprechendes Druckerformat konvertiert werden.

Ein großer Nachteil der Seitenbeschreibungssprachen ist die mangelnde Unterstützung für verteilte Bearbeitung. Da sie vorwiegend für den Austausch bereits formatierter Dokumente entwickelt wurden, gehen bei der Erzeugung einer solchen Layout-spezifischen Beschreibung wichtige Informationen über die Dokumentstruktur verloren. So lassen etwa die Namen von Makros in prozeduralen Formatierersprachen häufig Rückschlüsse auf die Semantik von Dokumentbestandteilen zu, die in einem PostScript- oder PDF-Dokument nicht mehr vorhanden sind.

Um nun die verteilte Dokumentbearbeitung in heterogenen Umgebungen zu unterstützen, wurden also Sprachen entwickelt, die den Abstraktionsgrad der Auszeichnungsdirektiven noch weiter erhöhen. An die Stelle von Layout-Beschreibungen — sei es über Primitiven, die Zustandsübergänge in einem Drucker repräsentieren, oder über Makros, die eine Reihe solcher Primitiven unter einem symbolischen Bezeichner zusammenfassen — trat die Auszeichnung von Dokumentbestandteilen mit generischen Bezeichnern, die keinerlei Layout-Semantik besitzen mußten. Für diese Art der Dokumentauszeichnung wurde bereits in den 1960er Jahren der Begriff Generic Coding geprägt.

Zusammen mit der Idee des Generic Coding wurde damals auch die logische Dokumentauszeichnung geboren: Einzelne Dokumentbestandteile werden entsprechend ihrer Bedeutung innerhalb des jeweiligen Anwendungsgebiets ausgezeichnet und so vollständig vom Prozeß der Ausgabeerzeugung entkoppelt. Das für die Informationsübertragung verwendete Vokabular wird der Terminologie des Anwendungsgebiets angepaßt und kann bei Bedarf beliebig verfeinert werden. Der folgende Abschnitt gibt einen tieferen Einblick in diese Technik der Dokumentauszeichnung.

Kommentare (0)

Ihr Kommentar

Name