13.07.2015 Aufrufe

ein generischer Ansatz zur Layout-Spezifikation - Lehr- und ...

ein generischer Ansatz zur Layout-Spezifikation - Lehr- und ...

ein generischer Ansatz zur Layout-Spezifikation - Lehr- und ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

INSTITUT FÜR INFORMATIK<strong>Lehr</strong>- <strong>und</strong> Forschungs<strong>ein</strong>heit fürProgrammier- <strong>und</strong> ModellierungssprachenOettingenstraße 67D–80538 MünchenPräsentation von XML-Daten –<strong>ein</strong> <strong>generischer</strong> <strong>Ansatz</strong> <strong>zur</strong> <strong>Layout</strong>-<strong>Spezifikation</strong>Ulf Müller-H<strong>ein</strong>emannDiplomarbeitBeginn der Arbeit: 04.02.2002Abgabe der Arbeit: 31.03.2002Betreuer:Prof. Dr. François BryDr. Norbert Eisinger


ErklärungHiermit versichere ich, daß ich diese Diplomarbeit selbständig verfasst habe. Ich habe dazu k<strong>ein</strong>eanderen als die angegebenen Quellen <strong>und</strong> Hilfsmittel verwendet.München, den 31.3.2002Ulf Müller-H<strong>ein</strong>emann


ZusammenfassungIn dieser Arbeit wurde <strong>ein</strong> Prozeß entwickelt, der XML-Daten – mit dem konkreten Anwendungsfallder Verwaltungsdaten <strong>ein</strong>er Universitäts<strong>ein</strong>richtung – in Präsentationen unterschiedlicher Beschreibungssprachen,<strong>Layout</strong>s <strong>und</strong> Landessprachen transformiert, wobei großer Wert darauf gelegt wurde,daß der Prozeß leicht an sich verändernde Rahmenbedingungen <strong>und</strong> Aufgabenstellungen angepaßtwerden kann.Im Zuge dessen wurde <strong>ein</strong>e neue Abgrenzung der Begriffe ”Daten“, ”<strong>Layout</strong>“ <strong>und</strong> ”Style“ vorgenommen<strong>und</strong> <strong>ein</strong> <strong>Ansatz</strong> entwickelt, mit dem das <strong>Layout</strong> von Präsentationen generisch spezifiziert werdenkann <strong>und</strong> die Semantik der zugr<strong>und</strong>eliegenden Daten nach der Erstellung des <strong>Layout</strong>s erhalten bleibt.Um die Tragfähigkeit des entwickelten Prozesses zu prüfen, wurde anschließend <strong>ein</strong>e prototypischeImplementierung vorgenommen, die darüberhinaus untersuchen sollte, inwieweit bestehende Werkzeuge<strong>und</strong> Transformationssprachen vorhanden <strong>und</strong> für <strong>ein</strong>e Implementierung geeignet sind.AbstractThe aim of this thesis was to create a process that transforms XML data into presentations of differentdescription languages, layouts and spoken languages – with focus on the data used in the administrationof university facilities. As the requirements to process change frequently, the possibility to easilyadapt the process was especially emphasized.In the course of building this process, the meanings of the terms ”data“, ”layout“ and ”style“ werenewly revised. An approach was developed in a way that allows to give a generic specification of apresentation’s layout and preserves the semantics of the data after building the layout.In order to prove the usability of the process a prototype was implemented. In addition to that existingtransformation tools and languages were investigated and compared.


Inhaltsverzeichnis1. Einleitung 51.1. Ausgangspunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3. Abgrenzung zu bestehenden Ansätzen . . . . . . . . . . . . . . . . . . . . . . . . . 61.3.1. XSL Formatting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3.2. DocBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.3.3. Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.4. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82. Das Datenmodell der <strong>Lehr</strong>angebots-Verwaltungsdaten – Besonderheiten 112.1. Modellierungskonzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.1.1. Abstraktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.1.2. Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1.3. Vererbung/Verschattung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2. Weitere Konzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.1. Mehrere Bezeichnungen, Vielsprachigkeit . . . . . . . . . . . . . . . . . . . 142.2.2. Strukturbaum der möglichen <strong>Lehr</strong><strong>ein</strong>heiten . . . . . . . . . . . . . . . . . . 142.2.3. Metadaten für die Datenbearbeitung . . . . . . . . . . . . . . . . . . . . . . 152.3. Definition von Begriffen <strong>zur</strong> Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153. Präsentations-Erzeugungsprozeß 173.1. Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.1.1. Datenquelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.2. Präsentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.3. Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.1.4. Prozeßschritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.1.5. Prozeßabschnitte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.1.6. Gesamter Prozeß . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221


Inhaltsverzeichnis3.2. Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.2.1. Datenschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.2.2. Aufbereitung der Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2.3. Sortierung <strong>und</strong> Transformation der Daten nach <strong>Layout</strong>-Klassen . . . . . . . 253.3. <strong>Layout</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3.1. Motivation des <strong>Layout</strong>baumes . . . . . . . . . . . . . . . . . . . . . . . . . 273.3.2. Generierung des <strong>Layout</strong>baums . . . . . . . . . . . . . . . . . . . . . . . . . 323.3.3. Aufbereitung des <strong>Layout</strong>baums . . . . . . . . . . . . . . . . . . . . . . . . 323.3.4. Generische Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.4. Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4.1. Templatemechanismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.4.2. Aufbereitung der Präsentation . . . . . . . . . . . . . . . . . . . . . . . . . 383.4.3. Transformation der Präsentation in die Zielsprache . . . . . . . . . . . . . . 394. Rahmenbedingungen <strong>ein</strong>er Implementierung 414.1. Erforderliche Sprachmittel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.1.1. Baumbasierte Transformationssprache . . . . . . . . . . . . . . . . . . . . . 414.1.2. Sprache <strong>zur</strong> Definition von <strong>Layout</strong>beschreibungsbäumen . . . . . . . . . . . 414.1.3. Sprache <strong>zur</strong> Kombination von Prozessoren . . . . . . . . . . . . . . . . . . 424.1.4. Generische Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.1.5. Sprache zum Zugriff auf Inhalte der Präsentation in <strong>ein</strong>em Template . . . . . 424.2. Erforderliche Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2.1. Kombination von Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . 434.2.2. Prozessoren für Transformationen . . . . . . . . . . . . . . . . . . . . . . . 434.3. Verfügbare Sprachmittel <strong>und</strong> Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . 444.3.1. Baumbasierte Transformationssprache . . . . . . . . . . . . . . . . . . . . . 444.3.2. Sprache <strong>zur</strong> Definition von <strong>Layout</strong>beschreibungsbäumen . . . . . . . . . . . 514.3.3. Sprache <strong>zur</strong> Kombination von Prozessoren . . . . . . . . . . . . . . . . . . 514.3.4. Generische Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.3.5. Sprache zum Zugriff auf Inhalte der Präsentation in <strong>ein</strong>em Template . . . . . 525. Prototypische Implementierung PEP 535.1. Implementierung des Prozesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.1.1. Realisierung der Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . 555.1.2. Datenschnittstelle der Prozessoren . . . . . . . . . . . . . . . . . . . . . . . 562


Inhaltsverzeichnis5.1.3. Registrierung der Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . 565.1.4. Realisierung des Prozesses . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.1.5. Vorteile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.2. Bibliothek von generischen Ausdrücken . . . . . . . . . . . . . . . . . . . . . . . . 585.2.1. Generische <strong>Layout</strong>konstrukte . . . . . . . . . . . . . . . . . . . . . . . . . 595.2.2. Generische Styleanweisungen . . . . . . . . . . . . . . . . . . . . . . . . . 605.2.3. Generische Sonderzeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.3. Implementierung ausgesuchter Prozessoren . . . . . . . . . . . . . . . . . . . . . . 615.3.1. Klassifikation der verwendeten Regelsprachen . . . . . . . . . . . . . . . . 615.3.2. Prozessoren mit mehreren Ausprägungen . . . . . . . . . . . . . . . . . . . 685.3.3. Die implementierten Prozessoren . . . . . . . . . . . . . . . . . . . . . . . 695.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baums 705.4.1. XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705.4.2. fxt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755.4.3. XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795.4.4. xcerpt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816. Zusammenfassung <strong>und</strong> Ausblick 83Anhang 85Abbildungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873


1. EinleitungFür die Administration der Verwaltungsdaten des <strong>Lehr</strong>angebots am Institut für Informatik der LMUwird <strong>zur</strong> Zeit <strong>ein</strong>e Software <strong>ein</strong>gesetzt, die vor <strong>ein</strong>igen Jahren am selben Institut entstanden ist. Allerdingswaren bei der Planung dieses Systems viele der – teils sehr speziellen – Anforderungen nochnicht bekannt. Sie wurden nach <strong>und</strong> nach in das System integriert; aufgr<strong>und</strong> von bereits getätigten,gr<strong>und</strong>sätzlichen Designentscheidungen konnten die Änderungen zum Teil allerdings nur in Form vonWorkaro<strong>und</strong>s oder Sonderfall-Behandlungen vorgenommen werden.Diese Arbeit beschäftigt sich nun mit <strong>ein</strong>er Neukonzeption dieses Systems, die natürlich die bisherhinzugekommenen Anforderungen b<strong>ein</strong>haltet, aber daneben auch so offen s<strong>ein</strong> soll, daß zukünftigeÄnderungen leicht zu integrieren sind.1.1. AusgangspunktDie vorliegende Arbeit stützt sich auf die Ergebnisse <strong>ein</strong>er vorangegangenen Projektarbeit [20], derenZiel es war, die Prozesse <strong>und</strong> Daten zu formalisieren, die bei der Verwaltung des <strong>Lehr</strong>angebotsanfallen. Ausgehend von den spezifischen Anforderungen <strong>ein</strong>er zukünftigen Implementierung wurdeals Formalismus für die Beschreibung der Daten XML gewählt 1 .Im Rahmen der Projektarbeit entstanden <strong>ein</strong> Datenmodell für die Verwaltungsdaten in der BeschreibungsspracheXML-Schema sowie detaillierte textuelle Beschreibungen der Prozesse in der Verwaltung.Die Beschreibung der Prozesse beginnt mit der Beschaffung der Verwaltungsdaten, geht überdie Bearbeitung der Daten, wie z.B. die Generierung des Zeitplans der Veranstaltungen <strong>und</strong> die Beantragungdafür nötiger Räume, <strong>und</strong> endet mit der Erstellung <strong>ein</strong>er Vielzahl von Präsentationen wiez.B. Vorlesungsverzeichnissen.Diese Arbeit nun beschäftigt sich mit dem Teilbereich der Erstellung der Präsentationen. Die Bereicheder Datenerhebung, -erfassung <strong>und</strong> -bearbeitung werden hier außen vor gelassen; die Erfassungerfolgt <strong>zur</strong> Zeit r<strong>ein</strong> manuell. Eine programmunterstützte Eingabe von Daten, z.B. über Eingabemaskenmit <strong>ein</strong>em Vorschlag- <strong>und</strong> Auswahlsystem der Werte, könnte <strong>ein</strong> Thema für <strong>ein</strong>e spätere Arbeits<strong>ein</strong>. Ebenso <strong>ein</strong>e Neukonzeption des Systems zum Entwurf <strong>ein</strong>es Zeitplans.1 Die Hauptgründe, die <strong>zur</strong> Verwendung von XML geführt haben, waren die Notwendigkeit, die Daten textuell bearbeitenzu können (unter anderem wegen <strong>ein</strong>er rationelleren Erfassung, z.B. durch Verwendung von Copy and Paste) <strong>und</strong> dieMöglichkeit, bei der Erfassung der Daten bewußte Abweichungen vom Datenmodell (wie z.B. das Weglassen von nochnicht bekannten Elementen) in Kauf nehmen zu können.5


1. Einleitung1.2. ZieleMit dieser Arbeit soll <strong>ein</strong> Prozeß entwickelt werden, der XML-Daten – hier mit dem konkreten Anwendungsfallder Verwaltungsdaten – in Präsentationen unterschiedlicherBeschreibungssprachen (L A TEX, HTML, Text etc.),<strong>Layout</strong>s (z.B. <strong>ein</strong>e ”St<strong>und</strong>enplanansicht“ <strong>und</strong> <strong>ein</strong>e ”Listenansicht“) <strong>und</strong>Landessprachen (Deutsch, Englisch etc.)transformiert. Von großer Bedeutung ist dabei, daß der Prozeß leicht an sich verändernde Rahmenbedingungen<strong>und</strong> Aufgabenstellungen angepaßt werden kann.Ein wichtiger Augenmerk liegt auf <strong>ein</strong>er strikten Trennung von Datenzugriff, Erzeugung des <strong>Layout</strong><strong>und</strong> des Style.Die nötige Trennung von Inhalt <strong>und</strong> Style ist <strong>ein</strong>e Erkenntnis, die sich mittlerweile allgem<strong>ein</strong> durchgesetzthat, egal ob im DTP- oder im Web-Publishing-Bereich. Deutlich sichtbar ist sie z.B. in derEntwicklung von HTML, das in s<strong>ein</strong>en frühen Versionen beides <strong>und</strong>ifferenziert neben<strong>ein</strong>ander benutzte.In s<strong>ein</strong>er gegenwärtigen Version HTML 4.01 nimmt es durchaus <strong>ein</strong>e Trennung von Inhalt(das Markup) <strong>und</strong> Style (Stylesheets) vor [29, 30, 34, 36].Auch hat sich die Erkenntnis etabliert, daß es von Vorteil ist, Inhalte semantisch zu beschreiben,so daß das Ausgabemedium oder überhaupt der Ausgabezweck nicht bekannt s<strong>ein</strong> muß; was unteranderem <strong>zur</strong> Einführung von XML geführt hat. Über Transformationen, die wieder über sogenannteStylesheets [42] spezifiziert werden, sollen die Daten in beliebige Zielformate transformiert werdenkönnen.Allerdings wird dabei unter Style sowohl das Ersch<strong>ein</strong>ungsbild der Inhalte als auch deren räumlicheAnordnung verstanden. Diese Arbeit verf<strong>ein</strong>ert das etablierte Verständnis des Stylebegriffes insofern, daß sie <strong>ein</strong>e Trennung dieser beiden Gesichtspunkte vornimmt: in <strong>Layout</strong>, das die räumlicheAnordnung, <strong>und</strong> Style, der das Ersch<strong>ein</strong>ungsbild beschreibt.Ein weiterer Augenmerk liegt auf <strong>ein</strong>er sauberen Definition des <strong>Layout</strong>s, die anstelle <strong>ein</strong>er imperativenad-hoc-Lösung, bei der das <strong>Layout</strong> z.B. durch Druckanweisungen entsteht, <strong>ein</strong>e deskriptiveBeschreibung verwendet, aus der das <strong>Layout</strong> mit Hilfe von möglichst deklarativ formulierten Regelnaufgebaut wird.1.3. Abgrenzung zu bestehenden AnsätzenUm die Inhalte von Präsentationen zu beschreiben gibt es mittlerweile <strong>ein</strong>e Reihe von Ansätzen. Diewohl bekanntesten <strong>und</strong> verbreitetsten sind XSL Formatting Objects [41] <strong>und</strong> DocBook [21].1.3.1. XSL Formatting ObjectsXSL-FO beschreibt die ”physischen“ Bestandteile <strong>ein</strong>er Präsentation, also Seiten, Boxen, Tabellenusw., bis hinunter zu den <strong>ein</strong>zelnen Zeichen.6


1.3. Abgrenzung zu bestehenden AnsätzenDiese Bestandteile werden in XSL-FO als formatting objects bezeichnet (daher auch der Name). DerFormalismus für die Beschreibung ist XML. XSL-FO definiert in dem Namensraum http://www.w3.org/1999/XSL/Format <strong>ein</strong>e Reihe von XML-Elementen für die formatting objects. Anhandvon formatting properties können die formatting objects an die Bedürfnisse der Präsentation angepaßtwerden (Farben, Abstände, Ränder etc.).Die formatting objects werden in folgende Gruppen <strong>ein</strong>geteilt:1. Declaration and Pagination and <strong>Layout</strong> Formatting Objects: definieren Seitenvorlagen <strong>und</strong>Vorlagen für Seitenfolgen, z.B. <strong>ein</strong>e Vorlage für Standardseiten <strong>und</strong> zusätzliche Vorlagen fürdie erste <strong>und</strong> die letzte Seite.2. Block Formatting Objects: formatieren Textblöcke, wie z.B. Absätze, Überschriften oder Bildunterschriften.3. Inline Formatting Objects: formatieren oder generieren <strong>ein</strong>zelne Textbestandteile, wie z.B.Formatierung der erste Zeile <strong>ein</strong>es Absatzes, Generieren des Textes “Seite “ vor jeder Seitenzahlusw.4. Table Formatting Objects: beschreiben Tabellen <strong>und</strong> ihre Bestandteile (z.B. Tabellenköpfe,-zeilen oder -zellen).5. List Formatting Objects: beschreiben Listen <strong>und</strong> ihre Bestandteile (Items).6. Link and Multi Formatting Objects: ermöglichen <strong>ein</strong>e dynamische Anpassung der Darstellung<strong>und</strong> des Verhaltens von Teilen <strong>ein</strong>es Dokuments, z.B. Verweise auf andere Dokumente, Wechselzwischen verschiedenen Teilbäumen der formatting objects (z.B. zum Wechsel zwischen Kurz<strong>und</strong>Langansicht <strong>ein</strong>er Liste), Umschalten von Einstellungen (z.B. Schriftgröße) usw.7. Out-of-line Formatting Objects: Objekte, die nicht unbedingt an der Position ersch<strong>ein</strong>en, ander sie definiert wurden, z.B. Fußnoten <strong>und</strong> schwebende Objekte, wie Bilder.8. Other Formatting Objects: dienen unter anderem dazu, andere Objekte zusammenzufassen oderMarkierungen <strong>ein</strong>zufügen <strong>und</strong> abzufragen.Die Arbeitsweise von XSL-FO, um aus <strong>ein</strong>em XML-Dokument <strong>ein</strong>e Präsentation zu erstellen, ist grobgeschildert wie folgend:1. Das Quell-XML-Dokument wird mittels Transformationen in <strong>ein</strong> Dokument aus dem XSL-FO-Namensraum überführt. Diese Transformation wird als tree transformation bezeichnet.2. Ein Baum, der die geometrischen Teilbereiche <strong>ein</strong>er Präsentation beschreibt, der area tree, wirderzeugt. Dies erfolgt durch den formatter.3. Mittels <strong>ein</strong>es renderers kann der area tree auf dem jeweiligen Medium ausgegeben bzw. <strong>ein</strong>ePräsentation in <strong>ein</strong>er Zielsprache erzeugt werden.7


1. Einleitung1.3.2. DocBookDocBook wurde mit der Absicht entworfen, Bücher <strong>und</strong> deren Bestandteile beschreiben zu können,wobei das Hauptaugenmerk auf Soft- <strong>und</strong> Hardwaredokumentationen liegt.DocBook ist <strong>ein</strong> SGML-Dokumenttyp, in dem als Elemente verschiedene Präsentationstypen (Buch,Artikel, Unix-Man-Page <strong>und</strong> <strong>ein</strong>e Zusammenstellung von Präsentationen) <strong>und</strong> deren Bestandteile definiertsind.Die zu beschreibenden Bestandteile können Eigenschaften der Präsentationen (Autor, Titel, . . . ), ganzeGliederungs<strong>ein</strong>heiten (Kapitel, Abschnitte, Inhaltsverzeichnisse, . . . ) oder diverse <strong>Layout</strong>-Konstrukte(Listen, Abbildungen, Absätze, . . . ) bis hin zu Inline-Elementen (Fußnoten, Verweise, . . . )s<strong>ein</strong>.Mittlerweile gibt es auch <strong>ein</strong>e XML-Version von DocBook [27].Um Präsentationen zu erstellen, werden die Daten in der DocBook-Syntax formuliert <strong>und</strong> dann mit<strong>ein</strong>em der vorhandenen DSSSL- [15], bzw. XSLT-Stylesheets [42] <strong>und</strong> <strong>ein</strong>em entsprechenden Prozessor(z.B. Jade [10] für DSSSL, oder Saxon [16] für XSLT) in das Zielformat (L A TEX, HTML, XSL-FOu.a.) transformiert.1.3.3. VergleichStellt man den <strong>Ansatz</strong>, den XSL-FO vertritt, also die Beschreibung von physischen Seitenbestandteilen,dem hier zu entwickelnden <strong>Ansatz</strong> gegenüber, so drängt sich der Vergleich von <strong>ein</strong>er Assemblersprache<strong>und</strong> <strong>ein</strong>er höheren Programmiersprache auf. D.h. letztendlich müssen die Präsentationen,die mit dem hier zu entwickelnden <strong>Ansatz</strong> erstellt werden sollen, zwar physisch dargestellt werden,jedoch hängen die layoutbildenden Transformationen, die hier durchgeführt werden sollen, alle vonder Semantik der darzustellenden Daten ab. Die Semantik der Daten kennt XSL-FO jedoch nicht.Daraus folgt, daß XSL-FO zwar durchaus als <strong>ein</strong> mögliches Zielformat (neben LATEX, HTML u.a.)angesehen werden kann, sich jedoch auf k<strong>ein</strong>en Fall dazu eignet, den Prozeß zu beschreiben, mit demdas <strong>Layout</strong> der Präsentationen erzeugt wird.Der <strong>Ansatz</strong> von DocBook stellt sehr generische Konstrukte für die Beschreibung von Präsentationen<strong>zur</strong> Verfügung <strong>und</strong> übernimmt die Entscheidung über die Art <strong>und</strong> Weise, wie diese dargestellt werdensollen, selbst. Einstellungen <strong>zur</strong> physischen Darstellung sind zwar möglich, entsprechen allerdingsnicht unbedingt der Philosophie von DocBook. Hinzu kommt, daß die von DocBook intendiertenPräsentationen Bücher <strong>und</strong> ähnliche Dokumentationen sind, nicht aber St<strong>und</strong>enpläne, Veranstaltungslistenusw. mit f<strong>ein</strong>erer Strukturierung.DocBook könnte im Prinzip <strong>ein</strong>e Anwendung des hier vorgestellten <strong>Ansatz</strong>es s<strong>ein</strong>. DocBook beschreibtXML-Dokumente (bzw. SGML-Dokumente), die Bücher darstellen <strong>und</strong> Transformationen,um <strong>Layout</strong> <strong>und</strong> Style der Bücher zu bilden. Der hier vorgestellte <strong>Ansatz</strong> beschreibt generisch, wie<strong>Layout</strong> <strong>und</strong> Style für beliebige XML-Dokumente gebildet werden können.1.4. AufbauIn Kapitel 2 werden zunächst <strong>ein</strong>ige Besonderheiten des zugr<strong>und</strong>eliegenden Datenmodells erläutert;dies sind zum <strong>ein</strong>en gr<strong>und</strong>legende Konzepte, die nicht nur für den vorliegenden Anwendungsfall von8


1.4. AufbauInteresse sind (Abstraktion, Rekursion <strong>und</strong> Vererbung/Verschattung), <strong>und</strong> zum anderen Lösungen füretwas speziellere Probleme bei der Präsentation von <strong>Lehr</strong>angebotsdaten (Mehrsprachigkeit, unterschiedlicheTexte für unterschiedliche Präsentationen).Der Hauptteil der Arbeit liegt auf der Entwicklung des Präsentations-Erzeugungsprozesses in Kapitel3, der aus den Daten, die in <strong>ein</strong>em beliebigen Datenformat vorliegen (XML, Tabellen <strong>ein</strong>er relationalenDatenbank etc.), Präsentationen in unterschiedlichen Beschreibungssprachen erstellt. DerProzeß besteht aus drei Teilen: Im ersten werden die Daten – wenn nötig – in das XML-Format übertragen<strong>und</strong> nach bestimmten Gesichtspunkten aufbereitet, im zweiten wird das <strong>Layout</strong> der Präsentationaufgebaut <strong>und</strong> im dritten wird das <strong>Layout</strong> mit Styl<strong>ein</strong>formationen angereichert <strong>und</strong> in <strong>ein</strong>e Beschreibungsspracheübersetzt.Daraufhin wird in Kapitel 4 untersucht, welche unterschiedlichen Sprachmittel für <strong>ein</strong>e Implementierungder Komponenten des Präsentations-Erzeugungsprozesses nötig sind <strong>und</strong> welche Sprachen <strong>und</strong>Werkzeuge diese Anforderungen erfüllen.In Kapitel 5 wird die prototypische Implementierung PEP vorgestellt, mit der <strong>ein</strong>e Implementierung<strong>ein</strong>es ver<strong>ein</strong>fachten, durchgängigen Präsentations-Erzeugungspozesses vorgenommen wurde.Ergänzend werden Implementierungsmöglichkeiten in unterschiedlichen Anfragesprachen verglichen.In Kapitel 6 werden mögliche Anküpfungspunkte an diese Arbeit <strong>und</strong> zukünftige technische Entwicklungen,die für die hier gezeigten Ansätze interessant s<strong>ein</strong> könnten, angesprochen.9


2. Das Datenmodell der<strong>Lehr</strong>angebots-Verwaltungsdaten –Besonderheiten2.1. ModellierungskonzepteBei der Modellierung wurden <strong>ein</strong>ige Konzepte <strong>ein</strong>gesetzt, die unabhängig von der hier vorgestellen,speziellen Anwendung sind <strong>und</strong> als Lösung unterschiedlicher Probleme dienen. Dies sind die KonzepteAbstraktion, Rekursion <strong>und</strong> Vererbung/Verschattung. Sie werden im Folgenden kurz dargestellt.2.1.1. AbstraktionAuf die Vielzahl der Änderungen, die an dem bisherigen System <strong>zur</strong> Verwaltung der <strong>Lehr</strong>angebotsdatennötig wurden, wurde ja in der Einleitung bereits hingewiesen. Dies betraf allerdings nicht nurArbeitsabläufe, Präsentationen <strong>und</strong> dergleichen, sondern leider auch die zugr<strong>und</strong>eliegenden Datenstrukturierungen.Ein Beispiel: Die Veranstaltung ”Informatik 1“ besaß lange Zeit <strong>ein</strong>e zweimal in der Woche stattfindendeVorlesung <strong>und</strong> mehrere Übungen, die die Veranstaltungsteilnehmer jeweils alternativ besuchenkonnten. Die pragmatische Lösung bei der Modellierung des ursprünglichen Datenmodells war, <strong>ein</strong>enDatentyp ”Veranstaltung“ zu modellieren, der jeweils mehrere Komponenten vom Datentyp ”Sitzung“<strong>und</strong> ” Übung“ enthalten kann. Was passiert aber – wie es tatsächlich passiert ist –, wenn im Rahmender Veranstaltung nun noch <strong>ein</strong>e ”Rechnerübung“ abgehalten wird? Als ” Übung“ kann sie nicht erfaßtwerden, erstens soll sie in den Veranstaltungslisten gesondert ersch<strong>ein</strong>en <strong>und</strong> nicht als Übungsgruppe<strong>und</strong> zweitens ist sie k<strong>ein</strong>e Alternative zu den anderen Übungen, sondern findet zusätzlich statt. Eineweitere pragmatische Lösung wäre, daß neben ”Sitzung“ <strong>und</strong> ” Übung“ noch <strong>ein</strong> Datentyp ”Rechnerübung“hinzukommt. Und wenn nun noch <strong>ein</strong>e ”Seniorenübung“ <strong>ein</strong>geführt wird?Das Beispiel hat in diesem Fall zwar nur mögliche unterschiedliche Übungsarten herausgestellt, abergenauso könnten sich natürlich Veranstaltungen gr<strong>und</strong>legend unterscheiden, indem sie k<strong>ein</strong>e Übungen,sondern ”Exkursionen“ oder ähnliches enthalten sollen. In den letzten Jahren ist etwa alle zweibis drei Semester <strong>ein</strong>e neue Veranstaltungsart im <strong>Lehr</strong>angebot des Instituts für Informatik aufgetaucht,die es vorher noch nie gab.Was mit dem Beispiel klar geworden s<strong>ein</strong> sollte, ist, daß <strong>ein</strong>e Abbildung von sehr speziellen Anwendungsfällenim Datenmodell leicht zu <strong>ein</strong>em wildwuchernden Datenmodell führen kann.So war es bei der Erstellung des Datenmodells der <strong>Lehr</strong>angebotsdaten vorrangig, auf die Behandlungvon Spezialfällen weitestgehend zu verzichten <strong>und</strong> stattdessen die Begriffe so weit wie möglich zuabstrahieren.11


