Java, XSLT und das Web

(Auszug aus "Java und XSLT" von Eric M. Burke)

XSLT (eXtensible Stylesheet Language Transformations) wurde geschaffen, um XML-Daten in eine andere Form, meistens HTML, XHTML oder ein anderes XML-Format zu überführen. Ein XSLT-Prozessor, wie beispielsweise Apaches Xalan, führt unter Verwendung von einem oder mehreren XSLT-Stylesheets – das sind spezielle XML-Dokumente – solche Format-Transformationen durch. Wie in folgender Abbildung zu erkennen, wird XSLT im webseitigen Teil der Anwendung (Webschicht) eingesetzt, während der Browser auf der Clientseite nur mit HTML in Berührung kommt.

XSLT-Transformation

Abbildung: XSLT-Transformation

Typischerweise werden in einer XSLT- und Java-basierten Webanwendung XML-Daten dynamisch aus Datenbankabfragen generiert. Obwohl neuere Datenbanken Daten oft unmittelbar als XML exportieren können, wird vielfach eigener Java-Code geschrieben, der über JDBC auf die Daten zugreift und diese nach XML konvertiert. Solche XML-Daten, beispielweise ein Flugplan oder eine Einkommensteuertabelle, müssen unter Umständen für jedes Programm, das die Anwendung nutzt, gesondert aufbereitet werden. Um solche XML-Daten in der Mehrzahl der Browser anzeigen zu können, müssen sie zunächst nach HTML konvertiert werden. Wie der Abbildung oben zu sehen, wird dem XSLT-Prozessor gleichzeitig mit den XML-Daten auch ein XSLT-Stylesheet zugeführt. Ausgegeben wird ein HTML-Datenstrom, der direkt zum Browser übertragen wird. Das XSLT-Stylesheet erzeugt dabei die HTML-Formatanweisungen, während XML die Rohdaten liefert.

Was ist so schlecht an HTML?

Eins der fundamentalen Probleme von HTML ist seine willkürliche Umsetzung. Obwohl die Spezifikationen für HTML vom World Wide Web Consortium (W3C) veröffentlicht wurde, wurde die Entwicklung dieser Sprache hauptsächlich durch den Wettbewerb zwischen Netscape und Microsoft vorangetrieben. Das Fehlen eines durchdachten Designprozesses und offener Standards resultierte in einer aufgeblähten Sprache, verstopft von browserspezifischen Tags und inkonsistenter Unterstützung der Standards. Da keine zwei Browser dieselbe Teilmenge von HTML unterstützen, sind die Webautoren dazu übergegangen, sich selbst auf das kleinste gemeinsame Vielfache zu beschränken. Ein zweiter, oft beschrittener Weg ist das Erstellen von separaten Kopien einer Webseite, jeweils für einen anderen Browser. Die Einschränkungen von HTML wirken sich noch stärker bei dynamischen Websites aus, wo oftmals Java-Programme auf unternehmensweite Datenquellen zugreifen und die daraus entnommenen und aufbereiteten Daten durch einen Browser darstellen lassen.

Informationen aus solchen Datenquellen aufzubereiten ist wesentlich schwieriger als die Erstellung von Websites. Hier braucht man geschickte Programmierer, die den Umgang mit Enterprise JavaBeans oder relationalen Datenbanken beherrschen. Solche Programmierer sind allerdings eine seltene und teure Ressource, weswegen sie meist nur für die Programmierung an Back-end-Datenquellen und der eigentlichen Anwendungsfunktionalität eingesetzt werden, während Webseiten-Entwickler und weniger erfahrene Programmierer an der HTML-Benutzerschnittstelle arbeiten. Wie wir unter Java-basierte Webtechnologien noch sehen werden, kann diese Aufgabenteilung jedoch bei Verwendung von Java-Servlets zu Problemen führen, denn hier sind Programmcode und Code zur HTML-Generierung oft vermischt.

