Cross Media Publishing von Lehrmaterialien mit XML Schema & XSL-Transformationen

Größe: px
Ab Seite anzeigen:

Download "Cross Media Publishing von Lehrmaterialien mit XML Schema & XSL-Transformationen"

Transkript

1 Cross Media Publishing von Lehrmaterialien mit XML Schema & XSL-Transformationen Diplomarbeit von Tanja Schniederberend betreut von Prof. Dr. Oliver Vornberger Akad. Dir. Klaus Brauer Fachbereich Mathematik/Informatik Universität Osnabrück

2 1 Vorwort Diese Diplomarbeit entstand an der Universität Osnabrück im Fachbereich Mathematik/Informatik. Sie bildet den schriftlichen Teil der Diplomprüfungen für meinen Abschluss als Diplom Systemwissenschaftlerin. Danksagung An dieser Stelle möchte ich allen, die mich bei der Erstellung dieser Diplomarbeit unterstützt haben, danken. Herrn Prof. Dr. Oliver Vornberger und Akad. Dir. Klaus Brauer für die Betreuung der Arbeit Ralf Kunze, Olaf Müller und Ingo Reckers für konstruktive Vorschläge und das Korrekturlesen der Arbeit Maren Schniederberend für weitere Korrekturanmerkungen Friedhelm Hofmeyer für die Bereitstellung eines Computers und der benötigten Software Warenzeichen Alle in dieser Arbeit genannten Unternehmens- und Produktbezeichnungen sind in den meisten Fällen geschützte Marken- oder Warenzeichen. Die Wiedergabe von Markenoder Warenzeichen in dieser Diplomarbeit berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass diese als frei von Rechten Dritter zu betrachten wären. Alle erwähnten Marken- oder Warenzeichen unterliegen uneingeschränkt den länderspezifischen Schutzbestimmungen und den Besitzrechten der jeweiligen eingetragenen Eigentümer.

3 I Inhaltsverzeichnis 1 Einleitung Aufgabenstellung Aufbau der Arbeit XML Schema Basis: XML Entstehung Grundlagen Definition einfacher Datentypen und Elemente Definition komplexer Datentypen und Elemente Namensräume Techniken zur Wiederverwendung und Strukturierung XSLT Entstehung Basis: XML-Dokument Aufbau des Konzeptbaumes Bewegung im Konzeptbaum Grundlagen Datenabhängige Verarbeitung Funktionen Erweiterungsfunktionen XSL-FO Entstehung Grundlagen Seitendefinition Inhalte einer Seite Generierung mit XSLT Formatierer

4 II 5 SVG Entstehung Grundlagen Darstellungsobjekte Animationen und Interaktionen Allgemeines Konzept Begriffsdefinitionen und Zusammenhänge Vollständiger Arbeitsablauf aus Anwendersicht Anforderungen an die Dokumenteingabe Anforderungen an die Dokumentstruktur Anforderungen an die Ausprägungen Dokumentstruktur Existierende Datenformate Textbeschreibende Datenformate Datenformate zur Beschreibung von Lehrmaterialien Bewertung der Datenformate Beschreibung inklusive Ausprägungskriterien Semantische Objekte Strukturelle Objekte Darstellungsstrukturen Erweiterungen elementarer Einheiten Zusatzinformationen für die Ausprägungen Realisierungsvorgaben Realisierung Dateneingabe Datenformat in XML Schema Elemente Beziehungen der Elemente Zusatzinformationen für die Ausprägungen Generierung der Ausgabe mit XSLT Folgerungen der Struktur Sprachunterstützung

5 III Flexibilität der Stylesheet Prozessoren MathML Verschiedene Ausprägungen Allgemeine Bestimmmung von Ausprägungen mit XSLT Skript Präsentation Anwendung Beispieldokument Skript in XHTML Skript in PDF Präsentation in SVG Ausblick 115 A Schemata der Dokumente 117 B Ausprägungstransformationen 119 C Testseiten verschiedener Formatierer 120 D Literaturverzeichnis 124 Erklärung

6 IV Abbildungsverzeichnis 1 Einordnung von XML XML-Dokument als Konzeptbaum Funktion von XSLT Selektierte Elemente im Konzeptbaum Ausgabe mit Saxon Ausgabe mit Xalan Ablauf zur Erstellung von Formaten aus XML-Daten Regionen einer Seite in XSL-FO Formatierung von Text in XSL-FO Zeile mit Grafikinhalt in XSL-FO Einfache grafische Objekte in SVG Pfad in SVG Pfadorientierter Text in SVG Zeitpunktaufnahmen einer Animation in SVG Interaktion in SVG Ein Dokument liefert verschiedene Inhaltsdarstellungen Arten der Inhaltsdarstellungen Arbeitsablauf Allgemeine Datenstruktur Struktur eines Kapitels Definition des Kapitels Zusammenhang der Textgruppen Gruppenzusammenhänge Ausschnitt XHTML mit MathML Beispielkapitel in XHTML Beispielskript in XHTML Beispielskript als PDF Beispielpräsentation in SVG Testseite mit XEP Testseite mit XSL Formatter Testseite mit FOP

7 1 1 Einleitung Lehrmaterialien werden über unterschiedliche Medien und an verschiedene Adressaten verteilt. Dabei werden sowohl Medien wie Tafeln, Folien oder Papier benutzt, als auch seit jüngerer Zeit der Computer. Alle diese Medien müssen auf unterschiedliche Art behandelt werden. Zusätzlich werden auch unterschiedliche Informationen auf den Medien verbreitet. Die Folien unterstützen eher stichwortartig ein Thema, das vorgetragen wird, und das Papier liefert die Möglichkeit die vorgetragenen Informationen ausführlich an die Lernenden zu verteilen. Die Tafel wird hingegen häufig zur Entwicklung einer Thematik verwendet. Es werden damit zu einem Thema unterschiedliche Detaillierungsgrade beschrieben, die auf verschiedene Arten verbreitet werden können. Ein Dozent muss deshalb zur Zeit mehrere Dokumente in unterschiedlichen Formaten erstellen und pflegen, um eine Thematik für verschiedene Adressatenkreise und Medien aufzubereiten. Damit werden dieselben Informationen vielfach erzeugt und können nicht wiederverwendet werden. Ein Weg zur Lösung dieser Problematik soll in dieser Diplomarbeit aufgezeigt werden. 1.1 Aufgabenstellung Unter Cross Media Publishing versteht man die Verbreitung von einem Inhalt auf unterschiedlichen Medien. Dabei ist der Inhalt nur ein einziges Mal zu spezifizieren und wird durch Automatismen so aufbereitet, dass er sowohl in elektronischer als auch in gedruckter Form veröffentlicht werden kann. Dieser Gedanke ist auf die verschiedenen Formen von Lehrmaterialien, wie beispielsweise Skript und Präsentation, anzuwenden. Deshalb müssen aus einem inhaltlichen Dokument unterschiedliche Formate erzeugt werden. Die ganze Verarbeitung soll aber nicht nur die Ausgabe eines einmal festgelegten Inhaltes auf unterschiedlichen Medien, sondern auch die Aufbereitung für verschiedene Adressatenkreise ermöglichen. Damit wird ein Inhalt in zwei Richtungen interpretiert, einmal inhaltlich anhand des Adressaten und einmal technisch anhand des einzusetzenden Mediums. Damit werden vielfältige Verbreitungsarten ermöglicht. Die Aufgabenstellung umfasst die Konzeptionierung und Machbarkeitsanalyse anhand einer Implementation des Cross Media Publishing, angewendet auf den Spezialfall der Lehrmaterialien unter Einsatz von XML Schema und XSL-Transformationen. Zur Beschreibung der zugrunde liegenden Struktur für die Lehrmaterialien ist XML Schema einzusetzen, da XML Schema eine zentrale Rolle in der Zukunft von XML spielen wird. "XML Schema is poised to play a central role in the future of XML processing, especially in Web services [...]" [SKO2003]. Aufbauend auf dieser Grundlage müssen die verschiedenen Publikationswege beschrieben werden können. Die dafür notwendigen Voraussetzungen werden mit XSL-Transformationen abgedeckt.

8 2 1.2 Aufbau der Arbeit In den ersten Kapiteln werden die technischen Grundlagen verschiedener XML-Anwendungen (XML Schema, XSLT, XSL-FO und SVG) erläutert, die für die spätere Realisierung von Bedeutung sind. Ergänzt werden die Erläuterungen durch kurze Beispiele, die die Funktionsweise der einzelnen XML-Anwendungen, unabhängig von der weiteren Betrachtung, anhand des Quellcodes deutlich machen sollen. Die zentralen Rollen nehmen dabei XML Schema und XSLT ein. Im Gegensatz dazu werden zu XSL-FO und SVG nur die grundsätzlichen Möglichkeiten erläutert. Auf die technischen Grundlagen folgt das Konzept zum Cross Media Publishing. Anhand der Vorgaben, die aus dem Konzept resultieren, werden die Anforderungen an die Dokumenteingabe, die Dokumentstruktur und die Ausprägungen festgehalten. Diese Anforderungen werden mit den existierenden Datenformaten verglichen und die Struktur des verwendeten Datenformates wird erläutert. Aufbauend auf diesem theoretischen Ansatz wird die konkrete Realisierung behandelt. Dazu werden die theoretischen Anforderungen des Konzeptes in eine praktische Umsetzung gebracht. Die Dateneingabe beschäftigt sich mit den Anforderungen an einen Editor unter dem Gesichtspunkt des eingesetzten Formates. Die Realisierung der Dokumentstruktur und der weitere Generierungsprozess wird anhand von beispielhaften Codeauszüge dargestellt. Die beispielhafte Betrachtung des gesamten Prozesses von einem Dokument bis hin zu mehreren Ausprägungen rundet die Ausführungen ab. Der im Anschluss betrachtete Ausblick stellt weitere Ideen und Vorstellungen zur Weiterentwicklung des Konzepte vor.

9 3 2 XML Schema XML Schema ist eine XML-Anwendung, mit der neue XML-Anwendungen definiert werden. Um die Funktionsweise von XML Schema zu verstehen und anwenden zu können, sollten grundlegende XML Kenntnisse vorhanden sein. Das folgende Kapitel soll zunächst einen kurzen Überblick über XML liefern. Für ein tiefer gehendes Verständnis sei auf die dementsprechende Fachliteratur verwiesen, z.b. [Har2000a, Har2000b]. 2.1 Basis: XML Die extensible Markup Language (XML) wurde 1998 in erster Version vom W3C [W3CXML] als Empfehlung verabschiedet. XML ist eine Metasprache, die es ermöglicht anhand von Auszeichnungen, sogenannten Tags, neue Markup-Sprachen zu definieren. Auf diese Weise definierte Sprachen werden XML-Anwendungen genannt. XML ist aus der Standard Generalized Markup Language (SGML) entstanden. SGML ist bereits 1986 als Metasprache zur Dokumentenbeschreibung [ISO8879] standardisiert worden. Mit SGML werden Vorschriften geliefert, um neue Auszeichnungssprachen zu definieren ist aus den Ideen von SGML die erste Version von HTML entstanden und seit der Version 2.0 im Jahr 1995 wird HTML auch durch SGML definiert. Während sich allerdings HTML weit verbreitet hat, wird SGML nur von einem sehr eingeschränkten Benutzerkreis, beispielsweise von Verlagen, verwendet. Das ist insbesondere der hohen Komplexität und einer mehrere hundert Seiten langen Definition von SGML [Hof1998] zu verdanken. Zur Verringerung dieser Komplexität und zur Verkürzung der Definition des Standards ist XML entstanden 1. XML ist ebenfalls eine Metasprache, vgl. Abbildung 1. Die wesentlichen Ideen von SGML wurden in XML aufgegriffen und erschwerende Eigenschaften abgeschafft. So verstößt beispielsweise die aus HTML bekannte Möglichkeit Tags wegzulassen, wenn sie aus dem Zusammenhang klar hervorgehen, gegen die Regeln von XML. Das stellt eine Vereinfachung in dem Sinne dar, dass keine Rückschlüsse auf die Struktur eines Dokumentes anhand des Kontextes gemacht werden müssen. Dadurch wird besonders die Entwicklung von Anwendungsprogrammen erleichtert. Dokumente, die gültige XML-Dokumente liefern, sind somit auch automatisch gültige SGML-Dokumente. XML stellt also eine vereinfachte Teilmenge von SGML dar, mit der Ausnahme, dass die bei SGML geforderte Angabe einer Document Type Definition (DTD) in XML-Dokumenten vernachlässigt werden kann, vgl. [Bry2001, Kapitel 4.1.1]. XML-Dokumente, die keine DTD angeben, sind somit keine gültigen SGML-Dokumente. Ansonsten ist XML aufwärtskompatibel zu SGML. Zur weiteren Unterscheidung vgl. [Cla1997]. Aus dieser Entwicklung stammt die optische Ähnlichkeit von HTML- und XML-Dokumenten, die sich in der Auszeichnung anhand von Tags ausdrückt. 1 Zu den weiteren Anforderungen an XML siehe [Beh2000, S.389].

10 4 Metasprachen SGML XML definieren HTML XHTML SVG MathML XSLT Abbildung 1: Einordnung von XML Der Zweck, mit XML eine Metasprache zu entwickeln, die sich einer hohen Benutzung erfreut, ist gelungen. Schon heute werden zahlreiche XML-Anwendungen, beispielsweise XHTML, SVG, MathML und XSLT, definiert und benutzt. In [Zap2002] wird eine große Anzahl von XML-Anwendungen nach Einsatzgebieten sortiert dargestellt, wobei sich die Liste kontinuierlich verlängert. In XML werden strukturierte Informationen beschrieben, die mit Tags ausgezeichnet werden. Derartige Dokumente müssen die von XML aufgestellten Grundregeln befolgen. Erfüllt ein XML-Dokument die folgenden acht Regeln, so gilt es als well formed (wohlgeformt), vgl. [Har2000a, S.179 ff.]: 1. Der Anfang des Dokumentes startet mit einer XML-Deklaration: <?xml version="1.0"?> 2. Zu jedem öffnenden Tag gibt es ein schließendes Tag: <TAG> inhalt </TAG> 3. Leere Elemente können in der folgenden Kurzform notiert sein: <LEERES_ELEMENT/> Diese Notation ist gleichbedeutend mit: <LEERES_ELEMENT></LEERES_ELEMENT> 4. Das Wurzelelement des Dokumentes muss alle anderen Elemente enthalten.

11 5 5. Elemente können ineinander verschachtelt, dürfen aber nicht verzahnt sein: richtig ist: <ELEMENT1><ELEMENT2></ELEMENT2></ELEMENT1> falsch ist: <ELEMENT1><ELEMENT2></ELEMENT1></ELEMENT2> 6. Alle Attribute müssen in Anführungszeichen stehen. 7. Die Zeichen < und & sind geschützte Zeichen und dürfen nur für den Beginn von Tags bzw. Entity 2 -Referenzen eingesetzt werden. 8. Es dürfen nur die vordefinierten Entity-Referenzen &, &apos;, <, >, " benutzt werden. Basierend auf diesen Grundlagen sind mittlerweile zahlreiche XML-Anwendungen entstanden. Die für die weitere Arbeit entscheidenen Anwendungen, werden in den folgenden Kapiteln ausführlich behandelt. 2.2 Entstehung Die erste Möglichkeit zur Beschreibung von neuen XML-Anwendungen wurde mittels DTD s geliefert, vgl. Kapitel 2.1. Durch die schnelle Verbreitung von XML wurden schnell die Grenzen von DTD s erreicht. DTD s liefern keine Möglichkeit Datentypen zu definieren, da sie nur mit Einschränkungen auf den benutzbaren Zeichen arbeiten. Ebenso ist die Wiederverwendbarkeit eingeschränkt, da keine global eindeutigen Namen vergeben werden können. Aus diesen Gründen wurde nach einer Möglichkeit gesucht, die Datentypen der Elemente und Attribute eines XML-Dokumentes genauer zu definieren, um somit ihre Wiederverwendbarkeit und Interoperabilität zu erhöhen. Das alles sollte mit einer Sprache erreicht werden, die auch in XML geschrieben wird. Aus diesen wesentlichen Anforderungen ist am vom W3C die erste und zur Zeit aktuelle Empfehlung von XML Schema in drei Teilen verabschiedet worden. Der Leitfaden zu XML Schema in XML Schema Part 0: Primer [W3CXSDa] und die zwei maßgeblichen Empfehlungen XML Schema Part 1: Structures [W3CXSDb] und XML Schema Part 2: Datatypes [W3CXSDc]. XML Schema ist demnach eine XML- Anwendung, mit der neue XML-Anwendungen beschrieben werden können. 2 Ein Entity ist eine Speichereinheit eines XML-Dokumentes. Diese sind beliebig groß und können Text oder Binärdaten enthalten. Mittels Entity-Referenzen kann ihr Inhalt in ein XML-Dokument eingefügt werden, vgl. [Har2000a, S.293 ff.]

12 6 In vielen Fällen wird allerdings zur Zeit noch mit DTD s gearbeitet, da sie von vielen Tools umfangreicher unterstützt werden als XML Schema. Auf Dauer werden sich aber die erweiterten Möglichkeiten von XML Schema im Vergleich zu DTD s durchsetzen. So resultieren aus der Anforderung zur Definition eigener Datentypen in XML Schema neue Ideen dieses Wissen über den Inhalt eines Elementes oder Attributes auch in die weiteren Verarbeitungsschritte einzubringen. Beispielsweise ist angedacht in einer weiteren Version von XSLT, vgl. Kapitel 3, den Zugriff auf die Datentypen zu ermöglichen. 2.3 Grundlagen XML-Dokumente müssen nicht mit einer DTD oder einem Schema verknüpft sein. Das bedeutet, dass sie auch ohne Angabe einer Definition, sei es nun eine DTD oder ein Schema, existieren und auf ihre Wohlgeformtheit überprüft werden können, vgl. Kapitel 2.1. Allerdings lassen sich ohne Angabe einer Definition keine Prüfungen bezüglich der Struktur des Dokumentes vornehmen. Diese können nur gemacht werden, wenn das Dokument auf eine DTD oder ein Schema verweist. Die darin spezifizierten Angaben zu der Struktur des XML-Dokumentes, werden anhand eines XML-Parsers 3 getestet. Ist das XML-Dokument nach der vorgegebenen Struktur der DTD oder des Schemas aufgebaut, so nennt man es gültig. Diese Gültigkeitsprüfung nennt man auch Validierung. Da diese Prüfung erst in einem zweiten Schritt erfolgen kann, ist die Voraussetzung, dass es sich um ein wohlgeformtes Dokument handelt. Da XML Schema die Struktur von XML-Dokumenten beschreibt, sollen im Folgenden nur noch gültige Dokumente betrachtet werden. Auf dieser Grundlage bauen auch die weiteren Verarbeitungsschritte auf. Um den Anforderungen an ein wohlgeformtes XML-Dokument gerecht zu werden, ist der äußere Rahmen für jedes XML-Schema im wesentlichen gleich: <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs=" </xs:schema> In der ersten Zeile handelt es sich um die standardmäßige XML-Deklaration. Diese wurde hier um das Attribut encoding ergänzt, mit dem der Zeichensatz des gesamten Dokumentes angegeben werden kann. Als nächstes folgt das Wurzelelement, das die gesamten weiteren Elemente enthalten muss. Für die Definition eines XML Schemas muss dieses das schema-element sein. Zur eindeutigen Identifizierung wird ihm mit 3 Ein XML-Parser ist ein Programm, das ein XML-Dokument einliest und dadurch den Zugriff auf den Inhalt und die Struktur des Dokumentes ermöglicht. Eine Überprüfung der Gültigkeit ist für den Parser nicht zwingend erforderlich, doch bedingt ein erfolgreiches Einlesen die Wohlgeformtheit des Dokumentes.

13 7 dem xmlns-attribut der Namensraum zugewiesen. Auf Namensräme wird in Kapitel 2.6 noch explizit eingegangen. Die gängige Notation für Schema-Elemente ist das Präfix xs, das im weiteren verwendet wird. In den folgenden Beispielen wird dieses Präfix gefolgt von einem Doppelpunkt benutzt und damit die Zugehörigkeit der Elemente zur Schemadefinition festgelegt. Eigenen Definitionen wird dieses Präfix nicht vorangestellt, wodurch sie immer leicht zu erkennen sind. In den äußeren Rahmen werden nun die Definitionen für die neue XML-Anwendung eingebettet. Die einfachste Art ist das Hinzufügen eines neuen Elementes. Dazu müssen der Name und der Typ angegeben werden. Beispiel 2.3.1: Ein Element mit dem Namen datum vom Typ date läßt sich folgendermaßen beschreiben: <xs:element name="datum" type="xs:date"/> Ein auf einen einfachen Typ eingeschränktes Element, kann nur den Inhalt aufnehmen, der durch die Typangabe spezifiziert wurde. Diese Einschränkung ist vergleichbar mit Typfeldern einer Datenbank. Es können also keine weiteren Elemente in dem Element enthalten sein. Beispiel 2.3.2: Das datum-element aus dem vorangegangenen Beispiel würde etwa folgendermaßen in einem XML-Dokument zum Einsatz kommen: <datum> </datum> Neben den bereits in XML Schema existierenden einfachen Datentypen, vgl. Tabelle 1, lassen sich auch eigene Datentypen definieren. Diese Technik soll im Folgenden erläutert werden. Datentyp Beispiel für gültigen Inhalt string alle textuellen Inhalte inkl. Leerzeichen language en de en-us anyuri time 18:00:30 gmonthday integer double e7 INF boolean true 1 0 Tabelle 1: Häufig benutzte Datentypen in XML Schema.

14 8 2.4 Definition einfacher Datentypen und Elemente Wie es in gängigen Programmiersprachen der Fall ist, lassen sich neue Datentypen definieren. Dazu dienen die bereits existierenden Datentypen als Grundlage. Hierfür gibt es drei grundsätzliche Möglichkeiten, die zum Einsatz kommen können: Einschränkungen: Festlegung einer Teilmenge von gültigen Werten aus der ursprünglichen Wertemenge Listen: Durch Leerzeichen getrennte Aufzählungen eines Typs Vereinigungen: Kombination verschiedener Datentypen zu einem neuen Typ Allen diesen Typ-Definitionen können auch bereits selbst erzeugte Datentypen zugrunde liegen, woraus sich beliebige Kombinationsmöglichkeiten ergeben. Eine Ausnahme bildet hierbei die Liste, da keine Liste von Listen erzeugt werden kann. Die einzelnen Definitionsmöglichkeiten sind durch die unterschiedlichen Umsetzungsarten sehr flexibel. So lässt sich bespielsweise eine Einschränkung durch Aufzählungslisten gültiger Werte Angabe von Minimal- oder Maximalwerten Muster Längenbegrenzung der einzugebenden Zeichen realisieren. Einige dieser Umsetzungsarten sollen in den folgenden Beispielen demonstriert werden. Beispiel 2.4.1: Verschiedene Arten von Einschränkungen: 1. Ein einfacher Datentyp grafikformat, der durch Einschränkungen von xs:string nur noch bestimmte Werte (gif, jpg oder eps) annehmen darf: <xs:simpletype name="grafikformat"> <xs:restriction base="xs:string"> <xs:enumeration value="gif"/> <xs:enumeration value="jpg"/> <xs:enumeration value="eps"/> </xs:restriction> </xs:simpletype>

15 9 2. Für einen Typ artikelnummer, der auf einer ganzen Zahl zwischen 1 und beruht, sind verschiedene Definitionen möglich. In diesem Beispiel wird die 0 ausgeschlossen, während die mit in den Wertebereich aufgenommen wird: <xs:simpletype name="artikelnummer"> <xs:restriction base="xs:integer"> <xs:minexclusive value="0"/> <xs:maxinclusive value="999999"/> </xs:restriction> </xs:simpletype> 3. Ein Beispiel zur Benutzung von Mustern, ist die Einschränkung von URI s 4 auf ausschließlich per FTP (File Transfer Protocol) erreichbare Daten. Diese beginnen stets mit ftp://, gefolgt von einer beliebigen Zeichenkette. Hier wird beispielhaft ein Datentyp namens ftpuri erzeugt, der von xs:anyuri abstammt: <xs:simpletype name="ftpuri"> <xs:restriction base="xs:anyuri"> <xs:pattern value="ftp://.*"/> </xs:restriction> </xs:simpletype> Beispiel 2.4.2: Listen und Vereinigungen: 1. Es lassen sich auch neue Datentypen durch Listen erzeugen, wie hier zum Beispiel eine formatliste von den in Beispiel 2.4.1(1) erzeugten Grafikformaten. Gültige Elemente zu diesem Datentyp würden immer mit Leerzeichen die einzelnen Listeneinträge voneinander trennen, beispielsweise "gif gif jpg" oder "eps jpg gif", wobei die Anzahl der Einträge keine Rolle spielt. <xs:simpletype name="formatliste"> <xs:list itemtyp="grafikformat"/> </xs:simpletype> 4 Mit einem Uniform Resource Identifier (URI) werden alle Arten von Namen und Adressen beschrieben, die auf Quellen im Web hinweisen. Der bekannteste Einsatz von URI s sind Uniform Resource Locator (URL), die eine Teilmenge der URI s darstellen. Weiter reichende Informationen dazu sind in [W3CURI] zu finden.

16 10 2. Durch die Vereinigung vom positiven und negativen Integerdatentyp lässt sich ein neuer Datentyp erstellen, der alle Integerwerte mit Ausnahme der Null akzeptiert. Mit dieser Definition wird IntegerOhneNull vom Typ union. Um die Datentyp-Eigenschaft beizubehalten, dass es sich um Elemente des Typs Integer handelt, muss eine derartige Definition als Restriktion auf dem Integer-Typ vorgenommen werden. <xs:simpletype name="integerohnenull"> <xs:union membertypes="xs:positiveinteger xs:negativeinteger"/> </xs:simpletype> Von diesen eigens definierten Datentypen lassen sich genauso Elemente erzeugen, wie es von den vorgegebenen Typen der Fall ist. Allerdings ist es nicht immer nötig extra einen eigenen Datentyp zu kreieren, wenn dieser für einen sehr speziellen Fall benötigt wird und keine weitere Verwendung findet. Dafür besteht immer die Möglichkeit ein Element mit direkter Typdefinition zu erzeugen, so dass dieser nicht speziell benannt wird und nur lokal in dem Element existiert. Beispiel 2.4.3: Ein gruss-element, das verschiedene Begrüßungsarten (hallo, morgen oder servus) enthalten darf, wird nur einmal benötigt. Deshalb bietet sich hierfür eine lokale Definition des Elementes an. Diese Definition ist im wesentlichen mit den vorhergehenden Typdefinitionen identisch, nur wird kein Name für den Typ vergeben und das Element enthält kein Attribut, das auf den Typ verweist. <xs:element name="gruss"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:enumeration value="hallo"/> <xs:enumeration value="morgen"/> <xs:enumeration value="servus"/> </xs:restriction> </xs:simpletype> </xs:element> Einfache Datentypen beschreiben somit ausschließlich den Inhalt eines einzigen Elementes und machen keine Aussage zu der Struktur des Dokumentes. Dazu werden komplexe Elemente und Datentypen definiert.

17 Definition komplexer Datentypen und Elemente Einfache Datentypen haben keinen Einfluß auf die Beziehung der Elemente untereinander. Die Struktur, die das Auftreten der Elemente bestimmt, wird durch komplexe Datentypen definiert. Sie beschreiben die Struktur eines Dokumentes anhand der in sie geschachtelten Elemente und ihrer Reihenfolge. So gibt es Elemente, die sich aus anderen zusammensetzen lassen. Bei dieser Art der Strukturbeschreibung gibt es drei verschiedene Möglichkeiten: 1. Die all-umgebung besitzt keine Reihenfolge. Alle aufgezählten Elemente können somit in beliebiger Reihenfolge auftauchen. Es besteht nur die Möglichkeit ein Element als optional zu deklarieren. Angaben über ein mehrfaches Auftreten eines Elementes sind allerdings nicht möglich. 2. In einer sequence lässt sich die Reihenfolge der Elemente oder auch anderer Inhalte wie Gruppen (in Kapitel 2.7 folgt eine genauere Beschreibung) festlegen und die Häufigkeit bestimmen. Elemente können dabei genau einmal auftreten, optional sein oder auf einen beliebig großen Wert bis zu unendlich hin festgesetzt werden. Standardmäßig müssen Elemente genau einmal auftreten. Sequenzen bieten die Möglichkeit ineinander geschachtelt zu werden. Dadurch ist es auch möglich Sequenzen von Sequenzen zu bilden. 3. Die letzte Möglichkeit Elemente zu schachteln, ist die Auswahl mit dem Element choice. Hierbei lassen sich verschiedene Elemente, Gruppen oder auch Sequenzen angeben, die wahlweise benutzt werden können. Auch das choice- Element lässt sich ineinander schachteln. Innerhalb dieser Umgebung können den Elementen beliebige Werte für die Anzahl ihres Auftretens mitgeben werden. Beispiel 2.5.1: Eine Adresse setzt sich aus verschiedenen Elementen (dem Namen der Person, der Straße, der Postleitzahl und der Stadt) zusammen. Die Adresse ist als Sequenz realisiert, wodurch die Elemente in der angegebenen Reihenfolge vorkommen müssen und mit Ausnahme der optionalen Straße nur genau einmal auftreten dürfen. <xs:element name="adresse"> <xs:complextype> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="strasse" type="xs:string" minoccurs="0"/> <xs:element name="plz" type="xs:nonnegativeinteger"/> <xs:element name="stadt" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element>

18 12 Dieses Beispiel lässt sich anstatt mit einer Sequenz auch ohne weiteres unter Verwendung des all-elementes realisieren. Das liegt daran, dass zum einen die Reihenfolge vernachlässigbar ist und zum anderen die auftretenden Elemente maximal einmal vorkommen dürfen. Solche Definitionen lassen sich sowohl direkt in Elementen vornehmen, als auch in benannten komplexen Datentypen. Wird diese Definition in einem Datentyp realisiert, so lässt er sich für unterschiedliche Elemente wiederverwenden. Das findet auf die gleiche Art statt, wie es auch bei Elementen eines einfachen Typs der Fall ist, indem der Name des Typs im entsprechenden Attribut angegeben wird. Bei der Definition komplexer Datentypen unterscheidet man grundsätzlich drei verschiedene Arten von komplexen Inhalten. Die eine Art beruht auf der Erweiterung oder Einschränkung einfacher oder komplexer Typen. In Kapitel 2.4 wurden nur einfache Typen definiert, die keine Elemente oder Attribute enthalten können. Diese einfachen Typen können nun als Grundlage eines neuen komplexen Typs dienen. Durch das simplecontent-element wird der einfache Typ innerhalb der komplexen Typdefinition referenziert. Auf dieser Basis können nun spezielle komplexe Merkmale dem Typ hinzugefügt werden. In diesem Fall lässt sich der ursprünglich einfache Typ um eines oder mehrere Attribute zu einem komplexen Datentypen ergänzen. Beispiel 2.5.2: Zur Angabe eines Bildes soll neben der URI mit Hilfe eines Attributes das Format eingetragen werden. Dazu reicht es einen Datentyp zu schaffen, der auf einem einfachen Typ, nämlich der xs:anyuri, beruht und diesen durch eine Erweiterung um ein Attribut des zuvor definierten einfachen Typen grafikformat ergänzt. <xs:complextype name="bild"> <xs:simplecontent> <xs:extension base="xs:anyuri"> <xs:attribute name="format" type="grafikformat"/> </xs:extension> </xs:simplecontent> </xs:complextype> Ein Element mit dem Namen grafik von diesem Typ bild würde in einer Beispielausprägung des Schemas etwa folgendermaßen aussehen: <grafik format="jpg">c:/bild.jpg</grafik> Auf diese Art erzeugte Datentypen sind zwar komplex, aber lassen sich auch wieder als Grundlage für andere Datentypen im simplecontent benutzen. Damit lassen

19 13 sich auch Einschränkungen realisieren, die nicht durch die Restriktionen auf einen einfachen Typ abgebildet werden können. Beispielsweise lässt sich ein zuvor erweiterter Typ in seiner Zeichenanzahl eingeschränken oder seine hinzugefügten Attribute lassen sich als verboten deklarieren. Liegt der Definition eines komplexen Datentyps ein einfacher Typ zugrunde, so beziehen sich seine komplexen Eigenschaften ausschließlich auf die Ergänzung um Attribute. Komplexe Typen können daher nicht als Grundlage von Attributen dienen. Diese werden ausschließlich durch einfache Typen erzeugt. Eine weitere Möglichkeit komplexe Typen zu erzeugen besteht in der Beschreibung der Struktur. Wie schon im Beispiel gezeigt, lassen sich Elemente aus anderen Elementen zusammensetzen. Das kann mit und ohne Reihenfolge realisiert werden. Bei dieser grundsätzlichen Art der Strukturbeschreibung ist die Angabe, dass es sich um einen komplexen Inhalt handelt, nicht nötig. Erst wenn ein komplexer Datentyp erweitert oder eingeschränkt werden soll, muss das festgelegt werden. Diese Veränderungen sind sehr ähnlich zu denen bei einfachen Typen. Mit Erweiterungen lassen sich Elemente, Gruppen oder Attribute zu einem Typ hinzufügen. Allerdings betrifft dies nur das Anhängen an das Ende des zugrunde liegenden Datentyps. Eine Umstrukturierung der vorhandenen Elemente bezüglich ihrer Reihenfolge läßt sich nicht realisieren. Durch Restriktionen können Elemente oder Attribute in ihrem Auftreten eingeschränkt werden. Hierbei ist stets zu berücksichtigen, dass ein Element des resultierenden Datentyps auch nach dem Typ gültig sein muss, der die Grundlage geliefert hat. Das bedeutet, dass kein Element oder Attribut verboten werden kann, welches zuvor zwingend erforderlich war. Es können also nur Einschränkungen auf optionale Eigenschaften getroffen werden. Beispiel 2.5.3: Die Einschränkung des komplexen Datentyps adresse aus Beispiel auf den Namen der Person, Postleitzahl und Adresse ist ein typisches Beispiel für Restriktionen. Das zuvor optionale Element Strasse fällt hier weg. Jedes Element vom neuen Typ nameort ist somit auch nach dem alten Typ adresse gültig. Die anderen Elemente mussten alle aufgezählt werden und durften nicht wegfallen, da bei ihnen keine Angaben zur Anzahl des Auftretens gemacht wurden und somit der Standard besagt, dass diese Elemente genau einmal auftreten müssen. <xs:complextype name="nameort"> <xs:complexcontent> <xs:restriction base="adresse"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="plz" type="xs:nonnegativeinteger"/> <xs:element name="stadt" type="xs:string"/> </xs:sequence> </xs:restriction> </xs:complexcontent> </xs:complextype>

