XIST: Eine XML-Transformations-Engine
Zusammenfassung
XIST ist eine XML-Transformations-Engine, die komplett in Python bei LivingLogic AG, einem auf Webtechnologie spezialisierten Softwareentwicklungsunternehmen, geschrieben wurde. XIST wurde entwickelt, um die Erstellung und Wartung großer Websites zu vereinfachen.
Hintergrund
Schon bald nach Beginn der Erstellung von Webseiten im Jahr 1994 wurde klar, dass das manuelle Tippen von HTML-Dateien mühsam und umständlich ist, und wir begannen, nach Werkzeugen zu suchen, um die repetitive Aufgabe der HTML-Generierung zu vereinfachen.
Früh entdeckten wir einen HTML-Präprozessor namens hsc und begannen, ihn zu nutzen. Dieses Werkzeug unterstützte die Generierung von Seiten aus Vorlagen, indem es neue Markup-Tags definierte und steuerte, wie diese Tags in HTML transformiert wurden, ähnlich wie XML/XSL heute.
Leider hatte hsc bestimmte Einschränkungen: Es unterstützte keine lokalen Variablen und es gab keine Kontrollstrukturen außer bedingten Anweisungen. Selbst Arithmetik war nicht möglich. Unsere ersten Websites, die mit diesem System entwickelt wurden, bestanden aus einer Mischung aus hsc-Makros und Perl-Skripten, die hsc-Quelldateien generierten.
1998 stellte der Autor von hsc die Weiterentwicklung ein, und wir waren hoch motiviert, eine Alternative zu finden. Zuerst beschlossen wir, die Entwicklung von hsc selbst fortzusetzen und planten, es mit XML kompatibel zu machen, das zu dieser Zeit populär wurde. Aber die Erweiterung von hsc, das in C geschrieben ist, erwies sich als sehr schwierig. Zum Beispiel erforderte die Hinzufügung von Unicode-Unterstützung die Neufassung des gesamten I/O-Systems. Es wurde klar, dass wir ein anderes Werkzeugset für unsere Webentwicklung benötigten.
XIST ist geboren
Etwa zu dieser Zeit entdeckten wir Python und beschlossen, dass es ein guter Weg sein könnte, hsc von Grund auf neu zu schreiben. Python enthält XML-Parsing-Fähigkeiten, die wir als Grundlage für unsere Arbeit nutzen konnten: Anstatt Makros in hsc zu schreiben, konnten wir XML schreiben, das durch eine einfache Zuordnung von XML-Elementtypen zu Python-Klassen verarbeitet werden konnte.
Bei diesem Ansatz generiert XIST beim Parsen jeder XML-Datei ein erweitertes Document Object Model (DOM). Für jedes Element in der Datei definierte Klassen werden während der DOM-Generierung instanziiert, und Methoden der Klassen werden verwendet, um die notwendigen XML-Transformationen während der Seitengenerierung durchzuführen. Dies ermöglicht es uns, unsere Webvorlagen mit der vollen Leistung einer objektorientierten Skriptsprache zu realisieren.
Während der Implementierung stellten wir fest, dass alle Kernfunktionen von hsc in Python recht einfach unterstützt werden konnten
- Automatische Berechnung von Bildgrößen? Die Python Imaging Library erledigt dies mühelos.
- XML-Dateien parsen? In Python gibt es mehrere XML-Parser.
- XML in Datenbanken laden und speichern? Die Python DB-API ist standardisiert und es gibt Module für MySQL, Postgres, Interbase, Oracle, ODBC, Sybase und andere.
- XML aus dem Web abrufen? Pythons Standardbibliotheken urlparse und urllib sind dafür gemacht.
- Unicode verarbeiten? Python 2.0 unterstützt Unicode nativ.
Die Implementierung der ersten Prototypenversion dauerte einige Wochen nebenberuflicher Programmierung und war sehr erfolgreich. Python bot einen wesentlich kürzeren Weg von der Konzeption bis zur Implementierung als jede andere von uns verwendete Programmiersprache. Und so war XIST geboren.
Die Entwicklung von XIST wurde in Python fortgesetzt und heute ist XIST die Grundlage eines erfolgreichen Unternehmens mit 15 Mitarbeitern. XIST wird heute in allen unseren Webprojekten bei LivingLogic AG eingesetzt.
Content Management mit Python und JSP
Aufbauend auf XIST hat LivingLogic ein Content-Management-System namens XIST4C (4C steht für Content, Community, Collaboration und Commerce) entwickelt. Dieses System kombiniert die Vorteile von XISTs abstrahierten Seitenlayouts mit der Vortranspilierung von Seitenvorlagen zu Java Server Pages, die letztendlich zur Auslieferung des Inhalts an das Web verwendet werden.
Durch die Verwendung von XIST-Tag-Bibliotheken anstelle von JSP-Tag-Bibliotheken können wir optimierte Java Server Pages erstellen, die deutlich schneller laufen als ihre JSP-Tag-Bibliotheken-Gegenstücke, ohne Änderungen an den JSP-Dateien. Dieser Leistungszuwachs ergibt sich daraus, dass der XIST-Präprozessor viele rechenintensive Operationen übernimmt, die möglicherweise dynamische Typen-Introspektion, String-Verarbeitung usw. erfordern und vom Java-Tag-Bibliotheks-Code während des Seitenladens ausgeführt würden.
Schnelle Entwicklung kombiniert mit geringen Hardwareanforderungen macht XIST4C besonders geeignet für kleine und mittlere Unternehmen. Dies hat uns ermöglicht, einen einzigartigen Wettbewerbsvorteil zu erzielen und Projekte zu deutlich geringeren Kosten zu realisieren.
Prototyping von Java-Systemen mit Python
Im Jahr 2000 wurde LivingLogic beauftragt, ein Produkt zur Modellierung von Business-Process-Workflows zu entwickeln und Geschäftsprozesse zu automatisieren. Inspiriert von unseren früheren Erfolgen mit XIST beschlossen wir, einen Python-Prototyp zu entwickeln. Diese Entscheidung wurde getroffen, obwohl unser Vertrag die Erstellung eines Java-basierten Prototyps für die Auslieferung an eine große Gruppe von Entwicklern vorsah, die daraus ein marktfähiges Produkt machen sollten.
Der Ansatz, Python frühzeitig im Prototyping einzusetzen, ermöglichte es uns, Konzepte anhand von funktionierendem Code fast vom Beginn dieses Projekts an zu untersuchen. Obwohl wir unseren Python-Prototyp in Java umschreiben mussten, war die gesamte Prototyping-Zeit geringer als bei anderen Projekten, die ausschließlich Java nutzten.
Schlussfolgerung
Python ist leicht zu erlernen und zu verwenden, erzeugt wartbaren Code und bietet genügend Leistung, um es zu einer geeigneten Wahl für viele Anwendungsbereiche und Projektgrößen zu machen.
Einige der Funktionen, die wir an Python am meisten schätzen, sind:
- Pythons umfangreiche Standardbibliothek und eine beträchtliche Auswahl an verfügbaren Drittanbieterpaketen unterstützen die Entwicklung in vielen Anwendungsbereichen.
- Eine unaufdringliche Syntax und die weit verbreitete und konsistente Verwendung weniger grundlegender Konzepte wie Namespaces tragen dazu bei, Python-Code lesbar und wartbar zu machen.
- Umfangreiche und einfach zu bedienende Introspektionsmöglichkeiten machen Python leicht interaktiv erlernbar, indem man seine Fähigkeiten, einschließlich Dokumentation, von der Kommandozeile aus entdeckt.
- Python ist leicht in C oder C++ erweiterbar, sodass es einfach ist, Nicht-Python-Module in eine Anwendung zu integrieren.
Python hat eine wichtige Rolle für den Erfolg der LivingLogic AG gespielt und wird weiterhin die Grundlage für die meisten unserer Softwareentwicklungsanstrengungen bilden.
Über die Autoren
Bevor er 2000 seinen Doktortitel erhielt, forschte Dr. Walter Dörwald zu Waldwachstumssimulationen und künstlichem Leben am BITÖK (Bayreuther Institut für Waldökosystemforschung) und entwickelte ein großes C++-Framework für Simulation und Visualisierung. Im Jahr 2000 war er Mitbegründer der LivingLogic AG und ist seitdem für die grundlegenden Werkzeuge und Technologien des Unternehmens verantwortlich.
Nachdem er 1990 seinen Doktortitel in Mathematik erworben hatte, leitete Dr. Alois Kastner-Maresch das Forschungsteam für Waldökosystemsimulation am BITÖK. Im Jahr 2000 war er Mitbegründer der LivingLogic AG, wo er als CEO tätig ist.