Daten und Darstellung trennen

HTML trennt Daten nicht von ihrer Darstellung. Der folgende Teil eines HTML-Dokuments zeigt beispielsweise Informationen über einen Kunden an. Datenfelder wie »Stephan« und »Offenhammer« sind hier fest mit Formatelementen wie <tr> und <td> verwoben:

<h3>Kundeninformation</h3>
<table border="1" cellpadding="2" cellspacing="0">
    <tr><td>Vorname:</td><td>Stephan</td></tr>
    <tr><td>Nachname:</td><td>Offenhammer</td></tr>
    <!-- etc... -->
</table>

Gewöhnlich wird solcher HTML-Code mit der println()-Anweisung in einem Servlet dynamisch erzeugt, vielleicht durch eine JavaServer Page (JSP). Beide erfordern Java-Programmierer, und keine der beiden Technologien trennt den Programmcode der Anwendung und die Daten explizit vom Code zur HTML-Generierung. Um nun mehrere inkompatible Browser zu unterstützen, ist Vorsicht geboten, damit doppelter Code vermieden wird. Diese Vorsicht ist aber nur eine zusätzliche und unnötige Last für Java-Programmierer, die sich mit wichtigeren Problemen auseinandersetzen müssen.

Es gibt natürlich Mittel und Wege, die Programmlogik von der HTML-Erzeugung zu trennen, sinnvolle Daten aus HTML-Seiten zu entnehmen ist jedoch nahezu unmöglich. Schuld ist die Tatsache, daß HTML keine Auskunft gibt, wie seine Daten strukturiert sind. Ein Mensch kann sich den HTML-Code anschauen und erschließen, was die Felder bedeuten, aber schreiben Sie mal ein Computerprogramm, das die Bedeutung der Felder ebenso zuverlässig ermitteln kann. Natürlich kann man nach Textmustern wie Vorname: gefolgt von <td> suchen, diese Methode – häufig auch als »den Bildschirm durchforsten« (engl. »screen scraping«) bezeichnet – wird aber scheitern, sobald die Darstellungsweise beispielsweise wie folgt geändert wird:

<tr><td>Name:</td><td>Stephan Offenhammer</td></tr>

Die XSLT-Lösung

XSLT eröffnet die Möglichkeit, die Rollen von Java, XML, XSLT und HTML klar festzulegen. Java ist für die Programmlogik, Datenbankabfragen und -änderungen sowie die Erzeugung von XML-Daten zuständig. XML verwaltet die Rohdaten und XSLT wandelt XML in HTML um, damit es von einem Browser angezeigt werden kann. Hauptvorteil dieser Methode ist die klare Trennung zwischen den XML-Daten und der HTML-Darstellung. Um mehrere Browser zu unterstützen, werden hierbei einfach mehrere XSLT-Stylesheets erstellt, die alle dieselben XML-Daten vom Server verwenden. Die XML-Daten zum vorangegangenen Beispiel enthalten keine einzige Formatanweisung:

<kunde>
  <vorname>Stephan</vorname>
  <nachname>Offenhammer</nachname>
</kunde>

Da XML nur Daten enthält, ist es fast immer übersichtlicher als HTML. Zusätzlich kann XML über eine Java-API wie JDOM erstellt werden. Das erleichtert Fehlersuche und Überprüfung, also etwas, das nicht möglich ist, wenn Sie HTML mit den PrintWriter- und println()-Anweisungen in einem Servlet als Text ausgeben.

Das Beste an der ganzen Sache ist jedoch: Der Code zur XML-Generierung muß nur einmal geschrieben werden. Die XML-Daten können dann von beliebig vielen XSLT-Stylesheets umgewandelt werden und so neben unterschiedlichen Browsern auch mehrere Sprachen oder sogar ganz andere Geräte wie Handys oder PDAs unterstützen.

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Java & XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Java und XSLT" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de