20 14 Eine letzte Möglichkeit einen Typ zu erzeugen liegt in der Kombination von einfachen und komplexen Elementeigenschaften. Dazu lässt sich bei einem komplexen Datentypen das mixed-attribut auf true setzen. Ein komplexer Datentyp, der mixed ist, kann neben den angegebenen Elementen auch einfachen Text enhalten. Ein Element diesen Typs ist dadurch frei in seiner Kombination aus Elementen und beliebigem Text. Beispiel 2.5.4: Zur Definition eines beliebigen Textes mit Elementen wird das Attribut mixed eingesetzt. So wird das boldtext Element als komplex definiert, das aus Text besteht und optional auch ein bis beliebig viele bold-elemente enthalten kann. <xs:element name="boldtext"> <xs:complextype mixed="true"> <xs:choice minoccurs="0" maxoccurs="unbounded"> <xs:element name="bold" type="xs:string"/> </xs:choice> </xs:complextype> </xs:element> Die folgende beispielhafte Ausprägung des oben definierten Elementes boldtext, wird von einem XML-Parser als gültig validiert: <boldtext>hier steht <bold>ein Element</bold> im Text und ein zweites <bold>ist hier</bold> und es geht weiter... </boldtext> 2.6 Namensräume Um die Wiederverwendbarkeit und Kombinationsmöglichkeiten einmal geschriebener Schemata zu erhöhen, müssen diese über eindeutige Bezeichnungen verfügen. Erst dadurch wird gewährleistet, dass bei der Benutzung fremder Elemente nicht eigene Definitionen zerstört werden, weil beispielsweise Elemente gleichen Namens verwendet wurden. Um diese Bedingungen zu erfüllen, sind Namensräume eingefügt worden. Ein Namensraum ist vergleichbar mit dem Namen eines Java-Paketes, zu dem verschiedene Elemente bzw. Klassen gehören. Allerdings ist im Unterschied dazu der Namensraum eine reine Identifikationsbezeichnung, während der Paketname auch Informationen zu der Verzeichnisstruktur der Klassen liefert. Um die Eindeutigkeit zu gewährleisten, ist es aber üblich eine eigene URL anzugeben. Namensräume sind eine XMLweite Erfindung [W3CXMLNS] um verschiedene XML-Anwendungen voneinander

21 15 zu unterscheiden. Gerade die Verwendung von Namensräumen innerhalb von XML Schema stellen einen großen Vorteil im Vergleich zu einer DTD dar, vgl. [Vli2002, S.153 ff.]. XML Schema benutzt für jedes Element einen Namensraum. Dieser kann entweder explizit angegeben oder durch einmalige Angabe als Standardnamensraum für alle Elemente festgesetzt werden. Nur durch die Vergabe von Namensräumen können die benutzten Elemente überhaupt identifiziert und damit ein Dokument als gültig validiert werden. Schon in der Vorlage für XML-Schema-Dokumente auf Seite 6 wurde durch den Namensraum die Schemadefinition vom W3C identifiziert. Es ist damit genau festgelegt um welche Elemente es sich handelt und das Dokument kann anhand dieses Namensraumes als gültige XML-Anwendung validiert werden. Der Namensraum eines Elementes oder auch Attributes wird durch das xmlns-attribut (XML-NameSpace) festgelegt. Wird direkt in einem Element per xmlns-attribut auf einen Namensraum verwiesen, so gilt dieser Namensraum für das Element und alle seine Kinderelemente. Nur wenn ein Kindelement auf einen neuen Namensraum referenziert, so wird diese Vererbungsachse unterbrochen. Mit dieser Regel spart man sich grundsätzlich eine Menge Schreibarbeit, allerdings wird es somit auch nötig sein immer wieder den Namensraum zu ändern. Um dies zu erleichtern, lassen sich Präfixe vergeben, die als abkürzende Schreibweise gedacht sind. Mittels dieses Zusatzes an dem xmlns-attribut, getrennt durch einen Doppelpunkt, wird diese Abkürzung definiert. Beispiel 2.6.1: Mit xmlns:xs=" lässt sich der Namensraum für die Schemadefinition mit xs: abkürzen, wie das in den vorherigen Beispielen schon geschehen und auch allgemein üblich ist. Dennoch ist diese Abkürzung beliebig wählbar und statt xs könnte auch schema oder irgendeinwort benutzt werden. Der aktuelle Namensraum, für den die Elemente eines Schemas geschrieben werden, kann durch die Verwendung des targetnamespace-attributes in dem schema- Tag für alle Elemente gesetzt werden. Ob dieser aber auch der Namensraum ist, in dem die Elemente geschrieben werden, hängt von dem xmlns-attribut ab. Ist dieses mit dem targetnamespace identisch, so brauchen für die Elemente keine Präfixe benutzt werden. Weichen die Namensräume voneinander ab, so sind sie mittels eines Präfixes voneinander abzugrenzen und darüber erreichbar. Beispiel 2.6.2: Ein Schema, das den Namensraum beschreibt und in dem die drei Elemente Name, Stadt und Adresse definiert werden, muss sich aber nicht in dem aktuellen Namensraum befinden. Der beschreibende Namensraum ist hier mit dem Präfix akt versehen und die Elemente müssen somit auch bei Referenzierungen aufeinander dieses Präfix benutzen, um wiedergefunden zu wer-

22 16 den. Der aktuelle Namensraum, der hier ohne Präfix angesprochen werden kann, ist der der Schemabeschreibung, nämlich Deshalb konnten hier alle Elemente, die aus der Schemadefinition stammen, ohne ein Präfix, wie in den Beispielen zuvor geschehen, benutzt werden. <?xml version="1.0" encoding="utf-8"?> <schema targetnamespace=" xmlns:akt=" xmlns=" <element name="name" type="string"/> <element name="stadt" type="string"/> <element name="adresse"> <complextype> <all> <element ref="akt:name"/> <element ref="akt:stadt"/> </all> </complextype> </element> </schema> Es können beliebig viele Namensräume angegeben und deren Elemente benutzt werden. Es gibt aber auch die Möglichkeit auf einen Namensraum zu verzichten, um beim Zusammenfügen mehrerer Schemata einen einheitlichen Namensraum verwenden zu können. Dazu besteht die Möglichkeit Elemente und auch Attribute als unqualified zu deklarieren und sie damit keinem Namensraum zuzuordnen. Der für ein Schema zu benutzende Standard kann durch die elementfromdefault- und attribute- FromDefault-Attribute des Schema-Tags auf qualified bzw. unqualified gesetzt werden. Dennoch lässt sich das für jedes Element oder Attribut in seiner Definition ändern. In den meisten Fällen ist es üblich Elemente als qualified festzulegen, um sie eindeutig einem Namensraum zuzuordnen. Attribute werden häufig als unqualified festgelegt, da sie stets in Zusammenhang mit einem Element auftreten. Da Elemente meistens einen Namensraum besitzen, ist für Attribute selber kein eigener Namensraum zwingend notwendig. Für globale Elemente und Attribute erübrigt sich diese Frage sowieso, da diese immer qualified sein müssen.

23 Techniken zur Wiederverwendung und Strukturierung Neben der Wiederbenutzbarkeit von Datentypen gibt es auch die Möglichkeit einmal definierte Elemente oder Attribute wieder zu verwenden. Das gilt für alle Elemente und Attribute, die global definiert sind. Global bedeutet, dass sie direkt unterhalb des schema-elementes spezifiziert wurden. Diese Elemente und Attribute sind im gesamten Schema sichtbar und lassen sich von beliebigen Stellen aus über ihren Namen referenzieren. Für Elemente und Attribute lokaler Definitionen gilt das nicht. Sie lassen sich ausschließlich an der Position benutzen, an der sie definiert werden. Im Gegensatz zu Datentypen müssen Elementen und Attributen immer Namen gegeben werden, unabhängig davon ob sie global oder lokal definiert sind. Diese Namen werden in dem XML-Dokument für die Auszeichnung benutzt. Eine weitere Möglichkeit zur Strukturierung und Wiederverwendung von verschiedenen Elementen wird durch die Anwendung von Gruppen geliefert. Mit ihnen lassen sich verschiedene Elemente zusammenfassen. Dabei sind die gleichen Mechanismen zu verwenden wie bei komplexen Datentypen, also Sequenzen, Wahlmöglichkeiten und das all-modell. Diese Gruppen können nur global erzeugt werden und sind somit an beliebiger Stelle im Schema referenzierbar. Mittels Gruppen lassen sich dementsprechend gleiche Strukturen einmal definieren und beliebig oft wiederverwenden. Änderungen werden dadurch einfacher machbar, indem sie nur einmal in der Gruppe vorgenommen werden müssen. Diese Technik zur Gruppierung existiert auch für Attribute. Es können Attributgruppen definiert werden, die verschiedene Attribute auflisten. Da Attribute keine Struktur beinhalten, werden in Attributgruppen die Attribute in Form einer Liste aufgeführt. Soll ein Element alle Attribute einer Attributgruppe per Definition zugewiesen bekommen, so lässt sich diese Gruppe referenzieren. Es lassen sich dadurch spezielle Attributgruppen erstellen, die von mehreren Elementen genutzt werden und somit den Einbau von Änderungen erleichtern. Beispiel 2.7.1: Eine Nachricht wird definiert, die mittels der Referenz auf eine Attributgruppe einganginfo Attribute hinzugeliefert bekommt. Die Attribute art und datum werden ebenfalls erst definiert und mittels Referenz in die Attributgruppe integriert. Das Datum ist dabei als zwingend gekennzeichnet, während die Art optional ist. Beispielhafte Ausprägungen könnten die folgenden sein: <nachricht datum=" ">text 1</nachricht> <nachricht art="mail" datum=" ">text</nachricht> In der Attributgruppe wurde noch eine Dokumentation eingefügt. Sie ist in der annotation zu finden. Mittels des documentation-elements ist die für den Betrachter des Schemas lesbare Dokumentation eingetragen.

24 18 <xs:attribute name="art" type="xs:string"/> <xs:attribute name="datum" type="xs:date"/> <xs:attributegroup name="einganginfo"> <xs:annotation> <xs:documentation> Diese Gruppe enthaelt alle Eingangsinformationen </xs:documentation> </xs:annotation> <xs:attribute ref="art" use="optional"/> <xs:attribute ref="datum" use="required"/> </xs:attributegroup> <xs:element name="nachricht"> <xs:complextype> <xs:simplecontent> <xs:extension base="xs:string"> <xs:attributegroup ref="einganginfo"/> </xs:extension> </xs:simplecontent> </xs:complextype> </xs:element> Ein Schema kann schnell sehr komplex und für den Leser unübersichtlich werden. Um das zu vermeiden, gibt es die Möglichkeit zur Dokumentation. Es werden zwei verschiedene Arten von Dokumentationen unterschieden. Die Dokumentation der Elemente, Attribute, etc. für den Anwender (vgl. Beispiel 2.7.1) und die Dokumentation für den Prozessor. Diese Informationen können durch unterschiedliche Elemente auseinandergehalten werden, die jeden beliebigen Inhalt enthalten können. Somit lassen sich für den Anwender jegliche Beschreibungen in lesbarer und leicht verständlicher Form einfügen und für den Prozessor Zusatzinformationen einbinden, die er für eine spezielle Verarbeitung benötigt. Diese Zusatzinformationen hängen von dem Einsatzgebiet der definierten XML-Anwendung ab, werden aber für eine einfache Verarbeitung nicht benötigt. Aufgrund dieser Dokumentationsmöglichkeiten lassen sich aus den Schemadefinitionen automatisch geeignete Dokumentationen generieren. Für das Aufteilen und Zusammenfügen verschiedenartiger Schemata spielen besonders Namensräume eine große Rolle. Für diese Möglichkeit der Strukturierung gibt es drei verschiedene Arten: 1. Mittels include können Schemata eingefügt werden, die den gleichen oder gar keinen targetnamespace besitzen wie das Schema, in das sie eingefügt werden. Alle Elemente und Attribute bekommen somit den gleichen Namensraum

25 19 zugewiesen. Auf diese Weise hinzugefügte Definitionen werden genauso behandelt, als wenn sie in dem Schema selber eingegeben worden wären. Hierbei muss mit besonderer Vorsicht auf die Namensvergabe der Elemente, Attribute und Datentypen geachtet werden, damit diese sich nicht gegenseitig überschreiben. 2. Ähnlich zum Einfügen ganzer Schemata arbeitet redefine. Es können allerdings nur einzelne Typen oder Gruppen aus dem anderen Schema eingefügt werden, die mittels gültigen Veränderungen (Restriktionen oder Erweiterungen, siehe Kapitel 2.4) überdefiniert werden. 3. Zum Importieren eines Schemas wird das import-element verwendet. Hiermit wird lediglich der Speicherort des Namensraumes des Schemas angegeben, um einem Parser die Möglichkeit zu geben, die Definition des importierten Schemas zu finden und das Dokument auch anhand dieses Schemas zu validieren. Eine weitere Möglichkeit zur Strukturierung bilden Substitutionsgruppen substitutiongroup. Durch Angabe der Zugehörigkeit eines Elements zu einer solchen Gruppe, lässt es sich durch ein anderes Element dieser Substitutionsgruppe ersetzen. Innerhalb eines gültigen XML-Dokumentes spielt es dann keine Rolle mehr, welches Element eingesetzt wird, solange es zu der Substitutionsgruppe gehört. Speziell für diesen Einsatz lassen sich auch abstrakte Elemente definieren, die nicht im XML- Dokument auftauchen dürfen. Ein solches Element kann sinnvoll als Grundlage von Substitutionsgruppen dienen, da es nur die Aufgabe eines Platzhalters erfüllt. Diese Technik bietet einen besonderen Ansatz zur objektorientierten Modellierung eines Schemas. Allerdings ist dabei der Typ des Elements, das die Grundlage für die Substitutionsgruppe bildet, zu beachten. Abhängig davon dürfen nur gültige Erweiterungen oder Einschränkungen auf diesem Datentyp der Substitutionsgruppe hinzugefügt werden. Es ist also nicht möglich einen Platzhalter für beliebige Elemente zu definieren.

26 20 3 XSLT Die extensible Stylesheet Language for Transformation (XSLT) ist eine XML-Anwendung zur Transformation von XML-Dokumenten. Sie ermöglicht Auswertungen und Umstrukturierungen von XML-Daten und ist dadurch speziell für die Umwandlung einer XML-Anwendung in eine andere geeignet. Es werden zudem auch andere Datenformate als Ergebnis einer XSL-Transformation unterstützt, so dass mit XSLT alle wesentlichen Konvertierungen von XML-Daten vorgenommen werden können. Die dazu erforderlichen Grundlagen werden im Folgenden erläutert. 3.1 Entstehung Am Anfang der Entwicklung stand die XML-Anwendung extensible Stylesheet Language (XSL), die für Umstrukturierungen und grafische Aufbereitungen von XML- Daten entwickelt wurde. Schnell ergaben sich verschiedene Anwendungsgebiete, so dass die Sprache in zwei Einsatzbereiche unterteilt wurde. Der eine Teil beschäftigt sich mit dem Layout der Datendarstellung. Daraus ist die weiterhin unter dem Namen XSL oder auch XSL-FO bekannte XML-Anwendung entstanden. Weitere Erklärungen zu XSL-FO werden in Kapitel 4 vorgenommen. Der andere Teil kümmert sich um die Struktur, die die XML-Daten besitzen und den Möglichkeiten auf diese Struktur Einfluß zu nehmen. Aus diesem Anwendungsbereich ist XSLT entstanden. Als offizielle Empfehlung ist XSLT in der Version 1.0 [W3CXSLT] am vom W3C veröffentlicht worden. XSLT beschäftigt sich ausschließlich mit der Transformation von XML-Dokumenten und es sollen keine Angaben zum Layout gemacht werden. So kann XSLT eingesetzt werden um XML-Dokumente eines Formates in die Struktur eines anderen XML-Formates umzuwandeln oder aber auch um ein HTMLoder Text-Dokumente zu generieren. Bei diesen letzten beiden Möglichkeiten wird die Struktur der XML-Daten durchbrochen und die Strukturierung geht verloren. Welche Möglichkeit eingesetzt wird, muss somit in Abhängigkeit der zu lösenden Aufgabe entschieden werden. Es wird kontinuierlich an der Weiterentwicklung von XSLT gearbeitet. Die angedachte Version 1.1 ist allerdings nicht über den Stand eines Arbeitsdokumentes hinaus gekommen und so wird nun bereits an der Version 2.0 gearbeitet. Diese wird einige wichtige Veränderungen bieten, die am Ende des Kapitels noch angedeutet werden, da einige Aufgabenstellungen sonst nicht zu bewältigen wären. Da diese Version aber noch unter Bearbeitung und damit in Veränderung ist, werden diese angedachten Techniken nur mit speziellem Hinweis an den Beispielen eingesetzt. An den Grundlagen wird sich keine wesentliche Änderung ergeben, weshalb diese versionsneutral sein sollten.

27 Basis: XML-Dokument Die genaue Definition der Struktur eines XML-Dokumentes ist teilweise in XSLT und teilweise in XPath beschrieben. XPath ist eine W3C-Spezifikation [W3CXPATH] zum Bewegen und Adressieren von Inhalten in XML-Dokumenten. Dazu wird mittels XPath ein Konzept beschrieben, das ein XML-Dokument als Baum mit vielen Knoten auffasst. Dieses Modell wird nicht nur in XSLT benutzt, sondern dient auch als Grundlage für XPointer [W3CXPointer] und XQuery [W3CXQuery]. Der hierbei beschriebene Baum ist ähnlich dem Baum, der im DOM beschrieben wird. DOM steht für Document Object Model und stellt neben SAX, der Simple API for XML, eine Weiterverarbeitungsmöglichkeit für XML-Dokumente bereit. SAX arbeitet ereignisorientiert, während DOM einen Baum im Speicher aufbaut. Diese unterschiedlichen Arten der Verarbeitung sind hauptsächlich für die XSLT-Prozessoren und ihre spezifischen Erweiterungen (vgl. Kapitel 3.6) wichtig, sollen für die weitere Betrachtung der XSL-Transformationen aber keine weitere Beachtung finden. Wichtig ist allein das Verständnis für die Unterscheidung, dass ein DOM zwar dem vom XSLT benutzten Baum ähnelt, aber die beiden nicht identisch sind. Ein DOM beinhaltet beispielsweise auch Knoten, die Leerzeichen enthalten, während diese im XPath-Modell nicht auftreten dürfen. Weitere Unterschiede zu den beiden Modellen sind in [W3CXPATH, Kapitel 5] und [Kay2001, S.56 ff., S.570 ff.] aufgeführt und ausführlicher beschrieben. Im folgenden Kapitel soll der Konzeptbaum, der XSLT zugrunde gelegt wird, beschrieben werden. Anschließend wird in Kapitel die Bewegung innerhalb dieses Baumes erläutert Aufbau des Konzeptbaumes Das XML-Dokument wird als Konzeptbaum von Knoten aufgefasst. Der Beginn des Baumes startet mit der Wurzel bzw. dem Wurzelknoten, der alle weiteren Knoten enthält. Die Wurzel entspricht keinem Element in dem betrachteten XML-Dokument, sondern repräsentiert das Dokument als Ganzes. Sie enthält genau einen Elementknoten. Dieser Knoten stimmt mit dem ersten Element des Dokumentes überein und dieser muss alle weiteren Elemente enthalten. Darunter können in beliebiger Anzahl und Tiefe die weiteren Knoten enthalten sein, die ihrerseits weiter verzweigen können. Abbildung 2 zeigt einen beispielhaften Baum in der XSLT-Ansicht. Die hier eingefügte Darstellung der einzelnen Elemente soll in weiteren Beispielen wieder benutzt werden. Neben dem Wurzelknoten unterscheidet man sechs weitere Knotenarten (Text-, Element-, Attribut-, Kommentar-, Verarbeitungsanweisungs- und Namensraumknoten). Sie repräsentieren ihren jeweiligen Typ im XML-Dokument. Textknoten werden für den letztendlich in einem Element enthaltenen Inhalt, der nur aus Text und nicht aus weiteren Elementen besteht, benutzt. Für jeden Typ einer Angabe im XML-Dokument erscheint also ein eigener Knoten in dem Konzeptbaum. Nur Attribute und Namens-

28 22 räume werden in dem XML-Dokument gleichermaßen aufgeführt und trotzdem im Baum als unterschiedliche Knotenarten behandelt. WURZEL Name * Elementknoten Name * Präfix URI Inhalt Präfix Name Wert Inhalt URI Attributknoten Namensraumknoten Kommentar Text Textknoten Name * Präfix URI Name * Präfix URI Inhalt Name Wert PID Wert Prozessor Anweisung PID Wert Name Wert Name Wert Name * Präfix URI Text Abbildung 2: XML-Dokument als Konzeptbaum Die Beziehungen der Knoten untereinander sind in der Abbildung 2 durch Linien gekennzeichnet. So ist die Wurzel der Elternknoten des darunter liegenden Elementes, dem Kindknoten der Wurzel. Diese Eltern-Kind-Beziehung gilt im allgemeinen für alle Knoten, mit Ausnahme der Attribut- und Namensraumknoten. Deren Eltern sind ihre jeweiligen Elementknoten, zu denen sie gehören. Sie sind aber nicht über die Beziehung Kind von ihrem Elternknoten aus ansprechbar. Genauere Auswirkungen bezüglich dieser Unterscheidung werden in Kapitel 3.3 deutlich. Ein derart aufgebauter Baum liefert die Grundlage, auf der nun die Bewegungen innerhalb der Verarbeitung und die Transformationen aufbauen Bewegung im Konzeptbaum Die Knoten in der Baumansicht des XML-Dokumentes stehen also in genau definierten Eltern-Kind-Beziehungen zueinander. Um anhand dieser Beziehungen bestimmte Knoten zu finden, können verschiedene Wege innerhalb des Baumes abgeschritten werden. Einige werden hier aufgeführt, für eine ausführliche Liste siehe [Vli2002, S.54 ff.]. Die folgenden Regeln beziehen sich immer auf den als Kontextknoten benannten aktuellen Knoten. Die child-achse beinhaltet alle Kinder des Kontextknotens. Sie liefert die Knoten, die ohne Angabe eines weiteren Pfades im aktuellen Kontext enthalten sind. Sie bildet somit die Standardachse.

29 23 Mit der descendant-achse lässt sich die child-achse in die Tiefe weiterverfolgen. Das heisst, in ihr sind nicht nur die Kinderknoten des aktuellen Kontextes enthalten, sondern auch seine Kinder und die Kinder der Kinder usw. Mittels der parent-achse kann auf den Elternknoten des aktuellen Kontextknotens zugegriffen werden. Alle Eltern und deren Eltern werden mit der ancestor-achse eines Knotens abgesucht. Die attribute-achse liefert alle Attribute des aktuellen Kontextes. Dies ist die einzige Möglichkeit auf Attribute zuzugreifen. Da Namensräume ebenfalls nicht über die anderen Achsen erreicht werden können, gibt es die namespace-achse. Sie liefert den Namensraumknoten, der zu dem aktuellen Kontext gehört. Mittels der preceding-achse lassen sich alle Knoten der gleichen Ebene vor dem aktuellen, mit der following-achse nach dem aktuellen Knoten erfassen. Diese Achse kann auch auf die Knoten mit dem gleichen Elternknoten eingeschränkt werden. (preceding-sibling- und following-siblingachse) Das sind die wesentlichen Möglichkeiten um sich durch den Baum zu bewegen. Es lassen sich in Einzelfällen noch einige wichtige Unterscheidungen treffen, beispielsweise ob der aktuelle Knoten zu der Auswahl dazu gehören soll oder nicht. Desweiteren lassen sich einige häufig benutzte Achsen abkürzen, so für die attribute-achse und.. für die Eltern. Sollen keine Einschränkungen bei der Suche nach Knoten bezüglich einer dieser Achsen gemacht werden, so erlaubt der Einsatz von // eine beliebige Anzahl und Art von Knoten, die an seiner Stelle auftauchen dürfen. Natürlich lassen sich neben diesen relativen Einschränkungen auch absolute vornehmen. Dazu wird der Pfad für die Knoten fest anhand der Elementnamen auf der Suchachse vorgegeben. Alle Bewegungsschritte innerhalb des Baumes lassen sich je nach Aufgabenstellung beliebig kombinieren. 3.3 Grundlagen Mit XSLT lassen sich Vorlagen definieren, die die Ausgabe der Transformation beschreiben und auf bestimmte Knoten des Baumes angewendet werden. Die Auswahl dieser Knoten findet als Mustererkennung statt. Das bedeutet, dass es Regeln gibt, die die Knoten erfüllen müssen, um dann mittels einer Vorlage verarbeitet zu werden. Diese Selektierung findet anhand von XPath-Ausdrücken statt. Einer der einfachsten Ausdrücke ist beispielsweise /, der den Wurzelknoten des XML-Dokumentes auswählt, oder. für den aktuellen Knoten. Die weiteren Möglichkeiten zur Knotenauswahl anhand der Achsen wurden bereits in Kapitel erläutert.

30 24 Die grundsätzliche Funktionsweise von XSLT ist in Abbildung 3 dargestellt. Eingangs steht ein Baum, der aus der Betrachtung einer XML-Datei hervorgegangen ist (siehe Kapitel 3.2.1). Mittels XSLT lässt sich dieser Baum umformen. Elemente lassen sich einfügen, löschen oder ihre Position lässt sich verändern. Der dadurch erzeugte Ergebnisbaum wird zum Ende der Bearbeitung in den meisten Anwendungsfällen in ein Dokument geschrieben. Das ist allerdings nicht zwingend notwendig und allein abhängig von der Art der Verarbeitung. XSLT XML Dokument Ergebnisbaum Abbildung 3: Funktion von XSLT Zur Ausführung der XSL-Transformation wird ein XSLT-Prozessor benötigt. Mit ihm werden die Transformationen auf die XML-Daten angewendet. Es gibt viele verschiedene XSLT-Prozessoren, die bekanntesten sind Xalan, Saxon, MSXML und XDK. Xalan entstammt dem Apache XML-Projekt [ApacXalan] und ist frei verfügbar. Er wird häufig eingesetzt, besonders wegen seiner hohen Standardgenauigkeit. Saxon ist ebenfalls frei verfügbar [KaySaxon]. Er ist sehr aktuell und beinhaltet auch Funktionen, die noch nicht im Standard enthalten sind, aber in zukünftige Versionen eingehen sollen. Dies ist wohl mit seiner Entwicklung als Einzelprojekt von Michael Kay zu begründen, der Mitautor der XSLT-Arbeitspapiere ist. Saxon gilt zur Zeit als der schnellste XSLT-Prozessor. MSXML ist das von Microsoft gelieferte XML-Paket [MSXML], das auch einen XSLT-Prozessor beinhaltet. Dieses Paket ist ebenfalls frei verfügbar und kann in den Internet Explorer von Microsoft integriert werden. Damit ist es möglich XML-Dokumente direkt im Browser anzusehen, auf die beim Aufruf die angegebene XSL-Transformation angewendet wird. Die Funktionalitäten sind allerdings nicht auf dem neuesten Stand. XDK steht für Oracle s XML Developer s Kit [OracleXDK]. Es beinhaltet ein komplettes XML-Paket samt Parser und XSLT-Prozessor, das kostenlos herunterzuladen ist. Im Weiteren werden hauptsächlich Xalan und Saxon Anwendung finden. Xalan bevorzugt zum Testen aller Standardfunktionalitäten und Saxon zum Experimentieren mit neuen XSLT-Versionen.

31 25 Ein XSLT-Stylesheet beginnt, da es sich dabei um ein XML-Dokument handelt, stets mit der XML-Deklaration, gefolgt von dem Stylesheet-Tag mit der Namensraumangabe zur XSLT-Definition und einer Versionsnummer. Eine einfache Vorlage, die den Wurzelknoten auswählt und seinen ganzen Inhalt ausgibt, sieht somit folgendermaßen aus: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:template match="/"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> Mittels des template-elementes werden Templates (Vorlagen) definiert, die bei den Elementen Anwendung finden, die die Regeln des match-attributes erfüllen. Das ist in diesem Fall nur die Wurzel. Auf sie wird somit diese Vorlage angewendet, indem sie als aktueller Knoten betrachtet wird und von ihr aus die weiteren Verarbeitungshinweise ausgeführt werden. In diesem Fall wird nun das value-of-element angewendet. Das gibt alle textuellen Inhalte des aktuellen Knotens und aller seiner Kinder aus. Angewendet auf ein XML-Dokument wirft dieses Stylesheet alle Tags heraus und liefert nur die Inhalte der Elemente aneinandergereiht. Dies ist die Grundlage für jedes Stylesheet. In dieses Grundgerüst werden zur speziellen Bearbeitung eines XML- Dokumentes weitere Vorlagen eingebaut. Das obige Stylesheet erzeugt bei den meisten XSLT-Prozessoren standardmäßig ein XML-Dokument. Das ist genau dann die korrekte Vorgehensweise, wenn beispielsweise ein XML-Dokument einer XML-Anwendung in ein XML-Dokument einer anderen umgewandelt werden soll. Doch das ist nicht die einzige Anwendungsmöglichkeit für XSLT. Es können auch andere Ausgabeformate wie HTML oder Text erzeugt werden. Um dies zu ermöglichen, muss die Struktur des Ausgabebaumes der Transformation zerbrochen werden. Dafür gibt es die Möglichkeit das Format der Ausgabe mit dem output-element zu bestimmen. Auch weitere Angaben zu diversen Einstellungen wie Versionsnummer und Encoding. können damit realisiert werden. Um also nicht von den Einstellungen des jeweiligen XSLT-Prozessors abhängig zu sein, sollten diese Angaben immer mit dem output-element gemacht werden. Für eine konkrete Bearbeitung eines bestimmten XML-Dokumentes und um exakte Regeln zu definieren, ist die Struktur des Dokumentes wichtig (vgl. Kapitel 3.2). So können Elementknoten anhand ihres Namens selektiert und Vorlagen auf sie angewendet werden. Mittels einem match auf den Namen des Elements werden alle Elemente dieses Namens, die sich direkt in dem aktuellen Kontext befinden, gefunden. Unter Hinzunahme eines relativen oder absoluten Pfades (vgl. Kapitel 3.2.2), können vom aktuellen Kontext ausgehend, Knoten an beliebigen Stellen in dem XML-Dokument

32 26 gefunden werden. Da bei relativen Pfaden die Ergebnisse je nach aktueller Position variieren können, ist es wichtig immer über den aktuellen Kontext in Kenntnis zu sein. Wenn die Richtung der Suche festgelegt ist, können die Elemente anhand weiterer Kriterien ausgewählt werden. Das kann anhand des Namens des Elementes oder durch Abfrage bestimmter Eigenschaften gemacht werden. Dabei brauchen nicht nur absolute Werte festgelegt werden, auch verschiedene Wildcards sind einsetzbar. So steht * für jeden beliebigen Elementknoten, lassen sich Attributknoten in Kombination mit ihrem Namen ansprechen und die Funktion node() liefert alle Knoten innerhalb des aktuellen Kontextes zurück. Damit sind also neben Element- und Attributknoten auch Text-, Kommentar-, Namensraum- und Verarbeitungsanweisungsknoten gemeint. Bestimmte Eigenschaften eines Knotens außer seinem Namen und seiner Position lassen sich über Prädikate abfragen. Dazu werden der Pfad- und Namensangabe spezifizierende Ausdrücke in eckigen Klammern ([]) angehängt. In einem derartigen Ausdruck wird mittels Zahlen das Element bestimmt, das unter den genannten Vorbedingungen an der jeweiligen Position auftritt. Desweiteren können innerhalb des Ausdruckes Funktionen wie beispielsweise last() für die Auswahl des letzten Elementes genutzt werden. Kombinationen aus Funktionen, Werten und Vergleichsoperationen liefern dadurch weitreichende Möglichkeiten Bedingungen zu schreiben, die die Selektion bestimmen. Ausführliche Erläuterungen hierzu sind in Kapitel 3.5 aufgeführt. Beispiel 3.3.1: 1. Das company-element, das unterhalb der Wurzel sitzt, wird nach allen filiale-elementen, die wiederum verkaeufer-elemente besitzen, abgesucht. Es werden jedoch nur die verkaeufer-elemente zurückgeliefert, deren Umsatz-Attribut einen Wert kleiner 100 besitzt. Wenn diese Suchabfrage in einem Attribut, wie beispielsweise dem match des template-elementes, auftaucht, muss das <-Zeichen durch \&lgt; ersetzt werden. In Abbildung 4 ist dargestellt, welche Elemente mit diesem Ausdruck in einem beispielhaften Baum erfasst werden. /company/filiale/verkaeufer[@umsatz < 100] 2. Alle ersten Elemente innerhalb des Baumes, sollen gefunden werden. Hierbei sind die doppelten Anführungsstriche durch einfache zu ersetzen, da die doppelten schon zur Bezeichnung des Attributes genutzt werden, in dem der Ausdruck eingefügt wird. Diese Abfrage ist somit auf ein beliebiges XML-Dokument anwendbar, weil keine Angaben zu Struktur und Namen der Elemente gemacht wurden. //*[position()= 1 ]

33 27 3. Sollen unabhängig von ihrer Position nur verkaeufer-elemente gefunden werden, die ein Attribut Umsatz mit dem Wert 99 besitzen, so ist dies eine Möglichkeit dafür: 99 ] WURZEL company * filiale * verkaeufer * Umsatz 99 filiale * verkaeufer * verkaeufer * verkaeufer * verkaeufer * verkaeufer * Umsatz Umsatz Umsatz 95 Umsatz 100 Umsatz 97 Abbildung 4: Die blau umrahmten Verkäufer werden von Beispiel (1) selektiert. Mit Beispiel (3) werden die gelben Elemente ausgewählt. Auf alle Knoten, die durch die festgelegten Regeln ausgewählt wurden, werden nun die innerhalb des template-elements angegebenen Vorlagen angewendet. Hierbei lassen sich im wesentlichen wieder Elemente und Attribute für den Ergebnisbaum erzeugen, die an verschiedene Bedingungen geknüpft sind. Es lassen sich auch die weiteren Verarbeitungsschritte innerhalb des nun aktuellen Kontextes beschreiben. Das bedeutet, dass der gerade betrachtete Knoten nun der aktuelle ist. Durch den Aufruf seiner Kinder oder anderer Elemente lassen sich diese ebenfalls bearbeiten und auswerten oder ihre Vorlagen aufrufen. Soll einfach der Wert eines Knotens in den Ausgabebaum übernommen werden, so lässt sich dieser mittels des value-of-elementes direkt dort hinein ausgeben. Hierbei geht allerdings die Eigenschaft, dass es sich um einen Knoten gehandelt hat, verloren. Um dem entgegen zu wirken, lässt sich ein Knoten mittels copy in den Ergebnisbaum kopieren. Dabei bleibt seine Struktur und sein Namensraumknoten erhalten, nicht jedoch Kinder- oder Attributknoten. Um auch diese mitzukopieren und damit ganze Teilbäume vom Startdokument in das Ergebnis mit zu übernehmen, gibt es noch die Möglichkeit innerhalb von copy-of einen Knoten zu selektieren und alle unter ihm hängenden Knoten mit zu erfassen. Es lassen sich aber auch eigene, neue Knoten erzeugen, die in den Ergebnisbaum eingefügt werden. Dazu dienen die je nach Knotenart zu verwendenden Elemente

