Die Umsetzung

Um aus dieser losen Sammlung von XML-Dokumenten die endgültige Darstellung zu bauen, wurden mehrere Scripte benötigt. Zunächst (merge.py) werden die einzelnen Kapitel mit ihren Kommentaren eingelesen, Titel und Kurztitel extrahiert und zusammen mit der Strukturdatei das Inhaltsverzeichnis aufgebaut sowie Referenzen auf das vorherige, nächste und übergeordnete Kapitel eingetragen. In einem Zwischenschritt (makedirectory.py) werden noch fehlende Inhaltsverzeichnis-Seiten generiert. Nun werden die die Referenzen aufgelöst, externe Links, Autor-Hinweise und Stichworte erzeugt (finishxml.py). Mit einem weiteren Script (makedict.py) werden Wörterbuch-Einträge abgeglichen und in einzelne Dateien abgelegt. Die erzeugte XML-Dateien werden dann auf den Server kopiert, wo ein JavaServlet diese beim Aufruf in per XSLT in HTML umsetzt.

Das ganze ist nicht so komplex wie es klingt, aber eine Menge Tipparbeit: die (spärlich kommentierten) Python-Scripte sind insgesamt 1400 Zeilen lang. Insgesamt war die Python-Implementierung unter Verwendung von pyxml ca. 3 mal langsamer als die vorherige Perl-Implementierung mittels XML::LibXML. Kein Wunder: XML::LibXML ist eigentlich nicht viel mehr als ein Wrapper für libxml2 ein Großteil des Codes läuft dort als C-Kompilat. Pyxml dagegen ist komplett in Python implementiert -- und Python ist für Baumstrukturen wirklich nicht die optimale Sprache.

Dies ist auch der Grund, warum die Neuimplementierung weiterhin das XML nur bei einer Änderung einmal parsed und beim Zugriff die fertigen HTML-Fragmente einfach zusammensetzt. Zumal die Verzeichniserstellung per Datenbankabfrage der Metadaten so deutlich einfacher und schneller ist und so "online"-fähig wird.