![]() |
Comelio GmbH
|
Comelio-Blog > XSLT > Alternativen zu XSLT Alternativen zu XSLT
XSLT und seine AlternativenMit XSLT besitzt man eine sehr gute und in vielen Fällen auch die beste Möglichkeit, XML zu verarbeiten. Allerdings stellt diese Technologie bei weitem nicht die einzige Option dar, die im Rahmen einer Anwendung zum Einsatz kommen kann. Die Alternativen zu XSLT sollen in diesem Abschnitt vorgestellt werden. Einige von ihnen sind durchaus ernst zu nehmende Konkurrenten, andere dagegen führen ein Nischendasein und sind nicht häufig anzutreffen. Bisweilen kann es sogar sein, dass XSLT nicht notwendigerweise die geeignete Lösung zur Entwicklung und Umsetzung eines Algorithmus ist, weil zusätzliche Anforderungen an die verwendete Technik gestellt werden, die von XSLT noch nicht oder vermutlich niemals erfüllt werden.
Kriterien zur BewertungAls Leitmotiv für die Bewertung dieser Alternativen sollen drei Kriterien gelten. Mit ihrer Hilfe ist es möglich, wenigstens eine Diskussionsgrundlage zu besitzen, auf deren Basis eine Entscheidung mit guten Gründen für die eine oder andere Alternative bzw. natürlich auch für XSLT getroffen werden kann. Zusätzlich stellen sie in unseren Augen auch besonders wichtige Kriterien dar, die uns selbst in Kundengesprächen immer wieder helfen, herauszufinden, welche der möglichen Techniken tatsächlich die geeignete für ein bestimmtes Problem ist. Diese drei Kriterien sind:
Wie gerade schon kurz angedeutet, lassen sich wie in vielen Fällen eine große Zahl an weiteren Kriterien finden, die ebenfalls im Rahmen der Entscheidungsfindung herangezogen werden können. Zu diesen gehören beispielsweise folgende:
CSSDie einfachste Möglichkeit für Entwickler, die bereits Erfahrung mit HTML und CSS (Cascading Stylesheets) haben, stellt natürlich die Verarbeitung von XML mit Hilfe von CSS dar. Auf der technischen Seite sind allerhand Vorkehrungen zu treffen. Zu diesen zählen ein Browser, der am besten mindestens CSS 2 unterstützt, und ein XML-Dokument, das nur die Inhalte besitzt, die tatsächlich auch ausgegeben werden sollen, und dessen Struktur linear verarbeitet werden kann. Zusätzlich kann man sich die Arbeit sehr erleichtern, wenn man sich zwar ausführlich mit der Technik und dem Grundkonzept von CSS (ebenfalls vom W3C) beschäftigt, aber die genaue Syntax weitestgehend außer Acht lässt und sich vielmehr die Erstellung derselben von einem Webdesignprogramm mit CSS-Unterstützung abnehmen lässt. In Adobe GoLive®, MS Frontpage® oder Macromedia Dreamweaver® lassen sich CSS-Stile auf eine hervorragende Art und Weise wie Formatvorlagen in MS Word® über leicht verständliche und intuitive Benutzeroberflächen zusammenstellen, die auch hervorragenden Quelltext erzeugen. In vielen Programmen sind auch heute noch nicht alle Syntaxregeln von CSS zu finden, und leider sind die Dekorationsmöglichkeiten teilweise so umfangreich, dass sie in nur wenigen oder auch keinen Browsern umgesetzt werden können, doch im Großen und Ganzen findet man schnell heraus, welche Attribute verwendbar sind und welche nicht. Informationen zu CSS findet man neben unzähligen Darstellungen in Webdesign- und Entwicklerbüchern für Internetanwendungen natürlich insbesondere beim W3C. Hier lässt sich – wie bei allen Standards – auch sehr genau nachvollziehen, was technisch oder theoretisch möglich wäre und was möglicherweise zwar in einigen Webdesignprogrammen angeboten, aber ebenso möglicherweise in diesem und jenen Browsern (noch) nicht funktioniert.
Grundsätzlich stellt die Darstellung von XML-Daten mit Hilfe von CSS eine einfache Dekoration und Auszeichnung der in der Datei auffindbaren XML-Tags und Attributen dar. Dabei lassen sich mit Hilfe von CSS fast überhaupt keine komplexen Abläufe umsetzen. Schon gar nicht ist es möglich, Reihenfolge, Fallunterscheidungen oder Verarbeitungen wie z.B. in Form von Berechnungen durchzuführen. Dies ist nicht von prinzipieller Bedeutung für den Einsatz von CSS, doch zwingt diese Tatsache die Dokumente in eine besonders einfache Form, da sie nur linear von oben nach unten zu verarbeiten sind und »hier und da« typische Formateigenschaften wie Block-, Absatz- und Zeichenformate anzugeben sind. Über die Blockstrukturen von CSS lassen sich dann auch Formate wie Absätze, Blöcke und Rahmen erstellen. Ein so genannter Selektor greift über die allgemeine Syntax Selektor {Eigenschaft: Wert} auf Elemente im XML-Dokument zu und weist ihnen aus den zahlreichen Möglichkeiten der Formatierung geeignete Formate zu. Dabei lassen sich letztendlich allerdings nur dekorative Eigenschaften für die Textgestaltung verwenden und bei Weitem keine anspruchsvollen Transformationen durchführen, wie sie gerade mit dem DOM oder natürlich XSLT möglich sind. Die geringe Komplexität der Syntax geht verständlicherweise mit einer geringen Komplexität der Transformationsmöglichkeiten einher. Wenn dies gerade sinnvoll ist oder die XML-Dateien derart einfach strukturiert sind und die Daten ohnehin nur in ein lesbares Format ohne XML-Tags und Attribute gebracht werden sollen, kann CSS eine denkbare Alternative sein. Dieser Umstand verringert auch die Lernkosten auf ein Minimum bzw. für Entwickler, die mit HTML/CSS bereits umgehen können, auf die bloße Erkenntnis, dass Element-Selektoren, wie sie für HTML-Tags verwendet werden können, auch für ein XML-Dokument nützlich sind. In CSS 2 sind sogar Attribut-Selektoren nötig, sodass die Dokumente nicht mehr auf Attribute verzichten müssen, sondern auch diese Strukturen aufweisen können. Zusätzlich besteht auch die Möglichkeit, die aus HTML bekannten Klassenselektoren über das Attribut class und die Wertzuweisung einer mit einem Punkt zu Beginn ausgezeichneten CSS-Vorlage zu verwenden. Dies erzeugt dann im XML-Dokument die Form <elementname class="cssvorlage"> und erfordert im CSS-Dokument die Syntax .Selektor {Eigenschaft: Wert}. Zu beachten ist an der zuletzt gezeigten allgemeinen Syntax der Punkt vor dem Selektornamen. Er stellt damit einen neuen Bezeichner dar und repräsentiert nicht einen Elementnamen, der als Bezeichner bereits vom XML-Dokument zur Verfügung gestellt wird. Insgesamt ist die Anwendung von CSS für die XML-Darstellung sehr einfach, kann schnell realisiert werden und erfordert letztendlich nur einen geeigneten Browser, der das Dokument darstellt. Problematisch wird es, wenn doch einmal etwas anspruchsvollere Darstellungen notwendig werden oder aus einem Dokument Daten gefiltert, sortiert bzw. anders verarbeitet werden sollen, als sie nur dekorativ darzustellen. Dann gibt es überhaupt keine Möglichkeit, dieses Ziel mit CSS zu erreichen, und man muss eigentlich notwendigerweise auf XSLT umsteigen, wenn man weiterhin eine schnelle Transformation im Browser durchführen möchte. SAXSAX (Simple API for XML) zählt zu den berühmten Quasi-Standards, die weniger auf den Rückhalt einer starken Organisation wie das W3C oder die ISO vertrauen dürfen, sondern mehr auf die Popularität ihrer Webseite (http://www.saxproject.org/) hoffen. In sehr vielen Programmiersprachen ist der SAX-Parser implementiert und lässt sich auf unterschiedliche Weise ansprechen und nutzen. In einigen Systemen ist er auch nicht mehr verfügbar, weil mehr auf das DOM und XSLT – also W3C-Standards – gesetzt wird als auf proprietäre Umsetzungen von Quasi-Standards. Die Verwendung in z.B. PHP ist relativ simpel, wenn auch im Vergleich zu anderen Möglichkeiten der XML-Verarbeitung die Anzahl benötigter Quelltextzeilen bei der Verwendung von SAX etwas umfangreicher ist. Das Kernstück des ereignisorientierten Transformationsprozesses ist eine Fallunterscheidung, in der den öffnenden und geschlossenen Tags, den Attributen und Textknoten geeignete Verarbeitungsanweisungen mit auf den Weg gegeben werden. Der Parser übersetzt dann den gesamten XML-Strom anhand der verschiedenen Fallunterscheidungen für die Ereignisse »Tag offen«, »Tag geschlossen« oder »Textknoten gefunden« in einen Ausgabestrom, der z.B. aus HTML-Tags bestehen kann. DOMDas Document Object Model ist wiederum ein vom W3C entwickelter Standard, der unterschiedliche Schnittstellen für die Bearbeitung von XML-Dateien bietet. Man muss deswegen von Bearbeitung sprechen, weil die verwendbaren Methoden gerade über eine bloße Transformation bzw. eine Umwandlung von einem Eingabe- in einen Ausgabestrom hinausgehen. Vielmehr gibt es auch solche Methoden, die man dafür einsetzen kann, ganz neue XML-Dokumente zu entwickeln, ohne dass die dabei eingesetzten Daten in irgendeiner Form aus einer anderen XML-Quelle stammen müssten. Nähere Informationen zu diesem Standard erhält man nicht in Büchern zu diesem Standard alleine, sondern nur in Kombination mit einer Programmiersprache. Möchte man also das DOM mit Java verwenden, so benötigt man ein entsprechendes Fachbuch zum Thema XML-Verarbeitung mit Java, in dem die einzelnen Methoden und typischen Programmstrukturen vorgestellt werden. Die offizielle Dokumentation ist in den Fällen interessant, in denen man beispielsweise die in einer Programmiersprache zur Verfügung stehenden Schnittstellen/Klassen des Parsers und ihre jeweiligen Methoden mit den theoretisch verfügbaren vergleichen möchte. Informationen findet man z.B. im Dokument Document Object Model (DOM) Level 3 Core Specification, Version 1.0, W3C Recommendation 07 April 2004 unter http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/. Die Verwendung des DOM ähnelt sich in den unterschiedlichen Programmiersprachen, doch ist eine Übertragung eines einmal entwickelten Algorithmus nur möglich, indem er in einer anderen Programmiersprache nachgebildet wird. Letztendlich verhält es sich mit dem DOM-Parser so, als würde man eine neue Funktionsbibliothek/Paket/Klasse oder Ähnliches verwenden. Die Transformation an sich ist direkt mit der Programmiersprache verwoben, wie dies auch bei SAX der Fall ist. Vorteilhaft sind die sehr hohe Komplexität und die Vielfalt im Einsatz des DOM. Es lassen sich neue Dokumente erzeugen, bestehende verändern und natürlich in andere Formate umwandeln. Dabei mag eine Veränderung auch eine Umwandlung sein, wenn XML nach XML gebracht wird. Da die Syntax sehr umfangreich ist, fügen wir einige kurze Ausschnitte aus einer allgemeinen Syntaxstruktur für die Schnittstelle zur Knoten-/Elementverarbeitung an, damit Sie sehen können, welche Möglichkeiten alleine für die Knotenverarbeitung existieren. Die verfügbaren Methoden wurden aus Platzgründen zusammengestrichen, aber es lässt sich dennoch gut nachvollziehen, wie umfangreich das Angebot ist. Attribute eines Elements verarbeiten in Form von Auslesen, Setzen, Löschen: interface Element : Node {
readonly attribute DOMString tagName;
DOMString getAttribute(in DOMString name);
void setAttribute(in DOMString name,
in DOMString value)
raises(DOMException);
void removeAttribute(in DOMString name)
raises(DOMException);
Attr getAttributeNode(in DOMString name);
Attr setAttributeNode(in Attr newAttr)
raises(DOMException);
Attr removeAttributeNode(in Attr oldAttr)
raises(DOMException);
NodeList getElementsByTagName(in DOMString name);
...
};
Eine Herausforderung für das Erlernen des DOM – erhöhte Lernkosten im Vergleich zu SAX – stellt die Vielzahl der verfügbaren Methoden und Datentypen dar. Insbesondere die Datentypen, die von Methoden zurückgegeben und von Methoden erwartet werden, erzeugen vorgegebene Programmstrukturen, die man zunächst erlernen muss, um zum gewünschten Ziel zu kommen. Dennoch erweist sich das Erlernen des DOM dann als sehr einfach, wenn man bereits gut mit einer anderen Programmiersprache vertraut ist. Dies erzeugt verständlicherweise niedrigere Lernkosten. Was die Komplexität anbetrifft, so haben wir bereits erwähnt, dass die Verwendung des DOM wesentlich über die Möglichkeiten von SAX (die Variante CSS kann hier praktisch gar nicht zum Vergleich herangezogen werden) hinausgeht. Zusätzliche Vorteile, die sich auch gegenüber XSLT ergeben, finden sich dann, wenn man während einer längeren Transformation Programmaktivitäten ausführen möchte, die nicht direkt mit der Transformation zusammenhängen, sondern z.B. Informationen aus einer Datenbank abrufen oder ergänzende Protokolltextdateien erstellen sollen. Da die Verarbeitung mit Hilfe des DOM direkt innerhalb einer anderen Programmiersprache erfolgt, lassen sich naturgemäß alle anderen Bibliotheken der Sprache verwenden. Gerade in solchen Fällen, in denen in einer Anwendung während einer Transformation noch zusätzliche Aktivitäten gleichzeitig ausgeführt werden sollen, bietet sich der Einsatz des DOM an. Zwar könnte man auch mit XSLT jeweils Teiltransformationen durchführen oder versuchen, Informationen, die zusätzlich aus Datenbankabfragen etc. benötigt werden, von vorneherein zu beschaffen und dem Prozessor als globale Parameter zu übergeben. Oftmals ist dies allerdings umständlich oder wird als Alternative nicht gewählt. XSLT eignet sich – kurz gesagt – insbesondere für solche Programmabläufe, in denen eine Quelle in ein Ziel umgewandelt werden soll und dieser Weg komplett und in einem einzigen Schritt durchgeführt werden soll. Einzelne Teiltransformationen durchzuführen ist zwar technisch eine ebenfalls gangbare Option, wird aber normalerweise nicht unbedingt ausgewählt, sofern nicht gerade andere Vorteile von XSLT höher bewertet werden als diese des DOM.
Seminare
|
||