34 28 attribute, element, comment und text. Der Inhalt, der auf diese Art neu erzeugten Knoten in dem Ausgabebaum, kann durch fixe Werte, Selektion bestimmter Knoten und ihrer Werte oder auch Berechnungen auf den Werten, innerhalb des jeweiligen Elementes eingefügt werden. Beispiel 3.3.2: Es soll ein Element mit dem Namen ausgabe erzeugt werden, das ein Attribut namens atrid mit dem Wert 1 besitzt. Der Inhalt des Elementes setzt sich aus dem Wert des Knotens knoten, wenn ein solcher im aktuellen Kontext vorliegt, und dem Text normaler Text zusammen. <xsl:element name="ausgabe"> <xsl:attribute name="atrid"> <xsl:text>1</xsl:text> </xsl:attribute> <xsl:value-of select="knoten"/> <xsl:text>normaler Text</xsl:text> </xsl:element> Für den Fall, dass kein Knoten namens knoten vorliegt, würde in der Ausgabe dieses Element eingefügt werden: <ausgabe atrid="1">normaler Text</ausgabe> Hierdurch lassen sich komplett neue Elemente und Attribute definieren. 3.4 Datenabhängige Verarbeitung Nicht jeder Knoten des Ausgangsdokumentes soll einfach übernommen werden. Es sollen nur solche mit bestimmten Eigenschaften, Zusammenfassungen in Form der Anzahl des Auftretens oder die Ergebnisse von Berechnungen kombinierter Werte in den Ergebnisbaum eingetragen werden. Wurde ein ausgewählter Knoten zum aktuellen Kontext gemacht, so werden auf ihn Regeln bezüglich seiner Weiterverarbeitung angesetzt. Hierbei lassen sich Entscheidungen mittels if-abfragen bei nur einem Test, oder choose bei mehreren Überprüfungen vornehmen. Damit lassen sich Verzweigungen in Abhängigkeit vom Eingangsdokument realisieren. Bei if-anweisungen muss anhand des test-attributes, das einen Wahrheitsausdruck, also true oder false, enthalten muss, eine Auswertung vorgenommen werden. Diese Auswertung entscheidet darüber, ob die weiteren Arbeitsschritte innerhalb des Elementes überhaupt durchgeführt werden sollen. Es steht keine else-abfrage zur Verfügung, wie das in gängigen Programmiersprachen der

35 29 Fall ist. Dafür verwendet man die Wahlmöglichkeit mittels des choose-elementes. Innerhalb dieses Elementes lassen sich ein bis beliebig viele when-abfragen einfügen, die ebenso wie die if-abfrage mittels eines test-attributes festlegen lassen, ob ihr Inhalt ausgeführt werden soll. Vergleichbar mit switch-case-konstrukten in anderen Sprachen, lässt sich auch innerhalb von choose ein otherwise-fall definieren, der immer dann zum Einsatz kommt, wenn keiner der zuvor in den when-tests abgefragten Fälle mit true ausgewertet wurde. Beispiel 3.4.1: Wenn der Knoten des aktuellen Kontextes sich an erster Position befindet, wird erstens ausgegeben, ist er der letzte unter seinen Geschwistern der gleichen Ebene, so liefert diese Abfrage letztens. Sollte keiner dieser beiden Fälle zutreffen, so wird nächstens in den Ergebnisbaum eingefügt. <xsl:choose> <xsl:when test="position()=1"> <xsl:text>erstens</xsl:text> </xsl:when> <xsl:when test="last()"> <xsl:text>letztens</xsl:text> </xsl:when> <xsl:otherwise> <xsl:text>nächstens</xsl:text> </xsl:otherwise> </xsl:choose> Während sich Verzweigungen in XSLT nicht wesentlich von gängigen Programmiersprachen unterscheiden, so gibt es allerdings keine abzählbaren Schleifen, wie beispielsweise while oder for-schleifen. Das for-each-element erfüllt einen etwas anderen Zweck. Es ist abhängig davon wie häufig das Eingangsdokument durchlaufen wird. So lässt sich bei ihm über ein select-attribut ein XPath-Ausdruck angeben, der dafür sorgt, dass der gesamte Inhalt des for-each auf jedes Element angewendet wird, das mittels des Ausdruckes erreicht wird. Es ist hierbei zu beachten, dass das Element, auf den der Inhalt angewendet wird, zu dem aktuellen Kontext während der Verarbeitung wird. Beispiel 3.4.2: Innerhalb des aktuellen Kontextes soll für jeden test-knoten der Wert seines wert- Knotens ausgegeben werden. <xsl:for-each select="test"> <xsl:value-of select="wert"/> </xsl:for-each>

36 30 Es existieren auch Variablen in XSLT, doch lassen sich diese nur einmal initialisieren und nicht wieder verändern. In ihnen können Werte, Knoten oder auch gesamte Bäume gespeichert werden. Das variable-element kann entweder über das select- Attribut den Wert der Variablen zuweisen oder über seinen Inhalt. Der Name hierfür wird mittels des name-attributes angegeben. Die Sichtbarkeit einer Variablen beschränkt sich auf das Element, in dem sie erzeugt wurde. Globale Variablen sind demnach nur solche, die unterhalb des stylesheet-elementes definiert wurden. Alle anderen sind lokale Variablen innerhalb des jeweiligen Kontextes. Auf Variablen kann innerhalb ihrer Sichtbarkeit durch die Verknüpfung des Dollarzeichens $ mit dem Variablennamen innerhalb von anderen select- oder test-attributen zugegriffen werden. Zur Ausgabe des gespeicherten Wertes in dem Ergebnisbaum dient beispielsweise die Kombination des value-of-elementes mit dem select-attribut, das den Wert der Variablen an der entsprechenden Stelle einfügt. Beispiel 3.4.3: Eine Variable namens var mit dem Inhalt des aktuellen Kontextknotens lässt sich auf zwei Arten erzeugen: 1. <xsl:variable name="var"> <xsl:value-of select="."/> </xsl:variable> 2. <xsl:variable name="var" select"."/> Der Zugriff auf den Wert der Variablen ist immer gleich. In diesem Beispiel wird der Wert einfach ausgegeben: <xsl:value-of select="$var"/> Bei einer einfachen Abfrage, wie in dem obigen Beispiel, unterscheidet sich die Art der Definition einer Variablen nicht. Doch die kurze Schreibweise kommt schnell an ihre Grenzen. So lassen sich innerhalb des select-attributes keine anderen XSLT- Elemente aufrufen und ihr Rückgabewert speichern. Das lässt sich nur im Inhalt des variable-elementes durchführen. Um innerhalb der Verarbeitung eines Elementes, die Verarbeitung anderer Elemente, beispielsweise seiner Kinder, anzustoßen, und damit die Reihenfolge der Verarbeitung innerhalb des Baumes zu bestimmen, wird das apply-templates-element benutzt. Diesem Element läßt sich optional mittels select- Attribut mitteilen, welche Knoten als nächstes zu behandeln sind. Die dementsprechenden Vorlagen werden dann an dieser Stelle aufgerufen. Um unterschiedliche Vorlagen für gleiche Knoten

37 31 nur an verschiedenen Stellen in der Verarbeitung zu ermöglichen, können den Vorlagen mittels des mode-attributes verschiedene Modi zugewiesen werden. Diese Modi können bei dem Aufruf einer Vorlage mittels apply-templates als mode-attribut angegeben werden. Damit lassen sich verschiedenartige Behandlungen der Knoten zu unterschiedlichen Bearbeitungszeitpunkten festlegen. Eine andere Möglichkeit Vorlagen aufzurufen ist mit dem Element call-template gegeben. Damit lassen sich mit Namen versehene Vorlagen bearbeiten. Dazu ist der Vorlage ein Name durch das name-attribut mitzugeben. Über den Namen ist die Vorlage eindeutig identifizierbar und über die Angabe im name-attribut des aufrufenden Elements wird sie an der aufrufenden Position bearbeitet. So können auch Vorlagen erstellt werden, die unabhängig vom selektierten Knoten aufgerufen werden können und deren aktueller Kontext sich somit nicht ändert. Beispiel 3.4.4: Innerhalb der Vorlage, die auf die Wurzel des Dokumentes angewendet wird, wird die Vorlage mit Namen info aufgerufen. Dieser Aufruf kann an beliebigen Stellen mit anderen Vorlagen wiederholt werden und alle Verarbeitungsanweisungen, die in ihr definiert werden, brauchen nur an einer Stelle festgeschrieben werden. <xsl:template match="/"> <xsl:call-template name="info"/> </xsl:template> <xsl:template name="info"> <xsl:text>hier Infos einfügen!</xsl:text> </xsl:template> Einige wichtige Aufgaben lassen sich allerdings erst durch das Hinzufügen von Parametern realisieren. So können Vorlagen erzeugt werden, die Parameter benutzen, indem ein param-element direkt am Anfang der Vorlage definiert wird. Innerhalb der Vorlage kann auf diesen Parameter dann wie auf eine Variable zugegriffen werden. Zur Übergabe eines Wertes an den Parameter, wird beim Aufruf der Vorlage der Wert mit dem with-param-element übergeben. Auch globale Parameter sind möglich. Ihre Initialisierung erfolgt allerdings prozessorabhängig, beispielsweise bei Kommandozeilenaufruf mittels Wertübergabe an den Parameternamen. Eine Kombination von Vorlagenaufrufen mit Parametern kann dazu benutzt werden Probleme zu lösen, die eigentlich die Verwendung einer Schleife erfordern würden. Da diese in XSLT nicht existieren, sind zur Lösung derartiger Aufgabenstellungen rekursive Techniken einzusetzen.

38 32 Beispiel 3.4.5: Ein klassisches Beispiel für Rekursion ist die Berechnung der Fakultät. Um diese mit XSLT zu berechnen, wurde in der hier verwendeten Vorlage der Wert der zugrundeliegenden Berechnung direkt in dem Stylesheet angegeben. Das Ergebnis der Vorlage ist somit unabhängig von dem XML-Dokument, auf das diese angewendet wird. In der Vorlage für die Wurzel wird ein ergebnis-element erzeugt, das zum Inhalt den Wert der fakultaet-vorlage mit Startparameter a=5 besitzt. Die aufgerufene Vorlage testet, ob der übergebene Parameter größer Null ist. Wenn dieses der Fall ist, so wird die gleiche Vorlage nochmals mit dem um eins reduzierten Parameterwert aufgerufen. Das zurückgelieferte Ergebnis, mit dem Parameterwert multipliziert, liefert dann das Ergebnis. Als Abbruchbedingung für die Rekursion wird 1 zurückgeliefert, wenn der Parameter kleiner oder gleich eins ist. <xsl:template match="/"> <xsl:element name="ergebnis"> <xsl:call-template name="fakultaet"> <xsl:with-param name="a" select=" 5 "/> </xsl:call-template> </xsl:element> </xsl:template> <xsl:template name="fakultaet"> <xsl:param name="a"/> <xsl:if test="$a > 1"> <xsl:variable name="erg"> <xsl:call-template name="fakultaet"> <xsl:with-param name="a" select="$a - 1"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="$a * $erg"/> </xsl:if> <xsl:if test="$a <= 1"> <xsl:value-of select=" 1 "/> </xsl:if> </xsl:template> Durch Einsatz und Kombination dieser oben aufgeführten Möglichkeiten erreicht XSLT die Mächtigkeit viele geforderte Aufgaben zu lösen. Es sind noch einige weitere Elemente dafür von Nutzen. Ein Beispiel hierfür ist das sort-element, mit dem sich Elemente nach bestimmten Eigenschaften innerhalb von apply-templates oder for-each-elementen sortieren lassen. Damit wird die Reihenfolge, in der die gefundenen Knoten abgearbeitet werden, festgelegt.

39 33 Zur Auswertung bestimmter Elemente, auch über verschiedene Ebenen hinweg, dient das number-element. Mit ihm können Knoten oder auch Werte gezählt, weiter berechnet und formatiert ausgegeben werden. Eine typische Anwendung für das number-element ist die Durchnummerierung der Knoten anhand ihrer Position im Baum. Eine andere Möglichkeit, wenn es um die Formatierung von Werten für die Ausgabe geht, liefert das decimal-format-element. Mit diesem Element lassen sich Formatierungsregeln definieren, die an unterschiedlichen Stellen innerhalb des Stylesheets wieder aufgerufen werden können, wenn numerische Werte in den Ergebnisbaum übernommen werden müssen. Eine eindeutige Indizierung von bestimmten Elementen anhand festgelegter Eigenschaften, lässt sich mit dem key-element erreichen. Durch diesen Index können beispielsweise Querverweise innerhalb des Baumes erzeugt werden. Auf einen derart erzeugten Schlüssel, der nur global existieren kann, kann innerhalb des gesamten Dokumentes zugegriffen und die dazugehörigen Elemente abgefragt werden. Um Struktur und Übersichtlichkeit in großen Stylesheets zu erreichen, lassen sich diese auf verschiedene kleinere Stylesheets aufteilen. Auch die Wiederverwertbarkeit wird durch diese Modularisierung gewährleistet. Es gibt zwei Möglichkeiten verschiedene XSLT s zusammenzufügen, import und include. Beide können nur als Top-Level- Element, also direkt unterhalb des stylesheet-elementes, eingesetzt werden. Soll das import-element benutzt werden, so muss dieses direkt an erster Position innerhalb des stylesheet-elementes auftreten. Mit ihm lassen sich andere Stylesheets importieren, deren Vorlagen allerdings eine niedrigere Priorität besitzen, als es standardmäßig üblich ist. Allen Vorlagen werden Prioritäten mitgegeben. Diese ergeben sich aus der Genauigkeit des XPath-Ausdruckes, mit dem sie erstellt werden. Somit wird immer die Vorlage auf einen Knoten angewendet, deren Ausdruck diesen am exaktesten getroffen hat. Um in einzelnen Fällen selber Einfluss darauf zu nehmen, lässt sich die Priorität einer Vorlage auch von außen festlegen. Importierte Vorlagen werden somit immer nur zuletzt angewendet, wenn keine mit höherer Priorität auf den Knoten passen. Das Einfügen von Stylesheets mittels include ist an jeder beliebigen Stelle unterhalb des stylesheet-elementes möglich. Alle eingefügten Vorlagen besitzen die gleiche Priorität, wie die direkt definierten Vorlagen. Besonders zur Aufteilung auf unterschiedliche Dateien bei großen Mengen an Vorlagen, wird diese Methode verwendet. 3.5 Funktionen Wie in Kapitel 3.3 schon ansatzweise erwähnt, stellt XSLT bzw. XPath auch einige Funktionen zur Verfügung. Diese dienen als Unterstützung zur Definition der Bedingungen, die innerhalb von select oder test-attributen festgeschrieben werden. XPath, als Grundlage der Baumstruktur, liefert neben den verschiedenen möglichen

40 34 Achsen (siehe Kapitel 3.2.2) auch verschiedenartige Funktionalitäten zur genaueren Spezifikation bestimmter Eigenschaften. Es lassen sich mittels Knotentests bestimmte Sorten von Knoten finden und unterscheiden, so zum Beispiel Text- oder Kommentarknoten. Funktionen zur Bearbeitung von Nummern sorgen dafür, dass verschiedene Knoten umgewandelt und mit ihnen mathematische Operationen durchgeführt werden können. So lassen sich Knotenmengen mit count durchzählen oder auch einfach nur ihre Werte auf beliebige Art und Weise kombinieren. Hierfür stehen gängige Operatoren wie +, -, *, div oder mod bereit. Auch Wahrheitsaussagen lassen sich durch Operatoren wie =, < >, and oder or und den dazugehörigen Funktionen bearbeiten. Mit der boolean()-funktion lassen sich alle möglichen Objekte in Wahrheitswerte umwandeln und not() dient zur Invertierung der Wahrheitswerte. Diese Wahrheitsaussagen werden besonders bei Tests benötigt, vgl. Kapitel 3.4. Eine weitere wichtige Gruppe von Funktionen dienen der Stringverarbeitung. Abfragen bezüglich der Länge von Strings und dem Auftreten bestimmter Zeichenfolgen an definierten Positionen im String sind besonders für Tests sinnvoll. Das Zerteilen von Strings und das Zusammenfügen und Umwandeln von Zeichen ermöglichen auch eine spezifizierte Stringbearbeitung. Diese gängigen Operationen und Funktionen anderer Programmiersprachen, werden durch speziell auf die Baumstruktur abgestimmte Funktionen ergänzt. Zur Auswahl bestimmter Knoten liefert XPath den Zugriff auf ein Element an einer bestimmten Position (position()). Es lassen sich eindeutige ID s zu Knoten erzeugen und diese an anderer Stelle wiederfinden (id()) bzw. verweisen. Auch die Informationen über den Namen oder den Namensraum eines Knotens, lassen sich abfragen und stehen so zur weiteren Verarbeitung zur Verfügung. Für die Benutzung der Funktionen ist die Unterscheidung nach ihrer Spezifikation in XPath oder XSLT nicht entscheidend. Während XPath allerdings eher die grundsätzlichen Operationen zur Verfügung stellt, liefern die in XSLT definierten Funktionen spezifische Funktionalitäten in Abhängigkeit des Umfangs der eigenen Sprache. So wird mit der Funktion current() der aktuelle Knoten geliefert, in dem gerade die Verabeitung stattfindet. Das ist sehr ähnlich dem per XPath spezifizierten aktuellen Knoten (.) und somit sind diese beiden auch in den meisten Fällen identisch. Allerdings wird der XPath-Ausdruck erst innerhalb seines gesamten Ausdrucks ausgewertet, das heißt der XSLT-Prozessor befindet sich in der Verarbeitung des XPath-Ausdrucks. Wenn dieser ihn bis zu der Stelle, an der der.-ausdruck ausgewertet wird, zu einem anderen Element umgeleitet hat, so wird an der nun für den Prozessor aktuellen Stelle, der Ausdruck ausgewertet. Anders ist das bei der Verarbeitung der current()-funktion. Diese gehört zu XSLT und wird somit einzeln ausgewertet. Sollte diese innerhalb eines XPath-Ausdruckes benutzt werden, so steht ihr Ergebnis schon vor Bearbeitung des Ausdruckes fest. Dadurch kann es passieren, dass diese beiden Ausdrücke an bestimmten Stellen unterschiedliche Ergebnisse liefern.

41 35 Beispiel 3.5.1: In den meisten Fällen liefern die Ausdrücke. und current() die gleichen Ergebnisse. Beide liefern den Wert des aktuellen Knotens zurück. Innerhalb der Auswertung eines XPath-Ausdrucks kann das jedoch variieren. Mit Benutzung der current()- Funktion wird nur dann der Inhalt des Elementes zurückgeliefert, wenn der aktuelle Knoten ein id-attribut hat. Die Benutzung von. wird immer den Inhalt des ersten Elementes zurückliefern, das bei der Suche nach einem Element mit id-attribut gefunden wird. Identische Ausgabe: <xsl:value-of select="current()"/> <xsl:value-of select="."/> Unterschiedliche Ergebnisse: <xsl:value-of <xsl:value-of Damit mit XSLT Auswertungen über verschiedene Dateien gemacht werden können, muss es die Möglichkeit geben mehrere Dokumente gleichzeitig zu bearbeiten. Mittels der document()-funktion kann auf andere XML-Dokumente zugegriffen werden. Innerhalb dieser Dokumente kann beliebig navigiert und gearbeitet werden, wie es auch in dem Ausgangsdokument der Fall ist. Eine Unterstützung von Dokumenten, die nicht XML-basierend sind, ist auf diese Art nicht machbar. Eine Möglichkeit, dieses Problem zu lösen, wird in Kapitel 3.6 erläutert. Einige XSLT-Funktionen dienen als Spezifizierungsfunktionen für bestimmte Elemente. Das ist beispielsweise bei dem schon in Kapitel 3.4 erwähnten decimal-format-element der Fall. Innerhalb dieses Elementes wird eine Formatierungsregel definiert, die innerhalb des Stylesheets an beliebigen Stellen wieder verwendet werden kann. Dazu wird mittels der format-number()-funktion auf sie zugegriffen und die angegebenen Zahlen werden nach den festgelegten Regeln formatiert ausgegeben. Ebenso arbeitet auch die key()-funktion mit einem Element zusammen. Mittels des key-elementes lassen sich Schlüssel erzeugen, die mit der key()-funktion wieder abgerufen werden können. Bei der Schlüsselerzeugung handelt es sich um einen einfachen Zugriff auf eine bestimmte ausgewählte Menge von Knoten. Diese eindeutigen Schlüssel erzeugen damit einen neuen Zusammenhang zwischen Elementen, die in die ausgewählten Knotenmengen gehören. Eine einfachere Zugriffsart ist über die Eindeutigkeit eines jeden Elements möglich. So lässt sich für jedes Element eine eindeutige ID generieren (generate-id()), die innerhalb des gesamten Dokumentes gültig ist. Zu jedem Zeitpunkt der Verarbeitung des XML-Dokumentes mit dem Stylesheet ist die erzeugte ID eines Elementes gleich, allerdings kann sie bei einem erneuten Aufruf des Stylesheets oder eines anderen XSLT-Prozessors variieren.

42 36 Wichtige Informationen zum verarbeitenden XSLT-Prozessor, lassen sich durch die system-property()-funktion zur Laufzeit abfragen. Die Versionsnummer zeigt an, welcher Stand von XSLT unterstützt wird. Auch Name und URL des XSLT-Prozessors lassen sich abfragen. Dies ist besonders wichtig, da XSLT zwar eine vom W3C verabschiedete Empfehlung ist, aber dennoch nicht alle XSLT-Prozessoren alle Funktionalitäten implementieren, siehe auch Kapitel 3.3. Durch Bereitstellung der Systemeigenschaften lassen sich somit Vorlagen erstellen, die abhängig vom eingesetzten Prozessor, verschiedene Verarbeitungsanweisungen ausführen. Die XSLT-Prozessoren können auch noch weitere Systemeigenschaften unterstützen, aber die sind von jedem einzelnen XSLT-Prozessor abhängig und nicht standardisiert. Damit die Auswahl der Verarbeitungsschritte nicht vom Namen des eingesetzten Prozessors abhängig ist, gibt es die Möglichkeit die Erreichbarkeit von bestimmten Elementen oder Funktionen abzufragen. Das lässt sich mit den XSLT-Funktionen element-available() und function-available() erreichen. Die Recherchen im Rahmen dieser Diplomarbeit haben ergeben, dass zur Zeit nicht alle XSLT-Prozessoren diese Funktionen unterstützen. Das erschwert die Arbeit besonders flexible und fehlerresistente Stylesheets zu schreiben. Einen großen Einfluß hat dieses auf die Möglichkeit Erweiterungen zu den Standard-Funktionen zu schreiben. Auf diese Erweiterungsfunktionen soll im nächsten Kapitel näher eingegangen werden. 3.6 Erweiterungsfunktionen Viele Funktionalitäten, die sich im Gebrauch von XSLT als notwendig erweisen, sind noch nicht in der ersten Version der Spezifikation enthalten. Um derartigen Problemen und damit Unzulänglichkeiten in der Benutzung vorzubeugen, ist das Schreiben von Erweiterungsfunktionen im Standard vorgesehen. Hiermit erhält der Benutzer die Möglichkeit, eigene, problemspezifische Funktionen in einer beliebigen Programmiersprache zu implementieren und in das Stylesheet einzubinden. Diese angedachte Flexibilität geht leider in der ersten Version von XSLT auf Kosten der Abhängigkeit vom XSLT-Prozessor (siehe Kapitel 3.5). So ist in der Spezifikation der Einsatz und die Benutzung von Erweiterungsfunktionen nicht eindeutig definiert. Verschiedene XSLT- Prozessoren arbeiten somit unterschiedlich und benötigen eigens auf sie abgestimmte Angaben, um Erweiterungen ausführen zu können. Neben den bereits in Kapitel 3.5 erläuterten Funktionen element-available() und function-available() existiert noch eine weitere Möglichkeit die Funktionalität des Stylesheets zu garantieren. Das ist mittels des fallback-elementes möglich, indem direkt beim ersten Auftauchen eines nicht erreichbaren Elementes oder einer nicht erreichbaren Funktion in den durch fallback definierten Verarbeitungsfall gesprungen wird. Damit wird auf jeden Fall die Ausführung der innerhalb des fallback-elementes stehenden Anweisungen garantiert.

43 37 Beispiel 3.6.1: Einsatz eines Erweiterungselementes: Zur Ausgabe des Ergebnisses einer XSL-Transformation in mehrere Dokumente liefert Xalan eine entsprechende Erweiterung. Der Namensraum und sein Präfix redirect wird wie üblich angegeben. Allgemein ist dieser für den XSLT- Prozessor unwichtig, doch Xalan benutzt diesen Namensraum bei Erweiterungen zum Auffinden der Klasse, in der die Erweiterungen implementiert sind. Mittels des extension-element-prefixes-attributes wird dem Prozessor mitgeteilt, mit welchem Präfix Erweiterungselemente versehen sind. Es soll eine HTML-Ausgabe erzeugt werden. Um festzustellen, ob der Prozessor das redirect:write-element kennt, wird die element-available-funktion eingesetzt. Ist dies der Fall, so kann das Dokument auf mehrere Dateien aufgeteilt werden. Dafür werden für alle vorhandenen Elemente die Vorlagen mit dem Mode viele aufgerufen. In dieser Vorlage wird die Ausgabe jeweils in eine Datei umgeleitet, die mittels der generate-id()- Funktion einen eindeutigen Namen erhält. Sollte das Element unbekannt sein und somit kein Splitten auf verschiedene Dateien durchgeführt werden, so wird eine HTML- Seite erzeugt und in diese werden alle Werte der Reihe nach eingefügt. <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl=" xmlns:redirect="org.apache.xalan.xslt.extensions.redirect" extension-element-prefixes="redirect"> <xsl:output method="html" encoding="iso "/> <xsl:template match="/"> <xsl:choose> <!-- Schreiben in mehrere Dateien wird unterstuetzt --> <xsl:when test="element-available( redirect:write )"> <!-- Alle Elemente im viele-modus bearbeiten--> <xsl:apply-templates select="*" mode="viele"/> </xsl:when> <!-- Das Schreiben laesst sich nicht aufteilen --> <xsl:otherwise> <!-- Erzeuge eine HTML-Seite, die alles enthaelt --> <html><head><title> <xsl:value-of select="text()"/></title></head> <body><h1><xsl:value-of select="text()"/></h1> <xsl:apply-templates select="*"/> <hr/> Tanja Schniederberend </body> </html> </xsl:otherwise> </xsl:choose> </xsl:template>

44 38 <!-- Fuer jedes Element den Text ausgeben --> <xsl:template match="*"> <h1><xsl:value-of select="text()"/></h1> <xsl:apply-templates select="*"/> </xsl:template> <!-- Fuer jedes Element im viele-modus --> <xsl:template match="*" mode="viele"> <!-- eindeutige ID erzeugen --> <xsl:variable name="pos" select="generate-id(.)"/> <!-- in eine neue, eindeutige Datei schreiben --> <redirect:write select="concat($pos,.html )"> <html><head><title> <xsl:value-of select="text()"/></title></head> <body><h1><xsl:value-of select="text()"/></h1> <hr/> Tanja Schniederberend </body> </html> </redirect:write> <xsl:apply-templates select="*" mode="viele"/> </xsl:template> </xsl:stylesheet> Abbildung 5: Ausgabe mit Saxon In dem Beispiel wurde allein die für Xalan gültige Erweiterung eingesetzt. Auch mit Saxon ist es möglich in mehrere Dateien zu schreiben, doch dafür müsste ein weiterer Fall zur Verarbeitung festgelegt werden. Die Unterstützung mehrerer Prozessoren ist nur mit einem sehr umfangreichen Stylesheet möglich. Um derartige Probleme und die Entwicklung verschiedenster XSLT-Prozessoren in unterschiedliche Richtungen zu vermeiden, ist aus einer Initiative von XSLT-Entwicklern

45 39 (a) Das erste Element, das alle weiteren Elemente, aber keinen Text enthält (b) erstes Kindelement (c) zweites Kindelement (d) drittes Kindelement Abbildung 6: Ausgabe mit Xalan in verschiedene Dateien das EXSLT-Projekt ("E" steht für extensions - Erweiterungen)[EXSLT] entstanden. Wesentliche Aufgabe des Projektes ist die Dokumentation, wie Erweiterungen benutzt werden sollen, und die Angabe von Funktionen, die ein Prozessor unterstützen soll. Zum aktuellen Stand unterstützen zwar nur einige wenige Prozessoren diese Erweiterungen, aber dafür sind es die häufig eingesetzten, dazu gehören Xalan und Saxon. Wie weit sich dieses Projekt auf Dauer durchsetzt ist allerdings fraglich, zumal selbst die eben genannten Prozessoren nicht jede Erweiterung unterstützen. Wichtig ist aber, dass die innerhalb dieses Projektes definierten Erweiterungsfunktionen mit in die Diskussion um die Version 2.0 von XSLT aufgenommen wurden. Zwei häufig benötigte Funktionen, wie das Lesen aus Textdateien und das Schreiben in mehrere Ausgabedokumente, wurde bislang nur als Erweiterung der einzelnen Prozessoren implementiert, sind aber durch den hohen Bedarf mit in die Diskussion der Anforderungsliste an die nächste XSLT-Version aufgenommen worden. Die Aufnahme und Standardisierung derartiger Funktionen wird in der Zukunft wieder für eine hohe Unabhängigkeit von den Prozessoren sorgen und eine Vereinfachung der Entwicklung mit sich ziehen. Bereits zum aktuellen Stand des Arbeitspapiers zur Version 2.0 von XSLT unterstützt Saxon in der Version 7.4 wichtige Funktionen, wie das Ausgeben in mehrere Dokumente, anhand der Vorgaben des Arbeitspapieres. Innerhalb dieser Entwicklungsphase kann sich natürlich noch einiges ändern. Dennoch ist daraus eine Tendenz zu erkennen. Weitere Beispiele für neue Funktionalitäten von XSLT sind die Ergänzung um XQuery, eine XML-basierte Datenabfragesprache, und die Unterstützung von Datentypen aus

46 XML-Dokumenten, wenn diese anhand eines XML Schemas definiert wurden. Bei der Erstellung von Stylesheets, die mehrere Prozessoren unterstützen, ist es somit um so wichtiger auf die Version des unterstützten XSLT zu achten und diese Versionen zu unterscheiden. 40

47 41 4 XSL-FO Die extensible Stylesheet Language Formatting Objects (XSL-FO) ist eine XML- Anwendung zur grafischen Aufbereitung von XML-Dokumenten. Hierbei steht besonders die Möglichkeit ein druckbares Format zu liefern im Vordergrund. XSL-FO ist somit eine XML-basierte Beschreibung für das Erscheinungsbild gedruckter Dokumente, dessen Funktionsweise in diesem Kapitel näher erläutert wird. 4.1 Entstehung Zur grafischen Aufbereitung von XML-Dokumenten wurde anfangs die extensible Stylesheet Language (XSL) entwickelt. Da sich eine Aufteilung in zwei wesentliche Anwendungsbereiche, Layout und Strukturierung, abzeichnete, wurde die Sprache diesen Anforderungen angepasst. Aus dem Strukturierungsaspekt ist XSLT entstanden und die auf das Layout konzentrierte Sprache XSL ist geblieben. Da allerdings aus der Geschichte heraus noch häufig Verwechslungen zwischen diesen Bezeichnungen auftreten, nennt man XSL zur Herausstellung des Formatierungsaspektes im allgemeinen Gebrauch XSL-FO. Dies erklärt auch das Präfix fo, das für die Namensraumangabe benutzt wird und sich weitestgehend etabliert hat. Die endgültige Empfehlung [W3CXSLFO] ist in erster Version am vom W3C verabschiedet worden. Mit XSL-FO sollen Möglichkeiten geliefert werden, um druckbare Dokumente aus strukturierten XML-Daten zu erzeugen. Dazu lassen sich die darzustellenden Seiten unabhängig vom letztendlich erzeugten Format definieren. Es existieren mehrere verschiedene Formatierer, die unterschiedliche Formate oder ihre Beschreibung generieren können. Die meisten Formatierer unterstützen Formate wie PostScript und PDF, einige aber auch RTF oder TeX. Alle diese Formate sind für die Ausgabe auf dem Drucker geeignet, nur bei der Generierung mittels TeX wird noch ein Zwischenschritt eingelegt. Dieser Schritt sorgt dafür, dass der Formatierer keine Kenntnis über die Zeichensetzung benötigt, sondern ausschließlich eine Abbildung der in XSL-FO beschriebenen auf die in TeX beschriebenen Daten machen muss. In Anbetracht der Aktualität dieser XML-Anwendung ist das eine Möglichkeit, die bei einigen Formatierern noch fehlerhafte Zeichensetzung zu umgehen und auf ein bereits langjährig erfahrenes System auszuweichen. Darauf wird in Kapitel 4.6 noch näher eingegangen. Zur Festlegung des Erscheinungsbildes von HTML-Elementen werden häufig Cascading Style Sheets (CSS) [W3CCSS] verwendet. Dies ist eine eigene Sprache, die auf die Formatierung von HTML-Elementen spezialisiert ist. Mit ihrer Hilfe können unter anderem Fonts und Farben definiert werden. CSS hat großen Einfluß auf die Entstehung von XSL-FO gehabt. Viele Eigenschaften, die mit CSS definiert werden können, wurden in XSL-FO übernommen. Die Syntax unterscheidet sich zwar, zumal CSS keine XML-Anwendung ist, aber die Attribute sind ähnlich. So kann in beiden Sprachen beispielsweise die Schriftgröße mit dem font-size-element gesetzt werden. Die

