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.
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.
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:
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.
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:
domain
Attribute auf den Wert wwww
gesetzt ist, sollen in das Inhaltsverzeichnis aufgenommen werden.Um den Debugger von der Kommandozeile aus aufzurufen, muss nach dem Standardbefehl einfach noch die Option -debugger angehängt werden:
$ ~xml06_00/xngrlite -debugger
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:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="url/to/stylesheet.xsl"?>
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 20:49:02 CEST |