2. Das Datenmodell der <strong>Lehr</strong>angebots-Verwaltungsdaten – BesonderheitenDas Datenmodell faßt alle Veranstaltungen <strong>und</strong> Gruppen <strong>und</strong> Teile von ihnen unter dem Begriff ”<strong>Lehr</strong><strong>ein</strong>heit“zusammen. Dies macht es möglich, neue Veranstaltungstypen, die bei der Erstellung desDatenmodells noch nicht bekannt waren, ohne Änderung des Datenmodells <strong>ein</strong>zuführen.Die Zusammenfassung der Veranstaltungen unter <strong>ein</strong>em Begriff ist allerdings nur <strong>ein</strong>e Anwendungder Abstraktion. Im Datenmodell der <strong>Lehr</strong>angebotsdaten gibt es <strong>ein</strong>en weiteren Anwendungsfall, <strong>und</strong>zwar die Gesamtheit der am <strong>Lehr</strong>betrieb beteiligten Institutionen, also die Universität, Institute, <strong>Lehr</strong><strong>und</strong>Forschungs<strong>ein</strong>heiten usw.. Diese wurden zu dem Begriff ”Verwaltungs<strong>ein</strong>heit“ abstrahiert, so daßauch die gelegentlichen Erweiterungen <strong>und</strong> Umstrukturierungen der beteiligten Institutionen ohneÄnderung des Datenmodells berücksichtigt werden können.2.1.2. RekursionMit der Abstraktion im letzten Abschnitt wurden zwar spezielle Begriffe wie ” Übung“, ”Rechnerübung“usw. zu dem allgem<strong>ein</strong>en Begriff der ”<strong>Lehr</strong><strong>ein</strong>heit“ zusammengefaßt, allerdings hilft die Abstraktionall<strong>ein</strong>e noch nicht weiter, wenn die Teilveranstaltungen <strong>ein</strong>er Veranstaltung strukturiert werdensollen. Um bei dem Beispiel zu bleiben, das mit der Abstraktion <strong>ein</strong>geführt wurde: Beließe man esall<strong>ein</strong> bei dem Konzept der Abstraktion, dann würde die Veranstaltung ”Informatik 1“ (die natürlichals <strong>Lehr</strong><strong>ein</strong>heit modelliert ist) zunächst als Übungen <strong>ein</strong>e Gruppe von Komponenten mit dem Datentyp”<strong>Lehr</strong><strong>ein</strong>heit“ enthalten; später würde dann das Datenmodell insofern geändert, daß sie <strong>ein</strong>ezweite Gruppe von Komponenten mit den Datentypen ”<strong>Lehr</strong><strong>ein</strong>heit“, den Rechnerübungen, enthaltenkann. Viel gewonnen wurde also durch die Abstraktion all<strong>ein</strong>e noch nicht, außer daß es nur noch <strong>ein</strong>enDatentyp gibt.Stellt man <strong>ein</strong>e Veranstaltung <strong>und</strong> ihre Unterveranstaltungen als Baum dar 1 , so gibt es im Gr<strong>und</strong>ezwei Dimensionen, in die die Veranstaltung wachsen (oder schrumpfen) kann: in die Breite, wennweitere direkte Unterveranstaltungen hinzukommen, <strong>und</strong> in die Tiefe, wenn sich Unterveranstaltungenin mehrere Unter-Unterveranstaltungen aufteilen. Abbildung 2.1 zeigt zwei Beispiele dazu, die injüngster Zeit tatsächlich vorgekommen sind.VeranstaltungVorlesungÜbungVeranstaltungVorlesung Übung SeniorenübungVeranstaltungVorlesung ÜbungZentralübung GruppenübungABBILDUNG 2.1.: Beispiel <strong>zur</strong> Rekursion1 Die Darstellung als Baum ist natürlich nur ver<strong>ein</strong>fachend, da sich z.B. Veranstaltungen Unterveranstaltungen teilenkönnen, d.h. <strong>ein</strong>e Darstellung als allgem<strong>ein</strong>er gerichteter Graph wäre zutreffend. Aus Gründen der besseren Darstellungwird hier allerdings darauf verzichtet.12


2.1. ModellierungskonzepteDie Lösung, um die Hierarchie von Veranstaltungen offen zu halten, liegt auf der Hand: Veranstaltungenwerden rekursiv definiert.Das heißt, <strong>ein</strong>e Veranstaltung (also <strong>ein</strong>e ”<strong>Lehr</strong><strong>ein</strong>heit“) wird dahingehend modelliert, daß sie weitere<strong>Lehr</strong><strong>ein</strong>heiten enthalten kann, die wiederum weitere <strong>Lehr</strong><strong>ein</strong>heiten enthalten können <strong>und</strong> so fort.Damit wird im Datenmodell die Tiefe <strong>und</strong> Breite des Baumes offen gehalten. Nötige Strukturierungsknotenwie z.B. die rechte Übung im Beispiel, sind ganz <strong>ein</strong>fach ebenfalls <strong>Lehr</strong><strong>ein</strong>heiten.Das durch Rekursion gelöste Problem der zu strukturierenden Veranstaltungen ist k<strong>ein</strong> Sonderfall.All<strong>ein</strong>e im hier vorgestellten Datenmodell kommt <strong>ein</strong> weiterer Anwendungsfall hinzu: die bereitskurz angesprochenen ”Verwaltungs<strong>ein</strong>heiten“, die ebenfalls rekursiv definiert sind.Und auch in der gegenwärtige Entwicklung der Verwaltungsdaten für den <strong>Lehr</strong>- <strong>und</strong> Forschungsbetriebzeichnet sich ab, daß für die Darstellung von Projekten ebenfalls <strong>ein</strong>e rekursive Darstellung amgünstigsten ist.2.1.3. Vererbung/VerschattungDurch die Rekursion der Datenobjekte kann es zu ziemlich langen Ästen kommen.Betrachtet man das Beispiel in Abbildung 2.2, so wird offensichtlich, daß es ziemlich fehlerträchtigwäre, in jeder der <strong>Lehr</strong><strong>ein</strong>heiten auf dem dargestellten Ast festzuhalten, daß es sich um <strong>ein</strong>e <strong>Lehr</strong><strong>ein</strong>heitim ”Sommersemester 2002“ des ”Instituts für Informatik“ handelt.Veranstaltungen desInstitut für Informatik...Veranstaltungen imInformatik-Gr<strong>und</strong>studium... Vorlesungen... Informatik I... Übungen... Übung 1ABBILDUNG 2.2.: Beispiel <strong>zur</strong> Vererbung/VerschattungAus diesem Gr<strong>und</strong> wurde <strong>ein</strong>e Vererbung auf Datenebene, bzw. <strong>ein</strong>e Verschattung von Daten <strong>ein</strong>geführt.Somit muß in dem Beispiel das Semester nur noch in der obersten <strong>Lehr</strong><strong>ein</strong>heit ”Veranstaltungendes Instituts für Informatik“ erfaßt werden <strong>und</strong> wird an alle darunterliegenden <strong>Lehr</strong><strong>ein</strong>heiten” vererbt“.Verschattung, also der Vorrang von Definitionen an tieferen Stellen in der Hierarchie vor Definitionen,die aus höheren Hierarchiestufen vererbt werden, tritt ebenfalls auf. Zum Beispiel ist <strong>ein</strong>e Raumvergabestellefür das Gebäude ”Oettingenstraße 67“ spezifiziert, die an alle Räume des Gebäudes vererbtwird. Für den Besprechungsraum <strong>ein</strong>er <strong>Lehr</strong>- <strong>und</strong> Forschungs<strong>ein</strong>heit ist allerdings das Sekretariatdieser <strong>Lehr</strong>- <strong>und</strong> Forschungs<strong>ein</strong>heit als Raumvergabestelle angegeben. Diese Angabe verschattet die<strong>Spezifikation</strong>, die vom Gebäude an den Raum vererbt würde.13


2. Das Datenmodell der <strong>Lehr</strong>angebots-Verwaltungsdaten – Besonderheiten2.2. Weitere KonzepteNeben diesen allgem<strong>ein</strong>en Konzepten wurden noch <strong>ein</strong>ige speziellere Konzepte verwendet. Die Verwendungmehrerer Bezeichner bzw. Texte, abhängig vom Ausgabezweck <strong>und</strong> der Landessprache, ist<strong>ein</strong>es davon, die Strukturierung der <strong>Lehr</strong><strong>ein</strong>heiten <strong>ein</strong> anderes.2.2.1. Mehrere Bezeichnungen, VielsprachigkeitDie Präsentationen, die aus den <strong>Lehr</strong>angebotsdaten erstellt werden sollen, unterscheiden sich zumTeil sehr stark. Es gibt sehr ausführliche Veranstaltungslisten <strong>und</strong> es gibt Übersichtsst<strong>und</strong>enpläne,auf denen nur wenig Platz für jede Veranstaltung ist. In diesem zweiten Fall ist <strong>ein</strong>e Kürzung derBezeichnungen von Veranstaltungen, Personen oder Gebäuden unumgänglich.Dafür gibt es prinzipiell zwei Vorgehensweisen: entweder wird die Kürzung bei der Erzeugung derPräsentation durch <strong>ein</strong>en Algorithmus vorgenommen oder es wird bereits <strong>ein</strong> verkürzter Text hinterlegt<strong>und</strong> bei Bedarf darauf <strong>zur</strong>ückgegriffen.Da die Vorgehensweise mittels <strong>ein</strong>es Algorithmus recht fehleranfällig ist <strong>und</strong> sowieso <strong>ein</strong>e Möglichkeit<strong>zur</strong> Hinterlegung von Ausnahmen bedingen würde, wurde im Datenmodell gleich die Möglichkeitmodelliert, mehrere Bezeichner, die anhand <strong>ein</strong>er Markierung ( ”kurz“, ”lang“ etc.) unterschieden werdenkönnen, zu hinterlegen.In die gleiche Kategorie fällt die Verwendung von unterschiedlichen Bezeichnern für unterschiedlicheLandessprachen. Dies wurde mit dem gleichen Mechanismus gelöst: <strong>ein</strong>e weitere Markierungbezeichnet die Landessprache des Bezeichners (“de“, ”en“ etc.).Über Selektoren, die entweder fest in den Transformationen für die Präsentationen vorgegeben sind(wie die Verwendung <strong>ein</strong>er Kurz- oder Langform), oder über Parameter <strong>ein</strong>gestellt werden können(wie die Landessprache der Präsentation), kann bei der Erstellung der Präsentationen auf die passendenBezeichner zugegriffen werden.2.2.2. Strukturbaum der möglichen <strong>Lehr</strong><strong>ein</strong>heitenDie in den Abschnitten <strong>zur</strong> Abstraktion <strong>und</strong> Rekursion <strong>ein</strong>geführten Bäume aus <strong>Lehr</strong><strong>ein</strong>heiten“ sind”zwar ohne Frage syntaktisch stark strukturiert, was die Semantik der beschriebenen <strong>Lehr</strong><strong>ein</strong>heiten angeht,fehlt den Bäumen allerdings <strong>ein</strong>e Strukturierung: Einer <strong>Lehr</strong><strong>ein</strong>heit ist nicht anzusehen, welcherEbene von <strong>Lehr</strong><strong>ein</strong>heiten sie zuzuordnen ist, also ob sie z.B. in die Ebene der Veranstaltungen <strong>ein</strong>zuordnenist oder ob sie <strong>ein</strong>e Übung <strong>ein</strong>er Veranstaltung ist; an ihrer Bezeichnung kann man es auf jedenFall nicht erkennen, da Veranstaltungen oft sehr unterschiedlich bezeichnet werden (“Informatik 1“,Praktikum XML“, . . . ) <strong>und</strong> Übungen oft gar k<strong>ein</strong>e Bezeichnung besitzen.”Was fehlt, ist <strong>ein</strong>e Typisierung von <strong>Lehr</strong><strong>ein</strong>heiten, die allerdings nicht durch das Datenmodell vorgegebenist, sondern in den Daten formuliert wird. Ansonsten gäbe es ja sofort wieder die Probleme, diemit den Konzepten der Abstraktion <strong>und</strong> Rekursion eigentlich beseitigt werden sollten.Um nun in den Baum der <strong>Lehr</strong><strong>ein</strong>heiten <strong>ein</strong>e vorgegebene Struktur zu bringen, wird analog zu der<strong>Lehr</strong><strong>ein</strong>heit <strong>ein</strong> <strong>Lehr</strong><strong>ein</strong>heitstyp definiert, dessen Definition ebenfalls rekursiv ist. Jeder <strong>Lehr</strong><strong>ein</strong>heitwird genau <strong>ein</strong> solcher <strong>Lehr</strong><strong>ein</strong>heitstyp zugewiesen, dadurch kann sie <strong>ein</strong>deutig <strong>ein</strong>em Knoten in demBaum der <strong>Lehr</strong><strong>ein</strong>heitstypen zugeordnet werden. Zur Illustration siehe Abbildung 2.3. Das Fettge-14


2.3. Definition von Begriffen <strong>zur</strong> Zeitdruckte bezeichnet darin beispielhafte <strong>Lehr</strong><strong>ein</strong>heitstypen, darunter steht in Klammern <strong>ein</strong>e möglicheentsprechende <strong>Lehr</strong><strong>ein</strong>heit.Der Vorteil dieser Struktur zeigt sich, sobald man zum Beispiel Veranstaltungslisten ausgeben möchte:Anhand <strong>ein</strong>es Präorderdurchlaufs durch <strong>ein</strong>en <strong>Lehr</strong><strong>ein</strong>heitstypen-Baum können alle entsprechendenVeranstaltungen geordnet ausgegeben werden.Studiengang Informatik<strong>Lehr</strong>veranstaltungenim Gr<strong>und</strong>studium<strong>Lehr</strong>veranstaltungenim HauptstudiumVorlesung( ”Informatik 1“)Praktikum( ”SystempraktikumMo 10–14 (n.V.)“)Proseminar( ”Informatik ProseminarFr 9-11, HS127“)Vorlesung( ”Markup-Sprachen“)Hauptseminar(’Hauptseminar Client-Server-Programmierung. . .“)Vorlesung( ”Vorlesung Di 10–12,Do 10–12, The/122“)Übung( ” Übungen Mi 10-12,1.05 . . .“)Rechnerübung( ”RechnerübungMi 8-10, Z7“)Vorlesung( ”Vorlesung Do 14–16,HS127“)Übung( ” Übung Do 16-18,HS138“)ABBILDUNG 2.3.: Beispiel zum <strong>Lehr</strong><strong>ein</strong>heitstyp2.2.3. Metadaten für die DatenbearbeitungDieses Konzept hat zwar k<strong>ein</strong>e Bedeutung für die vorliegende Arbeit, soll aber trotzdem an dieserStelle genannt werden: Für die Unterstützung des Workflows der Datenbearbeitung, mit der die Datenquelleerstellt wird, müssen zum Teil Informationen über den Zustand von Daten oder Bearbeitungsprozessenzusätzlich zu den Daten erfaßt werden können. Beispielsweise ist das die Information,daß <strong>ein</strong> spezielles Datum bereit telefonisch angefordert wurde <strong>und</strong> demnächst von <strong>ein</strong>er bestimmtenPerson per E-Mail zugeschickt wird. Oder daß <strong>ein</strong> Datum noch geprüft werden muß usw..Das Datenmodell sieht entsprechende Elemente für diese Metainformationen vor.2.3. Definition von Begriffen <strong>zur</strong> ZeitGerade bei der <strong>Lehr</strong>angebotsverwaltung, in der sich sehr viel um Zeitenplanung dreht, spielen exakteBegrifflichkeiten <strong>zur</strong> Zeit <strong>ein</strong>e große Rolle. Im Datenmodell wurden <strong>ein</strong>e Reihe von Begriffen <strong>zur</strong> Zeitdefiniert.Datum Ein Datum im ISO-Format DD.MM.YYYY.Uhrzeit Eine Uhrzeit im ISO-Format hh:mm.Wochentag Die textuelle Bezeichnung <strong>ein</strong>es Tages, also Montag, Dienstag, usw.Zeit<strong>ein</strong>heit Die Einheit, in der die Zeit gemessen wird: sec, min, h, d, w, m, y, semester.Zeitzusatz Der im akademischen Bereich gebräuchliche Zusatz, um den Beginn <strong>ein</strong>er Veranstaltung(nicht) zu verschieben, also ct um sie um ”viertel nach“ stattfinden zu lassen, st um siepünktlich zu der angegebenen Uhrzeit stattfinden zu lassen.15


2. Das Datenmodell der <strong>Lehr</strong>angebots-Verwaltungsdaten – BesonderheitenZeitpunkt Eine Zeitangabe mit Datum <strong>und</strong> Uhrzeit.Zeitintervall Zwei Zeitangaben für Start <strong>und</strong> Ende, jeweils mit Datum <strong>und</strong> Uhrzeit.Dauer Numerische Dauer mit Angabe der Zeit<strong>ein</strong>heit.Turnus Die regelmäßige Wiederholung <strong>ein</strong>es Ereignisses in <strong>ein</strong>em bestimmten Abstand von Zeit<strong>ein</strong>heitenVorkommen Die intensionale oder extensionale Beschreibung <strong>ein</strong>er Menge von Zeitpunkten oderZeitintervallen, die auch die Angabe von Ausschlüssen, wiederum in Form von Vorkommen,erlaubt.Veranstaltungszeit Die im Universitätsumfeld gebräuchliche Notation, um zu beschreiben, wann<strong>ein</strong>e Veranstaltung stattfindet. Sie bestehtaus <strong>ein</strong>em Wochentag, zu dem die Veranstaltung das Semester über stattfindet, <strong>ein</strong>er Startuhrzeit,die noch mit <strong>ein</strong>em Zeitzusatz versehen werden kann, <strong>ein</strong>er Enduhrzeit <strong>und</strong> demVorkommen der <strong>ein</strong>zelnen Sitzungen oderlediglich aus <strong>ein</strong>er Dauer <strong>und</strong> dem Vorkommen der <strong>ein</strong>zelnen SitzungenZusätzlich können über Bemerkungen noch individuelle Vermerke (wie z.B. ”nach Ver<strong>ein</strong>barung“)hinterlegt werden.16


Prozeßschritt ... Prozeßschritt¡Prozessor ... Prozessor¡3. Präsentations-Erzeugungsprozeß3.1. ÜberblickDiese Arbeit beschäftigt sich mit der Erstellung von Präsentationen aus den <strong>Lehr</strong>angebots-Verwaltungsdaten<strong>ein</strong>es Instituts, wobei sowohl die Daten als auch die Präsentationen häufigen <strong>und</strong> nichtvorhersehbaren Änderungen unterliegen.Der Prozeß, der aus den Verwaltungsdaten Präsentationen erstellt, wird in dieser Arbeit mit Präsentations-Erzeugungsprozeßbezeichnet. Er wird im Folgenden vorgestellt.Um den ganzen Präsentations-Erzeugungsprozeß zu strukturieren <strong>und</strong> um in Zukunft an dem Systembesser Anpassungen vornehmen zu können, wurde der Prozeß zunächst in drei Abschnitte unterteilt:Daten <strong>Layout</strong> StyleABBILDUNG 3.1.: Unterteilung des Prozesses in ProzeßabschnitteDatenquellePräsentationDie Bedeutung <strong>und</strong> Abgrenzung der drei Abschnitte wird weiter unten erkärt. An dieser Stelle geht eszunächst nur um die Strukturierungsprinzipien.Die <strong>ein</strong>zelnen Abschnitte wurden jeweils weiter in Prozeßschritte unterteilt, in denen beliebig vieleProzessoren die Daten entgegennehmen, bearbeiten <strong>und</strong> weitergeben.EingabeAusgabeABBILDUNG 3.2.: Unterteilung <strong>ein</strong>es Prozeßabschnittes in ProzeßschritteEingabeAusgabeABBILDUNG 3.3.: Unterteilung <strong>ein</strong>es Prozeßschrittes in ProzessorenDie Prozeßschritte dienen dabei – genau wie die Prozeßabschnitte – nur der logischen Gliederung, dieDatenverarbeitung findet <strong>ein</strong>zig <strong>und</strong> all<strong>ein</strong> auf der Ebene der Prozessoren statt.17


3. Präsentations-Erzeugungsprozeß3.1.1. DatenquelleUm den Präsentations-Erzeugungsprozeß nicht auf die Verarbeitung von Daten zu beschränken, die inForm von XML-Dokumenten vorliegen, wird der Begriff der Datenquelle <strong>ein</strong>geführt. Er abstrahiertdie Form der Datenhaltung, die neben XML-Dokumenten nun auch <strong>ein</strong>e relationale Datenbank, <strong>ein</strong>Dateisystem o.a. s<strong>ein</strong> kann.Da der Präsentations-Erzeugungsprozeß als internes Datenformat XML-Dokumente verwendet, müssendie Daten, die aus der Datenquelle kommen, zu Beginn des Prozesses über <strong>ein</strong>e Schnittstelle in<strong>ein</strong> XML-Dokument transformiert werden.Dies wird von dem allerersten Prozessor, im weiteren Datenschnittstelle genannt, erledigt. Ist dieForm der Datenquelle bereits XML, so ist die Datenschnittstelle trivial.3.1.2. PräsentationFür die Ausgaben des Präsentations-Erzeugungsprozesses wird der Begriff der Präsentation <strong>ein</strong>geführt.Der Begriff beschränkt sich nicht auf die gedruckte Darstellung oder <strong>ein</strong>e Anzeige am Bildschirm,sondern faßt alle möglichen Darstellungsformen (also auch gesprochene o.a.) <strong>und</strong> deren jeweiligenBeschreibungssprachen zusammen. Eine mögliche Präsentation wäre also z.B. <strong>ein</strong> tabellarischerSt<strong>und</strong>enplan, der in L A TEX formuliert ist.Die Präsentation ist naheliegender Weise die Ausgabe des letzten Prozessors.Logisch eigenständige Bestandteile <strong>ein</strong>er Präsentation werden als Inhalte <strong>ein</strong>er Präsentation bezeichnet.Damit sind Bestandteile gem<strong>ein</strong>t, deren Anordnung innerhalb von Präsentationen in gewissemMaße von<strong>ein</strong>ander unabhängig ist (wie z.B. <strong>ein</strong>e Überschrift, <strong>ein</strong>e Veranstaltungsliste <strong>und</strong> <strong>ein</strong>e Bemerkung,die in verschiedensten Reihenfolgen in der Präsentation ersch<strong>ein</strong>en können, also erst dieÜberschrift, dann die Bemerkung, dann die Veranstaltungsliste oder erst die Überschrift, dann dieVeranstaltungsliste, dann die Bemerkung usw.).Für den Ausdruck Beschreibungssprache <strong>ein</strong>er Präsentation wird im weiteren Text das SynonymZielsprache verwendet.3.1.3. ProzessorenDie Prozessoren sind Einheiten, die <strong>ein</strong>e Eingabe in <strong>ein</strong>e Ausgabe transformieren. Ihre Eingabe ist (mitAusnahme des ersten Prozessors, dessen Eingabe die Datenquelle ist, die <strong>ein</strong>e andere Form als XMLhaben kann) immer <strong>ein</strong> XML-Dokument, ihre Ausgabe ist (mit Ausnahme des letzten Prozessors,dessen Ausgabe in der jeweiligen Zielsprache formuliert ist) ebenfalls wieder <strong>ein</strong> XML-Dokument,das als Eingabe für den nächsten Prozessor dient.In Kapitel 3.3 wird das Konzept des <strong>Layout</strong>baums <strong>ein</strong>geführt. Diese spezielle Klasse von XML-Dokumenten ist ab dem zweiten Prozeßabschnitt (dem <strong>Layout</strong>) durchgängig bis zum Schluß dieStruktur, in der die Daten gehalten werden, wodurch <strong>ein</strong>e <strong>ein</strong>heitliche Schnittstelle zwischen denProzessoren gegeben ist.Durch die <strong>ein</strong>heitliche Schnittstelle der Prozessoren können bei <strong>ein</strong>er Änderung der Anforderungenan das System <strong>ein</strong>fach die entsprechenden Prozessoren geändert bzw. neue Prozessoren hinzugefügtwerden.18


3.1. ÜberblickIst für die XML-Dokumente, die als Ausgaben der Prozessoren entstehen, jeweils <strong>ein</strong>e DTD vorhanden,so kann die korrekte Arbeitsweise der <strong>ein</strong>zelnen Prozessoren validiert werden. Dies kann bei derFehlersuche <strong>und</strong> -behebung sehr von Vorteil s<strong>ein</strong>, da der Fehler schnell lokalisiert werden kann.Die in diesem Kapitel vorgestellten Prozessoren sind k<strong>ein</strong>eswegs vollständig, sondern sollen nurLösungen für typische Problemstellungen zeigen. Durch die offene Struktur des Präsentations-Erzeugungsprozessesist jedoch <strong>ein</strong> problemloses Hinzufügen oder Ändern von Prozessoren möglich.3.1.4. ProzeßschritteDie Einteilung in Prozeßschritte hängt von der Struktur der internen XML-Dokumente (also denXML-Dokumenten, auf denen die Prozessoren ihre Transformationen durchführen) ab. Im Allgem<strong>ein</strong>enlassen sich die meisten Prozeßabschnitte in drei Prozeßschritte <strong>ein</strong>teilen: Die Generierung derjeweiligen Struktur, deren Aufbereitung <strong>und</strong> die Generierung der Ausgabe des Prozeßabschnitts.Jeder Prozeßschritt enthält dafür <strong>ein</strong>e beliebige Anzahl von Prozessoren, die Transformationen aufder Struktur durchführen.3.1.5. Prozeßabschnitte3.1.5.1. Abgrenzung von Daten <strong>und</strong> <strong>Layout</strong>Eine Abgrenzung der Datenquelle <strong>und</strong> der intern verwendeten Daten wurde in Abschnitt 3.1.1 vorgenommen.Wenn in dieser Arbeit von Daten gesprochen wird, sind immer die intern verwendetenDaten, also das von der Datenschnittstelle generierte XML-Dokument oder durch Transformationendaraus erzeugte XML-Dokumente gem<strong>ein</strong>t.In dieser Arbeit wird <strong>ein</strong> <strong>Ansatz</strong> <strong>ein</strong>geführt, bei dem die Daten nicht sofort in <strong>ein</strong>e Präsentation transformiertwerden, sondern zunächst <strong>ein</strong> Zwischenformat erzeugt wird, bei dem jedoch die Semantikder Daten nicht verloren geht: Dieses Zwischenformat ist der <strong>Layout</strong>baum. In ihm können sogenannte<strong>Layout</strong>-Objekte definiert werden.<strong>Layout</strong>-Objekte beschreiben entweder ganze Präsentationen oder Inhalte von Präsentationen.Anders ausgedrückt bedeutet dies, daß sich mit dem Wechsel vom Abschnitt Daten zum Abschnitt<strong>Layout</strong> der beschriebene Weltausschnitt ändert: im Abschnitt Daten werden die zugr<strong>und</strong>egelegtenAnwendungsfälle beschrieben, also in der vorliegenden Arbeit die Verwaltung des <strong>Lehr</strong>angebots. ImAbschnitt <strong>Layout</strong> werden Bestandteile von Präsentationen dieser Anwendungsfälle beschrieben.Die Gründe <strong>und</strong> die Vorteile dieser Vorgehensweise werden in Abschnitt 3.3 ausführlich dargelegt.3.1.5.2. Abgrenzung von <strong>Layout</strong> <strong>und</strong> StyleDie Abgrenzung der Begriffe <strong>Layout</strong> <strong>und</strong> Style, die hier vorgenommen wird, basiert auf <strong>ein</strong>em Untersuchungsgegenstandder Diplomarbeit von Michael Kraus [18], in der er schreibt:The style model defines how to render data items, the layout model defines where to put”them.“ 11 Siehe [18], Seite 1719