48 42 Einflüsse sind auch aus der Definition von XSL-FO ersichtlich, die mehrfach auf die Definition von CSS verweist. 4.2 Grundlagen XSL-FO beschreibt den Seitenaufbau, wie beispielsweise Größe, Position, Rahmen, Zeilenabstände, benutzte Schriftarten und Farben. Um die XML-Daten, die in eine druckreife Datei überführt werden sollen, in dieses Format zu bringen, werden sie meistens mittels XSLT in ein gültiges XSL-FO-Dokument umgeformt (vgl. Abbildung 7). XSLT fungiert dabei im wesentlichen als Variable für den Inhalt. Die Daten, die den Inhalt bilden, werden mit XSLT an den Stellen in dem XSL-FO-Dokument eingefügt, an denen sie mittels XSL-FO zur Ausgabe bearbeitet werden sollen. Für die weitere Betrachtung der Funktionsweise von XSL-FO reicht es daher aus, die Daten fest in das FO-Dokument hineinzuschreiben. Die XSL-Transformation, die diese Datei eigentlich erzeugt, also im wesentlichen die Textpassagen in die XSL-FO Auszeichnungen integriert, wird in Kapitel 3 beschrieben. Ein Beispiel zu der Zusammenarbeit von XSL-FO und XSLT wird in Kapitel 4.5 behandelt. PDF XML Dokument XSL Transformation XSL FO Dokument Formatierer PS Abbildung 7: Ablauf zur Erstellung von Formaten aus XML-Daten Der Aufbau eines XSL-FO-Dokumentes ist immer gleich. Zu Beginn werden die Seiten definiert. Dabei werden die Größe, die Ränder und die beschreibbaren Regionen festgelegt. Darauf folgen optional Deklarationen, wie die Bestimmung eines einzusetzenden Farbprofils. Im Anschluß folgt die Beschreibung des gesamten Inhalts und aller seiner Eigenschaften, wie Position, Fonts und Farben. Der folgende Code zeigt den grundlegenden Aufbau eines XSL-FO-Dokumentes: <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo=" <!-- Seiten definieren --> <fo:layout-master-set>... </fo:layout-master-set>

49 43 <!-- optional Deklarationen --> <fo:declarations>... </fo:declarations> <!-- Seiten benutzen, Inhalt einfügen --> <fo:page-sequence master-reference="seitenverweis">... </fo:page-sequence>... </fo:root> Es können beliebig viele page-sequence-elemente eingefügt werden, während nur ein layout-master-set-element existieren darf, in dem alle Seitendefinitionen enthalten sein müssen. Das declarations-element ist optional und nur dann anzuwenden, wenn das vorhandene in ein anderes Farbprofil geändert wird. Deshalb wird es in den weiteren Beispielen vernachlässigt. 4.3 Seitendefinition Jedes XSL-FO-Dokument besteht aus mindestens einer Seite. Diese muss im Layout- Master-Set definiert werden. Dazu wird die Seitengröße angegeben, die Ränder werden abgesteckt und die beschreibbaren Regionen werden festgelegt. Beispiel 4.3.1: Es soll eine einfache DIN A4 Seite definiert werden. Der Rand nach oben und unten beträgt 2cm und der nach rechts und links 2,5cm. Innerhalb der Seite wird im Regionbody der Hintergrund auf grau gesetzt. <fo:simple-page-master master-name="einfach" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2.5cm" margin-right="2.5cm"> <fo:region-body background-color="grey"/> </fo:simple-page-master> Der Region-body stellt die eigentliche Schreibzone des Dokumentes dar. Neben ihm lassen sich aber noch vier weitere Regionen definieren. Nur in diesen Regionen kann Inhalt eingefügt werden. Die anderen Regionen liegen über, unter, links und rechts vom Region-body. Sie eignen sich somit besonders für alle festen Angaben, wie Kopf-

50 44 oder Fußzeilen, Seitenzahlen oder Titel. In Abbildung 8 wird der Aufbau einer Seite mit den Regionen dargestellt (vgl. [Paw2002, S.34]). Die Ränder wurden zuvor mittels der margin-attribute bei der Seitendefinition festgelegt. Die Elemente zur Seitendefinition werden alle nur über ihre Attribute festgelegt, der Inhalt dieser Elemente bleibt leer. margin top Region before margin left Region start Region body Region end margin right Region after margin buttom Abbildung 8: Die zu definierenden Regionen einer einzelnen Seite in XSL-FO. Die Veränderungen, die an einer Seite vorgenommen werden können, sind aber noch viel weitreichender. Die absoluten und relativen Richtungen der Seitenelemente können bestimmt werden. Dadurch ist es möglich die Regionen so zu drehen, dass sie auf dem Kopf oder auf der Seite liegen. Gleichzeitig lässt sich auch noch die Schreibrichtung bestimmen. Standardmäßig ist diese von links nach rechts und von oben nach unten definiert. Aber sie lässt sich auch auf rechts nach links und auf unten nach oben festlegen. Die ganzen Angaben bezogen sich auf die Definition einer einzelnen Seite. Wenn nun aber mehrere Seiten erzeugt werden, so müssen diese auch beschrieben werden können. Das wird beispielsweise durch die Anwendung mehrerer einzelner Seiten realisiert. Diese Seiten können alle gleich aufgebaut sein oder jede einzeln definiert werden. Doch das reicht noch nicht aus. So kann im Vorfeld häufig nichts über die Menge des Inhaltes gesagt werden und wie dieser über verschiedene Seiten verteilt werden soll. Um trotzdem zu berücksichtigen, dass beispielsweise alle linken Seiten

51 45 anders aussehen als alle rechten oder die erste anders als die restlichen, lassen sich Seiten-Sequenzen definieren. Mit ihnen wird die Reihenfolge, Häufigkeit und Auswahl der einzelnen Seiten festgelegt. So lassen sich Bedingungen ähnlich dem choose- Element in XSLT definieren, anhand derer eine bestimmte einzelne Seite benutzt wird. Die Bedingungen sind abhängig von der Seitenposition, beispielsweise ob es sich um die erste oder letzte Seite handelt, dem Auftreten der Seite, an gerader oder ungerader Stelle, und dem eventuell auf einer Seite vorhanden fliessenden Inhalt. Beispiel 4.3.2: Eine Sequenz von Seiten, die für die erste Seite eine definierte Titelseite aufruft und für die restlichen die eben schon definierte Beispielseite einfach, wird folgendermaßen erstellt: <fo:page-sequence-master master-name="viele"> <fo:repeatable-page-master-alternatives> <fo:conditional-page-master-reference master-reference="titel" page-position="first"/> <fo:conditional-page-master-reference master-reference="einfach" page-position="rest"/> </fo:repeatable-page-master-alternatives> </fo:page-sequence-master> 4.4 Inhalte einer Seite Die zuvor definierten Seiten können nun mit Inhalt gefüllt werden. Das wird innerhalb der page-sequence-elemente gemacht. Diese referenzieren auf den Master einer einfachen oder einer Sequenz von Seiten. Da auch mehrere Seiten-Sequenzen benutzt werden können, müssen diese untereinander abgestimmt werden. Dafür gibt es bei jeder neu eingefügten Sequenz die Möglichkeit, die Seitennummerierungen anzupassen oder den Beginn auf einer geraden oder ungeraden Seite festzulegen. Die Seitengrundlage ist damit festgelegt. Durch Referenzen auf die definierten Regionen der Seite kann in diese der Inhalt eingefügt werden. Dabei wird fließender und fester Inhalt unterschieden. Fester Inhalt wird direkt auf einer Seite platziert, während sich fließender Inhalt je nach Aufteilung durch den Formatierer über verschiedene Seiten verteilen lässt. Übersteigt der fließende Text allerdings die im Sequenz-Master definierte Anzahl der Seiten, so kommt es zu einer Fehlermeldung. Es sollte also schon bei der Master-Definition darauf geachtet werden, dass die Anzahl der gesamten Seiten nicht beschränkt ist und somit immer ausreichend Seiten zur Verfügung stehen. Zum Platzieren und Definieren des Inhaltes gibt es viele Möglichkeiten der Gestaltung. Sie hängen mit dem Bearbeitungsmodell des Formatierers zusammen. Alle Objekte,

52 46 die der Formatierer in einer Seite platzieren muss, werden in ein Rechteck gesteckt, das Area genannt wird. Diese Area ist nicht unbedingt mit den einzelnen definierten Inhalten einer Seite identisch. Der fließende Inhalt kann beispielsweise in einem Element definiert sein, aber nicht auf eine Seite passen. Somit wird er getrennt und in mehrere Areas aufgeteilt. Dieser Arbeitsschritt des Formatierers ist bei der Definition aller Inhalte zu berücksichtigen, da so zusammenhängende Einträge mit gleicher Formatierung auch getrennt werden können. Die Areas können ineinander geschachtelt werden. Damit entsteht ein ganzer Baum ineinander liegender Areas. Verschiedene Objekte können auch zu Areas zusammengeschlossen werden. Angaben hierzu lassen sich genauso über Attribute realisieren wie das Aufteilen auf unterschiedliche Seiten. Zwei wesentliche Typen von Areas werden im Folgenden benutzt: Inline-Areas und Block-Areas. Inline-Areas beschäftigen sich mit allem, was innerhalb einer Zeile angeordnet oder platziert werden kann. Block- Areas sind zusammengehörige Teile, die in einem Dokument platziert werden soll. Blöcke sind ineinander schachtelbar. Sie können aus einfachen Textpassagen, Listen, Tabellen oder auch Grafiken bestehen. Allein mittels dem block-container-element definierte Blöcke sind absolut innerhalb einer Area positionierbar, ansonsten ist die Positionierung relativ vorzunehmen. Die einfachste Benutzung eines block- Elements stellt das Einfügen von Text dar. Alle Eigenschaften (Fonts, Abstände von Zeilen oder Rändern, Hintergrund, etc.) lassen sich in den Attributen des block- Elementes setzen. Für Größenangaben stehen dabei verschiedene Maßeinheiten zur Verfügung, zum Beispiel Pixel, Zoll oder Zentimeter. Bei geschachtelten Blöcken werden die Eigenschaften weiter vererbt. Blöcke können somit als Container anderer Elemente dienen und diese auch kombinieren, beispielsweise eine Grafik in den Hintergrund legen und den Text darüber. Auch Fußnoten lassen sich einfügen und Blöcken können ID s mitgegeben werden. Anhand der ID s lassen sich an anderer Stelle Verweise auf diese Blöcke erstellen, wodurch Links und Seitenzahlenverweise innerhalb des Textes ermöglicht werden. Beispiel 4.4.1: Es wird fließender Inhalt im Region-Body einer Seite definiert. Der Inhalt besteht aus einfachen Blöcken, die ineinander geschachtelt sind und nur Text enthalten. Die Attribute der Blöcke bestimmen die Textausrichtung, die Schriftgröße und den Abstand zueinander. <fo:flow flow-name="xsl-region-body"> <fo:block text-align="left" font-size="22pt"> Inhalt <fo:block space-before="6pt" font-size="16pt"> Ein Block im Block </fo:block> </fo:block> </fo:flow>

53 47 Abbildung 9: Der gerenderte Inhalt zweier Block-Abschnitte aus Beispiel Listen und Tabellen stellen auch Blöcke dar, die in den beschriebenen Arten benutzt werden können. Sie lassen sich aber auch noch exakter formatieren. Beispiele hierfür sind das Listenlabel und sein Abstand zum eigentlichen Listeninhalt oder die Tabellenbeschriftung in Bezug auf die eigentliche Tabelle. Diese Beschriftung wird neben dem Tabellenkopf und dem Tabellenkörper angegeben und bildet mit ihnen zusammen einen eigenen Block. Die Inhalte dieser Beschreibungen können wiederum in andere Blöcke integriert sein. Eine kleinere Einheit innerhalb von Blöcken stellen die inline-elemente dar. Während sich für Blöcke allgemeine Eigenschaften setzen lassen, bieten inline-elemente die Möglichkeit direkt in einer Zeile Veränderungen vorzunehmen. So lassen sich mit ihrer Hilfe einzelne Wörter oder Textpassagen unterstreichen, kursiv oder fett drucken. Die inline-elemente können auf Zeichen- und Wortabstände Einfluß nehmen, können Zeilenleerräume mit Zeilenführern füllen, wie den Linien einer Zeile in einem Inhaltsverzeichnis, und innerhalb einer Zeile Grafiken einfügen. Natürlich können auch in inline-elementen alle Arten von Farb- und Fontveränderungen vorgenommen werden. Beispiel 4.4.2: Zum Einfügen einer Grafik innerhalb einer Zeile, wird das inline-element verwendet. Hier wird innerhalb eines mit Text gefüllten Blockes eine externe GIF-Datei eingefügt. Durch Festsetzung der Höhe und der zu benutzenden Skalierungsfunktion wird die Grafik an die Zeilenhöhe angepasst. Das Ergebnis ist in Abbildung 10 zu sehen. <fo:block space-before="20pt" font-size="16pt"> Eine Grafik in einer Zeile <fo:inline> <fo:external-graphic height="16pt" scaling="uniform" src="url(smile.gif)"/> </fo:inline> gefolgt von ein wenig Text. </fo:block>

54 48 Abbildung 10: Formatierte Grafik in einer Zeile Die elementarste Ebene, auf der Darstellungskriterien festgelegt werden können, sind einzelne Zeichen. Das ist allgemein gebräuchlich um einzelne Zeichen hoch oder tief zu stellen. Es lassen sich auf dieser Ebene aber auch Zeichen drehen oder ihre Farbe oder Größe verändern. Die Liste der einzelnen Formatierungsmöglichkeiten für jedes Element ist sehr lang. Überall können die eben beschriebenen Eigenschaften anhand von Attributen verändert und dem Zweck angepasst werden. Auch die Benutzung der Elemente ist beliebig tief schachtelbar und ihr Einsatz in fließendem und statischem Inhalt möglich. Im folgenden Kapitel wird in einem Beispiel dargestellt, wie die Kombination aus XSLT und XSL-FO zur druckreifen Darstellung von XML-Daten führt. 4.5 Generierung mit XSLT Die Daten, die mit XSL-FO ausgegeben werden sollen, werden im allgemeinen mittels XSLT in dieses Format gebracht. Der grundsätzliche Aufbau sieht so aus, dass in der Vorlage für das Wurzeldokument der allgemeine Rahmen und alle Seitendefinitionen gesetzt werden. Dann werden abhängig vom Inhalt verschiedene Vorlagen aufgerufen, die eventuell ganze Seiten mit Inhalt füllen oder die entsprechenden Daten in ein XSL- FO-Element einfügen. In vielen Fällen können die statischen Inhalte direkt bestimmt werden und nur die fließenden werden über verschiedene Template-Aufrufe festgelegt. Der Aufbau dieses XSLT-Dokumentes stellt natürlich nur eine mögliche Variante dar. Wie bei anderen XSL-Transformationen ist der Aufbau abhängig von dem zu Grunde liegenden XML-Dokument. Die Kombination aus XSLT und XSL-FO zeigt aber deutlich, wie die Zusammenarbeit funktioniert und bildet ein Beispiel für ein Dokument, in dem die Elemente zweier Namensräume benutzt werden. Beispiel 4.5.1: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl=" xmlns:fo=" version="1.0"> <xsl:output method="xml"/>

55 49 <!-- Grundgeruest in der Wurzelvorlage --> <xsl:template match="/"> <fo:root xmlns:fo=" <fo:layout-master-set>... </fo:layout-master-set> <fo:page-sequence master-reference="title"> <!-- Der Autor als statischer Inhalt unten auf der Seite --> <fo:static-content flow-name="xsl-region-after"> <fo:block font-size="12pt" text-align="center"> <xsl:value-of select="//autor"/> </fo:block> </fo:static-content> <!-- Der fliessende Inhalt im Seitenkoerper --> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="24pt" text-align="center"> <!-- bestehend aus allen selektierten Daten --> <xsl:value-of select="//daten"/> </fo:block> <!-- und einzelnen Bloecken fuer jede Person --> <xsl:for-each select="//person"> <fo:block font-size="20pt" text-align="center"> <!-- der Inhalt wird durch andere Templates bestimmt --> <xsl:apply-templates select="//persinfo"/> </fo:block> </xsl:for-each> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="persinfo"> <xsl:value-of select="name"/> </xsl:template> </xsl:stylesheet> Die Ideen für den Einsatz von XSL-FO gehen noch weiter. So könnten die beschriebenen Seiten nicht nur mittels eines Formatierers umgewandelt und gedruckt werden, auch eine Integration in Browser wäre denkbar. Es wäre auch möglich mittels XSL-FO bezüglich des Layouts beschriebene XML-Daten direkt grafisch im Browser darzustellen und dadurch einen qualitativ hochwertigeren Ausdruck zu erzeugen.

56 Formatierer Die Qualität des Ausdrucks eines Dokumentes, das mit XSL-FO beschrieben wurde, hängt natürlich wesentlich vom eingesetzten Formatierer ab. Leider werden nicht alle XSL-FO-Eigenschaften von allen Formatierern unterstützt. Viele halten sich zwar an den Standard, sind allerdings noch so jung, das ausgefallene Elemente oder Attribute des Standards noch nicht implementiert sind. Auch der Umfang der extern einbindbaren Dateien ist sehr unterschiedlich. Abhängig vom Formatierer werden somit verschiedene Grafikformate unterstützt, wobei jedes Format mit der Angabe seines MIME-Types möglich wäre. So ist auch die Integration von SVG-Grafiken machbar, aber in den meisten Fällen nicht realisiert. Ein Formatierer könnte anhand der Größe einfach ein schwarzes Rechteck für die Fläche liefern, deren Inhalt von einem anderen Prozess bearbeitet wird. Somit braucht der Formatierer kein Wissen über jeden Typ zu besitzen und die Darstellung der SVG-Grafik kann einem anderen Prozess überlassen werden. Die folgenden Angaben sollen einen kurzen Überblick über die verbreitetsten Formatierer geben. Welcher Formatierer sich für die endgültige Umsetzung am besten eignet, muss im Einzelfall entschieden werden. Eine ausführliche Liste von Anwendungen rund um XSL ist beim W3C [W3CXSL] abrufbar. XEP ist ein kommerzielles Produkt der Firma RenderX [renderx] mit Sitz in Kalifornien. Die aktuelle Version 3.4 beruht auf der XSL-FO-Empfehlung vom Es sind verschiedene Versionen für Entwickler, Server und auch kostenlos zum Testen oder für akademische Zwecke verfügbar. XEP ermöglicht die Generierung von PDF und PS, fügt aber im Fall der Testversion einen Stempel auf jeder Seite oder in der akademischen Version eine Anmerkung in den Notizen des Dokumentes ein. Deweiteren können eigene Elemente von RenderX ergänzt werden, die beispielsweise Dokumentinformationen oder Lesezeichen dem generierten PDF hinzufügen können. FOP ist aus dem Apache Projekt entstanden und damit frei verfügbar [fop]. FOP ist in Java geschrieben, die aktuelle Versionsnummer ist und erzeugt werden diverse Formate, wie PDF, PS, SVG und TXT. Allerdings wird die beste Unterstützung, in der auch noch einige XSL-FO-Attribute unbehandelt bleiben, für PDF geliefert. Das generierte SVG ist für die Weiterverwendung nicht zu gebrauchen. XSL Formatter ist ein kommerzielles Produkt von Antenna House Inc. [antenna] in Tokyo. Aktuell ist der XSL Formatter, beruhend auf der W3C Empfehlung für XSL-FO, als Version 2.5 für Windows und in der Version 2.0 für Linux erhältlich. Er ist in C++ geschrieben, generiert PDF und besticht besonders durch seine Geschwindigkeit bei der Generierung. Der XSL Formatter lässt sich zu Testzwecken kostenlos herunterladen, doch wird auch hier auf jede Seite der Firmenname platziert.

57 51 PassiveTex stellt frei verfügbar TeXMakros bereit, die dazu gedacht sind XSL-FO- Daten auf eine TeX-Beschreibung zu mappen und daraus dann PDF zu erzeugen. Das Copyright [Rah2003] liegt bei Sebastian Rahtz von der Oxford University. Der Vorteil der Lösung zur Formatierung TeX zu benutzen, liegt in der Satzkenntnis von TeX. TeX beherrscht sowohl die Worttrennung als auch mathematische Formeln und kann damit eine gleichmäßige Darstellung erzeugen. Die Ergebnisse einer Testseite, die die Unterschiede der Formatierung der Tools FOP, XEP und XSL Formatter zeigen, sind im Anhang C zu finden.

58 52 5 SVG Scaleable Vector Grafics (SVG) ist eine XML-Anwendung zur Beschreibung zweidimensionaler Vektorgrafiken, die sowohl Animationen als auch Interaktionen mit dem Benutzer unterstützt. Das Einsatzgebiet für SVG-Grafiken liegt hauptsächlich im Internet. Die folgenden Erläuterungen sollen eine grobe Vorstellung davon liefern, was SVG-Grafiken leisten können. 5.1 Entstehung Die erste Empfehlung für SVG wurde am vom W3C verabschiedet. Während der Erstellung dieser Diplomarbeit ist jedoch eine neuere Version 1.1 [W3CSVG] am veröffentlicht worden. Neben dieser Version wurde gleichzeitig auch eine spezielle Version für Mobile Endgeräte verabschiedet: SVG Tiny & SVG Basic [W3CSVGT]. Damit wurden die Grundlagen geschaffen, um den Einsatz von SVG nicht nur auf das Internet zu begrenzen, sondern auch auf die mobile Kommunikation auszudehnen. Zur Darstellung von SVG-Grafiken wird ein spezialisierter Betrachter (Viewer) benötigt. Da SVG auf XML beruht, soll dieser im Rahmen des Mozilla-Projektes [Mozilla] direkt in den Browser integriert werden. Die Entwicklung von SVG ist noch recht jung, weshalb bespielsweise elementare Elemente wie Text noch nicht vollständig integriert sind und dadurch neben der offiziellen Version noch ein Zusatzpaket installiert werden muss. Für andere Browser, wie beispielsweise den Internet Explorer von Microsoft, wird allerdings ein Plug-In benötigt. Das verbreitetste Plug-In ist der SVG-Viewer von Adobe [AdoSVG], der nicht nur für unterschiedlichste Plattformen zur Verfügung steht, sondern auch die Unterstützung der meisten Elemente von SVG-Grafiken liefert. Die aktuelle Version 3.0 ist vom November 2001 und ist sowohl für Windows 98 bis XP, Mac 8.6 bis 10.1, Linux und Solaris 8 verfügbar. Es stehen aber auch eigenständige Betrachter zur Verfügung, zum Beispiel die auf Java basierenden Viewer von IBM oder Apache. Der aktuelle Stand der Entwicklung dieser und weiterer SVG-Betrachter kann beim W3C unter [W3CSVGImpl] abgefragt werden. Für die weitere Betrachtung wird der gängige Viewer von Adobe als Plug-In für den Internet Explorer eingesetzt. 5.2 Grundlagen Da SVG auf XML basiert, beginnt eine SVG-Datei mit der gleichen XML-Deklaration wie alle XML-Anwendungen. Darauf folgt das Wurzelelement svg, das alle weiteren Elemente enthält. Eine Vorlage für SVG-Grafiken sieht demnach folgendermaßen aus:

59 53 <?xml version="1.0" encoding="utf-8"?> <svg xmlns=" height="600" width="800">... </svg> Die Größenangabe ist optional, mit ihr kann die Größe der Grafik festgelegt werden. Standardmäßig werden für Größenangaben immer Pixel benutzt. Es sind allerdings auch andere absolute Angaben wie mm oder relative Angaben in % vom äußeren Bezugsrahmen möglich. Auf diese Art lassen sich auch alle weiteren Elemente der Grafik positionieren. Die SVG-Grafik kann direkt in einem Viewer geöffnet werden. Häufig sollen aber die Grafiken in eine HTML-Seite integriert werden. Dazu lassen sie sich mittels des <embed>- oder <object>-tags in das HTML-Dokument einfügen. Das <embed>- Tag entspricht nicht dem Standard des W3C und gilt als veraltet, wird allerdings von einigen Browsern besser unterstützt als das <object>-tag. Das <object>-tag ist das offizielle Tag zum Einfügen externer Medien in HTML-Dokumente und wird vom W3C empfohlen. Nur mit dem <object>-tag lassen sich auch Ersatzdarstellungen definieren. Diese Ersatzdarstellungen werden angezeigt, wenn der angegebene MIME- Type, für SVG ist das image/svg+xml, nicht korrekt wiedergegeben werden kann [Spo2001, S. 32 ff.], [Wat2001, Kapitel 10]. <embed src="datei.svg" type="image/svg+xml"/> <object src="datei.svg" type="image/svg+xml"> <img src="ersatz.gif"/> </object> Die Grundlage der SVG-Grafik bildet die Zeichenfläche, auf der sie erstellt wird. In dieser können durch ein Koordinatensystem alle Elemente genau platziert werden. Der Nullpunkt wird dabei in die obere linke Ecke gelegt, die positive x-achse verläuft nach rechts und die positive y-achse nach unten. Die Längen der Achsen sind nicht beschränkt, deshalb können auch Elemente platziert werden, die nicht sichtbar sind. Der sichtbare Ausschnitt aus dem Koordinatensystem beginnt im Nullpunkt und endet an den Achsenabschnitten, die durch Angabe der Breite und Höhe des SVG-Tags festgelegt wurden. Die sichtbare Fläche wird auch Viewport genannt.

60 Darstellungsobjekte Die einfachsten Objekte, die auf der Zeichenfläche platziert werden können, sind Rechtecke, Kreise, Ellipsen, Polygone, Linien und Polylinien 5. Sie alle lassen sich durch Angabe ihrer spezifischen Punkte erzeugen. Darunter ist beispielsweise für einen Kreis der Mittelpunkt und der Radius zu verstehen, für ein Rechteck sind das der Startpunkt, die Breite und die Höhe. Die Reihenfolge der Definitionen bestimmt, welches Element oben liegt. Das ist bei übereinander angeordneten Objekten immer das zuletzt angegebene. Ist die Position und Größe der Objekte festgelegt, so lassen sich noch anhand von Attributen Farbeinstellungen definieren. Farben können dabei mit ihrem Namen, in RGB-Werten oder per Hexadezimalcode festgelegt werden. Beispiel 5.3.1: Das Rechteck beginnt bei (x,y)=(50,50), mit Breite 50 und Höhe 30 Pixel. Es soll blau gefüllt werden. Der Kreis liegt direkt im Ursprung, hat einen Radius von 50 Pixel und wird grün dargestellt. Die Abbildung 11 zeigt das Ergebnis im SVG Viewer. <rect x="50" y="50" width="50" height="30" style="fill:rgb(0,0,255)" /> <circle cx="0" cy="0" r="50" style="fill:rgb(0,200,150)" /> Abbildung 11: Darstellung eines Rechtecks und Kreises in SVG Zur Beschreibung von Formen, die nicht durch einfache Objekte abgebildet werden können, lassen sich Pfade definieren. Pfade sind sehr flexibel und geeignet um jegliche Formen abzubilden. Sie bestehen aus einer Aneinanderreihung von Streckenabschnitt, die durch unterschiedliche Beschreibungen entstehen. So lässt sich eine absolute Position bestimmen, beispielsweise für den Startpunkt, gerade Linien, Teilabschnitte von Ellipsen oder auch verschiedene Arten von Bezierkurven. Geschlossene Pfade bilden 5 Polylinien bestehen aus aneinandergereihten Linien.

61 55 somit völlig neue Figuren, die wie andere Objekte gefüllt werden können. Die Angaben zur Definition der Pfade können in absoluten Werten, ausgedrückt durch große Buchstaben, und in relativen Werten mittels kleinen Buchstaben vorgenommen werden. Eine einmal definierte Form lässt sich somit bei Verwendung relativer Pfade durch die Änderung der absoluten Position einfach verschieben. Beispiel 5.3.2: Es soll eine gewellte Linie mittels eines Pfades definiert werden. Mittels des id- Attributes wird der Name welle vergeben. Die Definition findet im d-attribut statt. Mit Mx y wird der Startpunkt der Linie auf (x, y) = (50, 100) gesetzt. qdx1 dy1 dx dy definiert eine quadratische Bezierkurve mittels relativer Koordinaten. Sie beginnt beim Startpunkt, endet bei (xe, ye) = (x+dx, y +dy) = (150, 100) und die Krümmung wird durch den Kontrollpunkt (x1, y1) = (x + dx1, y + dy1) = (100, 150) festgelegt. Der Endpunkt liefert automatisch den neuen Startpunkt für die nächste Kurve. Da Pfade standardmäßig nicht dargestellt werden, ist der Rand dieses Pfades mit dem style-attribut auf blau und seine Füllung auf leer gesetzt worden. Das Ergebnis ist in Abbildung 12 zu sehen. <path id="welle" d="m q q q " style="stroke:rgb(0,0,255);fill:none"/> Abbildung 12: Eine gewellte Linie, die mittels einer Pfadbeschreibung erzeugt wurde. Ein weiteres wichtiges Element stellt Text dar, der sich auch beliebig positionieren lässt. Die besondere Art der Verwendung von Text in SVG gegenüber anderen zweidimensionalen Grafikformaten stellt einen wesentlichen Vorteil von SVG dar. Text wird als reiner Text eingefügt und auch als Text belassen. Somit können SVG-Grafiken auch nach ihrem textuellen Inhalt durchsucht werden und sind so für Suchmaschinen interessant. Der Text kann beliebig formatiert werden, sowohl bezüglich seiner Farbe als auch seines Schrifttyps. Dazu dienen sehr ähnliche Beschreibungen wie bei CSS.

62 56 Soll nicht der ganze Text verändert, sondern nur ein bestimmter Inhalt angepasst werden, so lassen sich mittels tspan-elementen auch einzelne Formatierungen innerhalb des Text-Objektes vornehmen. Damit lässt sich beispielsweise ein einzelner Buchstabe hoch oder tief stellen. Zur Ausrichtung des gesamten Textes können Pfade verwendet werden. Sie werden mittels textpath-element in den Text eingefügt und die Grundlinie des Textes wird am Pfad ausgerichtet. Beispiel 5.3.3: Der Text wird im Schrifttyp Arial, Schriftgröße 24 und blau dargestellt. Da der Text entlang eines Pfades laufen soll, muss er nicht positioniert werden. Dafür wird ihm ein textpath-element mitgegeben. Das besteht aus einem Link zu dem Pfad, der zur Ausrichtung verwendet werden soll. In diesem Fall ist das die in Beispiel definierte Welle. Anhand dieser schlängelt sich der Text, der noch für das Wort Text eine grüne Färbung enthält, vgl. Abbildung 13. <text style="font-family:arial;font-size:24;fill:rgb(0,0,255)"> <textpath xlink:href="#welle"> Das ist <tspan style="fill:green">text</tspan> auf einem Pfad... </textpath> </text> Abbildung 13: An einem Pfad orientierter Text Wie schon in Beispiel bei Pfaden gezeigt, lassen sich Elemente, denen eine ID zugewiesen wurde, über diese referenzieren. Das funktioniert für jedes beliebige Element, also auch für Text. Damit lassen sich diese Elemente einfach wiederbenutzen. Weiterhin können neue Symbole erstellt werden, die in Form ihrer Definition in der Grafik nicht auftauchen, aber an verschiedenen Stellen über das use-element eingefügt und formatiert werden. Diese Verweise beschränken sich nicht nur auf Elemente innerhalb einer SVG-Datei, sondern lassen sich auch durch XLink (XML Linking

63 57 Language) auf externe Dateien ausweiten. Dadurch ist es beispielsweise möglich eine Symboldatei anzulegen, die in unterschiedlichen Grafiken benutzte Darstellungen definiert. Es lassen sich auch Grafiken anderer Formate in SVG-Grafiken einfügen. So sorgt das image-element dafür, das beispielsweise auch gif, jpg und png Grafiken integriert werden können. Sie können nicht nur der einfachen Darstellung dienen, sondern auch die Grundlage für Füllmuster bilden. Diese können neben Farben zum Füllen von Objekten benutzt werden. Farbverläufe sind eine weitere Möglichkeit um Objekte zu füllen. Durch Attribute lässt sich auch ein Wert für den Alphakanal mit angeben, der über die Transparenz eines Objektes entscheidet. Um den optischen Eindruck von Schatten und Licht zu bekommen, können Filter eingesetzt werden. Neben den existierenden lassen sich auch beliebige Filter neu definieren. Damit können verschiedenartige Effekte erzielt werden, wie beispielsweise auch das Verschmieren von Rändern. Elemente, die sich aus verschiedenen Objekten zusammensetzen, lassen sich zu Gruppen zusammenfassen. Damit werden sie in der Gruppe platziert und ausgerichtet. In der Gruppe entsteht ein eigenes Koordinatensystem, auf das sich alle Elemente der Gruppe beziehen. Dieses stimmt standardmässig mit dem Ausgangskoordinatensystem der Zeichenfläche überein, kann aber geändert werden. Mittels des transform- Attributes lassen sich verschiedene Arten von Transformationen auf die Gruppe anwenden. Sie beschreiben beispielsweise die neue Position oder Skalierung des neuen im Bezug zum alten Koordinatensystem. Mehrere Transformationen, wie Verschieben und Drehen können nicht nur alleine vorgenommen werden, sondern lassen sich auch in einer Transformationsmatrix zusammenfassen. Weiter unterstützt werden noch Titel und Beschreibungselemente, die innerhalb jedes Elements angewendet werden können. Mit ihnen lässt sich der Titel der SVG-Grafik oder eine Beschreibung des Elementes festlegen. Objekte die nur definiert werden, aber nicht erscheinen sollen, lassen sich innerhalb des defs-elementes erzeugen. Damit existiert dieses Objekt während der Verarbeitung der SVG-Grafik und lässt sich an anderen Stellen referenzieren. Das Einfügen des defs-elementes ist nur direkt unterhalb des svg-elements möglich. 5.4 Animationen und Interaktionen Eine wichtige Eigenschaft von SVG-Grafiken stellt die Möglichkeit zur Animation dar. Animationen finden in SVG zeitorientiert statt, das heißt die Angabe einer Animation wird mit einer zeitlichen Dauer versehen. Dabei können zwei verschiedene Arten von Animationen verwendet werden. Die erste beeinflusst die Eigenschaften in Form von Attributen eines Elementes, die verändert werden können. So lassen sich beispielsweise Farbwerte fließend ineinander verändern und Größen- oder Transformationsangaben, die in verschiedenen Attributen angegeben werden, kontinuierlich zu neuen Werten umformen. Die zweite Möglichkeit ist die Festlegung von Pfaden, entlang der sich Objekte bewegen lassen.

