XML - Grundlagen, Prinzipien und Anwendungen

Veranstaltung im Sommersemester 2006

Aufgabe 7 - Abbildung von XML nach HTML

Abgabe bis 5.6.2006


In Aufgabe 4 wurde der Umgang mit einem speziellen XML-Dokument geübt, indem XPaths zu verschiedenen Fragestellungen erstellt werden mussten. Als weitergehende Aufgabenstellung muss in dieser Aufgabe nun das gleiche XML-Dokument verwendet werden, um daraus per XSLT ein HTML-formatiertes Verzeichnis aller Topics zu erstellen.

Als Eingabe für die Stylesheets muss die Topic Map aus Aufgabe 4 akzeptiert werden, als Ausgabe soll ein HTML-Dokument dieser Topic Map resultieren, das im folgenden näher beschrieben wird.


Grundidee

Das zu erstellende Dokument soll ein alphabetisches Inhaltsverzeichnis und eine Beschreibung aller existierenden Topics enthalten. Jeder Eintrag im Inhaltsverzeichnis muss mit der zugehörigen Beschreibung des Topics verlinkt sein. Die Beschreibungen der einzelnen Topics sollen dabei alle im gleichen Dokument enthalten sein. Als Beispiel dient das Glossary unter http://dret.net/glossary/. Bei diesem Beispiel sind die Beschreibungen der Topics allerdings auf mehrere Dokumente verteilt.


Vorgehen

Um die geforderte Liste zu erstellen, bietet es sich an, einen Zwischenschritt zu definieren, der zunächst alle relevanten Topics in einer Liste zusammenfasst. Diese Liste kann man auf zwei Arten behandeln:

  1. Die Liste wird als XML erzeugt und von einem weiteren Stylesheet verarbeitet. In diesem Fall hat man mehr Kontrolle über den Zwischenschritt (man kann die Liste anschauen und kontrollieren), aber die Verarbeitung findet in zwei getrennten XSLT-Schritten statt, was ineffizient und unelegant ist.
  2. Die Liste wird als Inhalt einer Variablen erzeugt. In diesem Fall bekommt man Probleme mit XSLT 1.0, weil dort Variablen, die Result Tree Fragments enthalten, nicht per XPath Location Paths verarbeitet werden können. Um dieses Problem zu umgehen, muss man entweder XSLT 1.1 verwenden, das diese Einschränkung aufhebt, oder einen XSLT 1.0 Prozessor verwenden, der die node-set() Funktion (oder eine ähnlich lautende) unterstützt, mit der ein Result Tree Fragment in ein Node Set umgewandelt werden kann. Diese Funktion ist dann jedoch spezifisch für diesen Prozessor und nicht Teil eines Standards.

Beide Lösungswege werden akzeptiert, jedoch ist der zweite Weg zweifellos der elegantere. Dafür erfordert er spezielle Anforderungen an den XSLT-Prozessor (XSLT 1.1 Support oder eine node-set() Funktion) und ist daher weniger portabel als der erste.

Zur Unterstützung der soeben erwähnten Features auf den tardis-Maschinen: Per Default wird auf den tardis Maschinen bei der unten beschriebenen Verwendung von Stylesheets Saxon verwendet, der XSLT 1.1 unterstützt und damit Variablen als Node Sets behandeln kann. Man kann allerdings per Menu auch Xalan auswählen, der XSLT 1.1 nicht unterstützt, dafür aber eine eigene nodeset() Funktion implementiert, die verwendet werden kann.


Abgabe

Die Abgabe der Übung besteht darin, das oder die erstellten Stylesheets an den Betreuer zu mailen, am besten durch Klick auf den Abgabe Übung 7 Link.

Bei der Lösung der Aufgabe sind folgende Anforderungen zu berücksichtigen:

  1. Bei der Sortierung der Topics müssen Gross- und Kleinbuchstaben gleich behandelt werden, bei allen anderen Zeichen kann die vom XSLT-Prozessor vorgegebene Sortierung beibehalten werden.
  2. Nur die Topics, bei denen das domain Attribute auf den Wert wwww gesetzt ist, sollen in das Inhaltsverzeichnis aufgenommen werden.
  3. Welche Informationen die Beschreibungen der Topics genau enthalten, ist freigestellt. Als Minimalanforderung gilt der in der Topic Description enthaltene Text. Enthält die Topic Description Referenzen auf andere im Verzeichnis enthaltene Topics, sollen diese entsprechend verlinkt werden.

XSLT auf den tardis Maschinen

Mit dem Exchanger XML Lite

Der Exchanger XML Lite Editor bietet über das Menu "Transform" die Ausführung von XSL Transformationen. Dabei kann man bestimmen, welcher von den beiden zur Verfügung stehenden XSLT Prozessoren (Xalan oder Saxon) verwendet wird. Der Exchanger verfügt auch über einen Debugger, welcher von dem Editor, aber auch als Standalone-Programm aufgerufen werden kann. Der Standalone-Modus ist vor allem für speicherintensive Transformationen geeignet. Eine ausführliche Beschreibung des Debuggers ist hier zu finden.

Um den Debugger von der Kommandozeile aus aufzurufen, muss nach dem Standardbefehl einfach noch die Option -debugger angehängt werden:

$ ~xml06_00/xngrlite -debugger

Mit Emacs

Für die Lösung dieser Aufgabe kann auch Emacs verwendet werden. Auf den Tardis-Rechnern wurde Emacs mit einem XSLT-Prozessor erweitert, womit XSL-Stylesheets direkt aus Emacs heraus auf XML-Dokumente angewandt und die Resultate in einem separaten Buffer ausgegeben werden können. Alternativ kann die Ausgabe sogar auch direkt in einem Browser dargestellt werden. Der XSLT-Prozessor-Mode startet automatisch, sobald ein XSL- oder XML-Dokument geöffnet wird, und ist in Form des XSLT-Menus oben rechts sichtbar.

XSL-Stylesheets können nun auf zwei Arten auf XML-Dokumente angewandt werden:

In beiden Fällen wird der XSLT-Prozessor über das XSLT-Menu im Buffer des XML-Dokumentes gestartet mit

XSLT → Apply XSLT, View in buffer

Der XSLT-Prozessor in Emacs bietet zudem eine Debugging-Funktion für XSL-Stylesheets. Zu diesem Zweck können sowohl in XML- als auch in XSL-Dokumenten Breakpoints gesetzt werden:

XSLT → Toggle debug mode (Debugging einschalten)
XSLT → Set breakpoint

Ein Breakpoint in einem XML-Dokument hat zur Folge, dass die Ausführung stoppt, sobald der entsprechende Knoten zum Kontext-Knoten wird. Ein Breakpoint in einem XSL-Dokument bewirkt dagegen, dass die Ausführung stoppt, wenn die entsprechende Instruktion erreicht wird. Der Debugger wird gestartet mit

XSLT → Run debugger

Weitere Informationen dazu findet man auf der Homepage von XSLT-process.


please send comments to xml-vl@dret.net
last modification on Monday, 29-May-2006 11:49:02 PDT
valid CSS!valid XHTML 1.0!