3. Präsentations-ErzeugungsprozeßDabei beschränken sich s<strong>ein</strong>e Aussagen über <strong>Layout</strong> <strong>und</strong> Style nicht nur auf die zweidimensionalegedruckte Präsentation, bzw. den zweidimensionalen Bildschirmaufbau, sondern sind viel allgem<strong>ein</strong>ergehalten:<strong>Layout</strong> is not always a spatial problem: In the case of aural rendering, for example, the”layout model has to decide when to render a certain element, that is the order of elementsas well as pauses between them.<strong>Layout</strong> also has to deal with a varying number of dimensions: Monoaural rendering isone-dimensional, rendering on paper is two-dimensional, but has to deal with paginationissues, and rendering on a computer screen is three-dimensional, as a theoreticallyunlimited number of windows offers a third dimension.“ 2Zur Veranschaulichung sollen die (fiktiven) Beispiele in Abbildung 3.4 betrachtet werden. Offensichtlichwerden in den beiden Beispielen die selben Daten zugr<strong>und</strong>egelegt, wobei diese aber mit zweiunterschiedlichen <strong>Layout</strong>s ausgegeben werden:Beispiel 1 stellt die Informationen als <strong>ein</strong>e Auflistung von Veranstaltungen dar, zu denen jeweilsalle zugehörigen Sitzungen (Vorlesungen, Übungen) angegeben sind.Die <strong>Layout</strong>-Objekte sind folgendermaßen angeordnet: Unter dem Titel der Präsentation stehtdie Veranstaltungsart, darunter die Veranstaltungsbezeichnung <strong>und</strong> die Dozenten, von<strong>ein</strong>andergetrennt durch die Zeichenfolge ” – ” usw..Style-Informationen sind in Beispiel 1 unter anderem, daß die Überschriften größere Schriftarten<strong>und</strong> Fettdruck verwenden, die Sitzungen etwas <strong>ein</strong>gerückt sind <strong>und</strong> die Zeilenabstände vor<strong>und</strong> nach den Überschriften <strong>und</strong> nach der URL etwas größer sind.Beispiel 2 faßt die <strong>ein</strong>zelnen Sitzungen nicht auf diese Weise zusammen, sondern stellt sie<strong>ein</strong>zeln in <strong>ein</strong>em Tabellenraster dar.Die <strong>Layout</strong>-Objekte sind folgendermaßen angeordnet: In <strong>ein</strong>er Tabelle steht in der ersten Zeileder Titel der Präsentation, darunter steht <strong>ein</strong>e Zeile mit statischem Text ”Mo”, ”Di”, . . . In derersten Spalte stehen jeweils die statischen Texte der Anfangs- <strong>und</strong> Endest<strong>und</strong>en, getrennt durchdie Zeichenfolge ” – ”. Die Veranstaltungen stehen jeweils in <strong>ein</strong>er Zelle der Tabelle; unter derVeranstaltungsbezeichnung steht der erste Dozent <strong>und</strong> der Veranstaltungsort, getrennt durch dieZeichenfolge ”, ” usw..In Beispiel 2 sind Style-Informationen z.B., daß der Präsentationstitel fett gedruckt ist <strong>und</strong> dieZeiten rechtsbündig ausgegeben werden.Was ebenfalls deutlich wird, ist, daß die beiden Beispiele unterschiedliche Teilmengen der Daten verwenden.Beispiel 1 zeigt z.B. <strong>ein</strong>e lange Veranstaltungsbezeichnung, den vollen Namen des Dozenten<strong>und</strong> die URL. Beispiel 2 verwendet jeweils <strong>ein</strong>e kurze Bezeichnung <strong>und</strong> zeigt k<strong>ein</strong>e URL.Hier ist der Übergang von <strong>Layout</strong> zu Style fließend: Die Entscheidung, ob etwas angezeigt wird odernicht, gehört in den Bereich Style, die Entscheidung was <strong>und</strong> wo es angezeigt wird, in den Bereich<strong>Layout</strong>.In Abschnitt 3.2.3 wird der Begriff des <strong>Layout</strong>s noch <strong>ein</strong>mal untersucht <strong>und</strong> <strong>ein</strong> weiterer Begriff<strong>ein</strong>geführt werden: die <strong>Layout</strong>klassen, mit denen ähnliche <strong>Layout</strong>s zusammengefaßt werden können.2 Siehe [18], Seite 1820


3.1. Überblick<strong>Lehr</strong>veranstaltungen des Informatik-StudiumsVorlesungenInformatik 1 – Prof. François Bry, Prof. Ohlbachhttp://www.pms.informatik.uni-muenchen.de/lehre/info1/00ss/Vorlesung4-stündigDienstag, 10:00–12:00, Donnerstag, 10:00–12:00, The/122Übung2-stündigMittwoch, 10:00–12:00, 1.05PraktikaPraktikum ”XML <strong>und</strong> E-Commerce“ – Prof. François Bryhttp://www.pms.informatik.uni-muenchen.de/lehre/xmlprakt/00ss/4-stündigMontag, 9:00–13:00, Z7(a) Beispiel 1<strong>Lehr</strong>veranstaltungen des Informatik-StudiumsZeit Mo Di Mi Do Fr8 – 99 – 10 Prakt. XML10 – 11 Bry, Z7 Info 1 Übung Info 1 Info 111 – 12 Bry, The/122 Eisinger, 1.05 Bry, The/12212 – 1313 – 14(b) Beispiel 2ABBILDUNG 3.4.: Beispiele zu <strong>Layout</strong> vs. Style21


3. Präsentations-Erzeugungsprozeß3.1.6. Gesamter ProzeßAbbildung 3.5 gibt <strong>ein</strong>en Überblick über den beschriebenen Prozeß:DatenDatenquelleDatenschnittstelleAufbereitungBildung von<strong>Layout</strong>−Klassen<strong>Layout</strong>Generierung des<strong>Layout</strong>baumsAufbereitungStyleTemplate−mechanismusAufbereitungSerialisierungPräsentationABBILDUNG 3.5.: Übersicht über den gesamten Präsentations-ErzeugungsprozeßAuf den folgenden Seiten wird auf die drei Abschnitte des Präsentations-Erzeugungsprozesses näher<strong>ein</strong>gegangen.22


3.2. Daten3.2. DatenAm Anfang des Prozesses findet der Zugriff auf die Datenquelle statt. Die Datenquelle besitzt <strong>ein</strong>beliebiges Format (z.B. bereits XML-Format, ist aber möglicherweise auch <strong>ein</strong>e relationale Datenbanko.a.); eventuell muß zunächst <strong>ein</strong>e Transformation in das XML-Format erfolgen.Daraufhin werden die Daten aufbereitet. Z.B. können Werte materialisiert werden, die nur in Formvon Ausdrücken, Verweisen o.a. vorhanden sind.Zuletzt werden die Daten in unterschiedliche <strong>Layout</strong>klassen transformiert <strong>und</strong> sortiert.3.2.1. DatenschnittstelleDie Datenschnittstelle nimmt <strong>ein</strong>e sehr wichtige Rolle <strong>ein</strong>, da sie verantwortlich ist für die Flexibilitätdes Systems bezüglich der Form der Datenhaltung <strong>und</strong> somit auch für <strong>ein</strong>e <strong>ein</strong>fache Skalierung desgesamten Systems.In der gegenwärtigen Situation ist für die Datenhaltung des in dieser Arbeit beschriebenen Systems <strong>ein</strong>e<strong>ein</strong>zelne XML-Datei völlig ausreichend. Doch sind schon Diskussionen im Gange, <strong>ein</strong>en größerenTeil der Verwaltungsdaten als nur die des <strong>Lehr</strong>angebots, zu integrieren 3 . Aus Gründen der Effizienz<strong>und</strong> der Ermöglichung <strong>ein</strong>es verteilten Zugriffes wäre dann möglicherweise die Speicherung der Datenin <strong>ein</strong>em gem<strong>ein</strong>samen (oder auch verteilten) Datenbanksystem nötig.Durch den Einsatz <strong>ein</strong>es Prozessors, der als Datenschnittstelle fungiert, beschränkt sich der Änderungsaufwandbei <strong>ein</strong>em Wechsel der Art der Datenhaltung auf die Anpassung oder den Austauschdieses Prozessors. Alle weiter hinten liegenden Prozessoren bleiben unbe<strong>ein</strong>flußt.3.2.1.1. Mögliche DatenbanksystemePrinzipiell sind für die Datenhaltung alle möglichen Datenbanksysteme <strong>und</strong> Dateisysteme geeignet.Allerdings kann es vorkommen, daß, wenn <strong>ein</strong> anderes Datenmodell als XML verwendet wird, mancheKonstrukte, die in XML sehr natürlich ersch<strong>ein</strong>en, nur umständlich zu formulieren sind, z.B.Rekursion <strong>und</strong> Alternativen. (Der umgekehrte Fall, also die schwierige Umsetzung von Konstruktendes Datenmodells in XML-Konstrukte, ist natürlich ebenfalls möglich.)Gr<strong>und</strong>sätzlich hängt die Einsetzbarkeit <strong>ein</strong>es bestimmten Datenhaltungssystems nur von der Verfügbarkeit<strong>ein</strong>es passenden Prozessors ab, der die Daten nach XML transformiert.Sollte für den hier gegebenen Anwendungsfall <strong>ein</strong> Datenbanksystem <strong>ein</strong>gesetzt werden, so sprächenfür <strong>ein</strong> relationales System die ausgereiften <strong>und</strong> schnellen Datenbanksysteme, die auf dem Marktsind. Die Datenbanksysteme, die nativ XML verwenden (u.a. [2, 12, 24]), sind <strong>zur</strong> Zeit noch nichtganz ausgereift <strong>und</strong> auch noch recht spärlich gesät. Erfahrungsberichte finden sich in [17, 19].Für den Einsatz von XML-Dokumenten hingegen sprächen die gegenwärtigen Prämissen, die Datentextuell bearbeiten zu können, <strong>ein</strong> <strong>ein</strong>heitliches Austauschformat zu haben <strong>und</strong> auch die Möglichkeit,gezielt Abweichungen vom vorgegebenen Datenmodell zulassen zu können.Da jedoch die Datenmengen, die bei der St<strong>und</strong>enplanerstellung momentan anfallen, nicht besondersgroß sind <strong>und</strong> auch verteilter Zugriff <strong>und</strong> verteilte Datenmanipulation im Moment (noch) k<strong>ein</strong> Thema3 PMSWeb-Taskforce, 2001/02; LFE PMS, LMU München23


3. Präsentations-Erzeugungsprozeßsind, spielen derzeit die Vorzüge <strong>ein</strong>es Datenbanksystems wie Transaktionskonzepte, Synchronisation,Error-Recovery, Persistenz u.a. k<strong>ein</strong>e bedeutende Rolle. Somit gibt es <strong>zur</strong> Zeit k<strong>ein</strong>e Notwendigkeit<strong>ein</strong>es Datenbanksystems.Auf Gr<strong>und</strong> dessen fiel für diese Arbeit die Wahl auf den Einsatz von XML-Dokumenten <strong>zur</strong> Datenhaltung.3.2.1.2. SonderzeichenproblematikNeben der r<strong>ein</strong>en Transformation von Datenfeldern in XML-Elemente <strong>und</strong> -Attribute gibt es noch <strong>ein</strong>sehr spezielles Problem <strong>und</strong> zwar der Einsatz von Sonderzeichen (z.B. Umlaute, aber auch mathematischeSymbole). So wird z.B. das Zeichen ç“ des Namens François in L ” A TEX mit dem Ausdruck” \c{c}“ dargestellt, in HTML mit ” &ccedil;“ oder &#231;“ usw.. Da ja später Präsentationen”in unterschiedlichen Beschreibungssprachen erstellt werden sollen, ist es nicht vermeidbar, daß dieseZeichen in <strong>ein</strong>er generischen Form vorliegen müssen, die am Schluß in die entsprechende Beschreibungsspracheübersetzt werden kann. Diese generische Form kann sich an Standards orientieren, z.B.der UTF-8-Codierung für Unicode oder den Entities von HTML.Natürlich sind Werkzeuge wünschenswert, die bei der Datenerfassung, also bei der Erstellung derDatenquelle, die Erzeugung dieser generischen Form unterstützen. Diese Arbeit geht aber von <strong>ein</strong>erbereits erstellten Datenquelle aus <strong>und</strong> geht deshalb nicht weiter auf solche Werkzeuge <strong>ein</strong>.Was in dieser Arbeit allerdings untersucht wird ist <strong>ein</strong>e Biliothek von generischen Ausdrücken, diefür die Sonderzeichen stehen. Mehr dazu in den Abschnitten 4.3.4 <strong>und</strong> 5.2.3.2.2. Aufbereitung der DatenLiegen die Daten nun in XML vor, so können allgem<strong>ein</strong>e, noch nicht präsentationsspezifische, Transformationendurchgeführt werden. Hauptsächlich sind das Materialisierungen von Daten, die aus Effizienzgründenan dieser Stelle <strong>ein</strong> <strong>ein</strong>ziges Mal durchgeführt werden.3.2.2.1. Materialisierung von DatenBei der Materialisierung werden Daten, die nur intensional in Form von bestimmten Regeln vorliegen,extensional in der Datenstruktur erzeugt. Danach ersch<strong>ein</strong>en sie, wie alle anderen Daten, als Elemente,Attribute o.ä.. Oft ist die Frage, ob Daten materialisiert werden sollen (oder nicht), <strong>ein</strong> Abwägen zwischenZeit- <strong>und</strong> Speicherplatzbedarf. Denn natürlich kann durch entsprechende Regeln <strong>ein</strong> sehr großerDatenumfang beschrieben werden (z.B. die Regel, daß <strong>ein</strong> Element namens ”“die Unterelemente ”“ mit den aufsteigend geordneten Werten sämtlicher natürlicherZahlen b<strong>ein</strong>halten soll).In dieser Arbeit wird die Materialisierung für zwei Aufgaben <strong>ein</strong>gesetzt: das Auflösen von Referenzen<strong>und</strong> die Anwendung von Vererbungsregeln.3.2.2.1.1. Auflösen von Referenzen Um Red<strong>und</strong>anzen (<strong>und</strong> damit verb<strong>und</strong>ene mögliche Inkonsistenzen)zu vermeiden, macht das Datenmodell dieser Arbeit regen Gebrauch von Referenzenmit ID <strong>und</strong> IDREF. Damit die späteren Transformationsprozesse <strong>ein</strong>facher gehalten werden können,werden diese Referenzen hier aufgelöst.24


3.2. DatenDas Auflösen der Referenzen geschieht folgendermaßen:1. Suchen des über IDREF referenzierten Elements mit der entsprechenden ID <strong>und</strong>, falls es vorhandenist,2. Kopieren des referenzierten Elements an die Stelle der Referenz (das referenzierende Elementselber verschwindet) <strong>und</strong>3. Kopieren etwaiger Attribute des referenzierenden Elementes in das kopierte Element.Zu beachten ist bei diesem Vorgehen, daß das Dokument nach dem Auflösen der Referenzen nichtmehr der ursprünglichen DTD entspricht. Allerdings erfordert b<strong>ein</strong>ahe jede der noch folgenden Transformationen<strong>ein</strong>e eigene DTD, will man das entstandene Dokument validieren.3.2.2.1.2. Vererbungsregeln anwenden Ebenfalls aus dem Gr<strong>und</strong>e der Red<strong>und</strong>anzvermeidungwurde <strong>ein</strong>e Vererbung auf Datenebene <strong>ein</strong>geführt, die durch Regeln beschrieben wird. Dabei sindAbhängigkeiten mit dem vorangegangenen Abschnitt, der Auflösung der Referenzen, zu beachten: Somüssen in <strong>ein</strong>igen Fällen zunächst1. Vererbungsregeln für referenzierte Elemente angewandt, dann die2. Dereferenzierung durchgeführt <strong>und</strong> daraufhin die3. Vererbungsregeln für die referenzierenden Elementeangewandt werden (<strong>und</strong> falls auf letztere wiederum referenziert wird, erneute Dereferenzierung etc.).3.2.3. Sortierung <strong>und</strong> Transformation der Daten nach <strong>Layout</strong>-KlassenWie in den Beispielen in Abbildung 3.4 zu sehen ist, erfordern <strong>ein</strong>ige Präsentationen <strong>ein</strong>e zum Teilgr<strong>und</strong>legend unterschiedliche Sortierung der Daten:In dem ersten Beispiel sind die Daten wie folgend sortiert:1. nach der Art der Veranstaltung (Vorlesungen, Praktika)2. für die Veranstaltungen <strong>ein</strong>er Art bleibt die in den Daten vorgegebene Sortierung erhalten (diesist in dem Beispiel nicht ersichtlich, da nur jeweils <strong>ein</strong>e Veranstaltung angegeben ist)3. nach Art der Sitzung der jeweiligen Veranstaltung4. nach der Veranstaltungszeit der SitzungenIn dem zweiten Beispiel sind die Daten wie folgend sortiert:1. nach der Uhrzeit der Sitzungen (zusammengefaßt anhand der St<strong>und</strong>e)2. nach dem Tag der <strong>ein</strong>zelnen Sitzungen25


3. Präsentations-Erzeugungsprozeß3. nach dem zusammengesetzten Titel aus Art der Sitzung <strong>und</strong> Veranstaltungstitel (dies ist imBeispiel nicht ersichtlich, da es k<strong>ein</strong>e Überschneidungen gibt)Weitere Sortierungen sind durchaus vorstellbar.Neben der Sortierung unterscheiden sich die beiden Beispiele aber auch noch in der Granularität ihrerDaten: In Beispiel 1 sind es Veranstaltungen, in Beispiel 2 fehlt die Ebene der Veranstaltungen, hiersind es die Sitzungen, die sortiert werden.Allerdings kann man beobachten, daß viele Präsentationen dieselbe Sortierung <strong>und</strong> Granularität erfordern.So konnten in dieser Arbeit zwei Klassen von Präsentationen gebildet werden:Die Präsentation der Veranstaltungen, sortiert nach Veranstaltungsarten, wie z.B. in Abbildung3.4(a) dargestellt.Beispiele wären hierfür die Webseite der Veranstaltungen oder das kommentierte Vorlesungsverzeichnis.Die Präsentation der Sitzungen, sortiert nach St<strong>und</strong>en <strong>und</strong> Tagen, wie z.B. in Abbildung 3.4(b)dargestellt.Beispiele wären hierfür der Aushangst<strong>und</strong>enplan <strong>und</strong> die Raumantragslisten.Um zu vermeiden, daß die Sortierungen <strong>und</strong> Transformationen später unnötigerweise für jede Präsentationerneut durchgeführt werden müssen, werden die Präsentationen zu <strong>Layout</strong>-Klassen zusammengefaßt<strong>und</strong> die Sortierungen <strong>und</strong> Transformationen der Daten für jede Klasse an dieser Stelle <strong>ein</strong>maldurchgeführt.26


3.3. <strong>Layout</strong>3.3. <strong>Layout</strong>In diesem Abschnitt werden die Daten in Inhalte von Präsentationen transformiert (siehe auch Abschnitt3.1.5.1). Das Mittel dazu ist der <strong>Layout</strong>baum. Er besteht aus Strukturierungsknoten <strong>und</strong> Textobjekt-Blättern<strong>und</strong> ist fortan die Datenstruktur, auf der alle Transformationen durchgeführt werden.Die Textobjekte all<strong>ein</strong>e reichen allerdings noch nicht aus, um die Inhalte genügend zu strukturieren:Die Textobjekte werden oft durch bestimmte Zeichenfolgen <strong>ein</strong>geleitet bzw. abgeschlossen. Und siewerden oftmals durch <strong>ein</strong>e Zeichenfolge von<strong>ein</strong>ander abgetrennt (z.B. durch <strong>ein</strong> <strong>ein</strong>zelnes Leerzeichenoder durch <strong>ein</strong> Komma gefolgt von <strong>ein</strong>em Leerzeichen etc.).Aus diesem Gr<strong>und</strong> werdem dem <strong>Layout</strong>baum in <strong>ein</strong>er weiteren Transformation Trenntexte hinzugefügt,die durch Regeln vorgegeben wurden.Gerade die Möglichkeit, diese Trenntexte angeben zu können, wird gegenüber dem imperativen Vorgehen(unter Verwendung von Druckanweisungen) als großer Vorzug der hier vorgestellten Vorgehensweiseangesehen. Mehr dazu im folgenden Abschnitt.3.3.1. Motivation des <strong>Layout</strong>baumesWill man aus Daten Präsentationen erzeugen, so bieten sich im Gr<strong>und</strong>e zwei Vorgehensweisen an: dieimperative <strong>und</strong> die deklarative.3.3.1.1. Imperative VorgehensweiseDie imperative Vorgehensweise erzeugt die Präsentation durch <strong>ein</strong>e Folge von Druckanweisungen.Sie ist für <strong>ein</strong>fache, nicht tief strukturierte Präsentationen schnell <strong>und</strong> <strong>ein</strong>fach zu implementieren.Abbildung 3.6 zeigt zwei beispielhafte Prozeduren in <strong>ein</strong>er Pseudosyntax, die <strong>ein</strong>e Veranstaltung ausgeben,Abbildung 3.7 zeigt <strong>ein</strong>e mögliche Präsentation, die durch wiederholte Aufrufe dieser Prozedurenerzeugt wird.Die zugehörige Datenquelle ist nicht angegeben, aber aus der Präsentation sollte man erkennen, wasin der Datenquelle repräsentiert ist. Eine XML-Darstellung der Datenquelle ist in Abbildung 5.1 zufinden.Die Prozeduren gehen davon aus, daß bei der imperativen Vorgehensweise jede Veranstaltung internin <strong>ein</strong>em Verb<strong>und</strong> (bzw. record oder structure) v repräsentiert ist. Um mit der Implementierungunabhängig von der späteren Zielsprache der Präsentation zu bleiben, werden Formatierungsanweisungen(wie z.B. <strong>ein</strong> Zeilenwechsel) im Beispiel über Funktionsaufrufe <strong>ein</strong>gefügt.3.3.1.1.1. Problemstellung Allerdings hat bereits dieses sehr <strong>ein</strong>fache Beispiel <strong>ein</strong>e Reihe vonFehlern, die auf den ersten Blick nicht so <strong>ein</strong>fach zu erkennen sind: Betrachtet man die letzte Zeileder Beispielpräsentation in Abbildung 3.7, so steht dort an erster Position <strong>ein</strong> Komma, das dort nichtersch<strong>ein</strong>en sollte. Daß dies trotzdem passieren konnte, liegt an <strong>ein</strong>er getroffenen Annahme bei derProgrammierung, nämlich, daß wenn <strong>ein</strong>e Bemerkung ausgegeben wird, immer <strong>ein</strong>e Dauer ausgegebenwird (das selbe Problem finden wir übrigens auch, wenn Sitzungen ausgegeben werden, ohne daß<strong>ein</strong>e Dauer vorhanden ist).27


3. Präsentations-Erzeugungsprozeßprocedure printVeranstaltung(v)print(v.Titel);print(" ");printBereiche(v.Bereiche);printZeilenwechsel();printDauer(v.Dauer);for s in v.Sitzungen doprint(", ");printSitzung(s);end;if ¡£¢ v.Bemerkung thenprint(", ");print(v.Bemerkung);end;printSpaltenwechsel();printDozenten(v.Dozenten);end;procedure printBereiche(bereiche)if ¡¤¢ bereiche thenprint("(");print(first(bereiche).Kurzform);for b in tail(bereiche) doprint(", ");print(b.Kurzform);end;print(")");end;end;ABBILDUNG 3.6.: Programmbeispiel <strong>zur</strong> imperativen VorgehensweiseVeranstaltungenInformatik I4-stündig, Di 10–12, Do 10–12, The/122Praktikum ”XML <strong>und</strong> E-Commerce“ (PG, A)4-stündig, Mo 9–13, Z7Fortgeschrittenenpraktikum4-stündig, Beginn jederzeit möglichPraktikum Gruppendynamik, Aushang beachtenBry, OhlbachBryBry, Conrad,Hegering, Hofmann,Kriegel, Kröger,Linnhoff-Popien,Ohlbach, Wirsing,ZimmerN.N.ABBILDUNG 3.7.: Beispielausgabe <strong>zur</strong> imperativen Vorgehensweise28


3.3. <strong>Layout</strong>Nun könnte man argumentieren, daß diese Fälle durch ausreichend sorgfältiges Programmieren <strong>und</strong>Testen vermieden werden können. Leider hat sich das in der Praxis der bisherigen Verwaltung der<strong>Lehr</strong>angebotsdaten nicht bewahrheitet, zumal die tatsächlich verwendeten Daten weit komplexer <strong>und</strong>tiefer strukturiert sind.3.3.1.1.2. Erkenntnis Untersucht man dieses Problem genauer, so kommt man auf <strong>ein</strong>e interessanteErkenntnis: Faktum ist, daß die Inhalte von Präsentationen in <strong>ein</strong>er bestimmten Anzahl vonDimensionen angeordnet werden können. Bei Präsentationen, die für das Papier bestimmt sind, sindes zwei, bei auditiven Präsentationen ist es <strong>ein</strong>e, bei Webseiten können es zwei oder drei s<strong>ein</strong> usw.(siehe Abschnitt 3.1.5.2).Bedenkt man, daß viele Inhalte hierarchisch in Beziehung stehen (also z.B. <strong>ein</strong> Veranstaltungstitel,der sich aus Veranstaltungsbezeichnung <strong>und</strong> Dozentenangabe – die im Übrigen auch wieder aus Titel,Vorname <strong>und</strong> Nachname besteht – zusammensetzt <strong>und</strong> selber wieder in der Angabe der gesamtenVeranstaltung vor der Auflistung der <strong>ein</strong>zelnen Sitzungen steht), so könnte man noch <strong>ein</strong>e weitereDimension für diese Hierarchie hinzunehmen.Die imperative Vorgehensweise besitzt jedoch nur <strong>ein</strong>e <strong>ein</strong>zige Dimension: die Zeit, zu der <strong>ein</strong>e Druckanweisungausgeführt wird. Das bedeutet, daß bei dieser Vorgehensweise mindestens <strong>ein</strong>e Dimensionfehlt.Dies erklärt warum der Umgang mit den Trenntexten so komplex ist, da ja zwischen zwei tatsächlicherfolgten – ansch<strong>ein</strong>end hinter<strong>ein</strong>anderliegenden – Ausgaben beliebig viele nicht erfolgte Ausgabenliegen können <strong>und</strong> nicht mehr ohne weiteres festgestellt werden kann, auf welche Inhalte <strong>und</strong> welcheDimension sich ausgegebene oder auszugebende Trenntexte beziehen.3.3.1.2. Deklarative VorgehensweiseMöchte man die Komposition von Inhalten <strong>und</strong> die Erzeugung der Präsentation zeitlich entkoppeln,so bietet sich <strong>ein</strong>e deklarative Lösung an. Und da die Daten als XML-Dokumente bereits in <strong>ein</strong>erBaumstruktur vorliegen, liegt <strong>ein</strong>e hierarchische Deklaration auf der Hand.Das Mittel <strong>zur</strong> hierarchischen Beschreibung der Inhalte ist der <strong>Layout</strong>baum. S<strong>ein</strong>e Blätter enthaltendie <strong>ein</strong>zelnen Daten, s<strong>ein</strong>e Knoten strukturieren die Daten als Inhalte der Präsentation.Ein Beispiel zu <strong>ein</strong>em <strong>Layout</strong>baum ist in Abbildung 3.8 zu finden.Sowohl Blätter als auch Knoten besitzen <strong>ein</strong>e Bezeichnung, so daß später gezielte Transformationendurchgeführt werden können. Blätter besitzen zudem noch <strong>ein</strong>e Information über den Typ ihresInhalts; in <strong>ein</strong>em <strong>Layout</strong>baum kann dies entweder Text (TEXT) oder <strong>ein</strong> <strong>generischer</strong> Ausdruck(COMMAND) s<strong>ein</strong>. Da die Blätter der <strong>Layout</strong>bäume in den nachfolgenden Beispielen immer Text enthalten,wird dort zunächst auf die Typangabe verzichtet.Das heißt, daß durch den <strong>Layout</strong>baum die Struktur <strong>ein</strong>er Präsentation abstrakt beschrieben wird. Auchwird beschrieben, welche Reihenfolge die Inhalte in der Präsentation besitzen (die Reihenfolge derBlätter bei <strong>ein</strong>em Pre-Order-Durchlauf durch den Baum).Durch Transformationen auf dem <strong>Layout</strong>baum kann die Struktur der Präsentation geändert <strong>und</strong> angereichertwerden.Das Hinzufügen von räumlichen Beziehungen der Inhalte ist so <strong>ein</strong>e Anreicherung (damit z.B. dieVeranstaltungsbezeichnungen links <strong>und</strong> die Dozentennamen rechts stehen). Das Hilfsmittel dazu sind29