64 58 Beispiel 5.4.1: Ein Kreis soll entlang eine Pfades bewegt werden und dabei seine Farbe ändern. Die Bewegung wird mit dem animatemotion-element auf 8 Sekunden entlang des angegebenen Pfades festgesetzt. Innerhalb der ersten 4 Sekunden, ändert sich die Farbe von blau zu rot. Nach dieser Zeit wird für weitere 4 Sekunden die Farbe wieder entgegengesetzt zu blau verwandelt. Das Ergebnis ist ansatzweise der Abbildung 14 zu entnehmen. <circle cx="50" cy="100" r="16" style="fill:blue"> <animatemotion dur="8s" path="m0 0 q q q "/> <animatecolor dur="4s" from="blue" to="red" attributename="fill"/> <animatecolor dur="4s" from="red" to="blue" begin="4s" attributename="fill"/> </circle> (a) Beginn der Animation (b) Mitten in der Animation Abbildung 14: Verschiedene Zeitpunktaufnahmen einer Animation aus Beispiel Es unterstützt nicht jeder SVG-Betrachter alle grafischen Möglichkeiten, die in SVG gegeben werden. Damit allerdings keine unerwünschten Effekte oder Fehler bei der Darstellung der Objekte auftreten, gibt es die Möglichkeit die Funktionen des Viewers abzufragen. Für das switch-element existieren verschiedene Attribute, die bei Unterstützung durch den Viewer den Grafikcode in dem Element ausführen lassen. Sollte dieses nicht der Fall sein, so wird der Code nicht für die Grafik verwendet. Dadurch kann beispielsweise abgefragt werden, ob Animationen oder nur statische Elemente unterstützt werden. Auch die Überprüfung, ob externe Dateien erreichbar sind, lässt sich vornehmen, um die Elemente nur in diesem Fall darzustellen. Die einfachste Art in Interaktion mit dem Benutzer der Grafik zu treten, ist das Einfügen eines Hyperlinks. Das funktioniert ähnlich zu HTML, indem in ein a-element die

65 59 darzustellenden Angaben des Links eingefügt werden und ein xlink:href-attribut die anzusteuernde URL, sowohl intern als auch extern, zugewiesen bekommt. Eine richtige Verarbeitung der Benutzereingaben wird allerdings erst durch die Manipulationsmöglichkeiten mittels ECMA-Script erlaubt. Die European Computer Manufacturers Association [ECMA] ist eine internationale Standardisierungsorganisation für Informations- & Kommunikationstechnologien wurde von ihr ECMA-Script als Standard für JavaScript und JScript verabschiedet. ECMA-Script dient zur Definition von Funktionen, die bei bestimmten Eingabebefehlen des Anwenders aufgerufen werden. Innerhalb dieser Funktionen können Elemente und auch Attribute gelöscht, verändert oder neu in die SVG-Grafik eingefügt werden. Das ganze beruht auf der Sichtweise einer SVG-Grafik als DOM. Mittels des DOM wird ein Application Programming Interface (API) bereitgestellt, mit dem einzelne Elemente im Dokument- Baum gefunden und bearbeitet werden können. Hierbei spielt besonders die Vergabe eindeutiger ID s für die Elemente eine wichtige Rolle, da diese die Elemente identifizieren. Beispiel 5.4.2: Es wird ein Text erzeugt, der auf einen Mausklick reagiert. Dafür wird dem onclick- Attribut eine Funktion mit dem Event evt als Parameter zugewiesen. Die Funktion wird innerhalb des script-elementes definiert. Dazu wird vom übergebenen Event der Auslöser und dessen Vaterdokument abgefragt. Dieses Gesamtdokument kann nun anhand einer ID nach einem bestimmten Element durchsucht werden. Zu dem Element wird nun das Attribut style abgerufen und in Abhängigkeit seines Wertes neu gesetzt. Dadurch wird beim ersten Klick auf den Ausgangstext der zuvor unsichtbare Text sichtbar gemacht und beim nächsten Klick wieder unsichtbar. Angedeutet wird dieses Beispiel in Abbildung 15 dargestellt. <defs> <script type="text/ecmascript"> <![CDATA[ function zeige(evt){ var doc =evt.gettarget().getownerdocument(); var newtext =doc.getelementbyid("zeig"); var attri =newtext.getattribute("style"); if(attri=="visibility:hidden"){ newtext.setattribute("style","visibility:inherit"); }else{ newtext.setattribute("style","visibility:hidden"); } } ]]> </script> </defs>

66 60 <text x="20" y="40" onclick="zeige(evt)" style="font-family:arial;font-size:24;fill:rgb(0,0,255)"> Weitere Informationen </text> <text id="zeig" x="50" y="60" style="visibility:hidden"> Alles was Sie zu Interaktion wissen sollten. </text> (a) Startgrafik (b) Nach einem Klick auf den Text Abbildung 15: Interaktion mit dem Benutzer Da SVG-Dateien reine Textdateien sind, lassen sie sich durch Kompression noch in ihrer Dateigröße reduzieren. Aus diesem Grunde unterstützt SVG die Komprimierung mittels zip, so dass das Datenvolumen zur Übertragung sinkt und nur die Entschlüsselung vor der Darstellung ein wenig Prozessorleistung auf Benutzerseite erfordert.

67 61 6 Allgemeines Konzept Vielfach müssen zu einem Themenbereich verschiedene Arten von Dokumenten erstellt werden. Der Dozent benutzt die Tafel, Folien oder den Beamer für die Vermittlung von Lehrstoff in seiner Vorlesung. Das Vorlesungsskript wird in gedruckter oder elektronischer Form dem Hörer zugängig gemacht. Die gleichen Informationen werden also nicht nur durch verschiedene Medien, sondern auch in unterschiedlichen Inhaltsdarstellungen verteilt. Für die Erstellung und Pflege dieser Dokumente bedeutet dies, dass die Informationen mehrfach erzeugt und geändert werden müssen, um einen konsistenten Inhalt zu garantieren. Um diesem redundanten Arbeitsaufwand entgegen zu wirken, soll die Verwaltung dieser gesamten Informationen in einem Dokument ermöglicht werden. Aus diesem Dokument lassen sich automatisiert verschiedene Ausprägungen generieren. Im Folgenden wird ein Konzept, das diesen Gedanken vertieft und die Grundlagen für die Umsetzung einer derartigen Arbeitsunterstützung liefert, erläutert. 6.1 Begriffsdefinitionen und Zusammenhänge Es soll ein Dokument erstellt werden, das die Inhalte beschreibt, die automatisch in verschiedene Inhaltsdarstellungen verwandelt werden können. Dieses Dokument wird im Folgenden auch Quelldokument genannt. Mit diesem Dokument ist dabei keine einzelne Datei gemeint, denn der Inhalt kann sich auch über mehrere Dateien erstrecken, sondern ein systematischer Zusammenschluss von Informationen. Das Dokument spiegelt demnach die Struktur der Daten wieder, die zu einem bestimmten Themengebiet beschrieben werden sollen. Zu diesem Zweck muss dem Quelldokument ein spezielles Format zugrunde liegen, mit dem die Beziehungen der Daten untereinander festgehalten werden können. Aus der Kombination von Daten und Struktur entsteht ein Dokument, welches die Inhalte zu einem bestimmten Thema zusammenfasst. Zur Erstellung des Dokumentes müssen bestimmte Regeln eingehalten werden. Darum kümmert sich eine Anwendung, die den Autor in der Dokumenteingabe unterstützen soll. Unter einer Anwendung ist in diesem Fall ein Programm zu verstehen, das die Struktur eines Quelldokumentes beherrscht und die Dokumenteingabe erleichtert. Es handelt sich dabei also um einen auf die Struktur des Quelldokumentes eingerichteten Editor. Aus den Daten, die in dem Quelldokument beschrieben sind, sollen verschiedene Inhaltsdarstellungen erstellt werden können. Es gibt zwei unterschiedliche Aspekte der Inhaltsdarstellung, einen inhaltlichen und einen technischen. Der inhaltliche Aspekt bezieht sich auf die Auswahl der Informationen des Quelldokumentes, die für die Darstellung von Bedeutung sind. Eine Inhaltsdarstellung, der der inhaltliche Aspekt zugrunde liegt, wird im Folgenden Ausprägung genannt. Der technische Aspekt der Inhaltsdarstellung ist für die Darstellung der Ausprägung in einem bestimmten Datenformat zuständig. Er lässt sich anhand des Formates unterscheiden.

68 62 Unterschiedliche Ausprägungen ermöglichen es, dass abhängig von der Verwendung der Inhalte eine diverenzierte inhaltliche Tiefe dargestellt werden kann. Beispielsweise werden Themen in einem Skript detaillierter beschrieben als in einer Präsentation vorgetragen. Das heisst, der Ausschnitt der Daten, der für die Erstellung der Ausprägung verwendet wird, kann variieren. Dabei können einzelne Daten ausgewählt und andere vernachlässigt werden. Durch die Variation von Umfang und Detaillierungsgrad können somit verschiedene Aspekte der Thematik fokusiert werden. Verschiedene Ausprägungen der Daten stellen den gleichen Sachverhalt in unterschiedlicher Art und Inhaltstiefe dar. Beispielhafte Ausprägungen wären etwa ein Skript bzw. Lehrbuch und eine Präsentation bzw. ein Notizzettel. Die definierten Begriffe sollen im Folgenden im Zusammenhang betrachtet werden: Ein Quelldokument wird zu einem bestimmten Thema erstellt. Das ganze Dokument lässt sich zum größten Teil beispielsweise in Form eines Skriptes darstellen, vgl. Abbildung 16. Auf der gleichen Thematik baut nun ein Vortrag auf, der durch einige textuelle Auszüge aus dem Dokument unterstützt werden soll. Dafür sind jedoch nicht die Inhalte auf einer derart detaillierten Art und Weise darzustellen, wie es in einem Skript der Fall ist. Dennoch behandeln beide Ausprägungen die selbe Thematik. Somit ändert sich lediglich die Inhaltstiefe und die Art der Darstellung. Ausprägungen Skript Präsentationsmedien Papier Dokument Vortrag Computer Mensch blabla... Abbildung 16: Aus einem Dokument lassen sich verschiedene Ausprägungen generieren, die wiederum für unterschiedliche Präsentationsmedien zur Verfügung stehen. Die in Abbildung 16 aufgeführten Ausprägungen, Skript und Vortrag, sind die gebräuchlichsten. Aus diesem Grund werden sie im Folgenden weiter spezifiziert und implementiert, so dass sie als anschauliche Beispiele herangezogen werden können.

69 63 Für jede Ausprägung, die aus dem Dokument generiert werden kann, existiert eine Standardausprägung. Das heißt, dass aufgrund der Daten des Quelldokumentes der Generierungsschritt zu einer Ausprägung führt, ohne dass dafür zusätzliche Informationen herangezogen werden müssen. Die Informationen die zur Anpassung einer Ausprägung in das Dokument eingefügt werden können, werden im Folgenden als Zusatzinformationen bezeichnet. In der bisherigen Betrachtung wurde noch nicht über das Präsentationsmedium entschieden, das zur Ansicht der Ausprägung herangezogen werden soll. Das Präsentationsmedium sollte dem jeweiligen Verwendungszweck angemessen ausgesucht werden können. Die wichtigsten Präsentationsmedien sind das gedruckte Exemplar und die Darstellung am Computer. Daraus resultieren die Anforderungen nicht nur verschiedene Ausprägungen generieren zu können, sondern auch die jeweiligen Formate, die für die unterschiedlichen Präsentationsmedien notwendig sind. Die Tabelle in Abbildung 17 stellt diese beiden Arten der Inhaltsdarstellung gegenüber. Abbildung 17: Gegenüberstellung der verschiedenen Arten von Inhaltsdarstellungen für ein Dokument 6.2 Vollständiger Arbeitsablauf aus Anwendersicht Die Arbeitsweise zur Erstellung eines Dokumentes und seiner Ausprägungen soll im Folgenden anhand eines Beispielszenarios erläutert werden. Die Benutzung eines Systems, welches die geforderten Eigenschaften besitzt, soll für den Anwender in der Summe eine Arbeitserleichterung darstellen. Deshalb muss ei-

70 64 ne Anwendung existieren, die den Dozenten bereits bei der Dokumenteingabe unterstützt. Die Präsentation dient häufig als erste schriftliche Form des Inhaltes zu einem neuen Themengebiet. Der Dozent muss durch das System in die Lage versetzt werden, dieses Themengebiet mittels Stichworten in eine geeignete, präsentationsfähige Form zu bringen. Während für die Erstellung einer Präsentation heutzutage häufig Power- Point von Microsoft verwendet wird, sollte eine derart leichte Bedienungsweise auch für das hier beschriebene System möglich sein. Die Eingabe unterscheidet sich dabei allerdings in der Art der Angaben, die benötigt werden. Beispielsweise sind keine Layoutbeschreibungen vorzunehmen, sondern es ist eine reine Inhaltseingabe erforderlich. Der Inhalt muss allerdings strukturiert werden. Das bedeutet, dass die Reihenfolge und die Zusammengehörigkeit der Daten feststehen muss. Damit unterscheidet sich die Arbeitsweise des Anwenders von der bisherigen. Aber dafür sollte nach einer Eingewöhnungsphase weniger Aufwand für die Generierung der Ausprägungen gegenüber der bisherigen Arbeitsweise notwendig sein. Aus der Eingabe der inhaltlich strukturierten Daten in das Quelldokument lässt sich automatisiert eine erste Präsentation in einer Standardausprägung generieren. Entspricht die Standardausprägung nicht dem gewünschten Ergebnis, so wird die Präsentation in weiteren Iterationsschritten durch Anpassungen der Struktur und des Inhaltes des Quelldokumentes geändert, bis die gewünschte Form erreicht ist. Das so entstandene Quelldokument, soll nun um Notizen zu den jeweiligen Stichwörtern ergänzt werden. Diese Notizen müssen an den entsprechenden Positionen in das Dokument eingetragen werden können. Natürlich dürfen diese Ergänzungen die ursprüngliche Ausprägung, in diesem Fall die Präsentation, nicht verändern. Es können aber neue Detaillierungsebenen hinzufügt werden, die für neue Ausprägungen benötigt werden. So vergrößert sich sukzessive der Datenbestand, der nun beispielsweise zwei verschiedene Ausprägungen beliefert, die Präsentation und eine um Notizen erweiterte Darstellung. Die in der Präsentation vorhandenen Daten sollen nicht nur den Dozenten in der Vermittlung seiner Lehrinhalte unterstützen, sondern auch den Hörern zur Verfügung gestellt werden. Dafür lässt sich ein anderer Generierungsschritt auf das Quelldokument anwenden, der ein Standardskript erzeugt. Allerdings reicht die stichwortartige Informationssammlung in den meisten Fällen für eine sinnvolle Darstellung noch nicht aus. Angereichert durch detailliertere Beschreibungen entsteht somit ein Skript entlang der Präsentationsunterlagen. Dabei werden nicht nur neue Daten hinzugefügt, sondern es müssen unter Umständen auch einige Zusatzinformationen geändert werden, so dass nicht alle Daten in der neuen Ausprägung Skript erscheinen. Durch die Erweiterung einer Präsentation wird also ein Skript erstellt. Aber das ist nicht die einzig denkbare Vorgehensweise, mit der ein Dokument erstellt werden kann. So ist unter anderem auch der umgekehrte Weg möglich. Aus einem Quelldokument, das erzeugt wurde um ein Skript zu generieren, kann im nachhinein eine Präsentation generiert werden. Dazu muss nur die Präsenations-Standardausprägung auf das Quelldokument angewendet werden, wodurch ein erster Vorschlag für die Präsenta-

71 65 tion erzeugt wird. Das Ergebnis kann als Grundlage für die weitere Bearbeitung der neuen Ausprägung dienen, indem einzelne Inhalte ausgewählt und andere vernachlässigt oder ergänzt werden. Diese Beispielszenarien liefern eine grobe Vorstellung über die Arbeitsweise zur Erstellung von Dokumenten. Wie verschieden die Ergebnisse auch am Ende ausfallen, so wiederholen sich doch die Arbeitsschritte in jeder Vorgehensweise. Das gilt auch für die Bearbeitung der Ausprägungen, die je nach Verwendungszweck variieren können. Abbildung 18 stellt den verallgemeinerten Arbeitsfluss dar. Die einzelnen Schritte lassen sich dabei folgendermaßen zusammenfassen: Erstellen eines neuen Dokumentes (häufig unter Berücksichtigung einer bestimmten Ausprägung) Hinzufügen von Informationen zu einem Dokument... zur Ergänzung der schon vorhandenen Ausprägung... zur Vorbereitung auf eine neue Ausprägung... zur Darstellungsabstimmung der einzelnen Ausprägungen Generierung verschiedener Ausprägungen Abbildung 18: Arbeitsablauf von der Erstellung eines Dokumentes bis zur Erzeugung mehrerer Ausprägungen

72 Anforderungen an die Dokumenteingabe Die Informationseingabe zur Erstellung des Quelldokumentes muss strukturiert erfolgen. Es müssen Angaben zu den Informationen eingegeben werden, die ihre Funktion innerhalb des Dokumentes beschreiben. Beispielsweise besteht die Eingabe einer Präsentation in erster Linie aus Titeln der einzelnen Folien und den dazugehörigen Stichwörtern. Daneben sollen natürlich auch andere Inhalte wie Grafiken oder Tabellen eingefügt werden können. Die Strukturierung der Daten findet in der Form statt, dass Zusammenhänge hinzugefügt werden müssen, die beschreiben, welche Folien zu einem Kapitel oder welche Stichwörter zu einem Titel gehören. Bei der Eingabe ist die Ausprägungsart zu beachten, die der Autor eingeben möchte. Beispielsweise ist die Gliederung nach Kapiteln zur Beschreibung eines Skriptes intuitiver, als bei der Eingabe einer Präsentation. Da aber diese Strukturen den Grundstock der Daten liefern, ist eine Unterstützung bei der Strukturierung besonders wichtig. Um die strukturierte Eingabe zu ermöglichen muss ein Editor Bedingungen und Anforderungen an die Struktur vorgeben und überprüfen können. Die Struktur der Daten kann den Anwender beispielsweise durch die Arbeitsabläufe bei der Dateneingabe leiten. Ein Quelldokument soll als Grundlage vieler Ausprägungen dienen. Damit werden die Inhalte auf verschiedene Arten dargestellt. Um das zu ermöglichen, muss dem Anwender eine andere Darstellung bei der Dokumenteingabe präsentiert werden, als es die Ausprägung später zeigt. Deshalb müssen Abhängigkeiten zwischen dem Quelldokument und der Ausprägung in dem Editor unterstützt werden. Ist beispielsweise die erste Ausprägung erzeugt, so sollte ein Mechanismus existieren, der es ermöglicht, dass der Autor die zu korrigierende Stelle in der Ausprägung markiert und an die passende Stelle in den Bearbeitungsmodus überführt wird. Das ist besonders wichtig, da standardmäßig bestimmte Daten nur in einigen Ausprägungen sichtbar sind. Im Bearbeitungsmodus kann der Autor dazu übergehen Anpassungen an den Ausprägungen vorzunehmen. So werden standardmäßig keine Grafiken mit in die Präsentation übernommen. Der Autor muss aber in die Lage versetzt werden, diese Einstellung für einzelne Grafiken zu ändern. Er kann einzelne Objekte auswählen und sie für weitere Ausprägungen darstellbar machen. Deshalb werden die Änderungen nicht in der Originalsicht sondern im Bearbeitungsmodus des Quelldokumentes erfolgen, da die Originalsicht hohe technische Fähigkeiten des Autoren voraussetzt und schnell unübersichtlich wird. Auch gegenüber der Ausprägungssicht hat der Bearbeitungsmodus Vorteile. Ein Einfügen innerhalb einer beliebigen Ausprägung hätte zur Folge, dass dort nicht verfügbare Daten, die allerdings im Quelldokument vorhanden sind, nicht nachträglich sichtbar gemacht werden könnten. Es würde also auf eine vielfältige Datensammlung der verschiedenen Ausprägungen hinauslaufen. Der Bearbeitungsmodus ist daher als spezielle Ansicht für den Editor wüschenswert, der allen Inhalten des Quelldokumentes eine bestimmte Darstellung zuweist und die Inhalte hervorhebt, die für die aktuell zu erstellende Ausprägung von Bedeutung sind. Die Ausprägungen sollten schon während der Bearbeitung als Ergebnisvorschlag zur Verfügung stehen.

73 Anforderungen an die Dokumentstruktur Die Erzeugung eines Dokumentes und seiner Ausprägungen ist nur mit Anwendungsunterstützung möglich. Daher muss die Dokumentgrundlage aus einer maschinenlesbaren Datenbeschreibung bestehen, die automatisch interpretiert werden kann. Der Informationsgehalt, der aus den Daten gezogen werden kann, ist abhängig von der Struktur des Dokumentes und den interpretierbaren Datenauszeichnungen. Erst durch die Struktur und die inhaltlichen Auszeichnungen wird eine automatisierte Verarbeitung der Inhalte möglich. Für das Datenformat bedeutet das, dass es nur vorgegebene Abhängigkeiten von Objekten erlauben darf, wodurch die Struktur der Daten reglementiert wird. Abhängig von der Dokumentstruktur sollen Standardausprägungen generiert werden. Diese können nur definiert werden, wenn die Struktur Aussagen über die Zusammenhänge liefert. Dazu müssen neben der Gruppierung der Informationen zu thematischen Blöcken auch inhaltliche Auszeichnungen gemacht werden können. So können beliebige Ausprägungen aufgrund der Dokumentstruktur und der inhaltlichen Auszeichnungen definiert werden. Um die Anpassung der Standardausprägung zu ermöglichen, muss das Dokument mit Zusatzinformationen versehen werden können, die die Generierung der Ausprägung beeinflussen. Dabei handelt es sich um Auszeichnungen, die Informationen markieren, die abweichend von der standardmäßigen Ausprägung aufgenommen oder weggelassen werden sollen. Beispielsweise sollen nicht alle Grafiken eines Skriptes auch in der Präsentation erscheinen, so dass einzelne Grafiken per Auszeichnung ausgewählt werden müssen. Das Quelldokument soll allerdings die Grundlage aller Ausprägungen bilden. Die zugrunde liegende Dokumentstruktur muss das unterstützen, indem sie unabhängig von den Ausprägungen ist. Aus diesem Grund müssen die Zusatzinformationen über alle Ausprägungen im Dokument festgehalten werden können. Das ermöglicht, dass die thematischen Inhalte für jede Ausprägung unterschiedlich verbunden werden können. Die Bearbeitung des Dokumentes erfolgt nicht in seiner Ausprägung. Um dennoch einen Rückschluss von der Ausprägung auf die ursprünglichen Inhalte des Quelldokumentes ziehen zu können, gibt es prinzipiell zwei Möglichkeiten: 1. Die Generierung der Ausprägung ist umkehrbar. 2. Die Elemente sind eindeutig identifizierbar. Im ersten Fall muss aus den Generierungsanweisungen der Ausprägung eine eindeutige Zuordnung zwischen Quelldokument und Ausprägung hervorgehen. Nur damit sind die zugrunde liegenden Daten des Quelldokumentes rekonstruierbar. Im zweiten Fall findet eine eindeutige Identifizierung der Daten in dem Quelldokument und abhängig davon in der Ausprägung statt. Die Daten lassen sich somit über ihre Identifizierung referenzieren.

74 68 Die Generierung diverser Ausprägungen und die Unterstützung unterschiedlicher Präsentationsmedien, stellt die Inhalte auf verschiedene Arten dar. Damit werden für eine Ausprägung unterschiedliche Formatierungen vorgenommen. Die Formatierungen sollen nicht im Dokument gespeichert werden. Alle Angaben bezüglich des Layouts werden bei der Generierung der Ausprägungen vorgenommen. Das Dokument umfasst somit nur die inhaltlichen Informationen inklusive der Zusatzinformationen. Die grafische Gestaltung liegt damit nicht beim Autor, sondern in dem späteren Generierungsprozess. Damit wird erreicht, dass der Autor das Dokument lediglich inhaltlich befüllen muss. Zum Ausschöpfen der Vorteile, die die Unterstützung verschiedener Präsentationsmedien bietet, sollen in dem Dokument auch unterschiedliche Medien, beispielsweise Film, Grafiken und Ton, integriert werden können. Ob das Format der Medien auf einem bestimmten Präsentationsmedium abbildbar ist, muss die Generierung der Ausprägung berücksichtigen. Es kann beispielsweise kein Film auf Papier dargestellt werden. Die erforderlichen Informationen, die für die Anpassung der Ausprägung an ein ausgewähltes Präsentationsmedium benötigt werden, sind in den Dokumentdaten zu verankern. Für den Einsatz im Lehrmittelbereich muss das Dokument neben dem üblichen Zeichensatz auch verschiedene Fachspezifika beherrschen. Beispielsweise reicht der Standardzeichensatz zur Beschreibung mathematischer oder chemischer Formeln ebenso wenig aus, wie zur Darstellung von Musiknoten. In welcher Form die Dateien gespeichert und verwaltet werden, ist in dieser Betrachtung vernachlässigt worden, da es für die Grundlage des Aufbaus der Daten und ihrer weiteren Verarbeitung keine Rolle spielt. Allerdings soll die Unterstützung von verteilten Dateien in der Dokumentstruktur berücksichtigt werden. 6.5 Anforderungen an die Ausprägungen Eine Ausprägung muss aus den Dokumentdaten generiert werden können. Es werden also abhängig von der Dokumentstruktur Regeln definiert, welche Inhalte für die Ausprägung von Bedeutung sind. Diese Regeln müssen unabhängig vom thematischen Inhalt nur durch die Struktur und Zusatzinformationen beschreibbar sein. Damit wird garantiert, dass sie auf alle Quelldokumente angewendet werden können. Zur Definition einer Ausprägung müssen Vorgaben gemacht werden, wie die Inhalte dargestellt werden sollen. Es werden im Folgenden zwei Arten von Ausprägungen näher betrachtet, die Präsentation und das Skript. Das Skript zeigt standardmäßig alle darstellbaren Inhalte an, die in dem Dokument eingegeben wurden. Die Präsentation beruht im Standard auf bestimmten Teilen des Quelldokumentes. Die Titel dienen als Folienüberschriften und markierte Schlüsselwörter als Listenpunkte der Folie. Diese beiden Annahmen stellen nur einen ersten Ansatz zur Erzeugung der Standardausprägungen dar, auf dem weiter aufgebaut werden kann, vgl. Kapitel 8.3. Dazu müssen die

75 69 Elemente anhand ihrer Zusatzinformationen überprüft und dementsprechend in eine Ausprägung übernommen werden. So lassen sich beispielsweise auch Grafiken oder Tabellen in eine Präsentation einfügen. Jede Ausprägung sollte als Standardausprägung generiert werden können. Das bedeutet, dass sie schon in Abhängigkeit der Struktur des Quelldokumentes eine erste Darstellung liefert. Das ist die einzige Möglichkeit ohne Zusatzangaben für die Ausprägung ein Ergebnis aus der Generierung zu bekommen. Die Erstellung einer Ausprägung für ein Präsentationsmedium, muss alle benötigten Layoutangaben den Dokumentdaten hinzufügen. Hinzu kommt die Entscheidung welche Medientypen eingebunden werden. In dem Generierungsschritt müssen desweiteren alle Angaben über die Navigation eingearbeitet werden. Beispielsweise sollte eine Präsentation immer nur in einer bestimmten Reihenfolge ablaufen. Ein Skript hat in der gedruckten Fassung ebenfalls eine sequentielle Reihenfolge, kann aber, wenn es am Computer publiziert wird, über Querverweise verfügen und bekommt damit eine vernetzte Darstellung. In erster Version sollte allerdings eine Standardnavigation erzeugt werden. Spätere Änderungen können durch ergänzende Möglichkeiten in der Ausprägungsgenerierung vorgenommen werden.

76 70 7 Dokumentstruktur Die Basis der Realisierung stellt die Konzeption der Struktur des Quelldokumentes dar. Die Struktur muss alle Informationen bereitstellen, die für die Generierung der Ausprägungen benötigt werden. Im Folgenden werden existierende Formate untersucht und anhand der im Konzept gestellten Anforderungen eigene Lösungsansätze vorgestellt. Diese Lösungsansätze stellen die grundsätzlichen Vorgaben für die Realisierung dar. 7.1 Existierende Datenformate Die bereits existierenden Formate zur Beschreibung von darzustellenden Inhalten unterteilen sich im wesentlichen in zwei unterschiedliche Kategorien. Zum einen in die reinen Textformate, die sich mit dem Schreiben von Büchern, Artikeln oder auch Online-Inhalten etc. beschäftigen. Zum anderen existieren seit neuerer Zeit auch strukturierte Formate zur Beschreibung von Lehrmaterialien, die sich im wesentlichen auf die inhaltliche Weiterverwendung und didaktische Modulbildung ausgerichtet haben Textbeschreibende Datenformate Textbeschreibende Datenformate haben sich auf die Art der Ausprägung konzentriert. Sie lassen in Abhängigkeit der zu erstellenden Ausprägung bestimmte Inhalte zu. So existieren in den meisten Formaten Standarddokumente, anhand denen die Struktur des Inhaltes vorgegeben wird. Beispielsweise setzt sich ein Buch aus verschiedenen Kapiteln zusammen, die aus einem Titel und dem eigentlichen Inhalt bestehen. Ein Artikel kann neben dem Titel hingegen beispielsweise nur kurze Textpassagen, denen weitere Einschränkungen zugrunde gelegt werden, enthalten. Diese Dokumente sind somit nicht ohne weiteres von einer Ausprägung in eine andere überführbar. Das gilt sowohl für etablierte Formate wie TeX, als auch für DocBook oder das proprietäre tbook. Desweiteren wird in diesen Formaten besonders die Beschreibung des Layouts in das Dokument mit aufgenommen. DocBook und tbook liegen beide als XML-basierte Formate vor, die zur Beschreibung von textuellen Dokumenten entstanden sind. DocBook ist ein von der Organization for the Advancement of Structured Information Standards (OASIS) veröffentlichter Standard [OASIS] zur Dokumentenbeschreibung, der ursprünglich in SGML verabschiedet wurde. Dieser Standard ist inzwischen auf XML übertragen worden. Als Grundlage dient eine DTD, ein Schema ist noch in Bearbeitung. Mit über 300 Elementen ist der Umfang sehr komplex und die Verschachtelung der Elemente sehr tief. Bei jeder Neueingabe eines Dokumentes wird die Auswahl der zu erstellenden Ausprägung, beispielsweise eines Buches oder Artikels, vorangestellt. tbook ist ein Format, das aus der Anforderung entstanden ist, TeX in XML nachzubilden [Brotbook]. Es existieren auch

77 71 bei tbook unterschiedliche Dokumente, die je nach Art der Ausprägung nicht zueinander kompatibel sind. Besondere Unterstützung wird bei tbook dem Layout gewidmet, das direkt in die Daten eingepflegt werden muss. Andere Formate, wie etwa Microsofts DOC-Format, erlauben sogar die Erstellung von Dokumenten, die keine strukturellen Angaben enthalten, sondern allein über Formatierungsanweisungen ihre endgültig dargestellte Struktur zugewiesen bekommen Datenformate zur Beschreibung von Lehrmaterialien Die Unterstützung zur Entwicklung von Lehrmitteln durch darauf ausgerichtete Formate ist noch relativ jung. Es hat sich noch kein eindeutiger Standard zur expliziten Beschreibung von Lehrmaterialien etabliert. Zur konzeptionellen Beschreibung von einzelnen Lerninhalten gibt es den vom Institute of Electrical and Electronics Engineers (IEEE) verabschiedeten Standard LOM. Für einige Realisierungen im Lehrmaterialien- Umfeld dient dieser Standard als Grundlage. Andere Standards aus dem ähnlichen Umfeld, wie beispielsweise Computer Based Training, werden im Folgenden nicht weiter betrachtet. Bei Learning Object Metadata (LOM) handelt es sich um einen Standard [LOM] zur konzeptionellen Beschreibung von Lerninhalten. Es werden die Informationen festgelegt, die zur Beschreibung von einzelnen Lernobjekten angegeben werden müssen. In den Standard sind Teile der Beschreibung aus dem Dublin-Core Projekt [Dublin] und Ariadne Projekt [Aria] eingeflossen. In Dublin Core wurde ein Standardvokabular zur Beschreibung von allgemeinen Ressourcen festgelegt, vgl. [Schö2001]. Der Bezug zu Lehrmaterialien wurde erst im Ariadne Projekt hergestellt. Dabei handelt es sich um ein Europäisches Projekt zur Erstellung eines Knowledge Pool Systems, in dem mit Metadaten versehene Lernobjekte verteilt verwaltet und wiederverwendet werden können [Duval]. Einen weiteren Einfluss hatte das Instructional Management System Projekt [IMS]. Dabei handelt es sich um ein US-Projekt, das sich mit der gleichen Thematik zur Beschreibung von Lernobjekten beschäftigt hat und viele Mitarbeiter, die an der Entwicklung von LOM teilgenommen haben, beinhaltete. Mit LOM wurde die Beschreibung der Informationen, die zu einem Lernobjekt gehören, festgeschrieben. Dabei kann sich diese Beschreibung sowohl auf digitale wie auch auf nicht digitale Lehrmaterialien stützen. Die Beschreibungen, die für ein einzelnes Lernobjekt vorgenommen werden können, werden in neun unterschiedlichen Kategorien ( wie generelle, geschichtliche, technische und rechtliche Angaben) durch weitere Eigenschaften verfeinert. Damit lassen sich zu jedem Objekt über 40 Eigenschaften beschreiben. Es gehören zur Kategorie generelle Angaben beispielsweise Titel, Sprache und Beschreibung. Da es sich bei LOM um ein hierachisches Modell handelt, werden auch Verweise zu anderen Lernobjekten als Relation in die Beschreibung des Objektes eingebettet. Die verschiedenen Kategorien werden in [Duval] in einer Grafik veranschaulicht.

78 72 Es werden in LOM nur die Informationen standardisiert, die ein Lernobjekt besitzt. Dazu zählen nicht die Sprache oder Kodierung, in der diese Informationen gespeichert werden. Damit ist es möglich den Standard in unterschiedlichen Sprachen umzusetzen. Desweiteren lässt "[...] die derzeitige Spezifikation von Metadaten durch LOM keine adäquate Repräsentation von didaktischen Konzepten [...]" [Ade2000] zu. Mit LOM werden demnach nur die zugrunde liegenden "Bausteine" spezifiziert. Die Bausteine können verwendet werden, um darauf ein semantisches Modell aufzubauen. So werden Lehrmaterialien aus verschiedenen Lernobjekten zusammengestellt, die nur im Zusammenhang einen sinnvollen Lehrgehalt bekommen. Da auf dieser Ebene der Beschreibung von Lehrmaterialien verschiedene Sprachen entwickelt, aber noch keine standardisiert wurde, hat das CEN/ISSS (European Committee for Standardization / Information Society Standardization System) den Vergleich Survey of Educational Modelling Languages (EMLs) [CEN2002] durchgeführt. Als EML wird in den Vergleich eine Sprache aufgefasst, die aus der pädagogischen Perspektive mit semantischen Informationen und Zusammenhängen Inhalte und Prozesse von Lerninhalten beschreibt. In dem Vergleich werden sechs verschiedene Sprachen gegenübergestellt, von denen alle in XML oder SGML beschrieben wurden. Zwei der untersuchten Sprachen benutzen LOM-Objekte und eine dritte Sprache ermöglicht über Erweiterungen die Integration von LOM. Alle Sprachen sind mit besonderer Rücksicht auf die Wiederverwendbarkeit ihrer beschriebenen Inhalte entwickelt worden. Dennoch sind sie alle prinzipiell sehr verschieden und Übereinstimmungen der Sprachen müssen noch weiter untersucht werden. Nur zwei der sechs Sprachen erfüllen wirklich die Forderung nach der Integration pädagogischer Methoden. Daraus ist OUNL-EML [OUNL] von der Open University of the Netherlands als einzige Sprache hervorgegangen, die vielen internationalen Standards gerecht wird und für eine mögliche Standardisierung in Frage kommen könnte. Eine Besonderheit kommt noch der Learning Material Markup Language [LMML] zu, die als einzige auch die Integration mehrerer XML-basierter Sprachen wie MathML und SMIL erlaubt. Es wird allerdings in naher Zukunft keine standardisierte Sprache zur Beschreibung von Lehrmaterialien geben Bewertung der Datenformate Die verschiedenen Datenformate haben in ihrem Einsatz unterschiedliche Vorzüge. Die textbeschreibenden sind sehr intuitiv und bilden jeweils eine Ausprägung gut ab. Allerdings sind sie nicht als Grundlage eines Dokumentes für verschiedene Ausprägungen geeignet und erfüllen nicht die Anforderungen an die Trennung von Content und Layout. Die Sprachen zur Beschreibung von Lehrmaterialien sind sehr unterschiedlich aufgebaut. Sie liefern unterschiedliche Ansätze zur Beschreibung von Lehrinhalten. Sie

79 73 sind alle tief strukturiert, weshalb sie wesentliche Informationen für unterschiedliche Ausprägungen bereitstellen. Für die Erstellung von Dokumenten und zur Generierung von Ausprägungen für unterschiedliche Adressatenkreise lässt nur OUNL-EML verschiedene Instanziierungen der gleichen Ausprägung zu. Allerdings ist die Integration von fachlichem Material anderer XML-Anwendungen nur in LMML möglich. Neben einem fehlenden Standard sind desweiteren in diesen Strukturen keine Zusatzinformationen integriert, die für die Anpassung der Ausprägungen benötigt werden. Für die weitere Umsetzung wird eine eigene Dokumentstruktur entwickelt, die verschiedene Aspekte der anderen Sprachen zusammenfügt und eigene Aspekte integriert. Die Strukturierung der Informationen und semantischen Auszeichnungen stellt einen ersten Aspekt dar. Mit Hinblick auf die Erstellung der Dokumente liefert die einfache Eingabe von textuellen Daten in einer fortlaufenden Struktur einen weiteren Gesichtspunkt. Als letztes fließen die ausprägungsrelevanten Informationen in die Dokumentstruktur ein. 7.2 Beschreibung inklusive Ausprägungskriterien Aus den Anforderungen an die Dokumentstruktur soll im Folgenden im Vergleich zu den existierenden Formaten die realisierte Dokumentstruktur beschrieben werden. Grundlage für die Realisierung bilden die Beschreibungen der Lehrmaterialien. Dazu liegen verschiedene Möglichkeiten vor, wie die Informationen strukturiert werden, vgl. Abbildung 19. Resultiert die Struktur aus den Eigenschaften der verwendeten Inhalte, so spricht man von semantischen Objekten. Beispielsweise ergibt sich aus einer Definition der Bezug zwischen dem Fachausdruck und seiner Erläuterung. Lassen sich die Strukturen durch Schachtelungen von Inhalten abbilden, so werden diese im Folgenden als strukturelle Objekte bezeichnet. Zum Beispiel kann ein Kapitel weitere Unterkapitel enthalten, die ihrerseits weitere Abschnitte enthalten. Auf diese Art lassen sich inhaltliche Abhängigkeiten zwischen den Elementen modellieren. Objekte zur Beschreibung von Darstellungsstrukturen, wie zum Beispiel Listen und Tabellen, bilden eine letzte Form der strukturbildenden Daten. Lehrstoff Darstellungs Strukturen Strukturelle Objekte Semantische Objekte Tabelle Liste Kapitel Abschnitte Definition Beispiel Abbildung 19: Allgemeine Datenstruktur

80 74 Gefüllt werden die verschiedenen zur Verfügung stehenden Objekte mit elementaren Einheiten. Dazu gehören Text, Grafiken oder Multimedia-Objekte, wie beispielsweise Filmen, Ton oder Applets. Texte sind die einfachste Einheit, die jedes Präsentationsmedium akzeptieren muss. Für Grafiken ist das nicht immer der Fall, beispielsweise kann es bei Online-Inhalten vorkommen, dass der Browser keine Grafiken darstellt. Daher muss für Grafiken die Angabe von Alternativtext ermöglicht werden. Für multimediale Objekte müssen ebenfalls Regeln definiert werden, wie sie auf den einzelnen Präsentationsmedien zu behandeln sind. Dem Inhalt ist zu entnehmen, ob sie übersprungen oder alternativ behandelt werden, wenn sie von dem Präsentationsmedium nicht dargestellt werden können. Für nicht druckbare Inhalte, wie beispielsweise Filme, existieren deshalb zusätzliche Angaben, wie beschreibende Texte oder Grafiken, die Alternativen zu dem Objekt erlauben Semantische Objekte Die semantischen Auszeichnungen stellen die wesentlichen Informationsobjekte dar. Sie beschreiben exakt, welche Informationen sie kapseln. Mit welchen Elementareinheiten sie dies erreichen, ist nicht von Bedeutung. Dazu gehören auf oberer Ebene genauso Definitionen, bestehend aus dem zu erläuternden Term und einer Erklärung, wie auch Beispiele, denen keine weitere Unterteilung zugrunde liegen muss. Auf tieferer Ebene von semantischen Objekten befinden sich Schlüsselwörter. Sie können benutzt werden um den Inhalt eines einfachen Textes anhand dieser Wörter knapp und präzise wiederzugeben. Um verschiedene Gewichtungen der Textinhalte zu ermöglichen, lassen sich neben den Schlüsselwörtern auf dieser Ebene auch einzelne Objekte markieren. In einer gedruckten Ausprägung könnte sich diese Markierung durch eine andere Darstellung erkennen lassen. Eine weitere Art von semantischen Objekten sind Zitate. Sie können durch ihre Verbindung zu verschiedenen Literaturangaben zur Einordnung des Dokumentes in Bezug zu anderen Dolumenten benutzt werden Strukturelle Objekte Strukturen, die über die Verschachtelung von Objekten entstehen, sind wohl die gebräuchigsten. So werden textuelle Informationen immer mit einem Titel überschrieben und je nach Umfang in verschiedene Kapitel oder auch nur einzelne Absätze aufgeteilt. Ein Kapitel besteht wiederum aus einem Titel, einer optionalen Beschreibung und dem eigentlichen Inhalt, vgl. Abbildung 20. Dieser Inhalt setzt sich aus den semantischen Objekten der oberen Ebene, strukturellen Objeken, sowie den Darstellungsstrukturen zusammen. Desweiteren können auch direkt Grafiken und multimediale Objekte ein-

81 75 gebunden werden, da der Informationsgehalt dieser Objekte variieren kann. So kann beispielsweise in einem Film die ganze Thematik eines Kapitels enthalten sein. Abbildung 20: Struktur eines Kapitels Durch die Baumstruktur ergibt sich eine immer detaillierter werdende inhaltliche Beschreibung eines Themas. Als weiteres Strukturobjekt spielen dabei die Absätze eine wichtige Rolle. Absätze können neben textuellen Inhalten auch verschiedenste Elemente enthalten. Dazu gehören bis auf die Kapitel selber alle Objekte, die in dem Inhalt eines Kapitels auftreten können, ergänzt um die semantischen Objekte unterer Ebenen. Desweiteren lassen sich auch alle Elementareinheiten einschließlich ihrer Erweiterungen in die Absätze integrieren. Absätze besitzen somit wenig Restriktionen gegenüber ihrem Inhalt. Das ist besonders wichtig, da sie neben dem Einfügen von Text auch zur Gruppierung von Inhalten dienen. Damit lassen sich zusammengehörige Teile des Inhaltes eines Kapitels auszeichnen Darstellungsstrukturen Bei der Verwendung von grafischen Auszeichnungen vermischt sich der Strukturierungsanspruch mit dem grafischen Layout. Eine Unterscheidung, welche Angaben zur grafischen Gestaltung und welche noch zur Strukturbildung gehören, lässt sich hier oft nicht eindeutig festlegen. Beispielsweise stellt eine Tabelle strukturierte Informationen dar, dient aber auch der grafischen Gestaltung der Inhalte. Um das Prinzip der Trennung von Content und Layout aufrecht zu erhalten, besitzen Tabellen daher keine Eigenschaften zur gestalterischen Definition. Sie bestehen einfach aus einem optionalen Tabellenkopf und einer beliebigen Anzahl Zeilen. Beide, sowohl Tabellenkopf als auch Zeile, sind Reihenfolgen von einzelnen Zellen, die die eigentlichen Inhalte beinhalten. Listen sind im wesentlichen ähnlich zu Tabellenzeilen, da sie aus einer Reihe von Einträgen bestehen. Da auch die Angabe, ob es sich um eine nummerierte Liste oder punktuelle Aufzählung handelt, von inhaltlicher Bedeutung sein kann, wird diese Angabe hinzugefügt.

82 Erweiterungen elementarer Einheiten Einfache Texte sind die wichtigste Form elementarer Einheiten. Sie können aber neben den inhaltlichen Informationen auch besondere Auszeichnungen zu den Daten enthalten. So werden beispielsweise mit Links keine Strukturen, Semantiken oder Darstellungsstrukturen beschrieben, sondern nur Texte mit bestimmten Eigenschaften. Hier mit der Eigenschaft, dass es sich um einen Verweis handelt. Es handelt sich um Erweiterungen auf der elementaren Einheit Text. Sie können damit in fast allen Objekten auftreten, in denen auch Text benutzt wird. Eine Ausnahme bildet beispielsweise der Text selber, der den Verweis beschreibt. Die gleichen Aussagen gelten auch für Fußnoten. Zur direkten Unterstützung von fachspezifischen Sprachen, müssen diese ebenfalls direkt in die Texte eingebunden werden können. Das heißt, sie müssen in dem Format integriert werden, in dem sie ihre eigene Struktur beibehalten können. In vielen Darstellungen werden beispielsweise mathematische Formeln als Grafiken eingebunden. Dabei gehen wichtige Informationen über den Inhalt verloren, da Grafiken nicht im nachhinein wieder ihren Inhalt in beschreibender Sprache vermitteln können. Das ist für eine gedruckte Ausgabe unwesentlich, aber zur Unterstützung anderer Präsentationsmedien (z.b. Computer) oder nachträglicher Änderungen spielt es eine wichtige Rolle. So lassen sich nur korrekt beschriebene Daten weiterverarbeiten und beispielsweise in eine Sprachausgabe für Blinde umformen. Deshalb werden mathematische Objekte direkt in alle Texte integriert Zusatzinformationen für die Ausprägungen Desweiteren müssen noch Zusatzinformationen für die unterschiedlichen Ausprägungen hinzugefügt werden. Diese Zusatzinformationen sollen einzelne Datenobjekte für einzelne Ausprägungen freischalten oder sperren. Dabei muss beachtet werden, dass sie für unterschiedliche Ausprägungen verschiedene Inhalte besitzen können. Aus diesem Grund wird für jede Ausprägung eine Standardinformation zu den betrachteten Objekten hinzugefügt. Um Anpassungen an den Ausprägungen zu machen, lassen sich nun einzelne Objekte markieren. Das geschieht indem das Element mit einer weiteren Eigenschaft versehen wird, die für die jeweilige Ausprägung die Abweichungen vom Standard kenntlich macht. Damit lässt sich jede neue Instanz der Ausprägung auf der Basis der Standardausprägung aufbauen. 7.3 Realisierungsvorgaben Zur Beschreibung von Daten, die mit zusätzlichen Informationen bestückt und anhand von Kriterien strukturiert werden sollen, eignet sich eine Metasprache wie XML. In der derzeitigen Entwicklung derartiger Thematiken (DocBook, tbook, LMML, etc.) wird ebenfalls häufig XML zur Umsetzung verwendet. Auch fachspezifische Daten

83 77 können in XML beschrieben werden. Beispiele hierfür sind MathML für mathematische Daten, CML für chemische Daten und verschiedene XML-Anwendungen zur Beschreibung von Musiknoten. Durch die Bestrebungen viele Fachsprachen in XML auszudrücken, wird in Zukunft die Integration weiterer Formate wesentlich erleichtert. Auch die Ausgabe von XML-Daten wird in unterschiedlichen XML-Anwendungen behandelt und auf verschiedenen Medien erprobt. Da eine Umwandlung von einer XML-Anwendung in eine andere mit einer XSL-Transformation vorgenommen werden kann, vgl. Kapitel 3. XHTML dient beispielsweise der statischen Darstellung und SVG der animierten und interaktiven Darstellung am Computer. XSL-FO und die darauf angesetzten Formatierer ermöglichen die Erstellung von druckbaren Erzeugnissen. Somit sind beim Einsatz von XML die besten Voraussetzungen zur Unterstützung vieler Präsentationsmedien gegeben. Die Möglichkeiten der unterschiedlichen XML-Anwendungen, die eingesetzt werden, sind vielfältig und durch die gemeinsame Grundsprache XML leicht verknüpfbar. Ebenso wird durch den hohen Verbreitungsgrad von XML, der sich auch durch eine breite Unterstützung bei den Ausgabegeräten wiederspiegelt, ein grosses Einsatzgebiet abgedeckt. In Anbetracht der Aktualität der Entwicklung liegt es nahe XML Schema anstatt einer DTD zur Beschreibung der Dokumentstruktur einzusetzen. XML Schema liefert besondere Vorteile, die für die weitere Entwicklung von Bedeutung sind. So können in XML Schema Dokumentationsmöglichkeiten verwendet werden, die ein Editor zur Beschreibung der Elemente oder Attribute verwenden kann. Damit kann dem Autor eine gute Unterstützung bei der Bearbeitung von Dokumenten gegeben werden. Zu weiteren Vorteilen von XML Schema gegenüber DTD s vgl. Kapitel 2.2. Da XML-Dateien nicht binär kodiert sind, sondern für jeden Menschen lesbar vorliegen, sind sie mit jedem Editor zu bearbeiten. Daher können die Dokumente in dem Fall, dass der Editor die geforderten Ansprüche noch nicht unterstützt, auch mit einfachen Editoren erstellt werden.

84 78 8 Realisierung Aufbauend auf dem allgemeinen Konzept in Kapitel 6 und der daraus in Kapitel 7 abgeleiteten Dokumentstruktur soll im Folgenden die Umsetzung der vorangegangenen Anforderungen erläutert werden. Dazu werden zunächst die existierenden Möglichkeiten zur Dateneingabe beleuchtet und im Anschluss wird die weitere Implementation dargestellt. Dabei werden die gestellten Forderungen an die Dokumentstruktur mittels XML Schema umgesetzt und durch XSLT in verschiedene Ausprägungen und Formate überführt. 8.1 Dateneingabe Da XML bereits weit verbreitet ist, ist die Unterstützung mit Programmen zur Dateneingabe von XML-Anwendungen schon vielfach gegeben. Aber aufgrund der Aktualität der Entwicklung muss auf Komfort und Einfachheit noch weitestgehend verzichtet werden. Da es sich bei XML um einen offiziellen Standard handelt, muss aber keine Produktbindung auf Dauer erfolgen. Die Auswahl der Programme kann somit nach eigenem Ermessen und abhängig von der zukünftigen Entwicklung erfolgen. Im Folgenden soll der Funktionsumfang zu einigen aktuellen Programmen aufgelistet werden. XMLSpy ist ein kommerzielles und kostenpflichtiges Anwendungsprogramm von Altova zur Bearbeitung von XML, das besonders für Techniker geeignet ist. Es werden sowohl DTD als auch XML Schema unterstützt, allerdings werden diese nicht automatisch während der Eingabe validiert. Für die Dateneingabe wurde dazu Authentic entwickelt, das durch eine einfache Eingabe in Formularform für Laien geeignet ist. Allerdings beruht die Eingabemaske auf einem eigenen Datenformat, das nur dann zu erstellen ist, wenn die Transformationen mit dem dazugehörenden Stylesheet Designer erzeugt wurden. Externe XSL Transformationen können nicht integriert werden und es können nicht alle Elementtypen wie beispielsweise mixed-content Modelle, eingefügt werden. Desweiteren treten in dem integrierten Schemavalidator noch einige Fehler in der Validierung der Elemente auf. So werden gemixte Elemente bestehend aus Text und weiteren Elementen ebenso wie die Struktur von ineinander geschachtelten Elementen in speziellen Fällen falsch validiert, getestet in Version 5 Release 3. Auch automatisch generierte Beispieldateien zu einem Schema sind nicht gültig. XMetal kann als Testversion von Corel bezogen werden. Ansonsten ist auch XMetal ein kommerzielles und kostenpflichtiges Tool, aktuell in der Version 4 verfügbar, das zuvor von SoftQuad entwickelt wurde und von Corel aufgekauft wurde. XMetal ist speziell für die Eingabe und Transformation von SGML, XML und XHTML Dokumenten geeignet. Dementsprechend bietet es neben der reinen Code-Ansicht auch die Möglichkeit das Dokument in einer grafischen Ansicht

85 79 durch eigene definierte Darstellungen der einzelnen Elemente oder in der Tag- Ansicht mit einem Verschachtelungsbaum anzusehen. Auch eine Preview des resultierenden Dokumentes ist möglich. Die Unterstützung von XML Schema ist allerdings noch ein wenig lückenhaft, so werden beispielsweise in der getesteten Version 3 keine importierten Schemata unterstützt. Epic ist ein kommerzieller und kostenpflichtiger Editor von Arbortext, der über weit mehr Funktionen als die reine Dokumenteingabe verfügt. Er ist bereits früher zur Eingabe von SGML-Dokumenten entstanden und daher sehr komfortabel. Leider konnte dieser Editor nicht umfangreich getestet werden, da dieser nicht als Testversion mit Schemaunterstützung zur Verfügung steht. Die meisten Editoren scheitern an der einfachen Benutzung. Es werden neben der farbig markierten Darstellung als XML-Dokument häufig nur baumartige Darstellungen ermöglicht. Zwar lässt sich diese Ansicht in vielen Fällen durch verschiedene Formatierungsanweisungen anpassen, aber zur einfachen Benutzung durch den Laien fehlen noch weitere Unterstützungen. Einige unterstützen dabei verschiedene XML- Anwendungen in der Darstellung, wie XHTML oder XSL-FO. Für einen breiten Einsatz, der auch Laien die Möglichkeit der Dokumenteingabe ermöglichen soll, sollten die Editoren noch weiter entwickelt werden. Eine weitere Möglichkeit zum besseren Verständnis der Elemente bei der Dateneingabe liefern die Dokumentationen. Zur Beschreibung der Elemente des XML Schemas werden diese benutzt, damit sie dem Anwender die Bedeutung der Elemente aufzeigen können. Durch den Einsatz in Editoren, die eine Auswertung der Dokumentation vornehmen, lässt sich die Benutzbarkeit für den Endanwender beispielsweise durch ToolTip-Texte erleichtern. Derartige Unterstützungen werden in den aktuellen Programmen noch nicht angeboten. Die Darstellung des Dokumentes bei der Dateneingabe ist jedoch nicht das einzige Problem. XMetal oder Epic sind bereits als SGML-Editoren entstanden und daher sehr gut auf DTD s angepasst. XML Schema ist im Vergleich dazu noch sehr neu und seine Unterstützung ist nicht vollständig oder fehlerfrei gegeben. Daher können zum Test, ob ein Dokument dem gegebenen Schema auch entspricht, verschiedene Validatoren eingesetzt werden. Dazu werden XML-Parser beauftragt ein Dokument einzulesen und anhand der Fehlermeldungen des Parsers ist die Gültigkeit des XML-Dokumentes abzulesen. XSV ist ein vom W3C genutzter XML Schema Validator, der vom W3C zum Download als Kommandozeilenprogramm oder als online-anwendung frei zur Verfügung gestellt wird. Er wird kontinuierlich weiterentwickelt und hält sich relativ genau an den Standard. Dennoch sind einige kleine Fehler bei Spezialfällen des Standards enthalten. Beispielsweise akzeptiert er Gruppen mit all-umgebung, die als optional deklariert ist.

86 80 Schematron Validator von Topologi ist eigentlich für die Validierung von Schematron, einem anderen regelbasierenden Schema zur Beschreibung von XML-Dateien, entstanden. Er beherrscht aber auch XML Schema und ist über eine kleine Oberfläche zur Auswahl der zu validierenden Dateien zu steuern. Er scheitert allerdings an verteilten XML Schemata. Xerces-J ist ein javabasierender XML-Parser aus dem Apache Projekt. Er ist frei verfügbar und in eigene Implementierungen zu integrieren. Über mitgelieferte Beispielprogramme lässt sich als Nebeneffekt auch der benutzte Parser einstellen. Damit kann der Parser angewiesen werden, auch das XML Schema, auf dem das einzulesende Dokument basiert, zu validieren. Von den getesteten Validatoren, ob integriert in einen Editor oder alleinstehend, ist dieser der exakteste gewesen. Eine umfassende Liste von Anwendungen, die XML Schema benutzen und prüfen, ist unter [W3CXSD] zu finden. 8.2 Datenformat in XML Schema Die in Kapitel 7.2 beschriebende Dokumentstruktur wird in XML Schema umgesetzt. Dazu werden zunächst die Elemente beschrieben, die dazu notwendig sind. Anschließend werden diese Elemente zueinander in Beziehung gebracht. Die weiteren Voraussetzungen für die späteren Ausprägungen werden dann im Anschluß hinzugefügt Elemente Die Festlegung der Elemente, die in dem Dokument benutzt werden können, erfolgt in bestimmten Gruppen. Die Gruppen dienen der Strukturierung und der Wiederbenutzbarkeit der Elemente. Sie sind in dem erzeugten Dokument nicht sichtbar. Auf unterster Ebene innerhalb von textuellen Inhalten stehen die text.elements. Sie können überall dort eingesetzt werden, wo einfacher Text benutzt werden soll. Sie unterteilen sich weiter in drei Gruppen: text.inline.elements sind alle Elemente, die innerhalb eines Textes auftauchen können und weitere Angaben zu ihrem Inhalt machen. Dazu gehören Fussnoten footnote, Links link und Zitate citation. text.marker.elements sind semantische Auszeichner für Wörter oder Textpassagen. Mit ihnen können innerhalb des Textes Worte gewichtet werden. Ein Schlüsselwort keyword ist dabei sehr eng an die Bedeutung des gesamten Textes gelehnt. Zur gewichteten Bewertung von Textpassagen oder Wörtern wurden weitere Abstufungen festgelegt. So wird ein neu verwendeter Ausdruck, der allerdings nicht den Charakter einer neuen Definition besitzt, mit newterm

87 81 bezeichnet. Er bestimmt eine aus dem Zusammenhang hervorgehende Textpassage. Auf Definitionen wird später noch eingegangen. Das marker-element ist im Unterschied zu einem Schlüsselwort eine mögliche Auszeichnung um die Wichtigkeit einer Textpassage zu markieren. def.math ist eine reine Definitionsgruppe. Mit ihrer Hilfe wird ein math- Element eingefügt, das alle Inhalte von MathML enthalten kann. Auf MathML wird in Kapitel näher eingegangen. Wie beliebige Elemente aus anderen Namensräumen, hier aus MathML, in dieses Element eingefügt werden können, wird im Code-Beispiel 1 dargestellt. Code-Beispiel 1: Das Einfügen aller beliebigen Elemente aus dem Namensraum von MathML wird mit dem xs:any-element und der Angabe des Namensraumes für MathML erreicht. Durch die Angabe der Bearbeitungsart strict, lax oder skip im processcontents-attribut wird festgelegt, ob eine Validierung zwingend, eventuell oder gar nicht stattfinden soll. In diesem Beispiel wurde die Art lax gewählt, da damit der Prozessor angewiesen wird nach einer Definition für die eingefügten Elemente zu suchen, um sie zu validieren. Sollte die Suche erfolglos bleiben, so wird keine Validierung vorgenommen, aber dennoch kann das restliche Dokument weiter behandelt werden und es wird kein Fehler gemeldet. Da die Unterstützung von MathML vielfach noch nicht gegeben ist, kann für derartige Formate eine Ersatzgrafik verwendet werden. <xs:element name="math"> <xs:complextype> <xs:sequence> <xs:any namespace=" processcontents="lax" minoccurs="0" maxoccurs="unbounded"/> <xs:group ref="def.graphic" minoccurs="0"/> </xs:sequence> </xs:complextype> </xs:element> Neben den Gruppen existiert auch noch ein code-element, das vergleichbar zu MathML die Position einer "Fachsprache der Informatik" einnimmt. Innerhalb dieses Elementes wird nur Text xs:string eingegeben, weshalb Leerzeichen, Tabulator-Einrücker und Zeilenumbrüche erhalten bleiben. Damit lassen sich Code-Auszüge in die Texte integrieren. Eine weitere Möglichkeit liefert noch die Angabe einer Datei mittels des filelocation-attributes. Der Inhalt des code-elementes wird vernachlässigt und die angegebene Datei an seiner Stelle in das Dokument integriert.

88 82 Aufbauend auf dem Text werden folgende Gruppierungen für die verschiedenen Elemente vorgenommen: content.text.structure.elements fasst alle Elemente zusammen, die die Inhalte durch Darstellungsstrukturen beschreiben. Tabellen table liefern über die Struktur anhand von zwei Kriterien den größten Informationsgewinn. Listen list strukturieren hingegen nur anhand eines Kriteriums. content.text.semantic.elements ist die Gruppe für alle Elemente mit rein semantischer Inhaltsauszeichnung. So sagen Beispiele example oder Definitionen definition nichts über die Form des Inhaltes aus. In Beispielen können etwa Texte, Tabellen, Listen und Grafiken gekapselt werden. Definitionen sind dagegen weiter in den zu definierenden Term, der nur textuelle Inhalte oder mathematische Zeichen besitzen darf, und die eigentliche Erläuterung dazu aufgeteilt. content.text.media.elements beinhaltet alle Elemente, die zur Integration verschiedener Medien benötigt werden. Dazu gehören beispielsweise Grafiken graphic, Applets applet und weitere externe Objekte object. Diese gesamten Elemente dienen zur Beschreibung des Inhaltes der einzelnen Kapitel chapter. Ein Kapitel besteht aus einem Titel title, einem optionalen Ersetzungstitel substitutetitle, einer optionalen Zusammenfassung abstract und dem Inhalt content. Ein Titel besteht aus reinem Text ergänzt um Textelemente und ist damit wie eine Zusammenfassung, die nur textuelle Inhalte über das Kapitel liefert, vom gemixten Typ elementtext. Das gleiche gilt auch für den Ersetzungstitel, auf den in Kapitel näher eingegangen wird. In Abbildung 21 sind die Elemente eines Kapitels dargestellt. Das chapter- und das content-element sind komplexe Typen, die nur Elemente beinhalten. Eine weitere wichtige Strukturierung kann mittels Absätzen para vorgenommen werden. Sie bilden zum einen Textbausteine, die alle textauszeichnenden Elemente enthalten und zum anderen die strukturellen, semantischen oder Multimedia-Objeke. Damit lassen sich Inhalte gruppieren, was für die Generierung der Ausprägungen von Bedeutung ist. Das gesamte Dokument lecture ist prinzipiell nichts anderes als ein Kapitel mit Unterkapiteln. Allerdings kommen noch einige allgemeine Informationen hinzu, die festgelegt werden müssen. Zu den allgemeinen Informationen eines Dokumentes zählen zwingend die Autoren author, zusammengefasst in dem Element authorship. Desweiteren können noch ein Untertitel subtitle und ein Datum date hinzugefügt werden. Zum Einfügen von Inhalt-, Grafik- und Tabellenverzeichnissen, wie auch dem Glossar stehen jeweils die entsprechenden Elemente zur Verfügung. Diese sind nicht weiter von Bedeutung, da ihre Inhalte automatisch aus den dazugehörigen Elementen erstellt werden können. Die Elemente funktionieren damit als reine Markierungen,

89 83 Abbildung 21: Definition des Kapitels - Grafische Ausgabe in XMLSpy die angeben ob ein Verzeichnis erstellt werden soll. Das Literaturverzeichnis funktioniert prinzipiell gleich, doch müssen die im Text eingefügten Verweise noch mit ihren Quellen in Verbindung gebracht werden. Dazu können verschiedene Einträge in dem Literaturverzeichnis gemacht werden, die den Verweisen zugeordnet werden. Um die Quellenangaben für mehrere Dokumente nutzen zu können, lässt sich das Literaturverzeichnis in eine eigene Datei schreiben und in dem bibliography-element über das filelocation-attribut einfügen. Dieses Attribut steht für unterschiedliche Elemente zur Verfügung, beispielsweise das oben erwähnte code-element, denen es dadurch ermöglicht werden soll auch externe Dateien zu integrieren. Diese Dateien müssen natürlich auch nach dem Schema gültig sein. Nur das code-element und das math-element bilden hierbei eine Ausnahme, da es sich beim Code nicht um ein XML-Dokument handeln muss und die mathematischen Formeln in einem externen Namensraum geschrieben wurden. Das lecture-element verfügt neben diesen Angaben auch noch über ein Sprach- Attribut language, mit dem die Sprache für das gesamte Dokument festgelegt wird. Es handelt sich dabei um eine Pflichtangabe, was durch die folgende Definition festgelegt wurde: <xs:attribute name="language" type="xs:language" use="required"/> Damit sind die wesentlichen Elemente des Quelldokumentes beschrieben. Die Struktur der Elemente und ihre Abhängigkeiten werden im folgenden Kapitel beschrieben.

90 Beziehungen der Elemente Da an allen Stellen, an denen Text eingefügt werden darf, dieser auch weitere Elemente enthalten kann, wurden abhängig davon verschiedene Datentypen eingeführt. Ein Beispiel ist der Datentyp elementtext, der als "mixed"-typ definiert ist und damit neben Text auch die Elemente der Gruppe text.elements in beliebiger Häufigkeit und Reihenfolge enthalten kann. Der Datentyp elementcodetext ist quasi der gleiche Datentyp wie elementtext nur erweitert um das code-element. Abbildung 22 stellt diese Gruppen und Datentypen im Zusammenhang dar. Deweiteren gibt es noch den Datentyp markedtext, der auf die gleiche Weise alle Markierungselemente integriert, und mathtext, in dem neben Text noch mathematische Elemente auftreten dürfen. Abbildung 22: Zusammenhang der Textgruppen und die darauf basierenden Datentypen Die Elemente der Gruppe text.elements dürfen auch geschachtelt werden. Damit wird es möglich in einer Fußnote einen Link oder in einem Schlüsselwort ein mathematisches Element zu benutzen. Da XML Schema keine Möglichkeit zur Überprüfung von Bedingungen besitzt, sind hierfür teilweise neue Definitionen nötig. Die einfache Schachtelung von einem Link in einer Fußnote ist sinnvoll einzusetzen, während eine tiefere Verschachtelung auf Probleme stößt. Wird beispielsweise dem Link, der sich in der Fußnote befindet, noch eine Fußnote angehängt, so ist diese nicht interpretierbar. Derartige tiefe Verschachtelungen sollten ausgeschlossen werden. Deshalb sind diese Elemente in verschiedenen Kontexten nicht einfach referenziert, sondern werden innerhalb der Definition anderer Elemente neu definiert. Code-Beispiel 2: Eine Fußnote besteht aus Text, der verschiedene Elemente beinhalten kann. Dazu werden in die Gruppe text.marker.elements mathematische Zeichen, Code und Zitate über Referenzen eingebunden. Das link-element muss wie oben erläutert neu definiert werden. Dazu wurde die eigentliche Definition mit dem Unterschied übernommen, dass der dargestellte Text nur vom Typ markedtext ist.

91 85 <xs:element name="footnote"> <xs:annotation> <xs:documentation> insert a footnote at this position </xs:documentation> </xs:annotation> <!-- Mischung aus Text und Elementen --> <xs:complextype mixed="true"> <xs:sequence minoccurs="0" maxoccurs="unbounded"> <xs:group ref="text.marker.elements" minoccurs="0" maxoccurs="unbounded"/> <!-- Neudefinition des Links --> <xs:element name="link" minoccurs="0" maxoccurs="unbounded"> <xs:complextype> <xs:all> <xs:element name="uri" type="xs:anyuri"/> <xs:element name="text" type="markedtext"/> </xs:all> <xs:attributegroup ref="pres:standard.out"/> <xs:attributegroup ref="script:standard.in"/> </xs:complextype> </xs:element> <xs:group ref="def.math" minoccurs="0" maxoccurs="unbounded"/> <xs:group ref="def.citation" minoccurs="0" maxoccurs="unbounded"/> <xs:element ref="code" minoccurs="0" maxoccurs="unbounded"/> </xs:sequence> <xs:attributegroup ref="pres:standard.out"/> <xs:attributegroup ref="script:standard.in"/> </xs:complextype> </xs:element> Da in dem zweiten Code-Beispiel die Gruppen und Elemente bezüglich ihrer Häufigkeit des Auftretens auf Null bis unendlich gesetzt wurden, sind die Elemente optional. Durch die Angabe der gleichen Attribute in der Sequenz, ist die Sequenz beliebig häufig wiederholbar. Dadurch ist die durch eine Sequenz vorgegebene Reihenfolge abgeschaltet und die Elemente lassen sich in beliebiger Reihenfolge und Häufigkeit wiederholen.