3. Präsentations-ErzeugungsprozeßÜberschrift”Veranstaltungen”BeschreibungPräsentationVeranstaltungVeranstaltungenDozentenVeranstaltung...BenennungDozent”Bry”Dozent”Ohlbach”Titel”Informatik I”RumpfDauer”4”SitzungenSitzungSitzungZeitOrtZeitOrtTag”Di”ZeitraumVon”10” ”12”BisGebäude”The”Raum”122”Tag”Do”ZeitraumVon”10” ”12”BisABBILDUNG 3.8.: Exemplarischer <strong>Layout</strong>baumGebäude”The”Raum”122”die Trenntexte, die den <strong>ein</strong>zelnen Knoten (<strong>und</strong> eventuell auch Blättern) hinzugefügt werden (sieheauch Abschnitt 3.3.3.3.Wie entsteht nun <strong>ein</strong> <strong>Layout</strong>baum? Er wird durch <strong>ein</strong>e Transformation der Daten erzeugt. Die <strong>Spezifikation</strong>dieser Transformation erfolgt durch den <strong>Layout</strong>beschreibungsbaum, der damit den <strong>Layout</strong>baumdefiniert. Dazu mehr im nächsten Abschnitt.3.3.1.3. Definition des <strong>Layout</strong>baumsDer <strong>Layout</strong>baum wird durch den <strong>Layout</strong>beschreibungsbaum definiert. Dieser definiert im Einzelnenselber wieder Blätter <strong>und</strong> Strukturierungsknoten <strong>zur</strong> Strukturierung der Inhalte. Die Blätter könnenentweder statischen Text (TEXT), generische Ausdrücke (COMMAND) oder Selektoren für die Daten(SELECTOR) enthalten. Eine exemplarische Darstellung <strong>ein</strong>es solchen Baumes (unter Verwendungder im vorangegangenen Abschnitt bereits dargestellten Beispieldaten) ist in Abbildung 3.9 zu sehen(man beachte die Selektoren für die Daten, die im <strong>Layout</strong>baum in Abbildung 3.8 nicht vorkommen).Daneben können im <strong>Layout</strong>beschreibungsbaum ausgewählte Knoten oder Blätter als <strong>Layout</strong>-Objektemarkiert werden. Die Markierung dient dazu, den Elementen <strong>ein</strong>e <strong>ein</strong>deutige Identifikation hinzuzufügen,um sie später bei der Erzeugung der Präsentation gezielt ansprechen zu können (siehe Abbildung3.13). Oft besitzen die Elemente bereits aus den Daten <strong>ein</strong>e <strong>ein</strong>deutige Identifikation (in XMLsind das die ID-Attribute, mit denen Verweise zwischen Elementen hergestellt werden), diese könnenspäter gleichermaßen zum Selektieren verwendet werden.Trenntexte sind im <strong>Layout</strong>beschreibungsbaum noch nicht zu finden, da dieser möglichst kompakt gehaltenwerden soll. Sie werden dem <strong>Layout</strong>baum durch <strong>ein</strong>en Prozessor in <strong>ein</strong>em späteren Transformationsschritt,der in Abschnitt 3.3.3.3 erläutert wird, hinzugefügt. Im Gegensatz zu der imperativen30


3.3. <strong>Layout</strong>DeklarationÜberschrift(TEXT)"Veranstaltungen"VeranstaltungenVeranstaltungBenennungTitel(SELECTOR)bezeichnungBereiche*Bereich(SELECTOR)bereichBeschreibungDauer(SELECTOR)dauerZeitRumpfSitzungen*SitzungDozenten*Dozent(SELECTOR)dozentOrtTagZeitraum Gebäude(SELECTOR)(SELECTOR)taggebaeudeVon Bis(SELECTOR) (SELECTOR)st<strong>und</strong>e st<strong>und</strong>e + dauerABBILDUNG 3.9.: Exemplarischer <strong>Layout</strong>beschreibungsbaumRaum(SELECTOR)raumVorgehensweise im vorigen Abschnitt, ist dies durch die verwendete strukturierte Baumdarstellungauch ohne weiteres möglich.Der <strong>Layout</strong>beschreibungsbaum in Abbildung 3.9 besitzt <strong>ein</strong> künstliches Wurzelelement Deklaration,darunter befinden sich – hier durch Fettdruck gekennzeichnet – die beiden gesondert markierten<strong>Layout</strong>-Objekte Überschrift <strong>und</strong> Veranstaltungen. Die Positionen direkt unter demWurzelelement – bzw. die Markierungen überhaupt – sind nicht zwingend.Die vorgestellte Darstellungsweise ist jedoch noch nicht ganz zufriedenstellend:Ein Formalismus <strong>zur</strong> Selektion der Daten (wie z.B. XPath [37]) wurde noch nicht nicht bestimmt¡Multiplizitäten können nur un<strong>zur</strong>eichend dargestellt werden; sie werden hier mit “ <strong>und</strong> *“ ” ”dargestellt, was ausdrücken soll, daß zum <strong>ein</strong>en mehrere Kindknoten dieses Typs vorkommenkönnen ( *“), <strong>und</strong> daß zum anderen der entsprechende Knoten sämtliche vorkommenden Ausprägungens<strong>ein</strong>er Blätter enthält ( “). ” ¡”Alternative oder bedingte Teilbäume (zum Beispiel <strong>ein</strong> spezielles Text-Objekt Bemerkung imTeilbaum Zeit wenn der restliche Teilbaum leer ist) können gar nicht spezifiziert werden.Die beste Lösung ist wohl der Einsatz <strong>ein</strong>er entsprechend mächtigen Anfragesprache mit Konstruktoren,Selektoren <strong>und</strong> Filtern. Da in dieser Arbeit jedoch k<strong>ein</strong>e neue derartige Anfragesprache entwickeltwerden soll, wird es hier bei dieser schematischen Darstellung des <strong>Layout</strong>beschreibungsbaumes belassen<strong>und</strong> die tatsächliche Implementierung durch bestehende oder bereits in der Entwicklung befindlicheAnfragesprachen realisiert. Mehr dazu im Kapitel 5, in der die prototypische Implementierungvon PEP erläutert wird.31


3. Präsentations-Erzeugungsprozeß3.3.2. Generierung des <strong>Layout</strong>baumsDer <strong>Layout</strong>baum entsteht anhand <strong>ein</strong>es Prozessors, der auf den Daten die durch den <strong>Layout</strong>beschreibungsbaumbeschriebenen Transformationen ausführt (siehe vorangegangener Abschnitt). Der <strong>Layout</strong>baumsieht im Prinzip aus wie der <strong>Layout</strong>beschreibungsbaum, nur daß die Selektoren an s<strong>ein</strong>enBlättern durch die tatsächlichen Werte ersetzt wurden (der Typ des Inhalts der Blätter ändert sich indiesem Fall natürlich auch auf Text) <strong>und</strong> die Multiplizitäten aufgelöst wurden. Abbildung 3.8 zeigt<strong>ein</strong> Beispiel <strong>ein</strong>es <strong>Layout</strong>baums, der aus dem <strong>Layout</strong>beschreibungsbaum in Abbildung 3.9 entsteht,wenn die gleichen Daten wie in Abbildung 3.7 vorausgesetzt werden.3.3.3. Aufbereitung des <strong>Layout</strong>baumsAnalog zu den Prozessoren für die Aufbereitung der Daten in Abschnitt 3.2.2 werden nun hier typischeProzessoren vorgestellt, die den <strong>Layout</strong>baum aufbereiten; dies sind Prozessoren zu Pruning <strong>und</strong>Anwendung des Distributivgesetzes.3.3.3.1. PruningBei der Erzeugung des <strong>Layout</strong>baumes können leere Teilbäume entstehen, also Teilbäume, die k<strong>ein</strong>eDaten enthalten. Sie werden mit diesem Prozessor entfernt.Dabei ist zu unterscheiden in Blätter, die k<strong>ein</strong>e Daten enthalten, <strong>und</strong> Blätter, die leere Daten enthalten.Bei <strong>ein</strong>em Blatt mit leeren Daten wurde bei der Datenerfassung bewußt <strong>ein</strong> leeres Datum <strong>ein</strong>gegeben,z.B. <strong>ein</strong>e Adresse, die k<strong>ein</strong>e Hausnummer besitzt. Bei <strong>ein</strong>em Blatt ohne Daten fehlt diese Informationnoch.In den Beispielen entstehen unter dem Knoten mit der Bezeichnung Benennung zunächst zweiTeilbäume mit den Wurzeln Titel <strong>und</strong> Bereiche. Letzterer ist aber im Fall der Veranstaltungmit dem Titel ”Informatik 1“ leer, so daß dieser Teilbaum beim Pruning entfernt wird. Abbildung 3.8zeigt also tatsächlich nicht den <strong>Layout</strong>baum, der direkt nach s<strong>ein</strong>er Generierung entsteht, sondern dieAusgabe des Pruning-Prozessors, der diesen ersten <strong>Layout</strong>baum als Eingabe erhalten hat.3.3.3.2. Umordnungen von TextobjektenDurch die Baumstruktur des <strong>Layout</strong>s können <strong>ein</strong>ige interessante Umordnungen von Textobjektendurchgeführt werden, die bei <strong>ein</strong>em imperativen <strong>Ansatz</strong> nur sehr umständlich durchzuführen wären.3.3.3.2.1. Distributivgesetz auf Knoten Betrachtet man in Abbildung 3.4(a) oder 3.7 die Angabeder Dienstags- <strong>und</strong> Donnerstagssitzungen, so fällt auf, daß die Hörsaalangabe nur <strong>ein</strong> <strong>ein</strong>zigesMal erfolgt, da beide Sitzungen im gleichen Hörsaal stattfinden. Diese Art von Verkürzung ist beiderartigen Veranstaltungslisten sehr gebräuchlich.Sie läßt sich durch <strong>ein</strong>e <strong>ein</strong>fache Transformationsregel modellieren (siehe Abbildung 3.10).Mathematisch gesehen ist dies <strong>ein</strong>fach die Anwendung des Distributivgesetzes auf die Knoten Zeit<strong>und</strong> Ort.32


3.3. <strong>Layout</strong>SitzungenSitzungSitzungSitzung... SitzungZeitenOrt¢¡ Zeit£ ¡ Ort¥¤ Zeit£ ¤ Ort§¦ Zeit£ ¦ Ort¢¡ Zeit §¤ Zeit ... §¦ Zeit£ ¡ Ort¨©£ ¡ £ ¤ £ ¦wobeiABBILDUNG 3.10.: Distributivgesetz für Zeit <strong>und</strong> Ort3.3.3.2.2. Weitere Umordnungen Sehr ähnliche Probleme wären die Ausfaktorisierung vongem<strong>ein</strong>samen Gebäudeangaben bei verschiedenen Hörsälen oder vonWochentags- <strong>und</strong> Ortsangaben bei Veranstaltungen, die zu mehreren Zeiten am gleichen Tag<strong>und</strong> im selben Hörsaal stattfinden usw.Desweiteren könntenmehrere Dozentennamen in Präsentationen, bei denen wenig Platz dafür <strong>zur</strong> Verfügung steht(z.B. <strong>ein</strong> St<strong>und</strong>enplan), nach bestimmten Kriterien zusammengefaßt werden, z.B. der Name desersten Dozenten, gefolgt von dem Zeichen ”+”.Von dieser Art gäbe es noch viele weitere Beispiele, auf deren Aufzählung hier aber verzichtet wird.3.3.3.3. Trenntexte hinzufügenEin weiterer Prozessor fügt dem <strong>Layout</strong>baum Trenntexte, die mittels Regeln definiert wurden, hinzu.Diese sind im Abschnitt 3.3.1 motiviert worden, so daß die Notwendigkeit <strong>und</strong> Funktion solcherTrenntexte offensichtlich s<strong>ein</strong> sollte. Für den vorgestellten exemplarischen <strong>Layout</strong>baum könnten dieRegeln für Trenntexte schematisch wie in Abbildung 3.11 aussehen. Element Element Prefix Infix PostfixÜberschrift Überschrift ”” ”” ”@[NEWLINE]”Veranstaltungen Veranstaltungen ”@[BEGINTAB]” ”” ”@[ENDTAB]”Veranstaltung Veranstaltung ”@[NEWROW]” ”@[NEWCOL]” ”@[ENDROW]”Beschreibung Beschreibung ”” ”@[NEWLINE]” ””Benennung Benennung ”” ” ” ””Bereiche Bereiche ”(” ”, ” ”)”Rumpf Rumpf ”” ”, ” ””Dauer Dauer ”” ”” ”-stündig”Sitzungen Sitzungen ”” ”, ” ””Sitzung Sitzung ”” ”, ” ””Zeit Zeit ”” ”@[CHAR(NBSP)]” ””Zeitraum Zeitraum ”” ”-” ””Ort Ort ”” ”/” ””Dozenten Dozenten ”” ”, ” ””ABBILDUNG 3.11.: Regeln für Trenntexte33


3. Präsentations-ErzeugungsprozeßAuf die genaue Funktionsweise der verwendeten generischen Ausdrücke – hier in <strong>ein</strong>er Form von@[...] dargestellt – wird im nächsten Abschnitt <strong>ein</strong>gegangen. An dieser Stelle ist wichtig zu wissen,daß sie für <strong>ein</strong>e entsprechende Anweisung in der Präsentations-Zielsprache stehen. Also z.B.@[BEGINTAB] für das Öffnen <strong>ein</strong>er Tabelle.Nach der Transformation, die die Trenntexte dem <strong>Layout</strong>baum hinzufügt, sähe der <strong>Layout</strong>baum ausAbbildung 3.8 nun aus wie in Abbildung 3.12 gezeigt. Die Reihenfolge, in der die Trenntexte darinaufgeführt sind (Prefix, Infix, Postfix), entspricht der aus Abbildung 3.11.PräsentationÜberschrift”” ”” ”@[NEWLINE]””Veranstaltungen”Veranstaltungen”@[BEGINTAB]” ”” ”@[ENDTAB]”Veranstaltung”@[NEWROW]” ”@[NEWCOL]” ”@[ENDROW]”Veranstaltung...Beschreibung”” ”@[NEWLINE]” ””Dozenten”” ”, ” ””Benennung”” ” ” ””Dozent”Bry”Dozent”Ohlbach”Titel”Informatik I”Rumpf”” ”, ” ””Dauer”” ”” ”-stündig””4”Sitzungen”” ”, ” ””Sitzung”” ”, ” ””Sitzung”” ”, ” ””Zeit”” ”@[CHAR(NBSP])” ””Ort”” ”/” ””Zeit”” ”@[CHAR(NBSP)]” ””Ort”” ”/” ””TagDiZeitraum”” ”-” ””Gebäude”The”Raum”122”Tag”Do”Zeitraum”” ”-” ””Gebäude”The”Raum”122”Von”10”Bis”12”Von”10”ABBILDUNG 3.12.: <strong>Layout</strong>baum mit TrenntextenBis”12”Dabei wird deutlich, daß nicht nur Knoten Trenntexte haben können, sondern auch Blätter. Zumindest<strong>ein</strong>en <strong>ein</strong>leitenden <strong>und</strong> abschließenden Text, wie im Beispiel mit dem Blatt Dauer gezeigt. Allerdingsist dies nicht zwingend, man könnte genausogut die Information in <strong>ein</strong>em vorangehenden odernachfolgenden Blatt als statischen Text ablegen.3.3.4. Generische AusdrückeDurch die Unabhängigkeit der <strong>Layout</strong>beschreibung von bestimmten Zielsprachen ist es notwendig,<strong>Layout</strong>konstrukte generisch beschreiben <strong>und</strong> erst später in die entsprechende Zielsprache transformierenzu können. Unter <strong>Layout</strong>konstrukten werden im Weiteren alle Gliederungs-Hilfsmittel <strong>zur</strong>Darstellung von Daten verstanden, also Tabellen, Listen, Zeilenumbrüche usw..34


3.3. <strong>Layout</strong>Beschrieben werden die <strong>Layout</strong>konstrukte mittels <strong>generischer</strong> Ausdrücke. Sie könnten für <strong>ein</strong>e Tabell<strong>ein</strong> etwa so aussehen:@[BEGINTAB] . . . Tabelleninhalt . . . @[ENDTAB]Im Abschnitt 3.2.1.2 <strong>zur</strong> Sonderzeichenproblematik wurde bereits auf <strong>ein</strong>e weitere Anwendung dergenerischen Ausdrücke hingewiesen: Die Generalisierung von Sonderzeichen (Umlaute, mathematischeSymbole etc.). Eine generische Entsprechung könnte für das Zeichen (Alpha) etwa so aussehen:@[CHAR(ALPHA)].3.3.4.1. Unterscheidung von Text <strong>und</strong> generischen AusdrückenEin großes Problem bei der Verwendung der generischen Ausdrücke ist es, sicherzustellen, daß diedie Ausdrücke bezeichnenden Zeichenfolgen auch nur als solche im Text vorkommen <strong>und</strong> nicht an<strong>ein</strong>er anderen Stelle wörtlich zu nehmen sind, also gewissermaßen ”gequoted“ werden müßten.Als Lösung könnte in <strong>ein</strong>em eigenen Prozeßschritt der Datenschnittstelle geprüft werden, ob die Zeichenfolgender verwendeten generischen Ausdrücke bereits im Dokument vorkommen <strong>und</strong> falls ja,sie umzubenennen.Eine pragmatische Lösung besteht darin, sehr selten vorkommende Zeichenfolgen für die generischenAusdrücke zu verwenden (wie in den gezeigten Beispielen, in denen die Ausdrücke von der in bishersonst k<strong>ein</strong>er Zielsprache vorkommenden Zeichenfolge @[ ... ] umfaßt sind), <strong>und</strong> mögliche Fehlerzuzulassen.In dieser Arbeit wird noch <strong>ein</strong> anderer <strong>Ansatz</strong> verwendet: Durch die Darstellung der Daten als <strong>Layout</strong>baumkönnen generische Ausdrücke in eigenen Blättern abgelegt werden. Da in den Blättern derTyp des Inhalts ebenfalls gespeichert wird, können die generischen Ausdrücke ohne Probleme gesondertbehandelt werden. Allerdings bezieht sich dies nur auf generische Ausdrücke, die währenddes Präsentations-Erzeugungsprozesses hinzukommen. Generische Ausdrücke, die bereits in der Datenquellevorkommen, werden von der Datenschnittstelle auch genau als solche in die Datenstruktur<strong>ein</strong>gefügt. Darum wurde dieser <strong>Ansatz</strong> mit der Lösung aus dem vorangeganenen Absatz kombiniert.35


3. Präsentations-Erzeugungsprozeß3.4. StyleStyle ist der dritte Abschnitt des Präsentations-Erzeugungsprozesses. Die Daten wurden im vorangegangenenAbschnitt in <strong>ein</strong>en <strong>Layout</strong>baum transformiert, dieser wurde weiter aufbereitet <strong>und</strong> mit Informationenüber räumlichen Beziehungen s<strong>ein</strong>er Elemente angereichert. Eventuell wurden spezielle<strong>Layout</strong>-Objekte markiert.Über <strong>ein</strong>en Templatemechanismus können nun <strong>ein</strong>zelne Inhalte der Präsentation, die mit dem <strong>Layout</strong>baumbeschrieben wurden, in Templates <strong>ein</strong>gefügt werden. Die Templates sind bereits in der Zielspracheformuliert, mittels Platzhaltern werden die <strong>ein</strong>zufügenden Inhalte selektiert.In weiteren Transformationen können Style-Informationen hinzugefügt werden.Zuletzt werden generische Ausdrücke aufgelöst <strong>und</strong> der <strong>Layout</strong>baum serialisiert. Woraus die endgültigePräsentation entsteht.3.4.1. TemplatemechanismusDie Idee, die hinter dem Templatemechanismus steckt, ist folgende: Komplexe Dokumentdefinitionensollen direkt in der jeweiligen Zielsprache implementiert, getestet <strong>und</strong> vor allem nachträglich leichtangepaßt werden können.Templates sind Präsentationen in den jeweiligen Zielsprachen, die jedoch anstatt von Daten Platzhalterenthalten, die die Schnittstelle zu den Inhalten des <strong>Layout</strong>baums bilden.Warum besteht überhaupt die Notwendigkeit, <strong>zur</strong> Erstellung von Präsentationen zusätzlich noch <strong>ein</strong>enTemplatemechanismus <strong>ein</strong>zuführen? Zur Erzeugung von Präsentationen wurde ja bereits die Kombination<strong>Layout</strong>-Klassen, <strong>Layout</strong>beschreibungsbaum <strong>und</strong> Trenntexte vorgestellt, die prinzipiell schonausreichen würde.Zur Motivation sei folgendes Beispiel gegeben: Möchte man <strong>ein</strong>en aufwendigen tabellarischen St<strong>und</strong>enplanausgeben, so reicht es nicht, die entsprechenden Werte aus den Daten <strong>ein</strong>fach in <strong>ein</strong> entsprechendesTabellenkonstrukt <strong>ein</strong>zufügen <strong>und</strong> durch passende Trenntexte von<strong>ein</strong>ander abzutrennen.Vielleicht sollen <strong>ein</strong>zelne Spalten <strong>ein</strong>e bestimmte Breite bekommen, die Tabelle gestaucht werden(damit der St<strong>und</strong>enplan gerade noch auf <strong>ein</strong>e Seite paßt) oder <strong>ein</strong>malig <strong>ein</strong> bestimmter Hinweistext<strong>ein</strong>geblendet werden. Desweiteren sind in <strong>ein</strong>igen Zielsprachen die Einstellungen für manche <strong>Layout</strong>konstrukterecht komplex, wie z.B. Tabellen in LATEX, so daß die <strong>Layout</strong>objekte nur umständlich alsgenerische Ausdrücke formuliert werden können.Kurz: Es besteht <strong>ein</strong> Bedarf, Präsentationen vorab – also ohne Daten – testen zu können <strong>und</strong> vor allemkomplizierte Einstellungen (wie Datei-Header, Tabellendefinitionen usw.) an ihrem Ort der Verwendungdefinieren zu können <strong>und</strong> nicht in den viel allgem<strong>ein</strong>er gehaltenen Konstruktionsregeln für das<strong>Layout</strong>, wo sich <strong>ein</strong>e kl<strong>ein</strong>e Änderung der Einstellungen auf sämtliche Präsentationen auswirkt <strong>und</strong>nicht nur auf die, in der z.B. <strong>ein</strong>e Tabelle gerade mal etwas kl<strong>ein</strong>er dargestellt werden soll.Der Templatemechanismus ist <strong>ein</strong>e pragmatische Lösung für diesen Bedarf.3.4.1.1. FunktionsweiseDie Vorverarbeitung <strong>ein</strong>es Templates läuft folgendermaßen ab: Das Template wird geparst <strong>und</strong> in <strong>ein</strong>enTemplate-Baum transformiert. Der Template-Baum entspricht im Gr<strong>und</strong>e <strong>ein</strong>em <strong>Layout</strong>beschrei-36


article¢documentclass[10pt]¡document¢begin¡tabular¢end¡document¢end¡3.4. Stylebungsbaum, nur daß er k<strong>ein</strong>e Strukturierungsknoten besitzt, also von der Tiefe 1 ist, <strong>und</strong> daß er anstattvon Selektoren für die Daten nun Seletoren für Inhalte besitzt.In <strong>ein</strong>em weiteren Schritt werden der Template-Baum <strong>und</strong> der bisherige <strong>Layout</strong>baum in <strong>ein</strong>en weiteren<strong>Layout</strong>baum transformiert. Die Selektoren für die Inhalte werden dabei durch die entsprechendenInhalte ersetzt. Das Beispiel in Abbildung 3.13 veranschaulicht diese Vorgehensweise.Template (L A TEX)<strong>Layout</strong>baumPräsentation@[OBJECT(Überschrift)]¢section¡tabular¢£¡ |l@¡ hspace¡ 2em¢¤¢ l|¢begin¡hline@[OBJECT(Veranstaltungen)]Überschrift(TEXT)"Veranstaltungen"Veranstaltungen”” ”” ””Veranstaltung”@[NEWROW]” ”@[NEWCOL]” ”@[ENDROW]”. . .Beschreibung”” ”@[NEWLINE]” ””Template-BaumTemplateBenennung”” ” ” ””Titel(TEXT)"Informatik I"Rumpf”” ”, ” ””Block1(TEXT)” docum...begin¡ ...section¡ ”Object1(OBJECT)ÜberschriftBlock2(TEXT)”¢...begin¡hline”Object2(OBJECT)VeranstaltungenBlock3(TEXT)” end¡ t......ument¢ ”Dauer(TEXT)”” ”” ”-stündig”"4"Sitzungen”” ”, ” ””. . . . . .<strong>Layout</strong>baumPräsentationBlock1(TEXT)” docum...begin¡ ...section¡ ”Überschrift(TEXT)"Veranstaltungen"Block2(TEXT)”¢...begin¡hline”Veranstaltungen”” ”” ””Veranstaltung”@[NEWROW]” ”@[NEWCOL]” ”@[ENDROW]”Beschreibung”” ”@[NEWLINE]” ””. . .Block3(TEXT)” end¡ t......ument¢ ”Benennung”” ” ” ””Titel(TEXT)"Informatik I"Dauer(TEXT)”” ”” ”-stündig”"4"Rumpf”” ”, ” ””Sitzungen”” ”, ” ””. . . . . .ABBILDUNG 3.13.: Templatemechanismus3.4.1.2. Auflösung von Objekt-ReferenzenIm vorangegangenen Abschnitt wurde bereits angesprochen, daß die Templates Funktionen enthalten,die die Schnittstelle zu den Inhalten des <strong>Layout</strong>baums bilden. Wie werden diese Inhalte nun referenziert?Dies geschieht über <strong>ein</strong>e <strong>ein</strong>deutige ID, die jeder Inhalt besitzen kann (diese ID entspricht inder vorliegenden Arbeit dem XML-Attribut ID, das bereits für die Verweise in den Daten verwendetwurde).Diese ID wurde dem Inhalt entweder bereits bei der Datenerfassung hinzugefügt (z.B. <strong>ein</strong>e bestimm-37


3. Präsentations-Erzeugungsprozeßte Veranstaltung mit der ID ”id-veranstaltung-info1“) oder sie wurde im <strong>Layout</strong>beschreibungsbaummittels <strong>ein</strong>es <strong>Layout</strong>-Objektes definiert <strong>und</strong> dem Inhalt bei der Erzeugung des <strong>Layout</strong>baumes hinzugefügt.Im Beispiel wird der Einfachheit halber angenommen, daß der Wert des ID-Attributes jeweils gleichdem Knotenbezeichner im <strong>Layout</strong>baum ist.Das Auflösen der Referenzen bei der Transformation des Template-Baums <strong>und</strong> des alten <strong>Layout</strong>baumesin den neuen <strong>Layout</strong>baum ist simpel: Der Inhalt mit der entsprechenden ID wird im alten<strong>Layout</strong>baum gesucht <strong>und</strong> komplett – inklusive eventueller Teilbäume – in den neuen kopiert. Dasreferenzierende Element wird dabei überschrieben.3.4.2. Aufbereitung der PräsentationNach dieser Transformation beschreibt der <strong>Layout</strong>baum im Prinzip bereits <strong>ein</strong>e vollständige generischePräsentation. Allerdings fehlt der Präsentation noch der gesamte Teilbereich des Style: Bisherwurden die Daten in <strong>ein</strong>em <strong>Layout</strong>baum zu Inhalten komponiert <strong>und</strong> die Inhalte wurden mittels<strong>Layout</strong>-Konstrukten strukturiert, d.h. es wurde bestimmt wo, bzw. in welcher Reihenfolge die Inhaltewiedergegeben werden sollen.Was noch fehlt ist die Information wie die Inhalte wiedergegeben werden sollen (vergleiche Abschnitt3.1.5.2). Dies geschieht nun, indem die Inhalte des <strong>Layout</strong>baums über weitere Prozessorenmit Styl<strong>ein</strong>formationen angereichert werden.Diese Prozessoren fügen dem <strong>Layout</strong>baum weitere stylebestimmende Strukturierungsknoten hinzuoder ändern, bzw. ergänzen bestehende Trenntexte mit Styl<strong>ein</strong>formationen.Eine Illustration zeigt Beispiel 3.14. Es zeigt drei Möglichkeiten, das Blatt Überschrift mit (generischen)Style-Informationen zu versehen, die es später in Fettruck ersch<strong>ein</strong>en lassen.Präsentation. . . Überschrift(TEXT)”Veranstaltungen”. . .Möglichkeit 1PräsentationMöglichkeit 2PräsentationMöglichkeit 3Präsentation. . . Überschrift . . .(TEXT)”@[BEGINBOLD]” ”” ”@[ENDBOLD]”"Veranstaltungen". . . Style1Style1.1(COMMAND)@[BEGINBOLD]. . .Style1.2(COMMAND)@[ENDBOLD]. . . Style1. . .”@[BEGINBOLD]” ”” ”@[ENDBOLD]”Überschrift(TEXT)"Veranstaltungen"Überschrift(TEXT)"Veranstaltungen"ABBILDUNG 3.14.: Hinzufügen von Style-InformationenMöglichkeit 1 verändert die Trenntexte des Blattes, d.h. es können z.B. Trenntexte ergänzt oder bestehendedurch speziellere ersetzt werden. Möglichkeit 2 fügt <strong>ein</strong>en neuen Strukturierungsknoten mitdem bestehenden Blatt <strong>und</strong> je <strong>ein</strong>em neuen Blatt davor <strong>und</strong> danach <strong>ein</strong>, die jeweils generische Ausdrückeb<strong>ein</strong>halten. Möglichkeit 3 fügt <strong>ein</strong>en neuen Strukturierungsknoten mit neuen Trenntexten <strong>ein</strong>.38


3.4. Style3.4.3. Transformation der Präsentation in die ZielspracheAls abschließende Transformationen werden die generischen Ausdrücke in entsprechende Konstrukteder Zielsprache übersetzt <strong>und</strong> der <strong>Layout</strong>baum in <strong>ein</strong>e Zeichenfolge serialisiert.3.4.3.1. Auflösung <strong>generischer</strong> AusdrückeZur Auflösung der generischen Ausdrücke müssen für jede gewünschte Zielsprache Transformationsregelnvon den jeweiligen generischen Ausdrücken auf die entsprechenden Konstrukte in den Zielsprachenvorliegen.Abbildung 3.15 gibt <strong>ein</strong> Beispiel für derartige Regeln. Sie zeigt <strong>ein</strong>e beispielhafte generische Definition<strong>ein</strong>er Tabelle unter Verwendung der in dieser Arbeit verwendeten Notation <strong>und</strong> daneben dieEntsprechungen in LATEX <strong>und</strong> HTML.generisch L A TEX HTML@[BEGINTAB(2)] \begin{tabular}{*{2}{l}} @[NEWROW]@[NEWCOL] & @[NEWROW]@[NEWCOL] & @[ENDROW] \\ @[ENDTAB] \end{tabular} ABBILDUNG 3.15.: Übersetzung <strong>generischer</strong> AusdrückeDie Transformation funktioniert folgendermaßen:Die Transformationsregeln werden auf die COMMAND-Blätter des <strong>Layout</strong>baumes angewandt. Dabeiwerden die generischen Ausdrücke durch die Zielsprachen-Konstrukte ersetzt <strong>und</strong> der Typ des Blattinhaltsauf TEXT geändert. Das bedeutet, daß nach Abschluß dieser Transformation nur noch Blättermit dem Typ TEXT im <strong>Layout</strong>baum vorkommen.Bei der Anwendung der Transformationsregeln kann auch auf bestimmte Blatt-Namen gefiltert werden,so daß Sonderbehandlungen möglich sind.Abbildung 3.16 zeigt <strong>ein</strong> Beispiel für <strong>ein</strong>e solche Transformation.GenerischPräsentationZielsprachePräsentation. . . Style1. . .. . . Style1. . .Style1.1(COMMAND)@[BEGINBOLD]Überschrift(TEXT)"Veranstaltungen"Style1.2(COMMAND)@[ENDBOLD]Style1.1(TEXT)" textbf¡ "Überschrift(TEXT)"Veranstaltungen"Style1.2(TEXT)" "¢ABBILDUNG 3.16.: Transformation in Zielsprache (L A TEX)39


3. Präsentations-Erzeugungsprozeß3.4.3.2. SerialisierungAbschließend wird der <strong>Layout</strong>baum in <strong>ein</strong>e Zeichenfolge serialisiertDer Serialisierung geht <strong>ein</strong>e Variante des Flatten-Algorithmus mit <strong>ein</strong>em Pre-Order-Durchlauf durchden <strong>Layout</strong>baum unter Beachtung der Trenntexte voraus.Dabei wird der <strong>Layout</strong>baum von der Wurzel bis zu den Blättern rekursiv durchlaufen <strong>und</strong> <strong>ein</strong>e Listevon Blättern erzeugt, die aus den Pre-Trenntexten, den durch die Infix-Trenntexte separierten Wertender enthaltenen Knoten (Rekursion!) oder der Blätter <strong>und</strong> den Post-Trenntexten besteht.Damit liegt also immer noch <strong>ein</strong> XML-Dokument vor, das <strong>ein</strong>e Sequenz von Textknoten enthält. Derletzte Prozessor braucht nur noch die Konkatenation der Inhalte dieser Textknoten zu bilden, <strong>und</strong>damit ist die Präsentation in der Zielsprache erzeugt.Das Beispiel in Abbildung 3.17 veranschaulicht die Arbeit der beiden letzten Prozessoren noch <strong>ein</strong>mal:Die erste darin gezeigte Transformation zeigt die Serialisierung. Die zweite Transformation zeigtdie Konkatenation.PräsentationBlock1(TEXT)” docum...begin¡ ...section¡ ”Style1.1(TEXT)” textbf¡ ”Style1Überschrift(TEXT)”Veranstaltungen”Style1.2(TEXT)”¢ ”. . .Präsentation” docum. . .begin¡ . . .section¡ ”” textbf¡ ” ”Veranstaltungen” ”¢ ” . . .article¢documentclass[10pt]¡document¢begin¡section¡Veranstaltungen¢textbf¡. . .ABBILDUNG3.17.: Serialisierung des <strong>Layout</strong>baums <strong>und</strong> Erzeugung der Präsentation in derZielsprache40


4. Rahmenbedingungen <strong>ein</strong>erImplementierung4.1. Erforderliche SprachmittelDieser Abschnitt soll <strong>ein</strong>en Überblick darüber geben, welche gr<strong>und</strong>legenden Sprachmittel benötigtwerden, um den in Kapitel 3 beschriebenen Präsentations-Erzeugungsprozeß zu realisieren.4.1.1. Baumbasierte TransformationsspracheFast jeder Prozessor führt <strong>ein</strong>e Transformation durch, die <strong>ein</strong>en Eingabebaum in <strong>ein</strong>en Ausgabebaumüberführt. Dafür ist <strong>ein</strong>e Sprache erforderlich, in der die Transformationsregeln in möglichst deklarativerWeise formuliert werden können.Einige Transformationen (z.B. das Hinzufügen von Trenntexten) sind so trivial, daß sich daraus k<strong>ein</strong>ebesonderen Anforderungen an die Transformationssprache ergeben. Andere (z.B. das Pruning) benötigenfür <strong>ein</strong>e natürliche Formulierung <strong>ein</strong> Rekursionsprinzip, mit dem die Ausgabe aus der Transformationvon Teilbäumen als Eingabe weiterer Teiltransformationen dienen kann, die dann die Gesamtausgabeaus den Teilausgaben konstruieren.Diese Art von Rekursion ist beispielsweise in XSLT nicht möglich.Manche Transformationen (z.B. zum Ausfaktorisieren gem<strong>ein</strong>samer Ortsangaben) lassen sich nur formulieren,wenn der Rumpf der Transformationsregel <strong>ein</strong> Muster nicht nur für <strong>ein</strong>en Ast, sondern für<strong>ein</strong>en komplexeren Teilbaum enthalten kann. Sprachen, die auf XPath basieren, sind dafür zu ausdrucksschwach.Gebraucht werden statt dessen Konstrukte wie das Pattern Matching in <strong>ein</strong>igen funktionalenProgrammiersprachen.Es wäre interessant, wenn <strong>ein</strong>e Menge von primitiven Operationen identifiziert werden könnte, ausdenen sich die benötigten Transformationen mit höheren Sprachmitteln zusammensetzen lassen.4.1.2. Sprache <strong>zur</strong> Definition von <strong>Layout</strong>beschreibungsbäumenIm Gegensatz zu normalen Transformationsregeln, die nur <strong>ein</strong>mal implementiert werden <strong>und</strong> dann– solange nicht gr<strong>und</strong>legende Änderungen am Prozeß vorgenommen wurden – unverändert bleibenkönnen, unterliegt <strong>ein</strong> <strong>Layout</strong>beschreibungsbaum <strong>ein</strong>er höheren Änderungshäufigkeit. Jedes Mal,wenn sich das <strong>Layout</strong> <strong>ein</strong>er Präsentation ändern soll, muß er angepaßt werden. Noch dazu soll nichtnur <strong>ein</strong>e <strong>ein</strong>zige Präsentation erstellt werden. Für fast jede der Präsentationen ist <strong>ein</strong> eigener <strong>Layout</strong>beschreibungsbaumnötig.Desweiteren ist die Struktur <strong>ein</strong>es <strong>Layout</strong>beschreibungsbaumes sehr komplex.41


4. Rahmenbedingungen <strong>ein</strong>er ImplementierungSo liegt die Forderung nahe, daß die Sprache <strong>zur</strong> Definition <strong>ein</strong>es <strong>Layout</strong>beschreibungsbaums möglichst<strong>ein</strong>fach, kompakt <strong>und</strong> übersichtlich s<strong>ein</strong> soll.4.1.3. Sprache <strong>zur</strong> Kombination von ProzessorenDer beschriebene Präsentations-Erzeugungsprozeß geht davon aus, daß Prozessoren hinter<strong>ein</strong>andergeschaltetwerden können, so daß die Ausgabe des <strong>ein</strong>en Prozessors als Eingabe des nachfolgendendient.Dies erfordert <strong>ein</strong>e Sprache mit <strong>ein</strong>em ”Pipeline“-Operator. Im Moment sind k<strong>ein</strong>e Verzweigungenoder Iterationen von Prozessoren vorgesehen, aber sie könnten sich doch noch als notwendig erweisen,so daß es günstig wäre, wenn die Kombinationssprache auch dafür Unterstützung bieten würde.4.1.4. Generische AusdrückeIn den Beispielen wurden generische Ausdrücke mit <strong>ein</strong>er Pseudosyntax wie @[NEWLINE] verwendet,um das Prinzip der formatunabhängigen Beschreibung zu illustrieren.Für die betrachtete Anwendung ist <strong>ein</strong>e pragmatisch gewählte Menge solcher generischen Ausdrückeerforderlich, die die auftretenden Fälle abdecken <strong>und</strong> sich <strong>ein</strong>fach auf die vorkommenden Zielsprachenabbilden lassen. ”Vollständigkeit“ in dem Sinne, alle Möglichkeiten von XSL-FO, LATEX <strong>und</strong> anderenBeschreibungssprachen abdecken zu wollen, wäre hingegen unrealistisch.Sowohl die Syntax der generischen Ausdrücke als auch ihre Abbildungen auf die verschiedenen Zielsprachensollten möglichst <strong>ein</strong>fach spezifizierbar s<strong>ein</strong>, um Erweiterungen zu erleichtern.4.1.5. Sprache zum Zugriff auf Inhalte der Präsentation in <strong>ein</strong>em TemplateDie Templates enthalten den statischen Text <strong>ein</strong>er Präsentation <strong>und</strong> Verweise auf <strong>ein</strong>zufügende (dynamische)Inhalte aus dem <strong>Layout</strong>baum. Um zu spezifizieren, auf welche Inhalte verwiesen wird, ist<strong>ein</strong>e Sprache <strong>zur</strong> Selektion nötig.In dem vorangeganenen Kapitel wurde <strong>ein</strong> <strong>Ansatz</strong> beschrieben, mit dem Inhalte mittels <strong>ein</strong>er <strong>ein</strong>deutigenIdentifikation referenziert werden. Dies erfordert <strong>ein</strong>e Sprache, die solche Referenzen auflösenkann.Die Selektion von Inhalten über ihre strukturelle Anordnung im Baum (z.B. in Pfadnotation: Präsentation/Überschrift)ist problematisch, da sie nicht <strong>ein</strong>deutig ist, d.h. daß mehrere Inhalteunter dem gleichen Pfad erreichbar s<strong>ein</strong> könnten. Eine pfadorientierte Sprache <strong>zur</strong> Selektion ist alsonicht ausreichend.Man könnte die Inhalte natürlich auch über andere (implizite) Merkmale selektieren. Also z.B. über<strong>ein</strong>en enthaltenen Text. Allerdings ist der Aufwand für die Sicherstellung der Eindeutigkeit <strong>und</strong> derkorrekten Selektion wesentlich höher als bei der Verwendung <strong>ein</strong>er ID, der Nutzen hingegen fast dergleiche.42


4.2. Erforderliche Werkzeuge4.2. Erforderliche WerkzeugeDieser Abschnitt soll <strong>ein</strong>en Überblick darüber geben, welche gr<strong>und</strong>legenden Werkzeuge benötigt werden,um den in Kapitel 3 beschriebenen Präsentations-Erzeugungsprozeß zu realisieren.4.2.1. Kombination von ProzessorenAuf diese Thematik wurde bereits im letzten Abschnitt <strong>ein</strong>gegangen. Prinzipiell kann der Aufruf vonProzessoren auf zwei Weisen erfolgen:1. Die Prozessoren werden durch Funktionsaufrufe realisiert. Die Steuerung übernimmt das Programm,in dem diese Funktionsaufrufe formuliert sind. Die Daten werden in <strong>ein</strong>er gem<strong>ein</strong>samenDatenstruktur (z.B. <strong>ein</strong>em DOM-Baum) gehalten 1 .2. Die Prozessoren werden durch eigenständige Programme realisiert. Die Steuerung übernimmt<strong>ein</strong> Steuerungsprogramm, das die <strong>ein</strong>zelnen Programme in <strong>ein</strong>er definierten Abfolge aufruft.Die Daten werden in <strong>ein</strong>em gem<strong>ein</strong>samen Austauschformat (z.B. als textuelle XML-Dokumente)entweder über die Standard-Ein/Ausgabe oder über Dateien übergeben.Vorteil von 1. ist <strong>ein</strong>e bessere Laufzeiteffizienz, da nicht jeder Prozessor zunächst die erhaltenen Datenin <strong>ein</strong>e interne Datenstruktur parsen muß <strong>und</strong> die Funktionen intern sehr schnell aufgerufen werdenkönnen. Der Nachteil ist jedoch, daß alle Prozessoren in <strong>ein</strong>em <strong>ein</strong>zigen monolithischen Programmformuliert werden, was die Austauschbarkeit erschwert. Ein Mittelweg wäre die Realisierung derProzessoren in Form von extern implementierten Funktionen in APIs, wodurch allerdings die Wahlder Programmiersprache vorgegeben wäre.Vorteil von 2. ist die Flexibilität des Prozesses, da die Prozessoren mit annähernd beliebigen Formalismenspezifiziert <strong>und</strong> beliebig ausgetauscht werden können. Nachteil ist das im vorangegangenenAbsatz bereits angesprochene wiederholte Parsen der Dokumente.Welcher <strong>Ansatz</strong> besser geeignet ist, hängt vom Anwendungszweck ab: Für <strong>ein</strong> Produktionssystem, beidem der Prozeß relativ stabil ist, ist sicher der erste <strong>Ansatz</strong> besser geeignet, für <strong>ein</strong> Produktionssystemmit <strong>ein</strong>em sich häufig ändernden Prozeß oder für <strong>ein</strong>en Prototypen der zweite.4.2.2. Prozessoren für TransformationenFür viele deklarative Anfragesprachen gibt es Software, die die in dieser Sprache formulierten Anfragenauf Dokumenten durchführt. Diese Programme werden ebenfalls Prozessoren genannt. Daß derBegriff Prozessor in dieser Arbeit für die Einheiten des Präsentations-Erzeugungsprozesses verwendetwird, ist k<strong>ein</strong> Zufall. Sie machen im Gr<strong>und</strong>e das gleiche: Sie führen Transformationen auf demDaten- bzw. <strong>Layout</strong>baum, hier also auf XML-Dokumenten, durch.Existiert <strong>ein</strong>e Transformation des Präsentations-Erzeugungsprozesses in <strong>ein</strong>er Anfragesprache, diesolche Prozessoren bietet, so liegt der Einsatz <strong>ein</strong>es solchen Prozessors nahe.1 Natürlich kann es auch entfernte Funktionsaufrufe geben, wie z.B. mit CORBA. Allerdings ersch<strong>ein</strong>en diese dem Programmselbst als lokale Aufrufe, da der Aufruf durch den Client Stub <strong>und</strong> dessen data marshaling transparent durchgeführtwird.43


4. Rahmenbedingungen <strong>ein</strong>er ImplementierungManchmal ist es jedoch von Vorteil, <strong>ein</strong>e Transformation in <strong>ein</strong>er eigenen deklarativen Sprache zuformulieren, entweder weil es k<strong>ein</strong>en Formalismus gibt, mit dem die Transformation klar ausgedrücktwerden kann oder weil noch k<strong>ein</strong> passender Prozessor verfügbar ist. (Ein solcher Fall ist z.B. der<strong>Layout</strong>beschreibungsbaum.)Um diese eigene Sprache anzuwenden, muß sie entweder direkt interpretiert <strong>und</strong> ausgeführt werden,d.h. es muß also <strong>ein</strong> eigener Prozessor für diese Sprache entwickelt werden, oder sie muß in <strong>ein</strong>eandere Anfragesprache übersetzt werden.4.3. Verfügbare Sprachmittel <strong>und</strong> WerkzeugeIn den letzten beiden Abschnitten wurden die Anforderungen an die Sprachmittel <strong>und</strong> Werkzeuge für<strong>ein</strong>e Implementierung untersucht. Nun soll <strong>ein</strong>e Auswahl verfügbarer Sprachmittel <strong>und</strong> Werkzeugevorgestellt <strong>und</strong> verglichen werden. Eine Entscheidung, welche Sprachmittel <strong>und</strong> Werkzeuge für dieImplementierung des Präsentations-Erzeugungsprozesses verwendet werden, wird im nächsten Kapitelgetroffen.4.3.1. Baumbasierte TransformationsspracheIm Folgenden soll <strong>ein</strong> knapper Überblick über <strong>ein</strong>ige Ansätze <strong>zur</strong> Transformation von XML-Dokumentengegeben werden. Die vorgestellten Ansätze sind weder vollständig noch ist ihre Darstellungerschöpfend behandelt, da dies über den Rahmen dieser Arbeit hinausgehen würde.Die Ansätze werden nun zunächst erläutert <strong>und</strong> dann in <strong>ein</strong>em Vergleich in Hinblick auf ihre Verfügbarkeit,der Natürlichkeit bei der Formulierung <strong>ein</strong>er Transformation <strong>und</strong> ihrer Ausdrucksfähigkeitgegenübergestellt.4.3.1.1. XSLTXSLT ist <strong>ein</strong> regelbasierter <strong>Ansatz</strong> <strong>zur</strong> Transformation von XML-Dokumenten, der Ende 1999 vondem W3C als Recommendation 2 , also gewissermaßen als Standard, <strong>ein</strong>gestuft wurde [42].XSLT transformiert <strong>ein</strong> XML-Dokument (source tree) in <strong>ein</strong> beliebig strukturiertes Zieldokument(result tree). Die Transformationsanweisungen dafür werden in <strong>ein</strong>em sogenannten Stylesheet formuliert.Die Stylesheets sind ebenfalls XML-Dokumente, deren Elemente in dem Namensraum http://www.w3.org/1999/XSL/Transform definiert sind.Sie bestehen aus <strong>ein</strong>er Ansammlung von Regeln (template rules), die jeweils aus zwei Teilen bestehen:Einem pattern <strong>und</strong> <strong>ein</strong>em template. Das pattern entspricht dem Selektor <strong>ein</strong>er Anfragesprache, dastemplate dem Konstruktor. Für die <strong>Spezifikation</strong> der pattern wird XPath [37] verwendet.XSLT bietet Variablen an, allerdings entsprechen sie eher Konstanten, da sie fest an <strong>ein</strong>en Ausdruckgeb<strong>und</strong>en sind.Abbildung 4.1 zeigt <strong>ein</strong> Beispiel für <strong>ein</strong> XSLT-Stylesheet. Darin wird <strong>ein</strong>e HTML-Liste mit dem Inhaltaller title-Elemente, die sich in <strong>ein</strong>em section-Element befinden, erzeugt.2 Der Weg zu <strong>ein</strong>er fertigen <strong>Spezifikation</strong> (Recommendation) führt über die Stufen Working Draft (WD), Last Call WorkingDraft, Candidate Recommendation (CR) <strong>und</strong> Proposed Recommendation (PR) hin <strong>zur</strong> Recommendation (REC).44


4.3. Verfügbare Sprachmittel <strong>und</strong> WerkzeugeABBILDUNG 4.1.: Beispiel für Transformationen in XSLTBei der Transformation wird, ausgehend vom Wurzelknoten, diejenige Regel aktiviert, deren Selektorden momentanen Knoten matcht. Bei mehreren passenden Regeln wird diejenige mit dem spezifischerenSelektor ausgewählt.Der Konstruktor der Regel spezifiziert die im Zieldokument <strong>ein</strong>zufügenden Elemente. Er kann auchbestimmen, ob die Regelbearbeitung auf allen oder auf <strong>ein</strong>igen der Nachfolger-Elemente oder auchin <strong>ein</strong>em ganz anderen Teilbaum rekursiv fortgeführt wird oder daß sie für diesen Ast beendet wird.Allerdings bezieht sich dabei Rekursion nur auf den Aufruf der Regeln <strong>und</strong> nicht auf die Eingabedatender Regeln: Die Eingabedaten sind immer Elemente des Quelldokuments.4.3.1.2. fxtfxt ist <strong>ein</strong> <strong>Ansatz</strong>, der an der Universität Trier entstanden ist [5]. Er ist (wie XSLT) <strong>ein</strong> regelbasierter<strong>Ansatz</strong>, dessen Regeln in XML formuliert werden. Anders als in XSLT dienen hier jedoch dieformulierten Regeln nicht unmittelbar der Transformation des XML-Quelldokuments, sondern werdenzunächst in <strong>ein</strong>en sogenannten transformer übersetzt, mit dem dann das XML-Quelldokumenttransformiert werden kann.fxt selbst ist in der funktionalen Programmiersprache SML implementiert <strong>und</strong> auch der transformerist wieder <strong>ein</strong> SML-Programm. Dies ist <strong>ein</strong>er der großen Vorteile dieses <strong>Ansatz</strong>es, denn in den Regelnkönnen ebenfalls SML-Funktionen spezifiziert werden, so daß für komplexe Transformationen <strong>ein</strong>emächtige Programmiersprache im Hintergr<strong>und</strong> bereit steht.Ein weiterer großer Vorteil dieses <strong>Ansatz</strong>es ist das Variablenkonzept: In fxt können globale Variablendefiniert werden, deren Werte sich, im Gegensatz zu XSLT, während des Transformationsprozessesändern können. Dazu sind die Variablen als Keller aufgebaut, in den die Werte mit <strong>ein</strong>em push-Operator gelegt <strong>und</strong> aus dem sie mit <strong>ein</strong>em get-Operator gelesen, bzw. mit <strong>ein</strong>em pop-Operator entferntwerden können. Erlaubte Werte sind dabei sowohl atomare Werte als auch Bäume oder Wälder.Nachteil dieses Konzeptes mit globalen Variablen ist natürlich, daß die referentielle Transparenz derRegeln verloren geht. Vorteil des Kellerprinzips ist, daß echte Rekursion möglich wird.45


4. Rahmenbedingungen <strong>ein</strong>er ImplementierungAnstatt dem pfadorientierten XPath verwendet fxt <strong>ein</strong>en ganz anderen <strong>Ansatz</strong>: fxgrep [3], das aufregulären Ausdrücken für Bäume basiert.Abbildung 4.2 zeigt das XSLT-Beispiel aus Abbildung 4.1 als Transformations-<strong>Spezifikation</strong> für fxt./*//section/title/""defaultABBILDUNG 4.2.: Beispiel für Transformationen in fxt4.3.1.3. HaXmlHaXml [25] implementiert zwei gr<strong>und</strong>legend unterschiedliche Ansätze, mit denen XML-Dokument<strong>ein</strong> der funktionalen Programmiersprache Haskell bearbeitet werden können. Der <strong>ein</strong>e stellt <strong>ein</strong>e Bibliothekvon Funktionen <strong>zur</strong> Verfügung, mit der alle möglichen XML-Dokumente selektiert, generiert<strong>und</strong> transformiert werden können. Der andere implementiert <strong>ein</strong>e Umgebung, in der aus <strong>ein</strong>er vorhandenenDTD Definitionen für Haskell-Datentypen abgeleitet <strong>und</strong> Funktionen <strong>zur</strong> Verfügung gestelltwerden, die die XML-Dokumente, die der DTD entsprechen, als typisierte Werte <strong>ein</strong>lesen <strong>und</strong> schreiben.Hier soll nur der erste <strong>Ansatz</strong> betrachtet werden. Der zweite ist zwar außer Frage sehr mächtig, allerdingsfehlt ihm – naturgemäß – jede Möglichkeit, gesondert Transformationen deklarativ zu definieren.Wenn im folgenden von HaXml gesprochen wird, ist damit immer der erste <strong>Ansatz</strong> gem<strong>ein</strong>t.HaXml ist nicht wie XSLT oder fxt regelbasiert, sondern besitzt <strong>ein</strong> Konzept, das auf Filtern <strong>und</strong>Kombinatoren (combinators) basiert.An Filtern gibt es sogenannte predicate and selection filters, das sind Filter, die Inhalte des XML-Quelldokuments annehmen <strong>und</strong> bestimmte Inhalte davon <strong>zur</strong>ückliefern, <strong>und</strong> construction filters, dassind Filter, die Inhalte annehmen <strong>und</strong> daraus Teile des XML-Zieldokuments erzeugen (wie z.B. Elemente,Attribute oder Textinhalte).Predicate filters sind z.B. keep, der jeden Inhalt <strong>ein</strong>fach durchreicht, tag , der nur dasElement mit dem Namen <strong>zur</strong>ückliefert oder txt, der nur den Textinhalt <strong>ein</strong>es Elements<strong>zur</strong>ückgibt. Construction filters sind z.B. mkElem, der <strong>ein</strong> Element erzeugt oder replaceAttrs,der Attribute <strong>ein</strong>es Elements ersetzt.Mit den Kombinatoren werden mehrere Filter verknüpft. Der <strong>ein</strong>fachste ist ’o’, die sogenannte irishcomposition, bei dem der auf der linken Seite stehende Filter auf die Ergebnisse des auf der rechtenSeite stehenden angewandt wird.46


4.3. Verfügbare Sprachmittel <strong>und</strong> WerkzeugeDie (pfadorientierte) Navigation im XML-Quelldokument wird ebenfalls über die Kombinatoren bewerkstelligt.Der Kombinator /> liefert die innere Struktur <strong>ein</strong>es Unterelements, then-Teil :> else-Teil.Um <strong>ein</strong>e rekursive Bearbeitung von Bäumen zu ermöglichen, gibt es <strong>ein</strong>e Reihe von recht mächtigenKombinatoren: deep, um <strong>ein</strong>en Filter rekursiv absteigend auf das jeweils erste passenden Element in<strong>ein</strong>en Teilbaum anzuwenden, deepest, um <strong>ein</strong>en Filter auf das jeweils tiefste passende Element imTeilbaum anzuwenden, multi, um <strong>ein</strong>en Filter auf alle passenden Elemente <strong>ein</strong>es Teilbaumes anzuwenden<strong>und</strong> foldXml, um <strong>ein</strong>en Filter auf alle Ebenen <strong>ein</strong>es Teilbaumes, bei den Blättern beginnend,anzuwenden.Abbildung 4.3 zeigt das Beispiel aus Abbildung 4.1 als HaXml-Skript.module Main whereimport Xmlmain = processXmlWith (mkElem "UL" [deep (tag "section" /> tag "title" ?>mkElem "LI" [ keep /> txt ] :>none)])ABBILDUNG 4.3.: Beispiel für Transformationen in HaXml4.3.1.4. XQueryXQuery [40] ist <strong>ein</strong>e <strong>Spezifikation</strong> <strong>ein</strong>er funktionalen Anfragesprache für XML-Dokumente, die nochim Entwurfsstadium ist 3 . Aufgr<strong>und</strong> des frühen Stadiums der <strong>Spezifikation</strong> kann die nachfolgendeDarstellung von XQuery nur <strong>ein</strong>en Überblick über den momentanen Stand geben, da sich vieles nochändern kann.Der gr<strong>und</strong>legende Bestandteil <strong>ein</strong>er XQuery-Anfrage ist der Ausdruck. Ein Ausdruck besteht aus <strong>ein</strong>erAnzahl von Komponenten. Unter anderem sind dies:Pfadausdrücke: Sie sind durch XPath 2.0 spezifiziert. Dies umfaßt unter anderem die von XPath1.0 bekannten absoluten <strong>und</strong> relativen Pfade <strong>und</strong> Achsen-Spezifizierer (axis steps <strong>und</strong> generalsteps) <strong>und</strong> zusätzlich noch <strong>ein</strong> Dereferenzierungs-Konstrukt (dereference) zum Auflösen vonReferenzen mittels ID <strong>und</strong> IDREF.Konstruktoren: Diese können entweder Konstanten s<strong>ein</strong> (formuliert als Elemente <strong>und</strong> Attribut<strong>ein</strong> der bekannten XML-Notation) oder Ausdrücke, gekennzeichnet dadurch, daß sie von3 Die <strong>Spezifikation</strong> von XQuery hat momentan den Status ”Working Draft“, was bedeutet, daß der Entwurf jederzeit ersetztoder geändert werden kann.47


4. Rahmenbedingungen <strong>ein</strong>er Implementierunggeschweiften Klammern umgeben sind. Ausdrücke sind zum Beispiel Variablen, die mit Funktionenoder FLWR-Ausdrücken geb<strong>und</strong>en wurden.Beispiel für <strong>ein</strong>en Konstruktor:{ $b//title }Here is an exampleFLWR-Ausdrücke: Sie dienen der Deklaration <strong>und</strong> Bindung von Variablen. Sie bestehen ausFor-, Let-, Where- <strong>und</strong> Return-Klauseln.– For-Klauseln binden Variablen der Reihe nach an alle Elemente, die durch <strong>ein</strong>en Pfadausdruckbestimmt wurden (Iteration).– Let-Klauseln binden die Variablen an die ganze Sequenz der durch den Pfadausdruck bestimmtenElementen.– Where-Klauseln filtern die Variablenbindungen.– Return-Klauseln b<strong>ein</strong>halten <strong>ein</strong>en Ausdruck, mit dem das Ergebnis <strong>ein</strong>es FLWR-Ausdrucksgebildet wird; dies ist entweder <strong>ein</strong> Konstruktor oder auch <strong>ein</strong> primitiver Rückgabewert(Integer, Text, . . . ).Beispiel für <strong>ein</strong>en FLWR-Ausdruck:for $b in document("bib.xml")//bookwhere $b/publisher = "Addison-Wesley"and $b/year = "2001"return $b/titleDas Beispiel liefert <strong>ein</strong>e Sequenz aller Buchtitel von Addison-Wesley, die 2001 erschienen sind.Quantifizierte Ausdrücke: Sie beschreiben sowohl Allquantoren (every) als auch Existenzquantoren(some).Beispiele für quantifizierende Ausdrücke:some $b in //book satisfies $b/year = "2001"Der Ausdruck ist wahr, wenn es mindestens <strong>ein</strong> Buch gibt, das 2001 erschienen ist.every $b in //book satisfies $b/year = "2001"Der Ausdruck ist wahr, wenn alle vorkommenden Bücher 2001 erschienen sind.XQuery läßt die Definition von benutzerspezifischen Funktionen zu. Die Funktionen können beliebigeWerte über Parameter erhalten, also sowohl Werte mit primitivem Datentyp als z.B. auch Elemente,<strong>und</strong> ebensolche Werte <strong>zur</strong>ückgeben. Der rekursive Aufruf von Funktionen ist ebenfalls erlaubt.Beispiel für <strong>ein</strong>e benutzerspezifische Funktion:define function depth(element $e) returns xs:integer {if (empty($e/*)) then 1else max(for $c in $e/* return depth($c)) + 1}depth(document("partlist.xml"))Der Funktionsaufruf im Beipiel liefert die maximale Tiefe des Dokuments ”partlist.xml“.48


4.3. Verfügbare Sprachmittel <strong>und</strong> Werkzeuge4.3.1.5. xcerptxcerpt ist die <strong>Spezifikation</strong> <strong>ein</strong>er Logikanfragesprache für XML-Dokumente, die, wie XQuery, nochim Entwurfsstadium ist. Sie entsteht <strong>zur</strong> Zeit an der LFE für Programmier- <strong>und</strong> Modellierungssprachender LMU München [8, 7].Im Gegensatz zu den funktionalen Anfragesprachen wie XSLT oder fxt, in denen Regeln rekursiv weitereRegeln aufrufen <strong>und</strong> aus deren Rückgabewerten, eigenen Konstruktorelementen <strong>und</strong> selektiertenoder berechneten Elementen wieder <strong>ein</strong>en Rückgabewert konstruieren <strong>und</strong> somit <strong>ein</strong>e starke Vermischungvon Konstruktoren <strong>und</strong> Selektoren aufweisen, trennt xcerpt mit s<strong>ein</strong>em logischen Paradigmadiese beiden Bereiche stark von <strong>ein</strong>ander ab:xcerpt besitzt <strong>ein</strong>en Selektorteil (where), in dem Variablen definiert werden <strong>und</strong> <strong>ein</strong>en Konstruktorteil(construct), in den diese Variablen <strong>ein</strong>gesetzt werden können. Geb<strong>und</strong>en werden die Variablendurch <strong>ein</strong>e spezielle Form der Unifikation, genannt simulation unification. Diese spezielle Form derUnifikation ist für das pattern matching nötig, <strong>und</strong> um den Spezifika von Anfragen auf Bäumen gerechtzu werden, wie Beziehungen zu Nachfolgern beliebiger Tiefe (desc) oder Anfragemuster (as).In xcerpt existieren ebenfalls quantifizierte Ausdrücke: all als Allquantor <strong>und</strong> some als Existenzquantor.Ein Beispiel für <strong>ein</strong>e Anfrage in xcerpt findet sich in Abbildung 4.4. Es zeigt den gleichen Sachverhaltwie die Beispiele für XSLT, fxt <strong>und</strong> HaXml.constructall var Twheredesc var TABBILDUNG 4.4.: Beispiel für Transformationen in xcerptAufgr<strong>und</strong> des frühen Stadiums ist zu erwarten, daß unter anderem die Syntax der Sprache noch gewissenÄnderungen unterliegt, so daß das Beispiel nur <strong>ein</strong>en momentanen Stand wiederspiegelt.4.3.1.6. Weitere TransformationssprachenNatürlich sind noch <strong>ein</strong>e Anzahl weiterer Anfragesprachen für XML verfügbar. Unter anderem sinddies Quilt [9], XML-QL [11], XQL [22], Lorel [1] <strong>und</strong> YATL [23]. Diese haben jedoch alle gem<strong>ein</strong>,daß sie entweder in ihrem Verwendungszweck recht spezifisch ausgerichtet sind oder daß sie sichfür die Verarbeitung von XML-Dokumenten nicht durchsetzen konnten. Ganz unbedeutend für dieheutige Entwicklung sind sie natürlich auch wieder nicht: So basiert z.B. XQuery auf Quilt <strong>und</strong> Quiltselbst hat wiederum Anlehnungen an <strong>ein</strong>e Reihe anderer der oben genannten Anfragesprachen.Bewußt außen vor gelassen wurde die Einbettung von XML in Programiersprachen wie Java (mit<strong>ein</strong>er baumorientierten Schnittstelle zu XML wie DOM oder <strong>ein</strong>er eventbasierten wie SAX), Prolog(mit dem SWI-Prolog SGML/XML parser [28]), Haskell (mit der oben kurz genannten Übersetzungvon DTDs in Haskell-Datentypen [25]) <strong>und</strong> anderen, da hier Ansätze <strong>zur</strong> deklarativen <strong>Spezifikation</strong>von Transformationen untersucht werden sollten.49


4. Rahmenbedingungen <strong>ein</strong>er Implementierung4.3.1.7. Vergleich der TransformationssprachenAbbildung 4.5 zeigt <strong>ein</strong>en Vergleich der hier vorgestellen Transformationssprachen, in dem <strong>ein</strong>ig<strong>ein</strong>teressante Aspekte herausgegriffen wurden.XSLT fxt HaXml XQuery XcerptRekursive BearbeitungdesQuelldokumentsJa. (WiederholtesAnwendenvon Regeln)Ja. (WiederholtesAnwendenvon Regeln)Ja. (Kombinatoren<strong>zur</strong> Unterstützung:deep,deepest,multi,foldXML)Ja. (Iterationdurch for)Ja. (WiederholtesAnwendenvon Regeln)Rekursives Bearbeitender erzeugtenStrukturenN<strong>ein</strong>.Ja. (Keller inglobalenVariablen)Ja. (RekursiverAufrufbenannter Filter)Ja. (RekursiverAufrufbenutzerdefinierterFunktionen)Ja. (Unifikationder Regeln)Kontexte für Regelnmit gleichemSelektorJa. N<strong>ein</strong>. Ja. Ja. Ja.Seiteneffekte N<strong>ein</strong>. Ja. (Verlustder referentiellenTransparenzdurchglobaleVariablen)N<strong>ein</strong>.Möglich. (Jenach Definitionder SichtbarkeitvonVariablen)N<strong>ein</strong>.VariablenJa. (AnAusdruckgeb<strong>und</strong>en)Ja. (GlobaleVariablen mitKellerprinzip)N<strong>ein</strong>.Ja. (Werdendurch for,let oderFunktionengeb<strong>und</strong>en)Ja. (Werdendurch Unifikationgeb<strong>und</strong>en)VerwendeteSprache fürSelektionXPath 1.0.(Pfadorientiert)fxgrep. (ReguläreAusdrückeaufBäumen)Filter <strong>und</strong>Kombinatoren.(Pfadorientiert)XPath 2.0.(Pfadorientiert)Auf allgem<strong>ein</strong>enGraphenbasiert.Eigene FunktionendefinierenJa. (BenannteTemplates)Ja. (Definitionvon Funktioneninline <strong>und</strong>extern möglich.Sprache:SML)Ja. (Definitionvon Filtern<strong>und</strong> Kombinatorenintern<strong>und</strong> externmöglich)Ja. (Definitionvon Funktionenmöglich.Sprache:XQuery)Ja. (BenannteRegeln, externeFunktionengeplant)DereferenzierungJa. (key/key()-Konzept)Ja. (key/copyKey-Konzept)N<strong>ein</strong>.Ja. (dereference-Operator:= )Geplant.Verfügbar? Ja. Ja. Ja. Ja. (Technologiestudien)Ja. (Prototyp)ABBILDUNG 4.5.: Vergleich der Transformationssprachen50


4.3. Verfügbare Sprachmittel <strong>und</strong> Werkzeuge4.3.2. Sprache <strong>zur</strong> Definition von <strong>Layout</strong>beschreibungsbäumenDie Generierung <strong>ein</strong>es <strong>Layout</strong>baumes aus <strong>ein</strong>em <strong>Layout</strong>beschreibungsbaum ist im Prinzip <strong>ein</strong> typischesProblem <strong>ein</strong>er Anfragesprache: Anhand der Konstruktoren wird die Struktur des <strong>Layout</strong>baumesfestgelegt, die Selektoren ergänzen die Daten aus dem Datenbaum <strong>und</strong> mit Filtern können die Dateneventuell noch <strong>ein</strong>geschränkt werden.Allerdings ist <strong>ein</strong>e <strong>ein</strong>fache <strong>und</strong> übersichtliche Definition des <strong>Layout</strong>beschreibungsbaums sehr wichtig,wie bereits in Abschnitt 4.1.2 dargelegt wurde.Aus diesem Gr<strong>und</strong> kommen von den gezeigten Anfragesprachen nur XQuery <strong>und</strong> xcerpt in Frage,deren Konstruktoren sich sehr an der Baumstruktur des Zieldokuments orientieren. Eine weitereMöglichkeit ist der Einsatz <strong>ein</strong>er eigenen Regelsprache, die in <strong>ein</strong>e der gezeigten Anfragesprachenübersetzt wird. Da sowohl XQuery als auch xcerpt noch in der Entwicklung sind, ist dies wohl <strong>zur</strong>Zeit auch die <strong>ein</strong>zige Möglichkeit.4.3.3. Sprache <strong>zur</strong> Kombination von ProzessorenIn Abschnitt 4.2.1 wurden die unterschiedlichen Vorgehensweisen <strong>zur</strong> Kombination von Prozessen<strong>und</strong> ihre Vorzüge bereits ausführlich behandelt.Für die prototypische Implementierung in dieser Arbeit ist sicher der <strong>Ansatz</strong>, in dem die Prozessorendurch eigenständige Programme realisiert werden, von Vorteil. Das Steuerprogramm für die Aufrufekann prinzipiell in jeder Programmiersprache, die externe Programmaufrufe zuläßt, implementiertwerden.4.3.4. Generische AusdrückeMit den generischen Ausdrücken werden in dieser Arbeit drei unterschiedliche Sachverhalte beschrieben:1. Generische <strong>Layout</strong>konstrukte, wie z.B. Tabellen, Listen, Absätze usw.2. Generische Styleanweisungen, wie z.B. Überschriften, Hervorhebung usw.3. Generische Sonderzeichen, wie z.B. Umlaute, diverse Trennzeichen usw.Für alle Sachverhalte müssen geeignete Bibliotheken geschaffen werden.Zu 1.: Hier bietet sich <strong>ein</strong>e Anlehnung an die in Abschnitt 1.3.1 beschriebenen XSL Formatting Objectsan.Zu 2.: Die Styleanweisungen beschreiben nicht nur “physische” Texteigenschaften (Schriftart, -größe,-farbe usw.), sondern auch semantische Texteigenschaften (Überschrift, Hervorhebung, Zitat usw.).XSL Formatting Objects all<strong>ein</strong> ist somit für diesen Anwendungszweck nicht geeignet, da es nur aufdie physischen Texteigenschaften <strong>ein</strong>geht.Da leider noch k<strong>ein</strong>e Beschreibungssprache für Präsentationen existiert, die <strong>ein</strong>e klare Trennung zwischen<strong>Layout</strong>- <strong>und</strong> Style-Auszeichnungen (im Sinne dieser Arbeit) macht, sondern immer <strong>ein</strong>e starkeVermischung dieser beiden Sachverhalte besteht (u.a. in HTML <strong>und</strong> L A TEX), bietet sich hier an, aus51


4. Rahmenbedingungen <strong>ein</strong>er Implementierungden Anweisungen der verschiedenen Präsentations-Zielsprachen (HTML, L A TEX, . . . ) <strong>ein</strong>e pragmatischeTeilmenge zu bilden, die aus denjenigen Anweisungen besteht, die solche semantischen Texteigenschaftenbeschreiben.Zu 3.: Es bietet sich <strong>ein</strong>e Anlehnung an bestehende Standards an. Insbesondere sind dies der ISO-Standard 8879:1986//ENTITIES Added Latin 1//EN, in dem Entity Sets für Zeichen definiertwerden <strong>und</strong> die HTML 4.01 Specification [34], in der Entity Sets definiert werden, die aufdenen von ISO-8879 basieren <strong>und</strong> diese noch erweitern.Allerdings wird nicht der volle Umfang der bestehenden Ansätze nötig s<strong>ein</strong>, sondern lediglich <strong>ein</strong>eTeilmenge.4.3.5. Sprache zum Zugriff auf Inhalte der Präsentation in <strong>ein</strong>em TemplateDie Notwendigkeit, daß die Selektionssprache für die Inhalte mit Verweisen auf ID-Attribute <strong>zur</strong>echtkommenmuß, wurde in Abschnitt 4.1.5 bereits dargelegt.Von den vorgestellten Anfragesprachen unterstützen dies XSLT, fxt <strong>und</strong> XQuery <strong>und</strong> in <strong>ein</strong>geschränkterForm auch xcerpt.52


5. Prototypische Implementierung PEPMit PEP 1 sollen Möglichkeiten der Implementierung des Präsentations-Erzeugungsprozesses untersuchtwerden.Dafür wird zum <strong>ein</strong>en <strong>ein</strong>e Implementierung <strong>ein</strong>es ver<strong>ein</strong>fachten durchgängigen Prozesses vorgenommen,der, wie in Kapitel 3 beschrieben, <strong>ein</strong>e Datenquelle als Eingabe besitzt <strong>und</strong> <strong>ein</strong> Dokumentin <strong>ein</strong>er beliebigen Zielsprache als Ausgabe generiert. Zum anderen wird die Implementierung <strong>ein</strong>es<strong>ein</strong>zelnen Prozessors in unterschiedlichen Transformationssprachen verglichen.Für die Erläuterung des Prozesses <strong>und</strong> der Prozessoren wird in dieser Arbeit folgendes XML-Dokumentals Datenquelle verwendet:Informatik 14BryOhlbachDi102The122Do102TheE51Praktiukum ”XML <strong>und</strong> E-Commerce”PG1 Der Name ”PEP“ steht naheliegender Weise für ”Präsentations-ErzeugungsProzeß“.53


5. Prototypische Implementierung PEPA4BryMo94OettZ7Fortgeschrittenenpraktikum4BryConradHegeringHofmannKriegelKroegerLinnhoff-PopienOhlbachWirsingZimmerBeginn jederzeit moeglichPraktikum GruppendynamikN.N.Aushang beachtenABBILDUNG 5.1.: Beispielhafte Datenquelle für PEPDas Dokument gibt <strong>ein</strong>en stark ver<strong>ein</strong>fachten Ausschnitt typischer <strong>Lehr</strong>angebotsdaten wieder. Dadarauf verzichtet wurde, Prozessoren aus dem Prozeßabschnitt “Daten” (Abschnitt 3.2) zu implementieren,stellt das Dokument bereits <strong>ein</strong>e durch den Abschnitt “Daten” aufbereitete Datenquelle dar.Der Prozeß <strong>und</strong> die Prozessoren, die im Weiteren vorgestellt werden, sind großenteils natürlich nichtspeziell auf dieses Dokument hin ausgerichtet.Eine mögliche Ausgabe des Prozesses, die mit PEP aus der Datenquelle erzeugt wird – hier <strong>ein</strong>HTML-Dokument –, zeigt Abbildung 5.2.54


5.1. Implementierung des ProzessesABBILDUNG 5.2.: Beispielhafte Ausgabe von PEP in HTML, dargestellt mit <strong>ein</strong>em HTML-Browser5.1. Implementierung des ProzessesDie Implementierung von PEP erfolgte für Linux. Für die Implementierung des Prozesses wurden nurStandardhilfsmittel von Linux <strong>ein</strong>gesetzt, die in anderen Betriebssystemen ebenfalls existieren <strong>und</strong>sich leicht übertragen lassen. Auf lange Sicht ist es allerdings sinnvoll, die Definition des Prozesses in<strong>ein</strong>er betriebssystemunabhängigen <strong>und</strong> XML-basierten Sprache zu formulieren.Eine solche Spache ist z.B. mit XML Pipeline [26] gerade im Entstehen. Jedoch besitzt das momentanbeim W3C veröffentlichte Dokument, das XML Pipeline beschreibt, gerade erst <strong>ein</strong>mal den Status<strong>ein</strong>er ”Submission“, die <strong>zur</strong> Diskussion freigegeben ist. Deshalb wäre es verfrüht, XML Pipeline zuverwenden.Die gegenwärtige Implementierung von PEP ist allerdings so offen angelegt, daß <strong>ein</strong>e Ersetzung durchXML Pipeline jederzeit möglich wäre, ohne den Rest von PEP zu be<strong>ein</strong>flussen.Für die Beschreibung der Prozessoren wurden unterschiedliche XML-Transformationssprachen (sieheAbschnitt 4.3) <strong>und</strong> entsprechende Werkzeuge, die die Transformationen ausführen, verwendet.Wie die momentane Implementierung im Einzelnen aussieht, wird in den nächsten Abschnitten erläutert.5.1.1. Realisierung der ProzessorenDie Prozessoren wurden in Form von Shellskripten realisiert. Die Shellskripte für die <strong>ein</strong>zelnen Prozessorentragen <strong>ein</strong>heitlich den Namen prozessor.sh <strong>und</strong> befindet sich jeweils in <strong>ein</strong>em eigenenVerzeichnis, dessen Name die Aufgabe des Prozessors bezeichnet. Zusätzlich wurden diese Verzeichnissenoch durch übergeordnete Verzeichnisse zusammengefaßt, deren Namen die Bezeichnungen der<strong>ein</strong>gesetzten Sprachen oder Werkzeuge sind.Die entstandene Verzeichnisstruktur sieht ungefähr so aus wie in Abbildung 5.3 dargestellt.55


5. Prototypische Implementierung PEPsrc/fx/flatten/generischeausdruecke/layoutbaum/prettyprinting/pruning/serialisierung/template/trenntexteaufloesen/trenntextehinzufuegen/gema/template/zeichennachursprung/zeichennachxml/haxml/layoutbaum/xcerpt/layoutbaum/xquery/layoutbaum/xslt/layoutbaum/ABBILDUNG 5.3.: Verzeichnisstruktur von PEP5.1.2. Datenschnittstelle der ProzessorenDie Prozessoren wurden so implementiert, daß sie Eingaben stets über die Standard<strong>ein</strong>gabe entgegennehmen<strong>und</strong> Ausgaben auf die Standardausgabe schreiben. Eventuell können noch Parameter über dieKommandozeile übergeben werden.Die Ein- <strong>und</strong> Ausgabe ist dabei immer <strong>ein</strong> XML-Dokument (mit der Ausnahme des ersten <strong>und</strong> letztenProzessors, siehe Abschnitt 3.1.3).Dies macht es möglich, mehrere Prozessoren über UNIX-Pipes als Kette hinter<strong>ein</strong>anderzuhängen.5.1.3. Registrierung der ProzessorenUm den Speicherort der <strong>ein</strong>zelnen Prozessoren transparent zu halten, werden sie als Shellvariablenregistriert, die das Präfix PEPP 2 <strong>und</strong> ihre Aufgabe als Namen tragen <strong>und</strong> deren Wert der kompletteAufruf des jeweiligen Shellskripts prozessor.sh ist.Zentraler Ort für diese Registrierungsdaten ist <strong>ein</strong>e Datei mit dem Namen registrierung prozessoren,die im Wurzelverzeichnis von PEP liegt. Abbildung 5.4 zeigt <strong>ein</strong>en Ausschnitt aus dieserDatei.Die verwendetete Datei ist <strong>ein</strong> Shellskript für Shells der csh-Familie; darin werden zunächst <strong>ein</strong>igeAbkürzungen für Verzeichnisse gesetzt (um u.a. die Lage möglichst variabel zu halten) <strong>und</strong> dann die<strong>ein</strong>zelnen Prozessoren definiert.2 PEPP steht für PEP Prozessor.56


5.1. Implementierung des Prozesses################################################################################### Wurzelverzeichnis von PEPsetenv PEP_HOME$HOME"/work/da/anwendung/src"################################################################################### Pfade zu den Unterverzeichnissen# fuer unterschiedliche Anfragesprachensetenv PEP_HOME_fxt$PEP_HOME"/fx"setenv PEP_HOME_GEMA$PEP_HOME"/gema"setenv PEP_HOME_XSLT$PEP_HOME"/xslt"...################################################################################### Prozessorensetenv PEPP_LAYOUTBAUM$PEP_HOME_XSLT"/layoutbaum/prozessor.sh"setenv PEPP_GENERISCHEAUSDRUECKE $PEP_HOME_fxt"/generischeausdruecke/prozessor.sh"setenv PEPP_FLATTEN$PEP_HOME_fxt"/flatten/prozessor.sh"setenv PEPP_SERIALISIERUNG $PEP_HOME_fxt"/serialisierung/prozessor.sh"setenv PEPP_PRETTYPRINTING $PEP_HOME_fxt"/prettyprinting/prozessor.sh"...ABBILDUNG 5.4.: Registrierung der Prozessoren5.1.4. Realisierung des ProzessesDer Prozeß wurde durch <strong>ein</strong>e Hinter<strong>ein</strong>anderschaltung von Prozessoren durch UNIX-Pipes realisiert.Die Hinter<strong>ein</strong>anderschaltung kann entweder in <strong>ein</strong>em gesonderten Shellskript definiert werden (z.B.für immer wiederkehrende Prozesse) oder aber auch direkt auf der Kommandozeile angegeben werden(z.B. für Testzwecke).Ein solcher Aufruf sieht z.B. wie folgt aus:$PEPP_LAYOUTBAUM < datenquelle.xml | $PEPP_PRUNING | $PEPP_PRETTYPRINTINGMit dem Aufruf wird das XML-Dokument datenquelle.xml durch den Prozessor layoutbaumin <strong>ein</strong>en <strong>Layout</strong>baum transformiert, aus dem anschließend durch den Prozessor pruning leereÄste entfernt werden <strong>und</strong> der zuletzt durch den Prozessor prettyprinting gut lesbar auf derStandardausgabe ausgegeben wird.In der Entwicklungsphase, aber auch im Betrieb, kann es vorkommen, daß die Ausgabe nicht den Erwartungenentspricht. In <strong>ein</strong>em solchen Fall kann man sich die Ausgabe <strong>ein</strong>es bestimmten Prozessorsganz <strong>ein</strong>fach anschauen, um z.B. zu überprüfen, ob das unerwartete Phänomen dort bereits auftrittoder durch <strong>ein</strong>en weiter hinten in der Kette liegenden Prozessor verursacht wird.Der Aufruf dafür sieht dann wie folgt aus:$PEPP_LAYOUTBAUM < datenquelle.xml | $PEPP_PRETTYPRINTINGBei dem Aufruf wurde auf <strong>ein</strong> Pruning des <strong>Layout</strong>baumes verzichtet <strong>und</strong> stattdessen der <strong>Layout</strong>baumgleich nach s<strong>ein</strong>er Erzeugung ausgegeben.57


5. Prototypische Implementierung PEP5.1.5. VorteileFolgende Vorteile ergeben sich durch die hier vorgestellten Implementierungsentscheidungen:5.1.5.1. FlexibilitätMit den Prozessoren wird gewissermaßen <strong>ein</strong> Baukasten von Gr<strong>und</strong>transformationen definiert.Durch die <strong>ein</strong>heitliche Schnittstelle können alle Prozessoren gleich angesprochen <strong>und</strong> somitauch in <strong>ein</strong>er nahezu beliebigen Ordnung aufgerufen werden. Das bedeutet, daß Prozesse sehrflexibel gebildet werden können.Durch die zentrale Registrierung der <strong>ein</strong>zelnen Prozessoren können diese transparent über ihrenNamen angesprochen werden. Wenn sich z.B. ihr Pfad ändert oder sie in <strong>ein</strong>er anderenAnfragesprache formuliert werden hat dies k<strong>ein</strong>e Auswirkungen auf den Prozeß.5.1.5.2. Erleichterte Entwicklung <strong>und</strong> FehlersucheDadurch, daß alle Prozessoren als eigenständige Einheiten implementiert werden, können sieisoliert entwickelt <strong>und</strong> getestet werden.Die textuelle Schnittstelle zwischen den Prozessoren erleichtert sowohl die Bereitstellung vonEingabedaten für das isolierte Testen von Prozessoren, als auch das Untersuchen der Ausgabedatenauf etwaige Fehler in der Funktionsweise des Prozessors.Der flexible Aufbau des Prozesses macht es möglich, den Prozeß an <strong>ein</strong>er beliebigen Stelle zuunterbrechen, bzw. s<strong>ein</strong>e Ausgabe <strong>zur</strong> Erzeugung <strong>ein</strong>er Datei mit Testausgaben aufzuspalten,um die bis dahin entstandenen Daten zu untersuchen.Im Gegensatz zu <strong>ein</strong>em monolithischen System, das intern <strong>ein</strong>e binäre Darstellung der geradezu bearbeitenden Daten hält, ist es somit nicht nötig, eigene Programme für die Erzeugung vonTestdaten implementieren <strong>und</strong> <strong>zur</strong> Überprüfung der internen Daten den Quellcode des Prozessorsdurch <strong>ein</strong>gefügte Testausgabeanweisungen ändern zu müssen.5.2. Bibliothek von generischen AusdrückenFür PEP wurde <strong>ein</strong>e Bibliothek <strong>generischer</strong> Bezeichner für die folgenden drei Bereiche (siehe auchAbschnitt 4.3.4) geschaffen:Generische <strong>Layout</strong>konstrukteGenerische StyleanweisungenGenerische SonderzeichenGr<strong>und</strong>sätzlich wurde dabei die in Abschnitt 3.3.4 <strong>ein</strong>geführte Syntax für die generischen Ausdrückebeibehalten, also generische Ausdrücke in <strong>ein</strong>er Form von @[ ...].Im Folgenden werden die <strong>ein</strong>zelnen Bereiche mit ihren jeweiligen Mengen von generischen Ausdrückenvorgestellt.58


5.2. Bibliothek von generischen Ausdrücken5.2.1. Generische <strong>Layout</strong>konstrukteFür den Entwurf der generischen <strong>Layout</strong>konstrukte von PEP wurde <strong>ein</strong>e Teilmenge der XSL FormattingObjects verwendet. In Abschnitt 1.3.1 wurden bereits die <strong>ein</strong>zelnen Gruppen der FormattingObjects vorgestellt. Hier von Belang sind die Block, Table <strong>und</strong> List Formatting Objects.Bei den anderen ist entweder die Granularität zu grob (Declaration) oder zu f<strong>ein</strong> (Inline) oder sie sindfür PEP nicht von Bedeutung.Im Folgenden sind die <strong>ein</strong>zelnen relevanten Formatting Objects kurz aufgeführt:Block Formatting Objects:fo:blockTable Formatting Objects:fo:table-and-captionfo:table-captionfo:tablefo:table-column fo:table-headerfo:table-rowfo:table-cellfo:table-footerfo:table-rowfo:table-cellList Formatting Objects:fo:list-blockfo:list-itemfo:list-item-label fo:list-item-bodyfo:table-bodyfo:table-rowfo:table-cellDie Bezeichnungen der Formatting Objects wurden für PEP weitgehend übernommen, allerdings wurdeder Formalismus, wie Inhalte “geklammert” werden, an die Gegebenheiten der generischen Ausdrückeangepaßt.Anstatt Inhalte also (wie in XML üblich) z.B. mit... Inhalt ...zu klammern, wird der generische Ausdruck jeweils mit dem Präfix begin-, bzw. dem Postfix endversehen,<strong>und</strong> natürlich wird auf das Namespace-Präfix fo verzichtet.Das Beispiel sieht mit generischen Ausdrücken dann folgendermaßen aus:@[begin-table] ... Inhalt ... @[end-table]59


5. Prototypische Implementierung PEP5.2.2. Generische StyleanweisungenFür den Entwurf der generischen Styleanweisungen von PEP wurde <strong>ein</strong>e pragmatische Teilmenge derHTML 4-Auszeichnungen verwendet. Sie kommen aus den folgenden Bereichen:Headings,Phrase elements,Quotations,Subscripts and superscripts,Alignments <strong>und</strong>Font stylesFür PEP wurden die Bezeichnungen der jeweiligen HTML-Auszeichnungen weitgehend übernommen– mit den gleichen Anpassungen wie im letzten Abschnitt.5.2.3. Generische SonderzeichenFür den Entwurf der generischen Sonderzeichen von PEP wurden die character entity references [31]von HTML 4 verwendet.Die character entity references definieren Entities zu folgenden Bereichen:ISO 8859-1 characters: Sonderzeichen des ISO 8859-1 Zeichensatzes.Symbols, mathematical symbols, and Greek letters.Markup-significant and internationalization characters: Zeichen, die im Markup <strong>ein</strong>e spezielleBedeutung haben, wie z.B. die Zeichen “” oder spezielle Zeichenabstände. Danebenwerden noch Entities <strong>zur</strong> Internationalisierung definiert, wie z.B. <strong>ein</strong>e unterschiedliche Schreibrichtung.Für PEP wurde die Bezeichnungen der darin definierten Entities übernommen. Die generischen Ausdrücke<strong>zur</strong> Beschreibung der Sonderzeichen haben folgende Form:@[char( ... )]Anstelle der Punkte steht die Bezeichnung der jeweiligen Entity. Der generische Ausdruck für <strong>ein</strong>nicht-trennbares Leerzeichen (“no-break space”) sieht somit so aus:@[char(nbsp)].60


5.3. Implementierung ausgesuchter Prozessoren5.3. Implementierung ausgesuchter ProzessorenZiel bei der Auswahl der zu implementierenden Prozessoren war es <strong>ein</strong>erseits, aus den Prozessoren<strong>ein</strong>en durchgängigen Prozeß bilden zu können, <strong>und</strong> andererseits Prozessoren mit <strong>ein</strong>em interessantenVerhalten bzw. mit <strong>ein</strong>er interessanten Implementierung herauszugreifen.5.3.1. Klassifikation der verwendeten RegelsprachenEin solcher interessanter Gesichtspunkt ist die vom Prozessor verwendete Regelsprache. Hier wurdenzwei Klassen von Regelsprachen gebildet: bestehende Regelsprachen <strong>und</strong> eigene, anwendungsspezifischeRegelsprachen.5.3.1.1. Definition der Transformationen mit bestehenden RegelsprachenFür feststehende Transformationen, bzw. für Transformationen, die nur sehr selten geändert werden,wurden die Transformationsanweisungen direkt in bestehenden Regelsprachen formuliert. Beispielehierfür sind das Pruning <strong>und</strong> das Flatten, die <strong>ein</strong>fach nach <strong>ein</strong>em vorgegebenen Algorithmus arbeiten.Transformationen, die sich häufig ändern, konnten direkt mit bestehenden Regelsprachen definiertwerden, wenn diese Sprachen die Möglichkeit boten, Transformationen sehr <strong>ein</strong>fach <strong>und</strong> übersichtlichzu definieren. Ein Beispiel hierfür ist der <strong>Layout</strong>beschreibungsbaum in XQuery.5.3.1.2. Definition der Transformationen mit eigenen, anwendungsspezifischenRegelsprachenFür <strong>ein</strong>e Reihe von Aufgabestellungen, bei denen häufig Änderungen vorgenommen werden müssen,war jedoch <strong>ein</strong>e direkte Defininition der Transformationen in den meisten der bestehenden Regelsprachenzu komplex <strong>und</strong> zu schlecht wartbar.Vergleicht man in Abbildung 5.5 die beiden Ausschnitte aus den Regeln zum Hinzufügen von Trenntexten– <strong>ein</strong>mal in fxt <strong>und</strong> <strong>ein</strong>mal in <strong>ein</strong>er eigenen (XML-basierten) Sprache – so wird der Vorteil<strong>ein</strong>er eigenen, maßgeschneiderten Regelsprache recht deutlich.Auf die Implementierung von Auswertern für die eigenen Regelsprachen wurde verzichtet. Stattdessenwurden Übersetzer in bestehende Regelsprachen implementiert.Da die verwendeten bestehenden Regelsprachen alle auf XML aufbauen, wurden die eigenen Regelsprachennoch in Sprachen, die auf XML aufbauen <strong>und</strong> in andere unterschieden: Die anderen Sprachenmüssen vor der Übersetzung zunächst in <strong>ein</strong> XML-Dokument transformiert werden, um von den aufXML basierten Werkzeugen übersetzt werden zu können.5.3.1.2.1. Regelsprachen, die auf XML aufbauen Die Übersetzer für diese Regelsprachensind in fxt oder XSLT formuliert, die Sprachen, in die übersetzt wird, sind jeweils dieselben.Mit der Implementierung von PEP wurden folgende Regelsprachen <strong>ein</strong>geführt:PEP ¢¡¤£¦¥¨§©<strong>zur</strong> Definition von <strong>Layout</strong>beschreibungsbäumenPEP ¡¤¡©¥¨ <strong>zur</strong> Definition der Regeln zum Hinzufügen der Trenntexte61


5. Prototypische Implementierung PEPRegeln in fxt:/*//Ueberschrift//Veranstaltungen//Veranstaltung.Gleiche Regeln in eigener Sprache:.ABBILDUNG 5.5.: Ausschnitte aus Regeln zum Hinzufügen von Trenntexten62


5.3. Implementierung ausgesuchter Prozessoren¤¢¡ ¤£¦¥ PEP <strong>zur</strong> Definition der Regeln zum Übersetzen der generischen AusdrückeSie werden im Folgenden erläutert.PEP ¢¡£ ¥¨§© Bei dem Entwurf von PEP ¡£¦¥¨§© stand die Prämisse im Vordergr<strong>und</strong>, die <strong>Layout</strong>beschreibungsbäumesehr <strong>ein</strong>fach <strong>und</strong> übersichtlich definieren zu können.Die Sprache besteht aus folgenden Komponenten:<strong>Layout</strong>beschreibungsbaum Enthält <strong>ein</strong>en <strong>ein</strong>fachen Strukturierungsknoten.Strukturierungsknoten Dient <strong>zur</strong> Strukturierung von Inhalten. Er ist entweder <strong>ein</strong> <strong>ein</strong>facherStrukturierungsknoten oder <strong>ein</strong> iterierter Strukturierungsknoten.– Einfacher Strukturierungsknoten Element aus <strong>ein</strong>em beliebigen Namespace <strong>und</strong> mit<strong>ein</strong>em beliebigen Namen. Es besitzt <strong>ein</strong> optionales Attribut id, dessen Wert <strong>zur</strong> späteren<strong>ein</strong>deutigen Identifizierung dient.Er kann entweder weitere Strukturierungsknoten oder <strong>ein</strong>en Wert enthalten.– Iterierter Strukturierungsknoten Element aus <strong>ein</strong>em beliebigen Namespace <strong>und</strong> mit<strong>ein</strong>em beliebigen Namen. Es besitzt <strong>ein</strong> Attribut pep:selector, dessen Wert <strong>ein</strong> Ausdruckin der Selektionssprache des Übersetzers ist.Mit dem Attribut pep:selector wird auf <strong>ein</strong>e Sequenz von Elementen im Eingabedokumentverwiesen. Für jedes dieser Elemente wird <strong>ein</strong> <strong>ein</strong>facher Strukturierungsnotenmit dem Inhalt des iterierten Strukturierungsknotens <strong>ein</strong>gefügt <strong>und</strong> der Kontext im Eingabedokumentauf das selektierte Element gesetzt.Er kann entweder weitere Strukturierungsknoten oder <strong>ein</strong>en Wert enthalten.Wert Beschreibt intensional oder extensional <strong>ein</strong>zufügende Textinhalte. Er ist entweder <strong>ein</strong>statischer Wert, berechneter Wert, selektierter Wert oder <strong>ein</strong> referenzierter Wert.– statischer Wert Element pep:value. Es besitzt <strong>ein</strong>en Textinhalt.– berechneter Wert Element pep:value. Es besitzt <strong>ein</strong> Attribut mit dem Namen expression,dessen Wert <strong>ein</strong> Ausdruck in der Selektionssprache der bestehenden Regelspracheist, in die später übersetzt wird.– selektierter Wert Element pep:value Es besitzt <strong>ein</strong> Attribut selector, dessen Wert<strong>ein</strong> Ausdruck in der Selektionssprache des Übersetzers ist.Mit dem Attribut selector wird auf <strong>ein</strong> <strong>ein</strong>zufügendes Element bzw. <strong>ein</strong>en <strong>ein</strong>zufügendenElementinhalt im Eingabedokument verwiesen.– referenzierter Wert Element pep:value. Es besitzt <strong>ein</strong> Attribut mit dem Namen reference,dessen Wert, dem Wert <strong>ein</strong>es id-Attributes im <strong>Layout</strong>beschreibungsbaumoder im Eingabedokument entspricht.Mit dem Attribut reference wird auf <strong>ein</strong> <strong>ein</strong>zufügendes Element bzw. <strong>ein</strong>en <strong>ein</strong>zufügendenElementinhalt im Eingabedokument verwiesen.In Abbildung 5.6 wird <strong>ein</strong> Beispiel dieser Regelsprache gezeigt. Es implementiert genau den <strong>Layout</strong>beschreibungsbaumaus Abbildung 3.9.63


ABBILDUNG 5.6.: Beispiel für PEP ¢¡¤£¦¥¨§©5. Prototypische Implementierung PEPVeranstaltungen64


5.3. Implementierung ausgesuchter ProzessorenPEP ¡¡¤©¥ Ziel bei dem Entwurf der Regelsprache für die Trenntexte war <strong>ein</strong>e kompakte Definitionder Transformationen zum Hinzufügen der Trenntexte.Die Sprache besteht aus folgenden Komponenten:Transformationsanweisung Element transform. Enthält <strong>ein</strong>en oder mehrere Trenntexte.Trenntext Element separators. Es besitzt das Attribut selector, dessen Wert <strong>ein</strong> Ausdruckin der Selektionssprache des Übersetzers ist <strong>und</strong> die optionalen Attribute pre, in <strong>und</strong>post, die die Trenntexte enthalten.Mit dem Attribut selector wird auf das Element im Eingabedokument verwiesen, dem dieTrenntexte hinzugefügt werden sollen.In Abbildung 5.7 ist die DTD für diese Regelsprache dargestellt. Abbildung 5.8 zeigt <strong>ein</strong> Beispieldieser Regelsprache.PEP ¤ ¡ £¦¥ Ziel bei dem Entwurf der Regelsprache war <strong>ein</strong>e kompakte Definition der Transformationen,die generischen Ausdrücke in ihre Zielsprachenäquivalente übersetzen.Die Sprache besteht aus folgenden Komponenten:Transformationsanweisung Element transform. Enthält <strong>ein</strong>e oder mehrere Sprachen.Sprache Element language. Es besitzt das Attribut name, dessen Wert die Bezeichnung derZielsprachen ist, in denen Präsentationen erstellt werden. Also z.B. LATEX, HTML usw..Die Sprache enthält Ausdrücke, die generische Ausdrücke <strong>und</strong> ihre Übersetzung in der Zielspracheenthalten.Ausdruck Element expression. Es besitzt das Attribut generic, dessen Wert der zu übersetzendegenerische Ausdruck ist, <strong>und</strong> das Attribut destination, dessen Wert der Text ist,in den übersetzt werden soll.In Abbildung 5.9 ist die DTD für diese Regelsprache dargestellt. Abbildung 5.10 zeigt <strong>ein</strong> Beispieldieser Regelsprache.5.3.1.2.2. Regelsprachen, die nicht auf XML aufbauen In manchen Fällen wäre es für<strong>ein</strong>e Regelsprache ungünstig, auf XML aufzubauen. Zum Beispiel dann, wenn dynamische Inhalt<strong>ein</strong> umfangreiche statische Texte <strong>ein</strong>gefügt werden sollen, kann überlegt werden, ob es nicht sinnvollwäre, die Regeln in <strong>ein</strong>em geeigneten Formalismus in den statischen Text <strong>ein</strong>zubetten.Eine Analogie gibt es z.B. in der Programmiersprache C mit der Ausgabefunktion printf: um dieZeichenfolge ”Die nächste Veranstaltung findet am Freitag statt.“ auszugeben – wobei der jeweiligeTag (hier also der Freitag) durch <strong>ein</strong>e Funktion tag() geliefert wird – könnte man folgende Formulierungverwenden:printf(”Die nächste Veranstaltung findet am ”);printf(tag());printf(”statt.”);65


ABBILDUNG 5.7.: DTD von PEP ¢¡¤£ ¡¦¥ ¡ © ¥§¥ABBILDUNG 5.8.: Beispiel für PEP ¢¡¨£ ¡©¥ ¡ © ¥§¥5. Prototypische Implementierung PEPin="@[br]"/>post="@[end-table-cell]"/>in=", "/>post="@[end-table-cell]"/>66


ABBILDUNG 5.9.: DTD von PEP ¡ ¡ ¡ ¥¢¡¤£ABBILDUNG 5.10.: Beispiel für PEP ¡ ¡ ¡ ¥©¡£5.3. Implementierung ausgesuchter Prozessorenbegin¦end¦67


5. Prototypische Implementierung PEPAllerdings ist offensichtlich, daß diese Formulierung durch die mehrfachen Ausgabeanweisungenrecht unübersichtlich <strong>und</strong> somit auch leicht fehleranfällig ist: All<strong>ein</strong> in dem kl<strong>ein</strong>en Beispiel stecktbereits <strong>ein</strong> Fehler, der leicht zu übersehen ist.Jedoch bietet printf auch die Möglichkeit, über Formatanweisungen <strong>und</strong> weitere Argumente <strong>ein</strong>egesamte Zeichenkette formatiert auszugeben. Das vorangegangenene Beispiel sähe dann so aus:printf(”Die nächste Veranstaltung findet am %s statt.”, tag());Die Zeichenfolge %s fungiert dabei als Platzhalter für die durch die Funktion tag() gelieferte Zeichenfolge.Die Ausgabe wird nicht zerrissen, was die Formulierung viel übersichtlicher ersch<strong>ein</strong>enläßt.Ganz ähnlich verhält es sich auch mit dem Backquote in LISP, nur daß sich das Backquote nicht aufAusgabefunktionen, sondern auf Listen bezieht. Die Anweisung(list (quote Die) (quote naechste) (quote Veranstaltung)(quote findet) (quote am) (tag) (quote statt))kann mit Hilfe des Backquote folgendermaßen formuliert werden:‘(Die naechste Veranstaltung findet am ,(tag) statt)Bei der Implementierung von PEP wurde diese Technik für die Templates verwendet.PEP© ¡ ¢¡© Es wäre nicht sinnvoll, bei der Formulierung der Templates die jeweiligen Zielsprachen-Dokument<strong>ein</strong> <strong>ein</strong>zelne Textblöcke zu zerteilen <strong>und</strong> in <strong>ein</strong>e in XML formulierte Regelsprache<strong>ein</strong>zufügen. Stattdessen werden in die Dokumente Platzhalter in Gestalt der bereits vorgestellten generischenAusdrücke <strong>ein</strong>gefügt, die auf <strong>ein</strong>zufügende Inhalte verweisen.Ein solches Template sieht z.B. so aus wie das in Abbildung 5.11Die Sprache besteht aus folgenden Komponenten:Text Beliebiger Text, kann generische Ausdrücke enthalten.Generischer Ausdruck Entspricht den in dieser Arbeit <strong>ein</strong>geführten generischen Ausdrücken<strong>und</strong> hat die Form @[OBJECT(””)].Die Referenz verweist auf den Wert <strong>ein</strong>es ID-Attributes im <strong>Layout</strong>baum.5.3.2. Prozessoren mit mehreren AusprägungenFür manche Aufgabenstellungen reicht es nicht aus, wenn es nur <strong>ein</strong>en <strong>ein</strong>zigen Prozessor dafür gibt.Betrachtet man zum Beispiel die Übersetzung der generischen Ausdrücke in Zielsprachen-Äquivalente,so fällt auf, daß es nicht nur <strong>ein</strong>e <strong>ein</strong>zige mögliche Übersetzung gibt, sondern für jede Zielsprache68


ABBILDUNG 5.11.: Beispiel für PEP© ¡ £ ¡ © ¡5.3. Implementierung ausgesuchter Prozessoren<strong>Lehr</strong>veranstaltungen des Informatik-StudiumsBitte beachten Sie die veranderten Zeitangaben!@[OBJECT("Ueberschrift")]@[OBJECT("Veranstaltungen")]<strong>ein</strong>e. Oder bei der Verwendung von Templates: dort kann es nicht nur <strong>ein</strong> <strong>ein</strong>ziges Template geben,sondern beliebig viele.In PEP wurde dies so implementiert, daß es <strong>ein</strong>en gem<strong>ein</strong>samen Prozessor gibt, der zunächst für dieseAufgabenstellung zuständig ist <strong>und</strong> anhand <strong>ein</strong>es Kommandozeilenparameters entscheidet, welchemder alternativen Prozessoren er die Transformation übergibt.Diese alternativen Prozessoren befinden sich in <strong>ein</strong>em Unterverzeichnissen des gem<strong>ein</strong>samen Prozessors,die nach der speziellen Aufgabenstellung benannt sind.Bei dem Prozessor für die generischen Ausdrücke sieht die Verzeichnisstruktur so aus wie in Abbildung5.12 gezeigt.generischeausdruecke/html/latex/text/ABBILDUNG 5.12.: Beispiel für Verzeichnisstruktur von Prozessoren mit mehreren Ausprägungen5.3.3. Die implementierten ProzessorenIm Folgenden wird kurz die Funktionsweise der <strong>ein</strong>zelnen Prozessoren erläutert.<strong>Layout</strong>baum Erzeugt aus <strong>ein</strong>em <strong>Layout</strong>beschreibungsbaum, der entweder in PEP ¢¡£ ¥¨§© (für XSLT<strong>und</strong> fxt), in XQuery oder in xcerpt formuliert ist, <strong>und</strong> aus <strong>ein</strong>em Eingabedokument <strong>ein</strong>en <strong>Layout</strong>baum.Pruning Entfernt leere Teiläste.Trenntexte hinzufügen Fügt Elementen des Eingabebaums Attribute für Trenntexte hinzu. DieRegeln für die hinzuzufügenden Trenntexte sind in PEP ¡¤¡©¥¨ formuliert.Trenntexte auflösen Fügt gemäß den Attributen für Trenntexte vor, zwischen <strong>und</strong> nach den jeweiligenElementen neue Elemente <strong>ein</strong>, die die Trenntexte als Inhalte enthalten.69


5. Prototypische Implementierung PEPTemplate Transformiert <strong>ein</strong>en <strong>Layout</strong>baum gemäß <strong>ein</strong>em in PEP © ¢¡¤© formulierten Template in<strong>ein</strong>en neuen <strong>Layout</strong>baum.Flatten Transformiert <strong>ein</strong>en Eingabebaum in <strong>ein</strong>en Baum der Tiefe 1, der nur noch das Wurzelelement<strong>und</strong> die Blätter des <strong>Layout</strong>baumes enthält.Generische Ausdrücke Übersetzt generische Ausdrücke des Eingabebaums in unterschiedlicheZielsprachen. Die Zielsprache wird durch <strong>ein</strong>en Kommandozeilenparameter (html, latex, . . . )ausgewählt. Die Regeln für die Übersetzung sind in ¤¢¡ ¤£¦¥ PEP formuliert.Serialisierung Transformiert <strong>ein</strong>en Eingabebaum in <strong>ein</strong>e Zeichenkette mit den konkatenierten Wertenaller Blätter.Pretty printing Transformiert <strong>ein</strong>en Eingabebaum in <strong>ein</strong>en gleichen, aber neu formatierten Baum.5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong>Erzeugung des <strong>Layout</strong>baumsUm die unterschiedlichen Werkzeuge vergleichen zu können, wurde der Prozessor <strong>zur</strong> Erzeugung des<strong>Layout</strong>baums jeweils für die <strong>ein</strong>zelnen Werkzeuge implementiert. Daß genau dieser Prozessor fürden Vergleich herangezogen wurde, lag daran, daß die Transformationen, die er durchführt, mit diekomplexesten von PEP sind.Dabei stellte sich allerdings bald heraus, daß <strong>ein</strong>e direkte Formulierung in XSLT <strong>und</strong> fxt nicht denAnforderungen an <strong>ein</strong>en <strong>Layout</strong>beschreibungsbaum entsprach (siehe 4.1.2), was zu dem Entwurf vonPEP ¡£ ¥§ © führte, das dann nach XSLT bzw. fxt übersetzt werden kann. XQuery <strong>und</strong> xcerpt hingegenentsprachen den Anforderungen.So müßten eigentlich korrekterweise zum <strong>ein</strong>en Vergleiche zwischen XSLT <strong>und</strong> fxt <strong>und</strong> zum anderenzwischen XQuery, xcerpt <strong>und</strong> ¢¡¤£¦¥¨§© PEP gemacht werden.Um hier jedoch <strong>ein</strong>en Vergleich zwischen allen Werkzeugen ziehen zu können, wurde die direkteTransformation von XQuery <strong>und</strong> xcerpt <strong>und</strong> die indirekte Transformation von XSLT <strong>und</strong> fxt als gleichbetrachtet.Für HaXml standen leider im Testzeitraum k<strong>ein</strong>e geeigneten Werkezuge <strong>zur</strong> Verfügung, so daß auf<strong>ein</strong>en Vergleich verzichtet werden mußte.5.4.1. XSLTXSLT eignet sich nicht besonders gut <strong>zur</strong> direkten Formulierung <strong>ein</strong>es <strong>Layout</strong>beschreibungsbaumes:Durch das Konzept, für jeden Selektor <strong>ein</strong>e eigene Regel angeben zu müssen, würde der <strong>Layout</strong>beschreibungsbaumauf viele <strong>ein</strong>zelne Regeln verteilt, was der Übersichtlichkeit sehr abträglich wäre.Stattdessen wurden Regeln formuliert, die aus dem in PEP ¡£ ¥§ © definierten <strong>Layout</strong>beschreibungsbaumwieder XSLT-Regeln erzeugen. Da diese Regeln nur <strong>ein</strong> <strong>ein</strong>ziges Mal formuliert werden müssen<strong>und</strong> dann auf alle Ausprägungen von PEP ¢¡£ ¥¨§© anwendbar sind, spielt dabei diesmal weniger die Einfachheitder Regeln <strong>ein</strong>e Rolle, sondern vielmehr die Mächtigkeit von XSLT.70


5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baumsDie Transformation in erneute Regeln wird in XSLT recht leicht gemacht: XSLT sieht bereits dieMöglichkeit vor, Namespace Aliase zu verwenden, die bei der Transformation in den entsprechenenNamespace übertragen werden. Somit schreibt sich <strong>ein</strong>e zu erzeugende Regel z.B. so:...Was b<strong>ein</strong>ahe der ursprünglichen Schreibweise entspricht.Für das Wurzelelement <strong>und</strong> die iterierten Strukturierungsknoten wird jeweils <strong>ein</strong>e eigene Regel <strong>ein</strong>gefügt.Daneben müssen aber in die Regeln noch die <strong>ein</strong>fachen Strukturierungsknoten <strong>und</strong> die Blätter<strong>ein</strong>gefügt werden.Dieses verschränkte Einfügen ist in XSLT mit <strong>ein</strong>em <strong>ein</strong>zigen Durchlauf nicht zu machen, sondernes müssen zuerst in jede Regel ihre enthaltenen Strukturierungsknoten <strong>ein</strong>gefügt werden <strong>und</strong> dann in<strong>ein</strong>em weiteren Durchlauf neue Regeln für möglicherweise vorgekommene iterierte Strukturierungsknotenerzeugt werden.Dieser mehrmalige Aufruf wird in XSLT durch die modes unterstützt, mit denen Regeln mit gleichemSelektor unterschieden werden können.Wenn im <strong>Layout</strong>beschreibungsbaum an unterschiedlichen Stellen iterierte Selektierungsknoten mitdem gleichen Selektor vorkommen, spielen die modes ebenfalls <strong>ein</strong>e wichtige Rolle: Normalerweisewürden zwei Regeln mit dem gleichen Selektor erzeugt werden, bei der zweiten Transformationwürde aber nur <strong>ein</strong>e davon verwendet werden bzw. <strong>ein</strong> Fehlerzustand auftreten. D.h. es würden, selbstwenn die Transformation durchgeführt würde, in den <strong>Layout</strong>baum falsche Strukturierungsknoten <strong>ein</strong>gefügt.Die Lösung ist naheliegend: Wenn für jeden iterierten Strukturierungsknoten <strong>ein</strong> eigener modeverwendet wird, wird die richtige Regel verwendet.In PEP ¡£¦¥¨§©wird auf drei unterschiedliche Arten auf <strong>ein</strong>zufügende Daten verwiesen:1. Durch ihre strukturelle Position in den Eingabedaten. Also z.B. <strong>ein</strong> Element Dozent, daß <strong>ein</strong>Vaterelement Dozenten hat. (In PEP ¡£ ¥§ © sind das die selector-Attribute.)2. Durch <strong>ein</strong>en berechneten Ausdruck, der wiederum mehrere Verweise wie in 1. enthalten kann,z.B. die Summe der Inhalte der Elemente St<strong>und</strong>e <strong>und</strong> Dauer. (In ¢¡¤£¦¥¨§© PEP sind das dieexpression-Attribute.)3. Durch <strong>ein</strong>e Referenz auf den Wert <strong>ein</strong>es id-Attributes von ihnen, z.B. <strong>ein</strong> Element, das <strong>ein</strong>id-Attribut mit dem Wert “Info1” besitzt. (In ¡£¦¥¨§© PEP sind das die reference-Attribute.)Die ersten beiden Arten werden in XSLT durch XPath 1.0 ermöglicht, die dritte durch <strong>ein</strong>en key-Mechanismus.Obwohl in XPath die Formulierung aller notwendigen Verweise möglich ist, enthält es doch <strong>ein</strong>e Stolperfalle:Die XPath-Ausdrücke beziehen sich nicht zwingend auf den aktuellen Kontext des Eingabedokuments,sondern können auf beliebige Knoten im Eingabedokument verweisen – auch welche in<strong>ein</strong>em anderen Teilbaum oder weiter oben im Baum. Dies erfordert besondere Sorgfalt bei der Formulierungder Selektoren. Andererseits ist man dadurch nicht darauf festgelegt, sich in <strong>ein</strong>em Teilbaumnur abwärts zu bewegen, sondern kann in iterierten Strukturierungsknoten <strong>und</strong> Werten auf beliebigeElemente verweisen.71


5. Prototypische Implementierung PEPDer Zugriff auf Attributwerte fällt unter XSLT recht leicht: Das entsprechende Attribut wird über<strong>ein</strong>en XPath-Ausdruck an <strong>ein</strong>e Variable geb<strong>und</strong>en, die dann beliebig verwendet werden kann. Ist dasAttribut nicht vorhanden, enthält die Variable <strong>ein</strong>e leere Zeichenkette.5.4.1.1. Transformationsanweisungen in XSLT <strong>zur</strong> Generierung von weiterenTransformationsanweisungen in XSLT, die den <strong>Layout</strong>baum erzeugenMit den folgenden, in XSLT formulierten, Transformationsanweisungen werden aus <strong>ein</strong>em inPEP ¡£ ¥§ © definierten <strong>Layout</strong>beschreibungsbaum weitere XSLT-Transformationsanweisungen generiert.Mit diesen kann darauf <strong>ein</strong> entsprechendes XML-Dokument in <strong>ein</strong>en <strong>Layout</strong>baum transformiertwerden.72


5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baums5.4.1.2. Generierte Transformationsanweisungen in XSLT, die den <strong>Layout</strong>baumerzeugen73


5. Prototypische Implementierung PEPVeranstaltungen74


5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baums5.4.2. fxtWas im vorangeganenen Abschnitt zu XSLT über die direkte Formulierung <strong>ein</strong>es <strong>Layout</strong>beschreibungsbaumesgesagt wurde, gilt ebenso für fxt, da fxt <strong>ein</strong>en ähnlichen regelbasierten <strong>Ansatz</strong> besitzt.Leider kennt fxt k<strong>ein</strong>e Namespace Aliase, so daß zu erzeugende Regeln umständlich mit Elementendefiniert werden müssen, die berechnete Elemente oder Attribute erzeugen. (Ein ähnliches Konzeptbietet XSLT übrigens ebenfalls an.) Das Beispiel aus dem XSLT-Abschnitt würde sich dann so schreiben:xyz...Es ist zwar in diesem Fall nicht viel länger, aber um <strong>ein</strong>iges schwerer zu lesen. Zumal fxt noch <strong>ein</strong>eTypkonvertierung in das interne Vector-Format erfordert.Für das verschränkte Einfügen von Strukturierungsknoten <strong>und</strong> Regeln gibt es in fxt <strong>ein</strong> ganz anderesKonzept als in XSLT: Globale Variablen mit Kellerprinzip (push <strong>und</strong> pop von Werten), deren Werteauch Wälder s<strong>ein</strong> können <strong>und</strong> die (anders als in XSLT) geändert werden können. Damit reduzierensich die mehreren Durchläufe von XSLT auf <strong>ein</strong>en <strong>ein</strong>zigen, der folgendermaßen abläuft:1. Die Strukturierungsknoten des <strong>Layout</strong>beschreibungsbaumes werden rekursiv durchlaufen,2. für das Wurzelelement <strong>und</strong> jeden iterierten Strukturierungsknoten wird<strong>ein</strong>e neue Regel erzeugt, deren Inhalte durch den fortgesetzten Durchlauf gebildet werden,diese Regel in <strong>ein</strong>e globale Variable <strong>ein</strong>gefügt <strong>und</strong><strong>ein</strong> Element erzeugt, das diese Regel aufruft,3. für jeden <strong>ein</strong>fachen Strukturierungsknoten <strong>und</strong> jedes Blatt wird <strong>ein</strong>fach <strong>ein</strong> entsprechendes Elementerzeugt <strong>und</strong>, wenn Kindknoten vorhanden sind, mit dem Durchlauf fortgefahren.4. Zuletzt werden die erzeugten Regeln in das Zieldokument <strong>ein</strong>gefügt.75


5. Prototypische Implementierung PEPModes werden von fxt nicht unterstützt, so daß mehrfach vorkommende Selektoren im <strong>Layout</strong>beschreibungsbaumnur mit <strong>ein</strong>igem Aufwand realisierbar wären (iterierte Strukturierungsknoten würdenk<strong>ein</strong>e ganzen Regeln mehr erzeugen dürfen, sondern nur bedingte Blöcke in <strong>ein</strong>er gem<strong>ein</strong>samenRegel für jeden Selektor).Der Verweis auf die <strong>ein</strong>zufügenden Daten ist in fxt recht ähnlich wie in XSLT, nur, daß anstatt vonXPath hier fxgrep als Selektionssprache <strong>und</strong> SML als Sprache <strong>zur</strong> Berechnung von Ausdrücken verwendetwird. Auch <strong>ein</strong> ähnlicher Key-Mechanismus ist vorhanden.Allerdings ist das Selektionsprinzip von fxgrep durch s<strong>ein</strong>e regulären Ausdrücke auf Bäume um <strong>ein</strong>igesmächtiger <strong>und</strong> trotzdem besser verständlich als das von XPath.Auch bezieht sich fxgrep immer auf den aktuellen Kontext im Baum <strong>und</strong> läßt k<strong>ein</strong>e Aufwärtsbewegungzu Vorgängern des aktuellen Knotens zu. Dadurch wird die Formulierung von Selektoren<strong>ein</strong>facher, allerdings schließt sie eventuell manche Aufgabenstellungen aus, bei denen Knoten aus<strong>ein</strong>em anderen Teilbaum nötig wären. Normalerweise dient hier das Variablenkonzept als Lösung.Bei der Erstellung von Regeln über Regeln sind solche Sonderfälle jedoch nur schwer zu handhaben.Der Zugriff auf Attributwerte erfolgt unter fxt über Ausdrücke, die in SML formuliert werden. DiesesKonzept ist an sich recht mächtig, allerdings tritt bei dem Zugriff auf nicht vorhandene Variablensofort <strong>ein</strong> Fehlerzustand auf, sodaß immer erst <strong>ein</strong>e Überprüfung stattfinden sollte, ob die Variablevorhanden ist, was die Regeln unnötigerweise aufbläht. Auch ist, die oftmals nötige Typkonvertierungin SML-Typen recht lästig, hier wäre <strong>ein</strong>e automatische Konvertierung sinnvoll gewesen.5.4.2.1. Transformationsanweisungen in fxt <strong>zur</strong> Generierung von weiterenTransformationsanweisungen in fxt, die den <strong>Layout</strong>baum erzeugenMit den folgenden, in fxt formulierten, Transformationsanweisungen werden aus <strong>ein</strong>em in PEP ¢¡¤£¦¥¨§©definierten <strong>Layout</strong>beschreibungsbaum weitere fxt-Transformationsanweisungen generiert. Mit diesenkann darauf <strong>ein</strong> entsprechendes XML-Dokument in <strong>ein</strong>en <strong>Layout</strong>baum transformiert werden./*/*default76


5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baums//pep:value[@selector]//pep:value[@reference]//pep:value[@expression]//pep:value[""]//pep:value//*[@pep:selector]77


5. Prototypische Implementierung PEP//*default5.4.2.2. Generierte Transformationsanweisungen in fxt, die den <strong>Layout</strong>baumerzeugen/*Veranstaltungendefault//Veranstaltung//Dozent78


5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baums//Sitzung//Bereich5.4.3. XQueryDadurch, daß Transformationen in XQuery in sehr deklarativer Weise angegeben werden können,konnte der <strong>Layout</strong>beschreibungsbaum direkt in XQuery definiert werden, <strong>und</strong> es konnte darauf verzichtetwerden, ihn zunächst in PEP ¢¡£ ¥¨§© zu definieren, um ihn in <strong>ein</strong>em anschließendem Übersetzungschrittin die jeweilige Transformationssprache übersetzen zu müssen. Der Vorteil davon ist, daß<strong>ein</strong>e wesentlich mächtigere Transformationssprache als die sehr spezialisierte Sprache von PEP ¢¡¤£¦¥¨§©<strong>zur</strong> Verfügung steht, <strong>und</strong> daß <strong>ein</strong> Vorverarbeitungsschritt wegfällt.Nachdem XQuery <strong>zur</strong> Selektion XPath 2.0 verwendet (<strong>ein</strong>e Weiterentwicklung von dem in XSLTverwendeten XPath 1.0), gilt im Prinzip das Gleiche, was im Abschnitt zu XSLT <strong>zur</strong> Selektion von<strong>ein</strong>zufügenden Daten gesagt wurde. Allerdings können die Variablen, die mit for oder let geb<strong>und</strong>enwurden, ebenfalls in den Selektoren verwendet werden, so daß die Selektoren wesentlich knapper <strong>und</strong>intuitiver formuliert werden können.Was negativ auffällt ist die Selektion von Textinhalten: Selektiert man <strong>ein</strong> Element z.B. über denSelektor $sitzung/tag, so erhält man das Element tag <strong>zur</strong>ück. Den Textinhalt des Elementstag erhält man über den Funktionsaufruf text($sitzung/tag). Hier ist die Lösung von fxgrepsitzung/tag/"" wesentlich intuitiver.79


5. Prototypische Implementierung PEP5.4.3.1. Transformationsanweisungen in XQuery, die den <strong>Layout</strong>baum erzeugenVeranstaltungen¦ for $veranstaltung indocument("/dev/stdin")/<strong>Lehr</strong>angebot/Veranstaltungen/Veranstaltunglet $dauer := $veranstaltung/Dauerreturn¦ for $titel in $veranstaltung/Titelreturn¦ string($titel)§ §for $bereich in $veranstaltung/Bereiche/Bereich¦returnstring($bereich)§ ¦§¦ $dauer§¦ for $sitzung in $veranstaltung/Sitzungen/Sitzunglet $tag := $sitzung/Taglet $von := $sitzung/St<strong>und</strong>elet $dauer := $sitzung/Dauerlet $gebaeude := $sitzung/Gebaeudelet $raum := $sitzung/Raumreturn¦ $tag§¦ string($von)§ number($von) + number($dauer)§ ¦¦ $gebaeude§$raum§¦§¦ for $dozent in $veranstaltung/Dozenten/Dozentlet $name := $dozent/Namereturn¦ string($name)§ §80


5.4. Vergleich der Werkzeuge am Beispiel des Prozessors <strong>zur</strong> Erzeugung des <strong>Layout</strong>baums§5.4.4. xcerptxcerpt ist ebenfalls <strong>ein</strong> <strong>Ansatz</strong>, bei dem Transformationen auf <strong>ein</strong>e sehr deklarative Weise angegebenwerden können. Was zusätzlich <strong>zur</strong> Klarheit der angegebenen Regeln beiträgt ist der Umstand, daß inxcerpt die Selektion der Daten <strong>und</strong> die Konstruktion in zwei getrennten Teilen der Regel formuliertwird.Auch verwendet xcerpt <strong>ein</strong>en ganz anderen Mechanismus <strong>zur</strong> Selektion als die bisherigen Ansätze:Anstatt zu versuchen, komplexe Anfragen auf Inhalte <strong>ein</strong>es XML-Eingabe-Dokuments in vielen linearenAnfrageausdrücken zu formulieren, besteht der Selektionsteil <strong>ein</strong>er xcerpt-Anfrage aus <strong>ein</strong>erBaumstruktur, die der Struktur des Eingabe-Dokuments, bzw. Teilstrukturen davon, entspricht; Inhaltewerden selektiert, indem an der entsprechenden Stelle in der Baumstruktur <strong>ein</strong>e Variable definiertwird.Die Struktur des Konstruktionsteils entspricht der Struktur des XML-Ausgabe-Dokuments (oder Teilendavon bei mehreren Regeln). Die selektierten Daten werden <strong>ein</strong>gefügt, indem die jeweilige Variablean der Stelle steht, an der <strong>ein</strong>gefügt werden soll.Um Iterationen über mehrere mögliche Ausprägungen von Variablen durchzuführen, können an beliebigenStellen in der Struktur des Konstruktionsteiles all-Quantifizierer stehen. Für jede Ausprägungwird der Teilbaum unter dem Quantifizierer in das Ausgabedokument <strong>ein</strong>gefügt.Aufgr<strong>und</strong> des frühen Stadiums von xcerpt gibt es allerdings noch <strong>ein</strong>ige Einschränkungen:So sind nur Anfragen erfolgreich, die dem Selektionsteil vollständig entsprechen. Fehlt nur <strong>ein</strong> <strong>ein</strong>zigesUnterelement, so liefert die Selektion nichts <strong>zur</strong>ück. Allerdings werden unterschiedliche Lösungsmöglichkeitenwie Defaultwerte <strong>und</strong> Alternativen bereits untersucht.Quantifizierer benötigen immer <strong>ein</strong> <strong>ein</strong>deutiges Element, auf das sie sich beziehen. Die Möglichkeit,daß sich Quantifizierer auf Attribute (z.B. das <strong>ein</strong>deutige Attribut id) beziehen, ist noch nicht vorhanden.Das Auflösen von Keys ist zwar über das Gleichstellen zweier Variablen möglich, allerdings fehlt <strong>ein</strong>Mechanismus, der das Auflösen erledigt.5.4.4.1. Transformationsanweisungen in xcerpt, die den <strong>Layout</strong>baum erzeugenconstructVeranstaltungenall var Titelall var Bereich81


5. Prototypische Implementierung PEPvar Vdauerall var Tagvar St<strong>und</strong>evar Sdauervar Gebaeudevar Raumall var Dozentnamewherevar Titelvar Bereichvar Vdauervar Dozentnamevar Tagvar St<strong>und</strong>evar Sdauervar Gebaeudevar Raum82


6. Zusammenfassung <strong>und</strong> AusblickMit dieser Arbeit wurde <strong>ein</strong> Prozeß entwickelt (der Präsentations-Erzeugungsprozeß), der (semi)strukturierte Daten in Präsentationen unterschiedlicher Beschreibungssprachen, <strong>Layout</strong>s <strong>und</strong> Landessprachentransformiert – mit dem Fokus auf den Verwaltungsdaten des <strong>Lehr</strong>angebots <strong>ein</strong>er Universitäts<strong>ein</strong>richtung.Dabei wurde großer Wert darauf gelegt, daß der Prozeß leicht an sich verändernde Rahmenbedingungen<strong>und</strong> Aufgabenstellungen angepaßt werden kann.Deshalb wurde der Prozeß in kl<strong>ein</strong>ere Einheiten untergliedert: zunächst in die drei Prozeßabschnitte” Daten“, ” <strong>Layout</strong>“ <strong>und</strong> Style“, diese dann weiter in Prozeßschritte <strong>und</strong> diese wiederum in <strong>ein</strong>zelne”Prozessoren.Der Gr<strong>und</strong> für die Unterteilung in die drei Prozeßabschnitte war, daß der Prozeß zunächst von denzugr<strong>und</strong>eliegenden Daten <strong>und</strong> den zu erstellenden Präsentationen weitgehend unabhängig gemachtwerden sollte.Der erste Prozeßabschnitt ”Daten“ dient dazu, die Daten aus <strong>ein</strong>er beliebigen Datenquelle in das XML-Format zu übertragen <strong>und</strong> nach unterschiedlichen Gesichtspunkten aufzubereiten.Der zweite Prozeßabschnitt ”<strong>Layout</strong>“ dient dazu, die derart aufbereiteten Daten in <strong>ein</strong>e semantischreiches Zwischenformat, den <strong>Layout</strong>baum, zu übertragen, mit dem die Inhalte <strong>ein</strong>er Präsentation beschriebenwerden können. Diese Inhalte können weiter aufbereitet werden: so können ihnen z.B. überdas Konzept der Trenntexte Informationen über ihre räumliche Anordnung hinzugefügt werden odersie können umgruppiert werden.Der dritte Prozeßabschnitt ”Style“ dient dazu, den Inhalten Informationen hinzuzufügen wie sie dargestelltwerden sollen. Über das Konzept des Templatemechanismus können die Inhalte darauf in vorgefertigtePräsentationen <strong>ein</strong>gefügt werden <strong>und</strong> über <strong>ein</strong>e <strong>ein</strong>fache Serialisierung des <strong>Layout</strong>baums– der zu diesem Zeitpunkt immer noch die verwendete Datenstruktur ist – kann dann zuletzt diePräsentation erstellt werden.Um die Aufgaben, die innerhalb <strong>ein</strong>es Prozeßabschnittes vorkommen, logisch nach ihrem Verwendungszweckzu gliedern, wurden die <strong>ein</strong>zelnen Prozeßabschnitte in mehrere Prozeßschritte unterteit.Und um nun den gesamten Prozeß durch Änderungen der Rahmenbedingungen <strong>und</strong> Aufgabestellungenletztendlich weitgehend unbe<strong>ein</strong>flußt zu lassen <strong>und</strong> Anpassungen lokal begrenzen zu können,wurde die weitere Unterteilung in Prozessoren vorgenommen.Diese Prozessoren sind diejenigen Einheiten des Prozesses, die Transformationen auf den Datenstrukturenausführen. Dafür nehmen sie Eingaben über <strong>ein</strong>e <strong>ein</strong>heitliche Schnittstelle entgegen, transformierendiese nach <strong>ein</strong>er klar abgegrenzten Aufgabenstellung <strong>und</strong> geben das Ergebnis über <strong>ein</strong>e<strong>ein</strong>heitliche Schnittstelle wieder aus. Durch diese strenge Modularisierung können die Prozessorenproblemlos ausgetauscht, weggelassen oder um weitere Prozessoren ergänzt werden.83


6. Zusammenfassung <strong>und</strong> AusblickUm die Tragfähigkeit dieses <strong>Ansatz</strong>es zu prüfen, wurde <strong>ein</strong>e prototypische Implementierung des Prozessesvorgenommen:Dazu wurde zunächst untersucht, welche Sprachen <strong>und</strong> Werkzeuge gr<strong>und</strong>sätzlich für <strong>ein</strong>e Implementierungnötig sind. Darauf aufbauend wurden mögliche Kandidaten der notwendigen Sprachen <strong>und</strong>Werkzeuge untersucht <strong>und</strong> mit<strong>ein</strong>ander verglichen.Für die Implementierung selbst wurden <strong>ein</strong>ige interessante Prozessoren herausgegriffen <strong>und</strong> damit<strong>ein</strong> ver<strong>ein</strong>fachter durchgängiger Prozeß realisiert. Daneben wurde <strong>ein</strong> ausgewählter Prozessor in unterschiedlichenSprachen inplementiert <strong>und</strong> damit die Eignung der <strong>ein</strong>zelnen Sprachen für die Implementierungdes Prozesses verglichen.Dabei hat sich gezeigt, daß <strong>ein</strong>e Reihe von Ansätzen gerade im Entstehen ist, die für <strong>ein</strong>e Implementierungdes Prozesses sehr interessant s<strong>ein</strong> könnten. Dies sind insbesondere xcerpt <strong>und</strong> XQuery fürdie <strong>Spezifikation</strong> der Transformationen der Prozessoren <strong>und</strong> XML Pipeline für die <strong>Spezifikation</strong> desProzesses.Mit der prototypischen Implementierung wurde deutlich, daß der <strong>Ansatz</strong>, der in dieser Arbeit entworfenwurde, leicht zu implementieren ist <strong>und</strong> die Anforderungen an den Prozeß durchaus erfülltwerden.Was die in dieser Arbeit vorgestellten bzw. implementierten Prozessoren angeht, so muß gesagt s<strong>ein</strong>,daß sie nur <strong>ein</strong>e Teilmenge derjenigen Prozessoren bilden, die in <strong>ein</strong>em tatsächlich <strong>ein</strong>setzbaren Systemnotwendig wären. Es wäre interessant, <strong>ein</strong>e Art Baukasten aus Prozessoren zu bilden, der <strong>ein</strong>enGroßteil der für die Erstellung von Präsentationen notwendigen Transformationen abdeckt.84


Abbildungsverzeichnis2.1. Beispiel <strong>zur</strong> Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2. Beispiel <strong>zur</strong> Vererbung/Verschattung . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3. Beispiel zum <strong>Lehr</strong><strong>ein</strong>heitstyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.1. Unterteilung des Prozesses in Prozeßabschnitte . . . . . . . . . . . . . . . . . . . . 173.2. Unterteilung <strong>ein</strong>es Prozeßabschnittes in Prozeßschritte . . . . . . . . . . . . . . . . 173.3. Unterteilung <strong>ein</strong>es Prozeßschrittes in Prozessoren . . . . . . . . . . . . . . . . . . . 173.4. Beispiele zu <strong>Layout</strong> vs. Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.5. Übersicht über den gesamten Präsentations-Erzeugungsprozeß . . . . . . . . . . . . 223.6. Programmbeispiel <strong>zur</strong> imperativen Vorgehensweise . . . . . . . . . . . . . . . . . . 283.7. Beispielausgabe <strong>zur</strong> imperativen Vorgehensweise . . . . . . . . . . . . . . . . . . . 283.8. Exemplarischer <strong>Layout</strong>baum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.9. Exemplarischer <strong>Layout</strong>beschreibungsbaum . . . . . . . . . . . . . . . . . . . . . . 313.10. Distributivgesetz für Zeit <strong>und</strong> Ort . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.11. Regeln für Trenntexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.12. <strong>Layout</strong>baum mit Trenntexten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.13. Templatemechanismus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.14. Hinzufügen von Style-Informationen . . . . . . . . . . . . . . . . . . . . . . . . . . 383.15. Übersetzung <strong>generischer</strong> Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . 393.16. Transformation in Zielsprache (LATEX) . . . . . . . . . . . . . . . . . . . . . . . . . 393.17. Serialisierung des <strong>Layout</strong>baums <strong>und</strong> Erzeugung der Präsentation in der Zielsprache . 404.1. Beispiel für Transformationen in XSLT . . . . . . . . . . . . . . . . . . . . . . . . 454.2. Beispiel für Transformationen in fxt . . . . . . . . . . . . . . . . . . . . . . . . . . 464.3. Beispiel für Transformationen in HaXml . . . . . . . . . . . . . . . . . . . . . . . . 474.4. Beispiel für Transformationen in xcerpt . . . . . . . . . . . . . . . . . . . . . . . . 494.5. Vergleich der Transformationssprachen . . . . . . . . . . . . . . . . . . . . . . . . 505.1. Beispielhafte Datenquelle für PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . 5485


Abbildungsverzeichnis¡£ ¥§ ©PEP ¡¤ ¡¤©¥¨ PEP ¡¡©¥¨ ¤¢¡ ¤£ ¥¦ ¡ ¤£¦¥PEP© ¡ ¢¡© 5.2. Beispielhafte Ausgabe von PEP in HTML, dargestellt mit <strong>ein</strong>em HTML-Browser . . 555.3. Verzeichnisstruktur von PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.4. Registrierung der Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575.5. Ausschnitte aus Regeln zum Hinzufügen von Trenntexten . . . . . . . . . . . . . . . 625.6. Beispiel für PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.7. DTD von . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.8. Beispiel für . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.9. DTD von PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.10. Beispiel für PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.11. Beispiel für . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695.12. Beispiel für Verzeichnisstruktur von Prozessoren mit mehreren Ausprägungen . . . . 6986


Literaturverzeichnis[1] ABITEBOUL, SERGE, DALLAN QUASS, JASON MCHUGH, JENNIFER WIDOM <strong>und</strong> L. WIE-NER: The Lorel Query Language for Semistructured Data. International Journal on Digital Libraries,1(1):68–88, April 1997. Siehe http://www-db.stanfort.edu/˜widom/pubs.html.[2] APACHE SOFTWARE FOUNDATION: Xindice 1.0. Siehe http://xml.apache.org/xindice/.[3] BERLEA, ALEXANDRU: fxgrep - The Functional XML Querying Tool. Department of ComputerScience, University of Trier. Siehe http://www.informatik.uni-trier.de/˜aberlea/Fxgrep/.[4] BERLEA, ALEXANDRU: fxp - The Program fxp. Department of Computer Science, Universityof Trier. Siehe http://www.informatik.uni-trier.de/˜aberlea/Fxp/.[5] BERLEA, ALEXANDRU <strong>und</strong> HELMUT SEIDL: fxt - The Functional XML Transformation Tool.Department of Computer Science, University of Trier. Siehe http://www.informatik.uni-trier.de/˜aberlea/Fxt/.[6] BRY, FRANÇOIS: XQuery: Eine Einführung. Technical Report, Ludwig-Maximilians-UniversitätMünchen, LFE für Programmier- <strong>und</strong> Modellierungssprachen, Juni 2001.[7] BRY, FRANÇOIS <strong>und</strong> SEBASTIAN SCHAFFERT: Pattern Queries for XML and SemistructuredData. Technical Report, Ludwig-Maximilians-Universität München, LFE für Programmier-<strong>und</strong> Modellierungssprachen, März 2002. Siehe http://www.pms.informatik.uni-muenchen.de/publikationen.[8] BRY, FRANÇOIS <strong>und</strong> SEBASTIAN SCHAFFERT: Towards a Declarative Query and TransformationLanguage for XML and Semistructured Data: Simulation Unification. Technical Report,Ludwig-Maximilians-Universität München, LFE für Programmier- <strong>und</strong> Modellierungssprachen,Februar 2002. Siehe http://www.pms.informatik.uni-muenchen.de/publikationen.[9] CHAMBERLIN, DON, JONATHAN ROBIE <strong>und</strong> DANIELA FLORESCU: Quilt: an XML Query Languagefor Heterogenous Data Sources. In Lecture Notes in Computer Science. Springer-Verlag,Dezember 2000. Siehe http://www.almaden.ibm.com/cs/people/chamberlin/quilt.html.[10] CLARKE, J.: Jade. Siehe http://www.jclark.com/jade/.87


Literaturverzeichnis[11] DEUTSCH, ALIN, MARY FERNANDEZ, DANIELA FLORESCU, ALON LEVY <strong>und</strong> DAN SUCIU:A Query Language for XML. Siehe http://www.research.att.com/˜mff/files/final.html.[12] EXCELON: XIS - eXcelon’s eXtensible Information Server (XIS). Siehe http://www.exceloncorp.com/.[13] FERNANDEZ, MARY, JÉRÔME SIMÉON <strong>und</strong> PHILIP WADLER: XML Query Languages: Experiencesand Exemplars. Siehe http://www-db.research.bell-labs.com/user/simeon/xquery.html.[14] HUHMANN, JOCHEM: Fast wie von selbst – XML: mit DocBook <strong>und</strong> Emacs arbeiten. iX,9/2001:134 ff., September 2001.[15] ISO - INTERNATIONAL ORGANIZATION FOR STANDARDIZATION: ISO-10179:1996 - DocumentStyle Semantics and Specification Language (DSSSL). Siehe http://www.iso.org.[16] KAY, MICHAEL H.: Saxon, Version 6.4.4. Siehe http://saxon.sourceforge.net/.[17] KIESLING, TOBIAS: Building an XML Information System, Seite 36 f. Projektarbeit, Ludwig-Maximilians-Universität München, LFE für Programmier- <strong>und</strong> Modellierungssprachen, 2001.Siehe http://www.pms.informatik.uni-muenchen.de/publikationen.[18] KRAUS, MICHAEL: A Toolkit for Advanced XML Browsing Functionalities. Diplomarbeit,Ludwig-Maximilians-Universität München, LFE für Programmier- <strong>und</strong> Modellierungssprachen,November 2000. Siehe http://www.pms.informatik.uni-muenchen.de/publikationen.[19] KRAUS, SEBASTIAN: Tamino experience report, advantages and pitfalls of an XML DBMS.Projektarbeit, Ludwig-Maximilians-Universität München, LFE für Programmier- <strong>und</strong> Modellierungssprachen,2001. Siehe http://www.pms.informatik.uni-muenchen.de/publikationen. In Vorbereitung.[20] MÜLLER-HEINEMANN, ULF: XML-Modellierung für Online-Dienste – <strong>Lehr</strong>angebot. Projektarbeit,Ludwig-Maximilians-Universität München, LFE für Programmier- <strong>und</strong> Modellierungssprachen,September 2001. Siehe http://www.pms.informatik.uni-muenchen.de/publikationen.[21] OASIS: DocBook. Siehe http://www.oasis-open.org/docbook/.[22] ROBIE, J., J. LAPP <strong>und</strong> D. SCHACH: XML Query Language (XQL). Siehe http://www.w3.org/TandS/QL/QL98/pp/xql.html.[23] ROBIE, J., J. LAPP <strong>und</strong> D. SCHACH: The New YATL: Design and Spezifications. TechnicalReport, INRIA, 1999.[24] SOFTWARE-AG: Tamino. Siehe http://www.softwareag.com/tamino/.[25] WALLACE, MALCOLM <strong>und</strong> COLIN RUNCIMAN: Haskel and XML: Generic Combinators orType-Based Translation?88


Literaturverzeichnis[26] WALSH, NORMAN <strong>und</strong> EVE MALER: XML Pipeline Definition Language Version 1.0. WorldWide Web Consortium. W3C Note. 28.2.2002. Siehe http://www.w3.org/TR/2002/NOTE-xml-pipeline-20020228/.[27] WALSH, NORMAN <strong>und</strong> LEONARD MUELLNER: DocBook – The Definitive Guide, Version 1.0.2.Sebastopol, CA (O’Reilly and Associates), 1999.[28] WIELEMAKER, JAN: SWI-Prolog SGML/XML parser, Version 1.0.14. SWI, University of Amsterdam.[29] WORLD WIDE WEB CONSORTIUM: Cascading Style Sheets, level 1. W3C Recommendation.Dezember 1996, überarbeitet Januar 1999. Siehe http://www.w3.org/TR/1999/REC-CSS1-19990111.[30] WORLD WIDE WEB CONSORTIUM: Cascading Style Sheets, level 2. W3C Recommendation.Mai 1998. Siehe http://www.w3.org/TR/1998/REC-CSS2-19980512.[31] WORLD WIDE WEB CONSORTIUM: Character entity references in HTML 4.W3C Recommendation. Dezember 1999 Siehe http://www.w3.org/TR/1999/REC-html401-19991224/sgml/entities.html.[32] WORLD WIDE WEB CONSORTIUM: Extensible Markup Language (XML) 1.0 (Second Edition).W3C Recommendation. Oktober 2000. Siehe http://www.w3.org/TR/2000/REC-xml-20001006.[33] WORLD WIDE WEB CONSORTIUM: Extensible Stylesheet Language (XSL) Version1.0. W3C Recommendation. Oktober 2001. Siehe http://www.w3.org/TR/2001/REC-xsl-20011015.[34] WORLD WIDE WEB CONSORTIUM: HTML 4.01 Specification. W3C Recommendation. Dezember1999 Siehe http://www.w3.org/TR/1999/REC-html401-19991224.[35] WORLD WIDE WEB CONSORTIUM: Namespaces in XML. W3C Recommendation. Januar1999. Siehe http://www.w3.org/TR/1999/REC-xml-names-19990114.[36] WORLD WIDE WEB CONSORTIUM: XHTML 1.0: The Extensible HyperText Markup Language.W3C Recommendation. Januar 2000. Siehe http://www.w3.org/TR/2000/REC-xhtml1-20000126.[37] WORLD WIDE WEB CONSORTIUM: XML Path Language (XPath) Version 1.0.W3C Recommendation. November 1999. Siehe http://www.w3.org/TR/1999/REC-xpath-19991116.[38] WORLD WIDE WEB CONSORTIUM: XML Path Language (XPath) Version 2.0.W3C Working Draft. Dezember 2001. Siehe http://www.w3.org/TR/2001/WD-xpath20-20011220.[39] WORLD WIDE WEB CONSORTIUM: XML Schema Part 0, 1 and 2. W3C Recommendation.Mai 2001. Siehe http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/,http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/ <strong>und</strong> http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/.89


Literaturverzeichnis[40] WORLD WIDE WEB CONSORTIUM: XQuery 1.0: An XML Query Language.W3C Working Draft. Dezember 2001. Siehe http://www.w3.org/TR/2001/WD-xquery-20011220.[41] WORLD WIDE WEB CONSORTIUM: XSL 1.0 - Formatting Objects. W3C Recommendation. Oktober2001. Siehe http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html.[42] WORLD WIDE WEB CONSORTIUM: XSL Transformations (XSLT) 1.0. W3C Recommendation.November 1999. Siehe http://www.w3.org/TR/1999/REC-xslt-19991116.[43] WORLD WIDE WEB CONSORTIUM: XSL Transformations (XSLT) 2.0. W3C Working Draft.Dezember 2001. Siehe http://www.w3.org/TR/2001/WD-xslt20-20011220/.90

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!