92 86 Abschnitte para werden auf die gleiche Weise definiert. Sie können neben Text auch weitere Elemente enthalten, wodurch sie bestimmte Zusammengehörigkeiten strukturieren. So lassen sich Auszeichnungen der Gruppe text.elements im Text vornehmen und über die Gruppe content.text.elements alle weiteren inhaltlichen Elemente wie Grafiken, Definitionen oder auch Tabellen einbinden. Für Abschnitte ist die Reihenfolge in der sie eingegeben und interpretiert werden identisch. Die Darstellungsstrukturen der Gruppe content.text.structure.elements müssen in eine Struktur gebracht werden, die eine aneinandergereihte Eingabe der Inhalte ermöglicht. Die Reihenfolge der Eingabe entspricht der späteren Ausgabe. Listen bestehen aus listitem-elementen, die die einzelnen Einträge der Liste bestimmen. Diese können Elemente der Gruppe text.elements, Code oder weitere Listen enthalten. Tabellen werden in Form ihrer Zeilen beschrieben. Es lässt sich optional zu einer Tabelle eine Legende für die Beschreibung der Tabelle und ein Tabellenkopf hinzufügen. Der Tabellenkopf besteht aus der gleichen Beschreibungsart, wie die weiteren Tabellenzeilen. Die Anzahl der Tabellenzeilen kann zwischen einer und beliebig vielen variieren. Die Zeilen werden über celldata-elemente gefüllt, die neben Text bis auf semantische Strukturen und Tabellen alle Elemente enthalten können. Mit der Auszeichnung als Tabellenkopf wird die besondere Stellung einer Zeile in Bezug auf die gesamte Tabelle ausgedrückt. Tabellen sollen der reinen Strukturierung ihres Inhaltes dienen und keine Layoutgestaltung vornehmen. Daher sind sie nicht ineinander schachtelbar. Für die Elemente zur semantischen Inhaltsauszeichnung content.text.semantic.elements sind die erlaubten Inhalte verschieden. Während in einem Beispiel example alle Elemente bis auf die semantischen der eigenen Gruppe auftreten dürfen, sind Definitionen definition wesentlich eingeschränkter. Sie bestehen aus einem Term term, der neben Text noch mathematische Elemente enthalten kann und einem erläuternden Text comment dazu. Die Elemente der Gruppe content.text.media.elements setzen sich alle aus ihren notwendigen Angaben zusammen. Eine Grafik graphic besteht beispielsweise aus label, uri und alternative. Ein Applet applet kann über alle dazugehörigen Angaben verfügen und ein object hat die Wahl zwischen Uri und MIME-Type Angabe oder Klassenangabe mit Parametern. Die zuvor beschriebenen Gruppen content.text.structure.elements, content.text.declaration.elements, content.text.media.elements bilden zusammengenommen die content.text.elements-gruppe, siehe Abbildung 23. Darin sind alle Elemente enthalten, die im eigentlichen Inhalt eines Kapitels auftreten dürfen. Andere Elemente, die nicht dazu gehören, wären etwa Titel, Zusammenfassungen oder Autorenangaben. Der Content eines Kapitels wird durch die Elemente der Gruppe content.elements bestimmt, die sich aus der Gruppe content.text.elements und dem

93 87 chapter-element zusammensetzt. Die Erweiterung um die Kapitel ist für die Erstellung von geschachtelten Kapiteln mit Unterkapiteln notwendig. Abbildung 23 stellt die gesamten Elemente dar, die in dem content eines Kapitels auftreten können und wie sie in Gruppen strukturiert sind. Abbildung 23: Gruppenzusammenhänge Diese Art der Strukturierung ermöglicht die einfache Erweiterung um Elemente. Soll zum Beispiel ein neues Medienelement integriert werden, so muss dieses nur in der Gruppe content.text.media.elements eingehängt werden und es kann an allen Positionen auftauchen, an denen die anderen Medien auch auftauchen dürfen. Einen weiterer Vorteil, der aus der Verwendung von Gruppen resultiert, ist, dass globale Gruppen nicht instanziiert werden dürfen. Das bedeutet, dass ein Dokument, welches mit dem Element einer globalen Gruppe beginnt, nicht gültig ist. Das unterscheidet sich von der Verwendung globaler Elemente. Alle global definierten Elemente können als Startelement für ein gültiges Dokument dienen. Um die Gültigkeit für einfache Elemente zu verhindern, wurden sie in Gruppen definiert Zusatzinformationen für die Ausprägungen Es gibt zwei verschiedene Ansätze um die Informationen zu gewinnen, die für die Ausprägungen notwendig sind. Zum einen über die Struktur und zum anderen über die Zusatzinformationen. Die Struktur wird durch die Schachtelung der Elemente realisiert. Beispielsweise nimmt das para-element eine ganz besondere Stellung ein. Mit ihm lassen sich verschiedene Inhalte zusammen gruppieren. Wie diese Strukturen in der weiteren Verarbeitung zur Generierung der Ausprägungen genutzt werden, spielt für das Schema keine Rolle.

94 88 Da die Struktur alleine nicht ausreicht und auch Sonderfälle ermöglicht werden müssen, lassen sich die meisten Elemente über Attribute steuern. Diese Attribute sind in einem eigenen Schema stamp.xsd definiert. Zur Markierung einer Standardausprägung gehört das on-attribut. Dieses kann nur einen der boolschen Werte true oder false annehmen. Damit wird markiert, ob ein Element in der Standardausprägung erscheinen soll. Die Festlegung dieses Wertes ermöglicht eine Ausprägungsgenerierung aus dem Quelldokument ohne weitere Angaben zu der Ausprägung zu machen. Allerdings sollen zu einer Ausprägung auch verschiedene Ausprägungsinstanzen ermöglicht werden. So wird beispielsweise nicht nur eine Standardausprägung Präsentation erzeugt, sondern es müssen auch Abstufungen bezüglich des Präsentationsinhaltes vorgenommen werden können. Hierfür muss das zweite Attribut delta gesetzt werden, das die Informationen über viele verschiedene Ausprägungsinstanzen enthalten kann und dafür als eine Liste von Strings definiert ist. Jede Ausprägungsinstanz muss mit einem Namen versehen werden, der in die entsprechende Liste der delta-attribute der Elemente eingetragen werden muss. Das muss bei allen Elementen gemacht werden, die abweichend von der Standardausprägung zu behandeln sind. Dadurch werden diese Elemente zusätzlich aufgenommen oder vernachlässigt. Bei der Namenswahl ist zu beachten, dass Listen nur über Leerzeichen als Trennungssymbole verfügen. Code-Beispiel 3: Der einfache Datentyp deltalist beruht auf einer Liste von Strings. Mit ihm wird das Attribut delta erzeugt. Der Beispielcode zeigt die einfache Definition von beiden. <xs:simpletype name="deltalist"> <xs:list itemtype="xs:string"/> </xs:simpletype> <xs:attribute name="delta" type="deltalist"/> Die aus den Kombinationen der beiden Attribute resultierenden Konstellationen sind in der Tabelle 2 für eine beispielhafte Ausprägungsinstanz mit dem Namen speziell dargestellt. Das on-attribut markiert dabei, ob ein Element zur Standardausprägung gehört. Das delta-attribut notiert immer die Abweichungen für eine Ausprägungsinstanz vom Standard einer bestimmten Ausprägung. Der Vorteil dieser etwas komplexen Attributangaben liegt in der Erzeugung der Standardausprägung. Anhand der Definitionen der Regeln, welche Elemente des Quelldokumentes in eine Standardausprägung einfließen sollen, lassen sich die Attribute setzen. Bei den jeweiligen Elementen, die in eine Standardausprägung einfließen, wird schon im Schema das on-attribut für diese Ausprägung per default auf true gesetzt. Damit lässt sich für jedes Element schon bei der Schemadefinition genau ein on-attribut, das die Standardausprägung bestimmt, setzen. Werden nun für einzelne

95 89 on delta Darstellung? true Ja true speziell Nein false Nein false speziell Ja Tabelle 2: Konstellationen aus der Kombination des on- und des delta-attributes für die Ausprägungsinstanz speziell Ausprägungsinstanzen Abweichungen davon festgelegt, so sind diese in dem delta- Attribut zu machen. Daher ist es weiterhin möglich trotz der hinzugefügten Angaben für eine bestimmte Ausprägungsinstanz noch die Standardausprägung zu generieren. Ebenfalls lassen sich so weitere Instanzen festlegen, die auch auf der Standardausprägung aufbauen können, da nur die Unterschiede zu dieser festgehalten werden müssen. Daher muss für diese nicht mit einer vollständig neuen Auswahl begonnen werden. Da immer beide Attribute zu einem Element definiert werden müssen, werden die Attribute durch Referenzen auf Attributgruppen den Elementen hinzugefügt. Die Attributgruppen beinhalten beide Attribute, doch mit unterschiedlichen default-angaben. Die Gruppe standard.in setzt für Elemente die zur Standardausprägung gehören den default-wert von on auf true, die Gruppe standard.out setzt entgegengesetzt auf false, wie das Code-Beispiel 4 zeigt. Die Verwendung von default- Angaben ist allerdings nur sehr eingeschränkt zu verwenden. Diese Eingaben werden nicht zwangsläufig von einem Editor oder Validator hinzugefügt, vgl. [Oba2002]. Deshalb muss in der weiteren Verarbeitung dieser Fall berücksichtigt werden. Code-Beispiel 4: Diese Attributgruppe soll von Elementen eingesetzt werden, die standardmäßig nicht in der Ausprägung erscheinen sollen, denen aber die Möglichkeit gegeben werden soll, nachträglich aufgenommen zu werden. Daher wird das on-attribut per Voreinstellung auf false gesetzt. <xs:attributegroup name="standard.out"> <xs:attribute ref="on" default="false"/> <xs:attribute ref="delta"/> </xs:attributegroup> Damit wurden die Attribute beschrieben, die für eine Ausprägung und ihre verschiedenen Instanzen gesetzt werden können. Es sollen jedoch mehrere Ausprägungen ermöglicht werden, weshalb diese Attribute für jede Ausprägung eigenständig ermöglicht werden müssen. Deshalb wird das Schema stamp.xsd für jede neue Ausprägung

96 90 in ein anderes Schema includiert (include). In stamp.xsd sind daher die Attribute ohne Namensraum beschrieben worden. Für jede Ausprägung, die in das Dokument eingefügt werden soll, wird nun ein eigenes Schema mit eigenem Namensraum erstellt. Das Schema für die Ausprägung Präsentation presentation.xsd wird ebenso wie die vollständige stamp.xsd im Anhang A aufgeführt. Die definierten Attribute nehmen damit immer den Namensraum des Schemas an, von dem sie includiert werden. Damit sind für verschiedene Ausprägungen die Attribute immer gleich, nur der Namensraum, kenntlich gemacht durch das Präfix, variiert. Die Integration der Attributgruppen für die Ausprägungen Präsentation mit dem Präfix pres und Skript mit dem Präfix script ist schon in dem Code-Beispiel 2 definiert worden. Die Benutzung in einem XML-Dokument des Schemas könnte folgendermaßen aussehen: <footnote pres:on="false" pres:delta="" script:on="true" script:delta=""> Der Text, der in der Fußnote erscheint. </footnote> Diese Angaben sind für fast alle Elemente machbar. Für einige Elemente sind sie allerdings nicht sinnvoll, beispielsweise bei einzelnen Elementangaben wie der URI zu einer Grafik. Dabei ist nur die Funktionalität für die gesamten Grafikinformationen wünschenswert, damit diese für spezielle Ausprägungen ausgewählt werden können. Eine besondere Stellung für die diversen Ausprägungen kommt noch den Titeln der Kapitel zu. Diese dürfen stets nur einmal auftreten. Damit können keine unterschiedlichen Angaben für verschiedene Ausprägungen gemacht werden. Um dennoch unterschiedliche Titel zu erlauben, wurde den Kapiteln noch ein Substitutionstitel substitutetitle mitgegeben. Dieser wird standardmäßig nicht eingesetzt, aber er kann bei unterschiedlichen Ausprägungen als Ersatz für den eigentlichen langen Titel dienen. 8.3 Generierung der Ausgabe mit XSLT Die diversen Ausprägungen aus dem Quelldokument lassen sich mittels XSLT erzeugen. Dabei sind verschiedene Formate denkbar. Im folgenden sollen einige grundsätzliche Transformationen zur Generierung der Ausprägungen erläutert werden, die sich auf verschiedene Formate erweitern lassen. Zum einfachen Verständnis wird in der Beschreibung die Generierung anhand von XHTML-Seiten erläutert Folgerungen der Struktur Anhand der Struktur, die das Dokument besitzt, lassen sich Gewichtungen festlegen, die als Grundlage einer Ausprägung dienen. So wurden Schlüsselwörter als präzise

97 91 Stichwörter zur knappen Beschreibung einer Textpassage definiert und werden dementsprechend innerhalb des Textes durch Fettdruck hervorgehoben. An anderer Stelle werden sie gegebenenfalls als Ersatz für den gesamten Text fungieren. newterm und marker sind Abschwächungen dazu, die in einigen Ausprägungen teilweise gar nicht auftreten. Innerhalb des Textes werden sie nun als kursiv und unterstrichen dargestellt. Code-Beispiel 5: Die Schlüsselwörter werden in der Standardausprägung zu XHTML fett dargestellt. Der Namensraum für die Elemente wurde mit xmlns:lec=" tschnied/lecture" bekannt gemacht. Um auf bestimmte Elemente zugreifen zu können, müssen sie deshalb alle mit dem lec-präfix aufgerufen werden. Da in einem Schlüsselwort-Element auch andere Elemente enthalten sein können, werden alle seine Kinderelemente mittels des apply-templates-elementes aufgerufen und abgearbeitet. Da die eingefügten Werte keine Leerzeichen enthalten, wird durch das text-element abschließend noch ein Leerzeichen angehängt. <xsl:template match="lec:keyword"> <b><xsl:apply-templates/></b> <!-- Einfuegen eines Leerzeichens --> <xsl:text> </xsl:text> </xsl:template> Derartige Vorlagen, die für jedes mögliche Element existieren, erlauben die Verarbeitung des Dokumentes in der Reihenfolge, in der die Informationen eingegeben wurden. Das ist aber nicht immer gewünscht. So ist an einigen Stellen in dem Dokument die Reihenfolge bestimmter Einträge beliebig, aber die Darstellung soll immer gleich ausfallen. Ein Kapitel zum Beispiel besteht aus einem Titel, gegebenenfalls Ersetzungstitel, Content und optionaler Zusammenfassung. Da diese alle nur maximal einmal auftreten dürfen, ist die Reihenfolge nicht wesentlich aber für die Darstellung sehr entscheidend. Der Titel soll immer als Überschrift und nicht als Unterschrift verwendet werden. Um derartige Reihenfolgen für die Ausprägung zu berücksichtigen, ist die Verarbeitung der Elemente in einer vorgegebenen Reihenfolge vorzunehmen. Deshalb wird in einer Kapitelvorlage erst der Titel und dann in Abhängigkeit der Position der Content und die Zusammenfassung ausgewertet. Die Bearbeitung der Fußnoten ist neben den im Text erscheinenden Zahlen auch erst am Ende der Ausgabe vorzunehmen. Dazu wird im Fall einer Ausgabe in mehrere Dateien die Bearbeitung der Fußnoten auch erst am Schluss eines Kapitels vorgenommen. Code-Beispiel 6: Für jedes Kapitel soll eine HTML-Seite erzeugt werden. Die HTML-Seite besteht immer aus dem Titel des Kapitels, gefolgt von dem Content oder einer optionalen Zusammenfassung. Sind diese ganzen Informationen verarbeitet, so müssen noch die Inhalte

98 92 zu den Fußnoten angehängt werden. Das geschieht über den Aufruf einer Vorlage für Fußnoten mit einem dafür vorgesehenen Modus annotation. Da die Fußnoten beliebig tief in anderen Elementen geschachtelt sein können, werden sie unabhängig von ihrer Verzweigungsstruktur alle aufgerufen, bis auf die, die sich in weiteren Unterkapiteln befinden. Dazu werden in der vorgeschalteten for-each-anweisung alle chapter-elemente aussortiert. Diese Fußnoten werden erst bei der Bearbeitung der eigenen Kapitel eingefügt. <!-- Bearbeitung des Titels --> <h1 align="left"> <xsl:apply-templates select="lec:title"/> </h1> <!-- Aufruf der Vorlagen fuer den Content und das Abstract --> <xsl:apply-templates select="lec:content lec:abstract"/> <!-- Fussnoten wenn vorhanden --> <xsl:if test="content/*[not(local-name()= chapter )]//lec:footnote"> <p> <xsl:for-each select="lec:content/*[not(local-name()= chapter )]"> <xsl:apply-templates select=".//lec:footnote" mode="annotation"/> </xsl:for-each> </p> <hr/> </xsl:if> Eine größere Aufgabe kommt der Nummerierung der Kapitel und den damit verbundenen Links innerhalb eines Dokumentes zu. Die Nummerierung verläuft dabei ganz einfach mittels des number-elements. <xsl:number level="multiple" count="lec:chapter" format="1"/> Damit wird über beliebig viele Ebenen gezählt und zwar nur alle chapter-elemente. Die Formatierung kann zusätzlich noch angegeben werden und wird hier standardmäßig mit einem Punkt getrennt. Mögliches Beispiel wäre etwa Auf diese Art lassen sich auch Verweise zu den Kapiteln innerhalb des Dokumentes realisieren. Allerdings ist es meistens nicht sinnvoll nur eine Datei zu generieren, da die Aufteilung in mehrere Dateien erhöhte Übersichtlichkeit bietet. Auch hierfür können die Nummerierungen der Kapitel herangezogen werden, da sie in der benutzten Art eine eindeutige Identifizierung bilden. Auf das Aufteilen auf mehrere Dateien wird in Kapitel weiter eingegangen.

99 93 Bei der Aufteilung in mehrere Dateien muss auch eine Navigation eingebaut werden. Die Navigation soll sich für diese Ausprägung entlang der eingegebenen Dokumentstruktur bewegen. Daher ist für jede Seite der Vorgänger und ein Nachfolger zu bestimmen und zu referenzieren. Der Vorgänger ist dabei immer das in der Reihenfolge vorher aufgetretene Kapitel. Ist dieses auf der gleichen Gliederungsebene, so kann einfach auf die um eins reduzierte aktuelle Kapitelnummer verwiesen werden. Sollte das Vorgängerkapitel allerdings Unterkapitel besitzen, so stellt das letzte Unterkapitel des Vorgängerkapitels den Vorgänger dar. Dazu muss das vorhergehende Kapitel rekursiv immer sein letztes Unterkapitel aufrufen, bis es bei dem der tiefsten Ebene angelangt ist. Dieses unterste Kapitel bildet dann den Vorgänger. Ist gar kein Kapitel als Vorgänger des aktuellen Kapitels vorhanden, so ist das übergeordnete Kapitel als Vorgänger einzusetzen. Diese Bestimmung des Vorgängers entspricht einer rückwärts gelesenen preorder-traversierung der Kapitel im Baum. Die Realisierung wird in XSLT mittels Rekursion durchgeführt. Das folgene Beispiel beschreibt diese Umsetzung für die Bestimmung des Vorgängers. Code-Beispiel 7: Die Bestimmung wird überall anhand der Nummerierung der Kapitel durchgeführt. Dazu muss immer mittels des for-each-elementes in den jeweiligen Kontext gewechselt werden, auch wenn im Fall der Eltern nur ein Knoten in Frage kommt. Für die Suche nach dem letzten Unterkapitel eines vorherigen Kapitels wird eine extra Vorlage get_last_child_pos aufgerufen, die rekursiv sich selber aufruft und immer weiter in die Tiefe absteigt. <!-- Vorlage zur Bestimmung des Vorgaengers --> <xsl:template name="get_back_pos"> <xsl:choose> <!-- auf der selben Ebene ist ein vorheriges Kapitel --> <xsl:when test="preceding-sibling::chapter"> <!-- merke die aktuelle Kapitelnummer --> <xsl:variable name="actual_pos"> <xsl:number level="single" count="chapter"/> </xsl:variable> <!-- wechsle den Kontext zu den Eltern --> <xsl:for-each select="parent::content"> <!-- wechsle den Kontext zu dem vorherigen Kapitel --> <xsl:for-each select="chapter[number($actual_pos) -1]"> <!-- bestimme das letzte Unterkapitel des Vorgaengers --> <xsl:call-template name="get_last_child_pos"/> </xsl:for-each> </xsl:for-each> </xsl:when> <!-- sonst waehle den Elternknoten --> <xsl:otherwise> <xsl:for-each select="parent::content">

100 94 <xsl:for-each select="parent::chapter"> <xsl:number level="multiple" count="chapter" format="1"/> </xsl:for-each> </xsl:for-each> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- Kapitelnummer des tiefsten und letzten Kapitels --> <xsl:template name="get_last_child_pos"> <!-- wenn Unterkapitel da sind --> <xsl:if test="content/chapter"> <!-- im letzten Kapitel weiter suchen --> <xsl:for-each select="content/chapter[last()]"> <xsl:call-template name="get_last_child_pos"/> </xsl:for-each> </xsl:if> <!-- sonst ist das aktuelle Kapitel das gesuchte --> <xsl:if test="not(content/chapter)"> <xsl:number level="multiple" count="chapter" format="1"/> </xsl:if> </xsl:template> Es wurden keine Anforderungen zu der Speicherungsart der Daten vorgenommen, dennoch sollte die Möglichkeit gegeben werden die Daten verteilt zu speichern und nicht in einer Datei verwalten zu müssen. Zum Einfügen verteilter Dateien werden diese über Attributangaben der Elemente, für die sie eingefügt werden sollen, spezifiziert. Die Auswertung wird in XSLT mittels der document-funktion vorgenommen. Dazu wird die URI der einzubindenen Datei aus dem Attribut an die document-funktion übergeben und auf diese Elemente kann dann genauso zugegriffen werden, wie auf die Elemente des eigenen Dokumentes. Dadurch lässt sich beispielsweise das Literaturverzeichnis aus einer externen Datei beziehen oder innerhalb des Dokumentes verwalten. Der externe Bezug erhält dabei den Vorrang. Auf welche Art ein solches Verzeichnis verwaltet werden soll, hängt auch von der sonstigen Datenverwaltung ab, die hier nicht näher betrachtet werden soll. Code-Beispiel 8: Durch Angabe einer filelocation als Attribut des bibliography-elementes, werden die Daten aus der externen Datei bezogen. Dem Test, ob diese Angabe existiert, folgt die Zuweisung des Zugriffs auf dieses Dokument in einer Variablen items. Dadurch muss der Zugriff auf die Datei nur einmal gemacht werden und an späterer Stelle kann über die Variable in der Baumstruktur der Datei navigiert werden.

101 95 <!-- Attribut filelocation existiert --> <xsl:if <!-- Zugriff auf die Datei in Variable speichern --> <xsl:variable name="items" <ul> <!-- fuer jeden Eintrag im Literaturverzeichnis --> <xsl:for-each select="$items/bibliography/item"> <!--... Bearbeitung einfuegen... --> </xsl:for-each> </ul> </xsl:if> Derartige Bearbeitungsschritte können beispielsweise auch für das Zusammenziehen mehrerer getrennt gespeicherter Kapitel zu einem Dokument benutzt werden. Dafür wurden einige Elemente, wie das chapter- oder example-element, global definiert und mit dem filelocation-attribut versehen. So lassen sich auch Definitionen oder Beispiele in einer gesonderten Datei speichern. Diese Vorgehensweise ist aber nur für XML-basierte Daten möglich. In dieser XSL-Transformation wird auch vorausgesetzt, dass es sich nur um nach dem Schema gültige XML-Dokumente handelt. Andere Dokumente müssten aufgrund ihrer Datenstruktur verarbeitet werden. Für Dateien, die keine XML-Dateien sind, ist das nicht so einfach zu lösen. Eine typisches Beispiel für die Notwendigkeit andere Dateien einzulesen, ist die Integration von Beispielcode. So kann an diversen Stellen zwar Code, der alle seine Leerzeichen, Tabs und Zeilenumbrüche beibehält, in ein XML-Dokument integriert werden, aber dieser muss direkt in dem XML-Dokument eingefügt werden. Mittels der document-funktion ist das aus einer externen nicht-xml-datei nicht möglich. Derartige Anwendungen können nur über eigene Erweiterungsfunktionen gelöst werden. In dem aktuellen Arbeitspapier zu XSLT 2.0 [W3CXSLTb] ist bereits eine unparsed-text-funktion aufgenommen, die abhängig von der übergebenen URI eine Datei einliest und den Inhalt als String und ohne weitere Verarbeitung direkt in den Ergebnisbaum einfügt. Damit lassen sich in der Zukunft beispielsweise externe Codeauszüge einfügen Sprachunterstützung Ein weiterer Einsatz der document-funktion dient der Unterstützung von verschiedenen Sprachen. Über die Angabe der Sprache als Attribut des lecture-elementes wird die richtige Auswahl der durch die Transformation hinzugefügten Bezeichnungen gewählt. Diese Bezeichnungen werden in einer externen Datei language.xml gespeichert und ihr Zugriff wird durch die document-funktion realisiert. Für jede Variable ist in dieser Datei ein Element gespeichert, das für jede gültige Sprache ein Element mit dem

102 96 entsprechenden Namen enthalten kann. Zur Unterstützung von Deutsch und Englisch sieht der Beginn der Datei folgendermaßen aus: <language> <table_of_contents> <de>inhaltsverzeichnis</de> <en>table of contents</en> </table_of_contents> <content> <de>inhalt</de> <en>content</en> </content>... </language> Die Erweiterung um eine Sprache erfolgt durch die Angabe eines dementsprechenden Sprachelementes in jeder Variablen und beim Hinzufügen einer neuen Variablen muss nur auf die festzulegenden Sprachen geachtet werden. Um diese nun auch innerhalb des Stylesheets verwenden zu können, müssen XSLT-Variablen erzeugt und die Werte eingelesen werden. Die damit verbundenen Initialisierungen der Variablen werden in einer externen XSL-Datei (variable.xsl) vorgenommen, die mittels include in das eigentliche Stylesheet eingefügt wird. Das folgende Beispiel zeigt einen Ausschnitt der Datei variable.xsl für die Initialisierung einer Variablen. Code-Beispiel 9: Die Sprachauswahl für das Dokument wird dem language-attribut des lecture- Elementes entnommen. Der Zugriff auf die Sprachdatei wird einmal vorgenommen und in einer Variablen gemerkt. Zur Initialisierung der Variablen wird dieser Zugriff mit Angabe der Variablen auf die Sprachdatei gemacht und der Wert für die angegebene Sprache eingesetzt. <!-- auswaehlen der aktuellen Sprache --> <xsl:variable name="language" <!-- Zugriff auf die Elemente in der Sprachdatei --> <xsl:variable name="lang_vars" select="document( language.xml )/language"/> <!-- Variable fuers Inhaltsverzeichnis --> <xsl:variable name="inhaltsverzeichnis"> <!-- passendes Element nach Elementen durchsuchen --> <xsl:for-each select="$lang_vars/table_of_contents">

103 97 <!-- initialisieren mit dem Wert des Elementes, das der Sprachangabe entspricht --> <xsl:value-of select="*[local-name()=$language]"/> </xsl:for-each> </xsl:variable> <!--... weitere Variablen --> Flexibilität der Stylesheet Prozessoren Der Einsatz von XML-Dokumenten als Grundlage für die Daten und XSLT zur Generierung der Ausgabe, hält sich an einen Standard, der nicht von etwaigen Programmen abhängig macht. Doch das gilt nur, solange auch die XSLT-Prozessoren sich alle an den Standard halten und diesen vollständig abdecken. In Anbetracht der Aktualität von XSLT ist das jedoch nicht ganz der Fall. Zum einen ist die Unterstützung nicht bei allen Prozessoren vollständig gegeben, wie auch schon in Kapitel 3.5 angesprochen, und zum anderen fehlen wichtige Funktionen. Darunter fallen die Ausgabe in mehrere Dateien und die Integration von Dateien, die nicht auf XML basieren. Um derartige Funktionalitäten zu erreichen müssen Erweiterungsfunktionen eingesetzt werden, die allerdings abhängig von dem eingesetzten XSLT-Prozessor sind, vgl. Kapitel 3.6. Für die Realisierung wurde die Unterstützung von Xalan zur Ausgabe in mehrere Dateien benutzt. Ebenso wurde für den Fall, dass ein anderer Prozessor eingesetzt wird, eine Abfrage eingebaut, die dann die Ausgabe in eine einzelne Datei umlenkt, wie es mit den Standardfunktionalitäten von XSLT möglich ist. Auch mit der Unterstützung von Saxon wurde experimentiert, der in seiner aktuellen Version schon einige Funktionalitäten der Diskussion um XSLT 2.0 unterstützt, die aber noch nicht standardisiert sind. Die dementsprechenden Elemente sind noch nicht in anderen XSLT-Prozessoren verfügbar, weshalb diese einen Fehler melden. Die Aufteilung auf mehrere Dateien wurde deshalb mit Xalan umgesetzt, der sich sehr genau an den Standard hält. Code-Beispiel 10: Beispiel zum Aufteilen auf Dateien und Abfang von Prozessoren Der Test, ob das von Xalan unterstützte Schreiben in externe Dateien aufgerufen werden kann, findet anhand der Verfügbarkeit des redirect:write-elementes statt und wird in der Variablen xalan_redirect abgespeichert. Anhand dieses Testergebnisses werden an unterschiedlichen Stellen verschiedene Ausgaben erstellt. So wird wie schon in Beispiel beschrieben die Ausgabe auf eine oder mehrere Dateien verteilt. Wichtig ist dabei die unterschiedliche Behandlung einiger Elemente zu berücksichtigen, wie beispielsweise Links innerhalb des Dokumentes oder Fußnoten. <xsl:variable name="xalan_redirect" select="element-available( redirect:write )"/>

104 <xsl:template match="/"> <xsl:choose> <!-- Der Xalan unterstuetzt das Aufteilen in mehrere Dateien durch ein eigenes Element --> <xsl:when test="$xalan_redirect"> <!-- Startseite schreiben --> <redirect:write select=" index.xhtml "> <!-- Der Seitenkopf bleibt gleich --> <xsl:processing-instruction name="xml-stylesheet"> <xsl:text>href="insert/mathmlstyle/mathml.xsl" type="text/xsl"</xsl:text> </xsl:processing-instruction> <html> <head> <title> <xsl:value-of select="lec:lecture/lec:title"/> </title> <link rel="stylesheet" type="text/css" href="format.css"/> </head> <!-- Seitenkörper mit Inhalt --> <body> <!-- Beginn der Seite ist immer gleich --> <xsl:call-template name="firstside"/> <!-- Abstrakt und gesamten Inhalt aufrufen --> <xsl:apply-templates select="lec:lecture/lec:abstract lec:lecture/lec:content"/> <!-- Fussnoten, die nicht in Unterkapiteln stecken --> <xsl:if test="lec:lecture/lec:content/* [not(local-name()= chapter )]//lec:footnote lec:lecture/*[not(local-name()= content )] //lec:footnote"> <p> <xsl:apply-templates select="lec:lecture/lec:content/* [not(local-name()= chapter )]//lec:footnote lec:lecture/*[not(local-name()= content )] //lec:footnote" mode="annotation"/> </p> <hr/> </xsl:if> <!-- Seitennavigation einfügen--> <xsl:call-template name="navigation"> <xsl:with-param name="back" select=" "/> <xsl:with-param name="next" select=" inhalt "/> </xsl:call-template> 98

105 99 </body> </html> </redirect:write> <!-- Verarbeitung des Inhaltsverzeichnisses --> <! > <!-- Verarbeitung des Literaturverzeichnisses --> <! > </xsl:when> <!-- Prozessor kann nur in eine Datei schreiben --> <xsl:otherwise> <!-- Seitenkopf einfügen, siehe oben --> <! > <html xmlns=" <head> <! > </head> <body> <!-- Erste Seite aufbauen --> <xsl:call-template name="firstside"/> <!-- Alle Inhalte zur Verarbeitung aufrufen --> <xsl:apply-templates select="lec:lecture/lec:abstract lec:lecture/lec:content lec:lecture/lec:bibliography lec:lecture/lec:table_of_contents lec:lecture/lec:content/lec:chapter"/> <!-- Alle Fussnoten an die Seite anhaengen --> <p> <xsl:apply-templates select="//lec:footnote" mode="annotation"/> </p> <hr/> </body> </html> </xsl:otherwise> </xsl:choose> </xsl:template> Beim Verteilen der Ausgabe auf mehrere Dateien ist zu beachten, dass diese unterschiedliche Bezeichnungen haben. Wird beispielsweise beim Aufruf des Prozessors zur Generierung eine Datei index.xhtml angegeben, so kollidiert diese mit der von dem Stylesheet erzeugten index.xhtml-datei. Werden derartige gleichzeitig schreibende Zugriffe auf eine Datei gemacht, so können Daten verloren gehen.

106 MathML MathML ist eine XML-Anwendung zur Beschreibung von mathematischen Formeln. Durch die Kombination von XHTML und MathML lassen sich mathematische Formeln auch in Textseiten darstellen. Da es sich um eine XML-Anwendung handelt, ist die Integration in XHTML über die Namensraumspezifikation möglich. Da allerdings nicht alle Browser MathML darstellen können, sind dafür eventuell Plug-Ins erforderlich. Das ist auch der Grund, weshalb verschiedene Möglichkeiten existieren, um eine Darstellung der MathML-Elemente zu erzwingen. Beispielsweise lässt sich ein Stylesheet, sowohl XSLT als auch CSS, referenzieren, das zur Darstellung von MathML genutzt werden soll. Mozilla verfügt ab der Version 0.9.5, Netscape ab Version 7.0, über einen integrierten, nativen MathML-Renderer. Das bedeutet, dass ohne weitere Angaben die mit MathML definierten Elemente darstellbar sind. Dazu müssen unter Umständen nur geeignete mathematische Fonts herunter geladen werden. Die früheren Versionen Mozilla und Netscape 6.1 unterstützen dahingegen nur die Darstellung mathematischer Formeln mittels XSLT. Mit der Verwendung von XSLT ist eine Möglichkeit gegeben, um MathML auch im MS Internet Explorer darzustellen. Dieser unterstützt ab Version 6.0 die aktuelle XSLT Empfehlung 1.0. Die älteren Versionen 5.0 und 5.5 wurden mit einem XSLT-Prozessor ausgeliefert, der anhand des Arbeitspapieres zur Entwicklung der XSLT-Empfehlung arbeitet. Um diese Browser auch empfehlungstauglich zu machen, muss MSXML 3.0, ein von Microsoft geschriebenes XML-Paket mit XSLT-Prozessor, instaliert werden. So lassen sich die vom W3C bereitgestellten XSL-Transformationen einsetzen und die Elemente darstellen. Für den Internet Explorer existieren noch weitere Plug-Ins, die zur Darstellung von MathML benutzt werden können. Allerdings interpretiert der Internet Explorer das MathML-Element und seinen Inhalt nicht in einer XHTML-Seite. Nur innerhalb einer XML-Datei mit dementsprechender Dateiendung xml wird das math-element weiter verarbeitet. Das W3C beschreibt die aktuelle Unterstützung aller Browser und die Problematiken dabei in [W3CMathML]. MathML ist in zwei unterschiedliche Definitionsarten unterteilt. Die eine Art dient der Beschreibung der Darstellung (presentation-mathml), die andere des mathematischen Inhaltes (Content-MathML). Der Unterschied wird an dem folgenden, allgemein benutzten Beispiel erläutert. Beispiel 8.3.1: Die Beschreibung der Formel (a + b) 2 kann auf zwei Arten erfolgen. Die Präsentationsbeschreibung erfolgt anhand der resultierenden Darstellung, indem die Formel in der Reihenfolge der Ausführung von innen nach außen beschrieben wird. Hierbei beginnt das mit dem Hochstellen msup einer Zahl mn zu dem Term in Klammern mfenced. Die Angabe, welche Klammern benutzt werden sollen ist optional, macht

107 101 aber den Verwendungszweck deutlich. Der innere Term besteht aus Variablen mi, die mit einem Operator mo verknüpft sind. <msup> <mfenced open="(" close=")"> <mi>a</mi> <mo>+</mo> <mi>b</mi> </mfenced> <mn>2</mn> </msup> Die inhaltliche Beschreibung entspricht der preoder-traversierung eins Baumes. Dazu werden in apply-elementen die auszuführenden Teile der Formel eingefasst. Die beginnt mit der Beschreibung, dass ein Exponent power zu dem folgenden Element, das aus einer weiteren Formel besteht, existiert. Die Operanden besitzen in dieser Darstellung alle eigene Elemente, so auch der plus-operator, dem zwei Variablen ci folgen. Im Anschluß wird nun der Exponent zu der inneren Formel als Zahlenwert cn festgelegt. <apply> <power/> <apply> <plus/> <ci>a</ci> <ci>b</ci> </apply> <cn>2</cn> </apply> Die inhaltliche Beschreibung ist nicht direkt auf die Darstellung zu übertragen, weshalb diese Formelbeschreibung auch nicht gleichermaßen gut dargestellt werden kann. Die Unterstützung der Präsentationsbeschreibung ist weitaus häufiger gegeben, da bei ihr keine inhaltliche Interpretation vorgenommen werden muss. Zum Einbinden in XHTML spielt es keine Rolle in welcher Form MathML verwendet wurde. Dazu werden folgende Angaben vom W3C empfohlen [W3CMathML]: Die Angabe eines Stylesheets zur Darstellung der MathML-Elemente. <?xml-stylesheet type="text/xsl" href="

108 102 Da der Internet Explorer standardmäßig in den Sichterheitseinstellungen das Laden von Stylesheets fremder Server verbietet, sollte eine lokale Kopie dieser Stylesheets auf dem gleichen Server hinterlegt werden und auf diese verwiesen werden. <?xml-stylesheet type="text/xsl" href="insert/mathmlstyle/mathml.xsl"?> Soll genau festgelegt werden, welche Möglichkeit zum Rendern der mathematischen Formeln benutzt werden soll, so kann dieses optional über Preferenzen eingestellt werden. Das Einfügen der MathML-Beschreibung sollte direkt in dem XHTML-Dokument erfolgen. Dazu wird die Beschreibung in einem math-element mit Namensraumangabe vorgenommen: <math xmlns=" Diese Angaben sind in der XSL-Transformation der Ausgabedatei hinzuzufügen. Die Namensraumangabe für das math-element wird einfach in die Ausgabe mit hineingeschrieben. Der Stylesheet-Verweis muss allerdings direkt zu Begin jeder XHTML- Datei vor dem html-tag vorgenommen werden. Da es sich hierbei um eine Processing- Instruction handelt, also um eine Anweisung, die das Verarbeitungsprogramm, hier der Browser, ausführen soll, muss diese auch als eine solche definiert werden. Der folgende Ausdruck liefert das gewüschte Ergebnis: <xsl:processing-instruction name="xml-stylesheet"> <xsl:text>href="insert/mathmlstyle/mathml.xsl" type="text/xsl" </xsl:text> </xsl:processing-instruction> Die Darstellung zweier mathematischer Formeln mit Mozilla ist in Abbildung 24 zu sehen. Die Formeln wurden hellrot hervorgehoben. Der Ausschnitt ist aus dem Beipiel entstanden, das in Kapitel 9 weiter erläutert wird. Der Internet Explorer bearbeitet allerdings die Datei anhand der Dateiendung, weshalb er sie nicht als XML-Datei interpretiert und die Formeln nicht anzeigt. 8.4 Verschiedene Ausprägungen Um aus dem Dokument unterschiedliche Ausprägungen zu erzeugen, müssen ausreichend Informationen aus dem Inhalt hervorgehen. Das geschieht zum einen durch die

109 103 Abbildung 24: Ausschnitt XHTML mit MathML Struktur der Elemente und darauf festgelegten Regeln, die für jede Ausprägung definiert werden müssen, und zum anderen durch die Zusatzinformationen des Autors. Diese Angaben werden durch Attribute zu den jeweiligen Elementen hinzugefügt. Zur Erzeugung von verschiedenen Ausprägungen müssen zuerst die Regeln festgelegt werden, anhand denen die Ausprägungen bestimmt werden sollen. Das wird im Folgenden beispielhaft für ein Skript und eine Präsentation durchgeführt Allgemeine Bestimmmung von Ausprägungen mit XSLT Die Festlegung welche Informationen in einer Ausprägung erscheinen sollen, werden anhand von Attributen vorgenommen, wie es bereits in Kapitel vorgestellt wurde. Die weitere Verarbeitung der Zusatzinformationen muss im Stylesheet vorgenommen werden. Da nicht vorausgesetzt werden kann, dass alle default-werte gesetzt wurden, da das abhängig von dem Editor beziehungsweise Validator ist, der verwendet wird, muss die Grundlogik der einzelnen Ausprägungen mit in der Transformation berücksichtigt werden. Für die Betrachtung des Skriptes heisst das, dass alle Elemente dargestellt werden, wenn kein script-attribut ausgewertet werden muss, und für die Präsentation, dass nur Titel und Schlüsselwörter aufgenommen werden. Code-Beispiel 11: Das folgende Template kann auf jedes beliebige Element angewendet werden, wenn getestet werden soll, ob das Element in dieser Ausprägung dargestellt werden soll. Dazu muss einfach bei der Verarbeitung einer Vorlage zu einem Element diese Abfrage vorangestellt werden. Die Abfrage berücksichtigt im ersten Test, ob überhaupt ein script:on-attribut existiert. Ist dies nicht der Fall, so wird das Element übernommen. Existiert das Attribut, so muss es in Verbindung mit dem script:delta- Attribut anhand der Tabelle 2 ausgewertet werden.

... MathML XHTML RDF

... MathML XHTML RDF RDF in wissenschaftlichen Bibliotheken (LQI KUXQJLQ;0/ Die extensible Markup Language [XML] ist eine Metasprache für die Definition von Markup Sprachen. Sie unterscheidet sich durch ihre Fähigkeit, Markup

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Klaus Schild, XML Clearinghouse 2003. Namensräume

Klaus Schild, XML Clearinghouse 2003. Namensräume Namensräume Lernziele Namenskonflikte Warum lösen im World Wide Web einfache Präfixe dieses Problem nicht? Wie lösen globale Namensräume das Problem? Wie werden sie in XML-Dokumenten benutzt? Was sind

Mehr

Barrierefreie Webseiten erstellen mit TYPO3

Barrierefreie Webseiten erstellen mit TYPO3 Barrierefreie Webseiten erstellen mit TYPO3 Alternativtexte Für jedes Nicht-Text-Element ist ein äquivalenter Text bereitzustellen. Dies gilt insbesondere für Bilder. In der Liste der HTML 4-Attribute

Mehr

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche etutor Benutzerhandbuch Benutzerhandbuch XQuery Georg Nitsche Version 1.0 Stand März 2006 Versionsverlauf: Version Autor Datum Änderungen 1.0 gn 06.03.2006 Fertigstellung der ersten Version Inhaltsverzeichnis:

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

RDF und RDF Schema. Einführung in die Problematik Von HTML über XML zu RDF

RDF und RDF Schema. Einführung in die Problematik Von HTML über XML zu RDF RDF und RDF Schema Einführung in die Problematik Von HTML über XML zu RDF Kirsten Albrecht Roland Illig Probleme des HTML-basierten

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer

Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Fachdidaktik der Informatik 18.12.08 Jörg Depner, Kathrin Gaißer Klassendiagramme Ein Klassendiagramm dient in der objektorientierten Softwareentwicklung zur Darstellung von Klassen und den Beziehungen,

Mehr

Containerformat Spezifikation

Containerformat Spezifikation Containerformat Spezifikation Version 1.0-09.05.2011 Inhaltsverzeichnis 0 Einführung... 4 0.1 Referenzierte Dokumente... 4 0.2 Abkürzungen... 4 1 Containerformat... 5 1.1 Aufbau des Container-Headers...

Mehr

Containerformat Spezifikation

Containerformat Spezifikation Containerformat Spezifikation Version 1.1-21.02.2014 Inhaltsverzeichnis 0 Einführung... 4 0.1 Referenzierte Dokumente... 4 0.2 Abkürzungen... 4 1 Containerformat... 5 1.1 Aufbau des Container-Headers...

Mehr

4 Aufzählungen und Listen erstellen

4 Aufzählungen und Listen erstellen 4 4 Aufzählungen und Listen erstellen Beim Strukturieren von Dokumenten und Inhalten stellen Listen und Aufzählungen wichtige Werkzeuge dar. Mit ihnen lässt sich so ziemlich alles sortieren, was auf einer

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

Einfache und effiziente Zusammenarbeit in der Cloud. EASY-PM Office Add-Ins Handbuch

Einfache und effiziente Zusammenarbeit in der Cloud. EASY-PM Office Add-Ins Handbuch Einfache und effiziente Zusammenarbeit in der Cloud EASY-PM Office Add-Ins Handbuch Inhaltsverzeichnis 1. Einführung... 3 2. Ribbonmenü... 4 3. Dokument... 5 3.1 Öffnen... 5 3.2 Speichern... 6 3.3 Speichern

Mehr

Wir basteln einen Jahreskalender mit MS Excel.

Wir basteln einen Jahreskalender mit MS Excel. Wir basteln einen Jahreskalender mit MS Excel. In meinen Seminaren werde ich hin und wieder nach einem Excel-Jahreskalender gefragt. Im Internet findet man natürlich eine ganze Reihe mehr oder weniger

Mehr

So importieren Sie einen KPI mithilfe des Assistenten zum Erstellen einer Scorecard

So importieren Sie einen KPI mithilfe des Assistenten zum Erstellen einer Scorecard 1 von 6 102013 18:09 SharePoint 2013 Veröffentlicht: 16.07.2012 Zusammenfassung: Hier erfahren Sie, wie Sie einen KPI (Key Performance Indicator) mithilfe des PerformancePoint Dashboard Designer in SharePoint

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Leichte-Sprache-Bilder

Leichte-Sprache-Bilder Leichte-Sprache-Bilder Reinhild Kassing Information - So geht es 1. Bilder gucken 2. anmelden für Probe-Bilder 3. Bilder bestellen 4. Rechnung bezahlen 5. Bilder runterladen 6. neue Bilder vorschlagen

Mehr

Microsoft PowerPoint 2013 Folien gemeinsam nutzen

Microsoft PowerPoint 2013 Folien gemeinsam nutzen Hochschulrechenzentrum Justus-Liebig-Universität Gießen Microsoft PowerPoint 2013 Folien gemeinsam nutzen Folien gemeinsam nutzen in PowerPoint 2013 Seite 1 von 4 Inhaltsverzeichnis Einleitung... 2 Einzelne

Mehr

SANDBOXIE konfigurieren

SANDBOXIE konfigurieren SANDBOXIE konfigurieren für Webbrowser und E-Mail-Programme Dies ist eine kurze Anleitung für die grundlegenden folgender Programme: Webbrowser: Internet Explorer, Mozilla Firefox und Opera E-Mail-Programme:

Mehr

impact ordering Info Produktkonfigurator

impact ordering Info Produktkonfigurator impact ordering Info Copyright Copyright 2013 veenion GmbH Alle Rechte vorbehalten. Kein Teil der Dokumentation darf in irgendeiner Form ohne schriftliche Genehmigung der veenion GmbH reproduziert, verändert

Mehr

Tevalo Handbuch v 1.1 vom 10.11.2011

Tevalo Handbuch v 1.1 vom 10.11.2011 Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche

Mehr

Standard-Kontaktformular

Standard-Kontaktformular Online-Tutorials Referat VI.5 Internetdienste Standard-Kontaktformular Legen Sie ein neues Dokument an Klicken Sie die Datei an, unter der Sie das Kontaktformular anlegen möchten Legen Sie über Datei >

Mehr

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.

Mehr

Anleitung zum GEPA EXCEL Import Tool

Anleitung zum GEPA EXCEL Import Tool Anleitung zum GEPA EXCEL Import Tool Mit diesem Tool können Sie Ihren GEPA Warenkorb (Weltläden und Gruppen) mit Hilfe von Excel-Listen, die Sie aus Ihrer Warenwirtschaft generieren oder händisch erstellen,

Mehr

Hilfe zur Urlaubsplanung und Zeiterfassung

Hilfe zur Urlaubsplanung und Zeiterfassung Hilfe zur Urlaubsplanung und Zeiterfassung Urlaubs- und Arbeitsplanung: Mit der Urlaubs- und Arbeitsplanung kann jeder Mitarbeiter in Coffee seine Zeiten eintragen. Die Eintragung kann mit dem Status anfragen,

Mehr

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................

Mehr

Präsentation zum Thema XML Datenaustausch und Integration

Präsentation zum Thema XML Datenaustausch und Integration Sebastian Land Präsentation zum Thema XML Datenaustausch und Integration oder Warum eigentlich XML? Gliederung der Präsentation 1. Erläuterung des Themas 2. Anwendungsbeispiel 3. Situation 1: Homogene

Mehr

Rundung und Casting von Zahlen

Rundung und Casting von Zahlen W E R K S T A T T Rundung und Casting von Zahlen Intrexx 7.0 1. Einleitung In diesem Werkstattbeitrag erfahren Sie, wie Zahlenwerte speziell in Velocity, aber auch in Groovy, gerundet werden können. Für

Mehr

http://train-the-trainer.fh-joanneum.at IINFO Storyboard

http://train-the-trainer.fh-joanneum.at IINFO Storyboard IINFO Storyboard Allgemeine Bemerkungen und Richtlinien zur Handhabung. Das Storyboard besteht aus einem Web, d.h. einer vernetzten Struktur von HTML-Seiten welche später von den Programmieren direkt als

Mehr

SICHERN DER FAVORITEN

SICHERN DER FAVORITEN Seite 1 von 7 SICHERN DER FAVORITEN Eine Anleitung zum Sichern der eigenen Favoriten zur Verfügung gestellt durch: ZID Dezentrale Systeme März 2010 Seite 2 von 7 Für die Datensicherheit ist bekanntlich

Mehr

Erstellen eines Formulars

Erstellen eines Formulars Seite 1 von 5 Word > Erstellen bestimmter Dokumente > Formen Erstellen von Formularen, die in Word ausgefüllt werden können Basierend auf einer Vorlage können Sie dieser Inhaltssteuerelemente und Hinweistext

Mehr

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit, Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit, Wie kann ein PDF File angezeigt werden? kann mit Acrobat-Viewern angezeigt werden auf jeder Plattform!! (Unix,

Mehr

Kurzeinführung Excel2App. Version 1.0.0

Kurzeinführung Excel2App. Version 1.0.0 Kurzeinführung Excel2App Version 1.0.0 Inhalt Einleitung Das Ausgangs-Excel Excel-Datei hochladen Excel-Datei konvertieren und importieren Ergebnis des Imports Spalten einfügen Fehleranalyse Import rückgängig

Mehr

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Seite erstellen Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken. Es öffnet sich die Eingabe Seite um eine neue Seite zu erstellen. Seiten Titel festlegen Den neuen

Mehr

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Folge 19 - Bäume. 19.1 Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12 Grundlagen: Folge 19 - Bäume 19.1 Binärbäume - Allgemeines Unter Bäumen versteht man in der Informatik Datenstrukturen, bei denen jedes Element mindestens zwei Nachfolger hat. Bereits in der Folge 17 haben

Mehr

Outlook Erstellen einer E-Mail aus einer HTML - Vorlage INHALT

Outlook Erstellen einer E-Mail aus einer HTML - Vorlage INHALT Outlook Erstellen einer E-Mail aus einer HTML - Vorlage INHALT LADEN DER VORLAGE 2 Öffnen Sie Outlook 2 Klicken Sie auf EXTRAS >> OPTIONEN 2 Im Optionenfeld von Outlook folgend Sie den Schritten 2 Fenster

Mehr

WordPress. Dokumentation

WordPress. Dokumentation WordPress Dokumentation Backend-Login In das Backend gelangt man, indem man hinter seiner Website-URL einfach ein /wp-admin dranhängt www.domain.tld/wp-admin Dabei gelangt man auf die Administrationsoberfläche,

Mehr

Einfügen von Bildern innerhalb eines Beitrages

Einfügen von Bildern innerhalb eines Beitrages Version 1.2 Einfügen von Bildern innerhalb eines Beitrages Um eigene Bilder ins Forum einzufügen, gibt es zwei Möglichkeiten. 1.) Ein Bild vom eigenem PC wird auf den Webspace von Baue-die-Bismarck.de

Mehr

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand: 01.01.2011

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand: 01.01.2011 .procmailrc HOWTO zur Mailfilterung und Verteilung Stand: 01.01.2011 Copyright 2002-2003 by manitu. Alle Rechte vorbehalten. Alle verwendeten Bezeichnungen dienen lediglich der Kennzeichnung und können

Mehr

Kommunikations-Management

Kommunikations-Management Tutorial: Wie importiere und exportiere ich Daten zwischen myfactory und Outlook? Im vorliegenden Tutorial lernen Sie, wie Sie in myfactory Daten aus Outlook importieren Daten aus myfactory nach Outlook

Mehr

Verarbeitung der Eingangsmeldungen in einem Callcenter

Verarbeitung der Eingangsmeldungen in einem Callcenter Q-up ist ein Produkt der: Anwendungsbeispiele Verarbeitung der Eingangsmeldungen in einem Callcenter Der Testdatengenerator Der Testdatengenerator Verarbeitung der Eingangsmeldungen in einem Callcenter

Mehr

XML Schema vs. Relax NG

XML Schema vs. Relax NG XML Schema vs. Relax NG p. 1/2 XML Schema vs. Relax NG Semistrukturierten Daten 1 Präsentation der Gruppe 2 XML Schema vs. Relax NG p. 2/2 Wozu XML Schema? W3C Empfehlung zur Definition von XML-Dokumentstrukturen

Mehr

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe

crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe crm-now/ps Webforms Webdesigner Handbuch Erste Ausgabe crm-now/ps Webforms: Webdesigner Handbuch Copyright 2006 crm-now Versionsgeschichte Version 01 2006-08-21 Release Version crm-now c/o im-netz Neue

Mehr

Urlaubsregel in David

Urlaubsregel in David Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5

Mehr

Die Excel Schnittstelle - Pro Pack

Die Excel Schnittstelle - Pro Pack Die Excel Schnittstelle - Pro Pack Die Excel Pro Pack ist eine Erweiterung der normalen Excel Schnittstelle, die in der Vollversion von POSWare Bestandteil der normalen Lizenz und somit für alle Lizenznehmer

Mehr

Kapiteltests zum Leitprogramm Binäre Suchbäume

Kapiteltests zum Leitprogramm Binäre Suchbäume Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm

Mehr

Excel Pivot-Tabellen 2010 effektiv

Excel Pivot-Tabellen 2010 effektiv 7.2 Berechnete Felder Falls in der Datenquelle die Zahlen nicht in der Form vorliegen wie Sie diese benötigen, können Sie die gewünschten Ergebnisse mit Formeln berechnen. Dazu erzeugen Sie ein berechnetes

Mehr

Codex Newsletter. Allgemeines. Codex Newsletter

Codex Newsletter. Allgemeines. Codex Newsletter Newsletter Newsletter Dezember 05 Seite 1 Allgemeines Newsletter Mit diesem Rundschreiben (Newsletter) wollen wir Sie in ca. zweimonatigen Abständen per Mail über Neuerungen in unseren Programmen informieren.

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Serienbrief aus Outlook heraus Schritt 1 Zuerst sollten Sie die Kontakte einblenden, damit Ihnen der Seriendruck zur Verfügung steht. Schritt 2 Danach wählen Sie bitte Gerhard Grünholz 1 Schritt 3 Es öffnet

Mehr

Einführung in. Logische Schaltungen

Einführung in. Logische Schaltungen Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von

Mehr

teischl.com Software Design & Services e.u. office@teischl.com www.teischl.com/booknkeep www.facebook.com/booknkeep

teischl.com Software Design & Services e.u. office@teischl.com www.teischl.com/booknkeep www.facebook.com/booknkeep teischl.com Software Design & Services e.u. office@teischl.com www.teischl.com/booknkeep www.facebook.com/booknkeep 1. Erstellen Sie ein neues Rechnungsformular Mit book n keep können Sie nun Ihre eigenen

Mehr

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E S TAND N OVEMBE R 2012 HANDBUCH T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E Herausgeber Referat Informationstechnologie in der Landeskirche und im Oberkirchenrat Evangelischer Oberkirchenrat

Mehr

ipin CSV-Datenimport (Mac OS X)

ipin CSV-Datenimport (Mac OS X) ipin CSV-Datenimport (Mac OS X) ipin bietet Ihnen die Möglichkeit, Daten aus anderen Programmen oder Datenquellen zu importieren. Dies ist vor allem dann sehr hilfreich, wenn große Datenmengen in ipin

Mehr

Hilfedatei der Oden$-Börse Stand Juni 2014

Hilfedatei der Oden$-Börse Stand Juni 2014 Hilfedatei der Oden$-Börse Stand Juni 2014 Inhalt 1. Einleitung... 2 2. Die Anmeldung... 2 2.1 Die Erstregistrierung... 3 2.2 Die Mitgliedsnummer anfordern... 4 3. Die Funktionen für Nutzer... 5 3.1 Arbeiten

Mehr

PowerPoint 2010 Mit Folienmastern arbeiten

PowerPoint 2010 Mit Folienmastern arbeiten PP.002, Version 1.1 07.04.2015 Kurzanleitung PowerPoint 2010 Mit Folienmastern arbeiten Der Folienmaster ist die Vorlage für sämtliche Folien einer Präsentation. Er bestimmt das Design, die Farben, die

Mehr

Sie werden sehen, dass Sie für uns nur noch den direkten PDF-Export benötigen. Warum?

Sie werden sehen, dass Sie für uns nur noch den direkten PDF-Export benötigen. Warum? Leitfaden zur Druckdatenerstellung Inhalt: 1. Download und Installation der ECI-Profile 2. Farbeinstellungen der Adobe Creative Suite Bitte beachten! In diesem kleinen Leitfaden möchten wir auf die Druckdatenerstellung

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen und Übersetzer Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Erklärung zum Internet-Bestellschein

Erklärung zum Internet-Bestellschein Erklärung zum Internet-Bestellschein Herzlich Willkommen bei Modellbahnbau Reinhardt. Auf den nächsten Seiten wird Ihnen mit hilfreichen Bildern erklärt, wie Sie den Internet-Bestellschein ausfüllen und

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Lieber SPAMRobin -Kunde!

Lieber SPAMRobin -Kunde! Lieber SPAMRobin -Kunde! Wir freuen uns, dass Sie sich für SPAMRobin entschieden haben. Mit diesem Leitfaden möchten wir Ihnen die Kontoeinrichtung erleichtern und die Funktionen näher bringen. Bitte führen

Mehr

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt Objektorientierter Software-Entwurf Grundlagen 1 1 Einordnung der Veranstaltung Analyse Design Implementierung Slide 1 Informationssystemanalyse Objektorientierter Software-Entwurf Frühe Phasen durch Informationssystemanalyse

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

XML-Austauschformat für Sicherheitsdatenblätter

XML-Austauschformat für Sicherheitsdatenblätter XML-Austauschformat für Sicherheitsdatenblätter Version 2.0 / 15. Dezember 2008 www.edas.org 1 XML-Austauschformat für Sicherheitsdatenblätter Der Austausch der Sicherheitsdatenblätter erfolgt als XML-Datei.

Mehr

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG it4sport GmbH HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG Stand 10.07.2014 Version 2.0 1. INHALTSVERZEICHNIS 2. Abbildungsverzeichnis... 3 3. Dokumentenumfang... 4 4. Dokumente anzeigen... 5 4.1 Dokumente

Mehr

Doku zur Gebäudebrüter Datenbank

Doku zur Gebäudebrüter Datenbank Autor: Christina Baradari, christina.baradari@berlin.de, 0162 2008 114 Doku zur Gebäudebrüter Datenbank Team Web Programmierer: Rahim Baradari Inhaltsverzeichnis 1 Suchen nach Kartierungsdaten... 2 1.1

Mehr

WEBSEITEN ENTWICKELN MIT ASP.NET

WEBSEITEN ENTWICKELN MIT ASP.NET jamal BAYDAOUI WEBSEITEN ENTWICKELN MIT ASP.NET EINE EINFÜHRUNG MIT UMFANGREICHEM BEISPIELPROJEKT ALLE CODES IN VISUAL BASIC UND C# 3.2 Installation 11 Bild 3.2 Der Webplattform-Installer Bild 3.3 IDE-Startbildschirm

Mehr

SEPA Lastschriften. Ergänzung zur Dokumentation vom 27.01.2014. Workshop Software GmbH Siemensstr. 21 47533 Kleve 02821 / 731 20 02821 / 731 299

SEPA Lastschriften. Ergänzung zur Dokumentation vom 27.01.2014. Workshop Software GmbH Siemensstr. 21 47533 Kleve 02821 / 731 20 02821 / 731 299 SEPA Lastschriften Ergänzung zur Dokumentation vom 27.01.2014 Workshop Software GmbH Siemensstr. 21 47533 Kleve 02821 / 731 20 02821 / 731 299 www.workshop-software.de Verfasser: SK info@workshop-software.de

Mehr

ARCO Software - Anleitung zur Umstellung der MWSt

ARCO Software - Anleitung zur Umstellung der MWSt ARCO Software - Anleitung zur Umstellung der MWSt Wieder einmal beschert uns die Bundesverwaltung auf Ende Jahr mit zusätzlicher Arbeit, statt mit den immer wieder versprochenen Erleichterungen für KMU.

Mehr

Bauteilattribute als Sachdaten anzeigen

Bauteilattribute als Sachdaten anzeigen Mit den speedikon Attributfiltern können Sie die speedikon Attribute eines Bauteils als MicroStation Sachdaten an die Elemente anhängen Inhalte Was ist ein speedikon Attribut?... 3 Eigene Attribute vergeben...

Mehr

EasyWk DAS Schwimmwettkampfprogramm

EasyWk DAS Schwimmwettkampfprogramm EasyWk DAS Schwimmwettkampfprogramm Arbeiten mit OMEGA ARES 21 EasyWk - DAS Schwimmwettkampfprogramm 1 Einleitung Diese Präsentation dient zur Darstellung der Zusammenarbeit zwischen EasyWk und der Zeitmessanlage

Mehr

Data Mining: Einige Grundlagen aus der Stochastik

Data Mining: Einige Grundlagen aus der Stochastik Data Mining: Einige Grundlagen aus der Stochastik Hagen Knaf Studiengang Angewandte Mathematik Hochschule RheinMain 21. Oktober 2015 Vorwort Das vorliegende Skript enthält eine Zusammenfassung verschiedener

Mehr

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH MORE Profile Pass- und Lizenzverwaltungssystem erstellt von: Thorsten Schumann erreichbar unter: thorsten.schumann@more-projects.de Stand: MORE Projects GmbH Einführung Die in More Profile integrierte

Mehr

AZK 1- Freistil. Der Dialog "Arbeitszeitkonten" Grundsätzliches zum Dialog "Arbeitszeitkonten"

AZK 1- Freistil. Der Dialog Arbeitszeitkonten Grundsätzliches zum Dialog Arbeitszeitkonten AZK 1- Freistil Nur bei Bedarf werden dafür gekennzeichnete Lohnbestandteile (Stundenzahl und Stundensatz) zwischen dem aktuellen Bruttolohnjournal und dem AZK ausgetauscht. Das Ansparen und das Auszahlen

Mehr

Titel. SCSM 2012 - ITIL - CMDB - neue CI Klasse erstellen und benutzen. Eine beispielhafte Installationsanleitung zur Verwendung im Testlab

Titel. SCSM 2012 - ITIL - CMDB - neue CI Klasse erstellen und benutzen. Eine beispielhafte Installationsanleitung zur Verwendung im Testlab Autor: Thomas Hanrath Microsoft Certified Trainer Titel SCSM 2012 - ITIL - CMDB - neue CI Klasse erstellen und benutzen Eine beispielhafte Installationsanleitung zur Verwendung im Testlab Quelle: System

Mehr

e LEARNING Kurz-Anleitung zum Erstellen einer Sprechzeit

e LEARNING Kurz-Anleitung zum Erstellen einer Sprechzeit Kurz-Anleitung zum Erstellen einer Sprechzeit Foto: E-Learning Service Die Aktivität Sprechzeit (oder Terminplaner) ermöglicht es Dozierenden, auf einfache Weise Sprechstunden- oder auch Prüfungstermine

Mehr

3. GLIEDERUNG. Aufgabe:

3. GLIEDERUNG. Aufgabe: 3. GLIEDERUNG Aufgabe: In der Praxis ist es für einen Ausdruck, der nicht alle Detaildaten enthält, häufig notwendig, Zeilen oder Spalten einer Tabelle auszublenden. Auch eine übersichtlichere Darstellung

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

Wann ist eine Software in Medizinprodukte- Aufbereitungsabteilungen ein Medizinprodukt?

Wann ist eine Software in Medizinprodukte- Aufbereitungsabteilungen ein Medizinprodukt? DGSV-Kongress 2009 Wann ist eine Software in Medizinprodukte- Aufbereitungsabteilungen ein Medizinprodukt? Sybille Andrée Betriebswirtin für und Sozialmanagement (FH-SRH) Prokuristin HSD Händschke Software

Mehr

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Excel-Schnittstelle Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können. Voraussetzung: Microsoft Office Excel ab Version 2000 Zum verwendeten Beispiel:

Mehr

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Bedienungsanleitung Anlassteilnehmer (Vereinslisten) Bedienungsanleitung Anlassteilnehmer Dieses Programm ist speziell für Vereine entworfen. Es ist lizenzfrei verwendbar und gratis. Das Programm ist mit Excel 2010 erstellt worden und enthält VBA Programmierungen,

Mehr

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten Version 1.0 Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten In unserer Anleitung zeigen wir Dir, wie Du Blogbeiträge

Mehr

XML Tutorium mit Oxygen. Oxygen Version 9.3!!

XML Tutorium mit Oxygen. Oxygen Version 9.3!! XML Tutorium mit Oxygen (Version 1.9 vom 4.6.2013) Oxygen Version 9.3!! In den folgenden Lektionen sollen die vermittelten Konzepte zu XML anhand von konkreten Beispielen geübt und vertieft werden. Das

Mehr

Success! Bestellausgabe

Success! Bestellausgabe Success! Bestellausgabe 2 Bestellausgabe in SUCCESS! Für die Anbindung an die Bestellsysteme ihrer Lieferanten ist es möglich, die in Success! erzeugten Bestellungen, in eine Datei auszugeben und optional

Mehr

Handbuch zum Excel Formular Editor

Handbuch zum Excel Formular Editor Handbuch zum Excel Formular Editor Mit diesem Programm können Sie die Zellen von ihrer Excel Datei automatisch befüllen lassen. Die Daten können aus der Coffee Datenbank, oder einer weiteren Excel Datendatei

Mehr

Use Cases. Use Cases

Use Cases. Use Cases Use Cases Eigenschaften: Ein Use Case beschreibt einen Teil des Verhaltens eines Systems aus externer Sicht (Formuliert in der der Fachsprache der Anwendung) Dies geschieht, indem ein Systemdialog beschrieben

Mehr

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt?

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt? Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt? Behandelte Fragestellungen Was besagt eine Fehlerquote? Welche Bezugsgröße ist geeignet? Welche Fehlerquote ist gerade noch zulässig? Wie stellt

Mehr

Allgemeiner Leitfaden zum Einfügen suchmaschinenoptimierter Texte

Allgemeiner Leitfaden zum Einfügen suchmaschinenoptimierter Texte Allgemeiner Leitfaden zum Einfügen suchmaschinenoptimierter Texte Wir von Textprovider, Anbieter von produktbeschreibung.eu möchten Ihnen mit diesem Infoblatt Basisinformationen an die Hand geben, wie

Mehr

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken. In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht

Mehr

Registrierung am Elterninformationssysytem: ClaXss Infoline

Registrierung am Elterninformationssysytem: ClaXss Infoline elektronisches ElternInformationsSystem (EIS) Klicken Sie auf das Logo oder geben Sie in Ihrem Browser folgende Adresse ein: https://kommunalersprien.schule-eltern.info/infoline/claxss Diese Anleitung

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

Um sich zu registrieren, öffnen Sie die Internetseite www.doodle.de und wählen Sie dort rechts oben

Um sich zu registrieren, öffnen Sie die Internetseite www.doodle.de und wählen Sie dort rechts oben Doodle Anleitung Konto erstellen Die Registrierung eines Benutzerkontos ist für Umfragen nicht erforderlich. Sollten Sie jedoch öfters Umfragen erstellen, ist dies aus Gründen der Übersicht und Einfachheit

Mehr

XSL Templates. Mit Templates arbeiten. XSL Templates

XSL Templates. Mit Templates arbeiten. XSL Templates XSL Templates Mit Templates arbeiten Innerhalb von XSLT werden Templates verwendet. Ein Template ist eine Vorlage für die Transformation bestimmter Knoten. Diese Knoten können Elemente, Attribute oder

Mehr

Vorgaben und Erläuterungen zu den XML-Schemata im Bahnstromnetz

Vorgaben und Erläuterungen zu den XML-Schemata im Bahnstromnetz Anwendungshandbuch Vorgaben und Erläuterungen zu den XML-Schemata im Bahnstromnetz Version: 1.0 Herausgabedatum: 31.07.2015 Ausgabedatum: 01.11.2015 Autor: DB Energie http://www.dbenergie.de Seite: 1 1.

Mehr