2.4 Vorteile der Kombination von Java und XML

Werbung
Java und XML
Seminarbeitrag von
Ralph-Peter Noll
Oldenburg, den 23.05.2001
Inhalt
1. Einleitung ................................................................................................................................... 3
2. Grundlagen................................................................................................................................. 4
2.1 XML..................................................................................................................................... 4
2.2 Exkurs: XML in „10“ Punkten .............................................................................................. 4
2.3 Java ...................................................................................................................................... 5
2.4 Vorteile der Kombination von Java und XML...................................................................... 6
2.5 Probleme dieser Kombination ............................................................................................... 7
3. Parsing von XML-Dokumenten .................................................................................................. 8
3.1 SAX...................................................................................................................................... 8
3.2 Erweiterungen bei SAX 2.0................................................................................................. 10
3.3 Diskussion SAX.................................................................................................................. 10
3.4 DOM .................................................................................................................................. 10
3.5 DOM Level 2...................................................................................................................... 13
3.6 Ausblick auf DOM Level 3 ................................................................................................. 15
3.7 Diskussion DOM ................................................................................................................ 15
3.8 JAXP .................................................................................................................................. 15
3.9 JDOM................................................................................................................................. 16
4 Anwendungen der Kombination Java und XML ........................................................................ 17
4.1 Java-gestützte Transformation von XML ............................................................................ 17
4.2 XML für Datenaustausch und Datenpersistenz .................................................................... 18
5. Fazit ......................................................................................................................................... 20
Anhang: Java und XML - Werkzeuge........................................................................................... 21
Parser ....................................................................................................................................... 21
IBM XML and Web Services Development Environment......................................................... 21
Apache ..................................................................................................................................... 21
Quellen......................................................................................................................................... 23
2
1. Einleitung
XML, die "Extensible Markup Language", ist viel mehr als eine Sprache zur Beschreibung von
Textdokumenten. Eine XML-Datei sieht einer HTML-Datei ähnlich, doch dies ist auch schon die
einzige Gemeinsamkeit. Die HTML-artigen ‚Tags' werden bei XML nicht nur zur Formatierung
von Text verwendet, sondern dienen zur Identifikation der Art der Daten, die in den Dokumenten
vorkommen, so daß diese Daten leicht in verschiedene Darstellungen umgewandelt und allgemein
leicht verarbeitet werden können. Eine wesentliche Rolle bei der Organisation und Finanzierung
der Entwicklung der Sprache XML spielte die Firma Sun, Urheber der plattformunabhängigen
Programmiersprache Java [Bray00].
Java wird von Sun als die ideale Plattform für server- und clientseitige XML-Verarbeitung
dargestellt. Mit Java lassen sich leicht portable und wartbare Programme schreiben, mit denen die
ebenfalls plattformunabhängigen, wiederverwendbaren XML-Datenbestände gelesen werden
können.
Neben den Produkten von Drittherstellern, hier sind vor allem IBM und Apache, aber auch
Microsoft zu nennen, gibt es auch von Sun einige Erweiterungen der "Java-Plattform" zur
Entwicklung XML-basierter Anwendungen.
Nun soll der Aufbau der Arbeit vorgestellt werden: In einem ersten Teil werden die Grundlagen zu
den Themen XML und Java beschreiben, um die Voraussetzungen für das Verständnis der
folgenden Kapitel zu schaffen. Daran wird sich ein umfangreicher Abschnitt über das Parsen von
XML anschließen. Parsen bedeutet, daß der XML-Text gelesen und in eine passende
programminterne Darstellung umgewandelt wird. Als dritter Teil soll eine Übersicht über mögliche
Anwendungsfelder der Kombination Java und XML gegeben werden. Abschließend werden einige
Werkzeuge für die Arbeit und Programmentwicklung mit den Technologien XML und Java kurz
vorgestellt.
3
2. Grundlagen
2.1 XML
Einfach erklärt handelt es sich bei XML (Extensible Markup Language) um ein System von
Regeln, anhand derer Informationen gekennzeichnet oder „etikettiert“ werden können. XML ist
deshalb so wichtig, weil es den Austausch von Informationen vereinfacht, und weil es auf
syntaktischer Ebene einen branchenübergreifenden Standard bietet, der universell zur Verarbeitung
und Verwaltung von Daten eingesetzt werden kann.
Die XML-Spezifikation bietet eine Sammlung verbindlicher Regeln, um sich für den eigenen
Bedarf eine HTML-artige Syntax zu definieren. Dokumente in dieser Syntax sind insbesondere
leicht auf deren korrekten formalen Einsatz verifizierbar und damit sehr gut für eine automatische
Verarbeitung geeignet. Strukturierten Daten kann so eine Form gegeben werden, die sowohl von
Menschen als auch von Maschinen ‚verstanden‘ werden kann.
2.2 Exkurs: XML in „10“ Punkten
Bert Bos, ein Mitglied des W3C, beschreibt XML unter der Überschrift „XML in 10 Punkten“
folgendermaßen [Bos99]:
1. XML ist ein Verfahren, strukturierte Daten in Textdokumente zu verpacken.
"Strukturierte Daten" sind beispielsweise Tabellen, Finanztransaktionen, Konfigurationsparameter oder Baupläne.
Diese müssen häufig auf Datenträgern gespeichert werden, entweder in einem binären Format oder als Text. Text hat
den Vorteil, daß man ihn auch ohne spezielle Programme betrachten kann. XML ist eine Sammlung von Regeln, um
das Format solcher Textdateien zu entwerfen. Ziele dabei sind
- Maschinenlesbarkeit: Daten sind leicht automatisch zu generieren / analysieren.
- Eindeutigkeit
- Allgemeinheit, Erweiterbarkeit
- leichte Internationalisierbarkeit
- Plattformunabhängigkeit
- Interoperabilität zwischen Produkten verschiedener Hersteller
2. XML sieht zwar aus wie HTML, ist aber anders.
In XML werden, genauso wie in HTML, Tags (<Tagname>) und Attribute (Attributname="wert") verwendet. Im
Gegensatz zu HTML, wo die Tags und Attribute und ihre Bedeutung fest spezifiziert sind, ist die Interpretation bei
XML beliebig. Tags dienen hier dazu, Daten zu benennen und voneinander abzugrenzen, wobei nur das jeweils lesende
Programm weiß, welche Bedeutung diesen zukommt. Ein <p> in HTML steht für einen neuen Absatz, in XML kann es
ein Preis, Produkt, Parameter - oder irgendetwas sein, das nicht mit ‚P' anfängt.
3. XML ist Text, wird aber normalerweise nicht von Menschen gelesen.
XML-Dateien eignen sich noch weniger als HTML-Dateien dazu, von Menschen gelesen (oder geschrieben) zu
werden. Die textuelle Codierung wurde gewählt, um die Programmentwicklung zu erleichtern, und in Notfällen per
Texteditor Korrekturen vornehmen zu können. Die Syntaxregeln von XML sind jedoch viel strenger als bei HTML, so
daß etwa ein fehlendes Tag oder fehlende Anführungszeichen die gesamte Datei unbrauchbar machen. Programme
dürfen, so ist es in der XML-Spezifikation festgeschrieben, keinesfalls versuchen, den Inhalt ungültiger XML-Dateien
zu erraten.
4
4. XML umfaßt eine ganze Sammlung von Technologien.
In der Spezifikation XML 1.0 wurde definiert, was ein Tag und was ein Attribut ist. Zusäzlich existieren immer mehr
optionale Module, in denen solche Tags und Attribute oder Richtlinien für bestimmte Anwendungen festgeschrieben
werden. Xlink beschreibt beispielsweise einen Standart, wie Hyperlinks in XML dargestellt werden. XPointer und
XFragments sind Schreibweisen, um Teile eines XML-Dokuments zu benennen. CSS, die "Stylesheet"-Sprache, läßt
sich sowohl auf HTML auch auf XML anwenden. XSL ist eine erweiterte Notation um Stylesheets zu beschreiben, die
auf XSLT basiert, einer Transformationssprache, die ebenfalls auch außerhalb XSL verwendet werden kann. Mit XSLT
können Tags und Attribute neu gruppiert, hinzugefügt oder gelöscht werden. Das DOM ist eine Sammlung von
Funktionsaufrufen um XML (oder HTML) aus einer Programmiersprache zu verändern. XML "Namespaces" heißt eine
Spezifikation, mit der jedem einzelnen Tag und Attribut eine URL zugewiesen werden kann (etwa um deren
Datentypen festzulegen etc.). XML "Schemas" sollen Entwicklern ermöglichen, ihre XML-basierten Dateiformate
präzise zu spezifizieren.
5. XML ist ausführlich, aber das ist kein Problem
XML-Dateien sind in der Regel erheblich größer als äquivalente binäre Kodierungen. Den damit verbundenen
Nachteilen kann auf einer anderen Ebene begegnet werden. Der Preis großer Massenspeicher sinkt stetig, außerdem
können XML-Dateien schnell und effektiv mit Programmen wie zip und gzip komprimiert werden. Zusätzlich können
Kommunikationsprotokolle wie HTTP/1.1 die Daten während der Übertragung komprimieren, so daß nicht mehr
Bandbreite beansprucht wird als bei Binärformaten.
6. XML ist neu, aber nicht zu neu.
XML wurde seit 1996 entwickelt und 1998 als W3C-Standart verabschiedet. Trotz des geringen Alters der Sprache
kann diese Technologie heute als recht ausgereift angesehen werden, da sie einerseits auf SGML fußt, das seit den 80er
Jahren für große technische Dokumentationsprojekte verwendet wird, und andrerseits mit HTML seit 1990 eine weitere
bekannte Grundlage für XML existiert. XML versucht nun die besten Teile von SGML mit den Erfahrungen mit
HTML zu kombinieren. So soll XML die gleiche Mächtigkeit wie SGML bieten, jedoch in sich regulärer und leichter
anzuwenden sein.
7. XML ist kostenlos, plattformunabhängig und weit verbreitet.
Mit der Entscheidung, XML als Grundlage für ein Projekt zu verwenden, erschließt man sich eine reichhaltige Auswahl
an Werkzeugen und erfahrenem Personal. Mit dieser Auswahl verhält es sich ähnlich wie mit der Entscheidung für
SQL als Datenbanksprache: Man muß immer noch sein eigenes Programm implementieren, seine eigene Datenbank
entwerfen, kann sich dabei aber von erfahrenen Experten und mächtiger Software unterstützen lassen. Man ist mit der
freien W3C-Technologie auch nicht an einen Anbieter gebunden. XML mag nicht immer die Ideallösung darstellen,
sollte jedoch grundsätzlich erwägt werden.
2.3 Java
Die Ausführungen in diesem Abschnitt basieren wesentlich auf [Sun01] und [Bergmann98]. Java
ist eine recht junge, plattformunabhängige Programmiersprache des Workstation-Herstellers Sun,
die einen Kompromiß darstellt zwischen folgenden Anforderungen:
•
•
•
•
•
•
Einfachheit und Kompaktheit
Objektorientierung, Umsetzung moderner Konzepte
Robustheit
Sicherheit
Plattformunabhängigkeit, Portabilität der Anwendungen
Leistung
Die Sprache soll einfach und leicht erlernbar sein, so daß sich die Programmierung einem
möglichst großen Kreis von Menschen erschließt. Java ist eine Weiterentwicklung von C++, wobei
hier auf fehlerträchtige Konstrukte und bekannte Fallstricke dieser älteren Sprache verzichtet
wurde. Aus diesem Grunde ist der Lernaufwand gerade für C/C++ - Programmierer besonders
gering.
5
Das objektorientierte Programmierparadigma hat sich in der Softwareentwicklung längst
durchgesetzt. Im Idealfall erzeugt man mit objekt-orientierter Programmierung wiederverwendbare
Klassen. Ein Satz Klassenbibliotheken für Standardaufgaben wird zur Sprache Java mitgeliefert.
Durch den Verzicht auf die fehlerträchtigen Teile der Sprache C++ und durch die Möglichkeiten
eines mächtigen Laufzeitsystems wird Java robust, das heißt die Einhaltung der
Programmspezifikation ist leichter zu erreichen und vorhandene Programmierfehler haben weniger
katastrophale Auswirkungen.
Java bietet neben der Robustheit durchdachte Sicherheits- und Schutzmechanismen, mit denen sich
die Ausführung „gefährlicher“ Anweisungen verhindern läßt.
Fertig kompilierte Java-Programme sind portabel, sie laufen auf vielen verschiedenen
Zielmaschinen. Dies wird dadurch ermöglicht, daß diese nicht als Programmcode einer bestimmten
Architektur sondern in Form von allgemeinem, sogenanntem Bytecode gespeichert werden. Dieser
Bytecode wird dann zur Laufzeit interpretiert.
Bytecode kann natürlich nicht so schnell ausgeführt werden wie nativer Code. Eine Gemeinsamkeit
mit XML: Auch hier wird eine höhere Komplexität in Kauf genommen mit der Hoffnung, daß sich
dieser
Nachteil
durch
die
fortschreitende
technische
Entwicklung
relativiert.
Auch optimierende und dynamisch kompilierende Interpreter helfen, sich der Geschwindigkeit
nativer Hochsprachenprogramme anzunähern.
2.4 Vorteile der Kombination von Java und XML
In diesem Abschnitt soll dargestellt werden, warum „Java und XML“ eine gute Kombination
darstellt. Die Beschreibung der beiden Technologien läßt einige Parallelen erkennen:
Beide sind unabhängig von der technologischen Plattform und sehr allgemein abgefaßt, so daß eine
breite Anwendbarkeit gewährleistet ist.
Beide sind mit Blick auf das globale Netzwerk entwickelt worden. Datenaustausch und WWWAnbindung dürften also bei einem darauf aufbauenden Projekt leicht zu ergänzen sein, wenn sie
nicht sogar den Kern der Anwendung bilden.
Beide begünstigen eine schnelle Programmentwicklung. Bei XML ist es insbesondere die
Transparenz und Verfügbarkeit von Tools, bei Java die konsistente Verwendung moderner
Sprachkonzepte, die zu diesem Vorteil führt. Nach [Patrizio00] kann identische Funktionalität im
Vergleich zu C++ in Java mit einem Bruchteil der Programmzeilen hergestellt werden. Schnelle
Entwicklung begünstigt im geschäftlichen Umfeld eine höhere Flexibilität und eine schnellere
Reaktion auf Marktchancen.
Beide sind verbreitete Technologien, die auf einem festen Standard aufbauen. Es ist also die
Kompatibilität verschiedener Produkte gewährleistet, seien es selbstentwickelte BusinessApplikationen oder angeschaffte Werkzeuge.
Überhaupt ermöglichte die Standardisierung und Normung erst die Entwicklung eines derart
breiten Angebots von Bibliotheken und Werkzeugen, wie es heute von Sun, IBM, Oracle und
vielen weiteren wichtigen Herstellern verfügbar ist. So ist man nach der Entscheidung für ein
Produkt auch nicht auf Gedeih und Verderb an das Angebot eines bestimmten Anbieters gebunden.
Betrachtet man die beiden Untersuchungsobjekte dieser Ausarbeitung auf einer abstrakten Ebene
nicht als Programmiersprache und Datenformat, sondern als Technologien des ECommerce mit
6
bestimmten Stärken und Schwächen (wie etwa in [Sun01b]), so fällt auf, daß sich die
komplementären Profile dieser Standards ideal ergänzen:
Java bildet die Plattform, die Grundlage, ein neues System mit einer spezifischen
Verarbeitungslogik auszustatten. Dazu gehören Algorithmen und Schnittstellen zu Benutzern und
zu anderen technischen Systemen. Aufgrund der positiven Eigenschaften von Java, wie sie oben
dargestellt wurden, ist es in vielen Fällen anderen Plattformen vorzuziehen. Keinen Vorteil bietet
Java jedoch, wenn es darum geht, Daten mit bestehenden, oft alten (aber wertvollen, weil
ausgereiften) Systemen in Unternehmen auszutauschen. Hier wären eher Plattformen im Vorteil,
die denen bestehender Systeme ähneln.
Hinzu kommt mit XML das zukünftig wohl dominierende Datenformat. Mehr als ein Datenformat
ist die XML-Technologie jedoch nicht. XML kann per se keine Algorithmen beschreiben, keine
Funktionalität erfüllen. Es erfordert deshalb allerdings auch keine Festlegung auf bestimmte
Programmierplattformen und bietet so die Möglichkeit, unterschiedlichste Systeme beim
Datenaustausch die gleiche Sprache sprechen zu lassen.
Eine Schwäche von XML kann mit Java sehr gut ausgeglichen werden: XML verträgt sich nicht
gut mit SQL-Datenbanken. XML läßt viel mehr Spielraum bei Datentypen, Struktur und
Navigation, also Dinge, die man mit ‚flachen‘ SQL-Daten nicht realisieren kann. Man benötigt also
eine Zwischenschicht, wie sie sich mit Java leicht realisieren läßt [Patrizio00].
2.5 Probleme dieser Kombination
In diesem Abschnitt sollen noch einmal die möglichen Kritikpunkte erläutert werden, die sich im
Wesentlichen aus den Charakteristika der beiden Einzeltechnologien ergeben:
Effizienz: Java als interpretierte Sprache kann auf den üblichen Rechnerplattformen nie die
quantitative Leistung erzielen wie nativer Code. Verschlimmernd kommt hinzu, daß XML in
ähnlicher Weise durch einen erhöhten Overhead die Leistung reduziert. Hier ist einerseits mit
optimierenden Java-Laufzeitumgebungen (Just-In-Time-Compiler) und andererseits durch Wahl
effizienter, ggf. nativer per JNI eingebundener Bibliotheken für das XML Parsing eine gewisse
Optimierung möglich.
Kosten: Durch den rasanten Erfolg der beschriebenen Technologien drängt sich der Verdacht auf,
es handele sich um Modeerscheinungen. Ob dem so ist, ob also das Interesse an Java und
insbesondere XML mit zunehmender Verbreitung wieder abnimmt, sei dahingestellt. Fest steht
jedoch, daß Produkte, die sich mit diesen Worten schmücken können, teurer angeboten werden
können als andere, welche je nach Verwendungszweck eine ähnliche Leistung bieten. Ebenso teuer
wird die Beschaffung qualifizierten Personals, das sich ‚wirklich‘ mit Java und dem Dschungel der
XML-Produkte auskennt.
Als Abschluß der Diskussion von Java und XML läßt sich feststellen, daß aufgrund von ähnlichen
Zielsetzungen und komplementären Stärken der beiden Technologien diese Kombination sehr
sinnvoll erscheint. Die gefundenen Schwächen sind demgegenüber eher grundsätzlicher Natur und
sollten (wie viele andere Problemstellungen) im Rahmen des Software-Entwicklungsprozesses
berücksichtigt und umgangen bzw. ausgeglichen werden.
7
3. Parsing von XML-Dokumenten
Um die Daten aus XML-Dateien weiterverarbeiten zu können, müssen diese aus der XML-Syntax
in programminterne Strukturen umgewandelt werden. Dazu benötigt man eine
Programmkomponente, die den XML-Text liest, dessen Struktur erkennt und für Einheiten im Text
Datenelemente zurückliefert. Die meisten XML-basierten Programme stützen sich dabei auf die
SAX- und DOM-APIs.
Es existiert eine Reihe von Parsern für XML-Texte, einige davon sind Standalone-Parser, das heißt
man kann ihnen ein Dokument übergeben und sie liefern einfach nur zurück, ob dieses syntaktisch
korrekt ist oder nicht. Da wir jedoch am Inhalt interessiert sind, wollen wir hier solche Parser
betrachten, die extrahierte Informationen während der Analyse an das aufrufende Programm
zurückliefern. Diese nennt man ereignisgesteuerte Parser. Für die Rückgabe der Daten benötigt
man eine Programmierschnittstelle, und zwar möglichst eine einheitliche Schnittstelle für XMLLeser verschiedener Hersteller.
3.1 SAX
Der populärste Standard für ereignisgesteuerte Parser heißt SAX (Simple API for XML). Er
entstand als Ergebnis der Diskussion auf der xml-dev-Mailingliste [XMLDev]. Ziel der
Standardisierung war unter anderem die Austauschbarkeit verschiedener Parser, die ja im Grunde
alle sehr ähnlich vorgehen, und der leichtere Transfer von Know-How zwischen XML-basierten
Programmen. Die meisten dieser Parser wurden in Java implementiert. Neben den im Folgenden
erklärten Informationen läßt sich eine umfassende Darstellung von SAX unter [Megginson01]
abrufen.
SAX ist ein Interface nur für ereignisgesteuerte Parser. Das heißt, daß der Parser die XML-Datei
von vorne bis hinten sequentiell liest und, wenn er auf bestimmte syntaktische Einheiten trifft, vom
Programm bereitgestellte Callback-Methoden mit den extrahierten Daten als Parameter aufruft. Die
Prüfung der Korrektheit der XML-Syntax ist dabei eher ein Nebeneffekt. Solche Parser sind leicht
zu implementieren, da sie nur minimale interne Daten verwalten müssen. Anstatt interne Strukturen
aufzubauen, liefert ein SAX-Parser Informationen nur der Reihe nach durch besondere
Methodenaufrufe zurück, wie das folgende Beispiel aus [Megginson01] verdeutlicht:
Die XML-Datei
<?xml version="1.0"?>
<doc>
<para>Hello, world!</para>
</doc>
führt zu dieser Abfolge von Aufrufen selbst bereitgestellter Methoden:
DocumentHandler.startDocument();
DocumentHandler.startElement(…, „doc“, …);
DocumentHandler.startElement(…, „para“, …);
DocumentHandler.characters(„Hello, world!“,…);
DocumentHandler.endElement(…, „para“, …);
8
DocumentHandler.endElement(…, „doc“, …);
DocumentHandler.endDocument();
Dieser effiziente Ansatz zum Parsing eignet sich besonders für große Datenmenten (große Dateien,
kontinuierliche Streams) und für Fälle, in denen nur geringe Anteile der Daten herausgelesen
werden sollen.
Die Definition der Callback-Methoden bildet den Kern von SAX. Java-Klassen können diese
Methoden implementieren, indem sie von den entsprechenden ‚org.xml.sax.*‘ Interfaces erben. Im
einzelnen sind dies:
•
•
•
•
•
•
•
Parser
DocumentHandler
AttributeList
ErrorHandler
Locator
DTDHandler
EntityResolver
Die Klasse, die das Interface Parser ausfüllt, stellt den eigentliche Funktionalität zur Verfügung.
Der Parser läßt sich über entsprechende get/set-Methoden mit Instanzen von DocumentHandler,
ErrorHandler, DTDHandler, EntityResolver und Locale bestücken. Außerdem wird eine Methode
‚parse‘ zur Verfügung gestellt, der eine Referenz auf XML-Text übergeben werden kann. Diese
Methode ruft dann während des Parsens die Methoden der übergebenen Hilfsklassen auf.
Dem DocumentHandler werden die grundlegenden Elemente der XML-Datei übergeben, also
insbesondere Tags und Attribute. Ereignisse, die zum Aufruf einer DocumentHandler-Methode
führen, umfassen Dokumentanfang und -ende, Anfangs- und End-Tag, Zeichenketten zwischen
Tags und spezielle Steueranweisungen in der XML-Datei.
Wenn der Parser auf ein XML-Start-Tag trifft, wird die entsprechende DocumentHandler-Prozedur
aufgerufen. Da die Anzahl der Attribute nicht von vornherein feststeht, können diese nicht als
Parameter übergeben werden. Stattdessen liefert der Parser zum StartTag ein AttributeList-Objekt,
mit dessen Methoden etwa jeweils Typ, Name und Wert des i-ten Attributs abgefragt werden
können. Datentypen und eventuelle Default-Werte werden dabei gegebenenfalls der DTD (oder
Schema) entnommen.
Eine Anwendung kann sich über das ErrorHandler Interface über aufgetretene Probleme
informieren lassen. Dabei wird zwischen Warnungen, Fehlern und kritischen Fehlern
unterschieden.
Locator-Objekte dienen dazu, eine Position im XML-Text zu identifizieren. Konkret kann man dem
Parser zu Beginn eine solche Instanz übergeben und dann, etwa nach Auftreten eines Fehlers, an
dieser die aktuelle Datei, Zeile und Spalte ablesen.
DTD Handler bekommen externe Daten übergeben, die sich nicht an die XML Syntax halten.
Binäre Dateien, auf die in der XML-Datei bezug genommen wird, können so beispielsweise mit
externen Programmen verarbeitet werden.
Mit den oben genannten Interfaces ist die den SAX-Parser verwendende Anwendung unabhängig
von der physischen Struktur der XML-Daten. Ein EntityResolver-Objekt bietet dem Parser eine
9
abstrakte Sicht auf die Daten, indem diese immer als einheitlicher Datenstrom zum Parser geliefert
werden. In speziellen Fällen kann es jedoch hilfreich sein, diesen EntityResolver durch eine eigene
Klasse zu ersetzen, um erstens stets über die aktuelle Position im XML-Text informiert zu sein und
zweitens den zum Parser gelieferten Datenstrom manipulieren zu können.
3.2 Erweiterungen bei SAX 2.0
In der zweiten Version des Standards sind einige Erweiterungen hinzugekommen, zu diesen
gehören
•
•
•
Namespaces,
Filter und
erweiterte Parsersteuerung.
Die neuen sogenannten Namespaces ordnen Tags und Attributen einen erweitertern, global
eindeutigen Namen zu. Dabei können Filter gesetzt werden, die bestimmen, welche Ereignisse zum
Client zurückgeliefert werden sollen und welche nicht.
Parsersteuerung: Es können allgemeine und parserspezifische Optionen definiert werden, die sich
durch standardisierte Aufrufe an- uns ausschalten lassen. Ein Beispiel für eine solche Option ist die
parallele Syntaxprüfung des Parsers. Die Option wird dabei durch einen global eindeutigen URIString bezeichnet.
3.3 Diskussion SAX
Vorteile:
• Die SAX Kern-API ist weniger umfangreich als etwa DOM (vgl. Abschnitt über DOM)
oder viele herstellerspezifische Produkte. Damit wird eine schnelle Einarbeitung
ermöglicht.
• Bei sehr vielen Anwendungen werden nur triviale Verarbeitungsschritte mit den
extrahierten Daten durchgeführt, z.B. einfache Formatkonversion, Extraktion von
Teilinhalten aus großen Dateien etc. Hier ist der einfache Aufbau von SAX-Parsern von
Vorteil. Durch den Verzicht auf umfangreiche Datenspeicherung im Parser sind diese sehr
speicher- und laufzeiteffizient implementiert.
• SAX ist damit auch in der Lage, Daten zu verarbeiten, die nicht in Gänze in den Speicher
passen oder die als Datenstrom schon vor ihrem vollständigen Eintreffen bearbeitet werden
sollen.
Nachteile:
• Das den Parser benutzende Programm muß seine eigenen Datenstrukturen aufbauen, was je
nach Anwendung eine komplexe, fehlerträchtige Aufgabe sein kann.
• Der Standard sieht keine Funktionen zum Schreiben oder Ändern von XML vor. Die in den
angebotenen Parsern teilweise vorhandenen Routinen zum Erzeugen von Dokumenten sind
daher herstellerzpezifisch unterschiedlich anzusprechen.
3.4 DOM
Die meisten XML-Parser sind in der Lage, aus dem Dokument ein baumförmiges Modell von
dessen Struktur zu erstellen, auf das die Applikation mittels einer Schnittstelle zugreifen kann. Aus
10
den gleichen Gründen wie bei SAX wurde auch hier ein Standard vorgeschlagen, insbesondere
auch weil die damals führenden Browserhersteller einen einheitlichen Zugriff auf HTML-Elemente
aus Skripten in HTML-Seiten gewährleisten wollten.
Das Document Object Model (DOM) als Standard für Parser, die eine solche Datenstruktur
zurückliefern, wurde vom W3C hauptsächlich mit diesem Ziel entwickelt. Der Kern der DOMSpezifikation ist sowohl auf HTML- als auch auf XML-Dokumente anwendbar, er beschreibt den
Umgang mit Elementen, Attributen, Kommentaren, Verarbeitungsanweisungen und Text. Diese
Ausführungen über DOM basieren auf [Apparao98] und [Helfrich99].
Eine typische Anwendung für einen DOM-Parser ist das Parsen von HTML-Dokumenten. Auch die
Sprache HTML ist als Anwendung von XML definiert, so daß sich das Document Object Model
auch und insbesondere auf wohlgeformte HTML-Strukturen anwenden läßt. Ein Beispiel aus
[Helfrich99]:
<TABLE>
<TBODY>
<TR>
<TD>Shady Grove</TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River, Charlie</TD>
<TD>Dorian</TD>
</TR>
</TBODY>
</TABLE>
Dieser Ausschnitt aus einer HTML-Datei beschreibt eine Tabelle aus zwei Zeilen und zwei Spalten.
Diese Struktur würde in folgenden Baum überführt werden:
Abbildung 1: DOM-Baum
In dem aufgebauten Baum kann das aufrufende Programm anschließend leicht navigieren und
beliebig Knoten lesen, schreiben, löschen, erzeugen usw. Der objektorientierte Ansatz von DOM
eignet sich unter anderem besonders gut für die Implementierung in der Sprache Java. Hier werden
11
die in DOM festgelegten Klassen einfach durch Verwendung der entsprechenden Packages des
Parser-Herstellers eingebunden.
Die wesentlichen Funktionen von DOM dienen zur Manipulation der Knoten des Syntaxbaums.
Diese Knoten beschreiben Elemente, Text, Kommentare, Verarbeitungsanweisungen, externe nichtXML-Daten, Referenzen, Deklarationen und ganze Dokumente.
Jeder Knoten, also jede Instanz der Klasse Node oder einer Unterklasse, besitzt eine Reihe von
Methoden, die sich in drei Kategorien einteilen lassen. Es gibt Aufrufe, um dessen Eigenschaften
(Name, Typ, Wert) oder den Kontext im Baum (Eltern, Nachbarn, Kinder) anzufragen oder den von
dem Knoten repräsentierten Inhalt (aus den Kindknoten) zu verändern.
Jedem Knoten wird ein (nicht unbedingt eindeutiger) Name und ein Typ zugeordnet, die sich über
dessen Methoden abfragen lassen. Über den Typ kann entschieden werden, zu welchem Interface
(bzw. von Node abgeleiteten Klasse) der Knoten gehört, ob der Knoten also für das ganze
Dokument, ein Element, ein Attribut etc. steht. Der Name kann dann in einigen Fällen notwendige
Zusatzinformationen liefern, etwa die Bezeichnung eines Attributs. Den zugeordneten Wert, der
wiederum nur bei einigen Knotentypen definiert wird, kann man mit entsprechenden Methoden
sowohl lesen als auch schreiben.
Die Hierarchie des Dokuments spiegelt sich in den Nachbarschaftsbeziehungen der Knoten wider.
Für die auswertende Anwendung ist es besonders wichtig, in diesem Baum navigieren zu können.
Dazu existieren verschiedene Methoden, die für den Knoten gegebenenfalls den Elternknoten und
die Liste der Kinder liefern.
Diese Knoten, und damit die Struktur der XML-Datei, lassen sich mit einer dritten Klasse von
Funktionen manipulieren. Knoten (oder Teilbäume) können gelöscht, hinzugefügt, ersetzt,
verschoben oder kopiert werden.
Weitere Eigenschaften der Knoten unterscheiden sich je nach Subtyp:
•
•
•
•
•
•
Document
Element
Attribute
CharacterData
Entity, EntityReference
Hilfsklassen
Ein Document-Knoten steht für das gesamte XML-Dokument. Spezielle Methoden erlauben die
Bestimmung von Meta-Daten über das Dokument (z.B. den Dokumenttyp) sowie Fähigkeiten des
Parsers und des Wurzelknotens der eigentlichen XML-Struktur. Der Dokumenttyp setzt sich dabei
aus dem in der Datei angegebenen Typ-Namen, den Entities und Notations der Datei und ihrer
DTD zusammen. Weiterhin besitzt die Document-Klasse ‚Factory‘-Methoden, mit denen sich neue
Knoten der verschiedenen Typen erstellen lassen und Methoden, die die Gesamtdatei nach
bestimmten Elementen absuchen.
Einer der häufigsten Knotentypen ist das Element. Hier gibt es zwei Typen von zusätzlichen
Aufrufen: Allgemeine und Attribut-Management Methoden. Zu den allgemeinen Methoden gehört
unter anderem eine Funktion ‚getElementsByTagName‘, um Elemente zu einem bestimmten
Namen in diesem Teilbaum zu suchen und eine Funktion ‚normalize‘, die benachbarte Textnodes
im Teilbaum zusammenfaßt. Attributmanagement umfaßt das Schreiben, Lesen, Anlegen und
Löschen von Attribut-Strings zu einem Element.
12
Ist der Name eines Attributs nicht bekannt, oder soll zwischen Attributen verschiedenen Typs
unterschieden werden etc., so können auch direkt die entsprechenden Knoten ausgewertet werden.
Hier läßt sich der Name und Typ und die Information, ob dieser Wert als Default-Wert aus der
DTD stammt, auslesen. Der Attributwert läßt sich lesen und verändern. Er ergibt sich im Regelfall
aus einem einzelnen Kindknoten vom Typ Text, hier können jedoch auch Knoten vom Typ
EntityReference den Wert liefern.
Die Klasse CharacterData dient wiederum als Basisklasse für weitere Knotentypen. Sie bietet eine
Reihe nützlicher Prozeduren zur Verarbeitung von Text. So läßt sich der Wert des Knotens als Text
auslesen und verändern, es lassen sich Teilstrings zurückliefern, einfügen, löschen und ersetzen.
Beispiele für CharacterData-Knoten sind solche für Text, Verarbeitungsanweisungen und
Kommentare. Text-Knoten haben zusätzlich zu den CharacterData-Methoden noch einen Aufruf
‚splitText‘, mit dessen Hilfe sich aus einem Text-Knoten zwei benachbarte Knoten mit jeweils
einem rechten und einem linken Teilstring bis zum i-ten Zeichen erzeugen lassen. Die Commentund ProcessingInstruction-Klassen entsprechen in ihrer Funktionalität der Klasse CharacterData
und stehen für Kommentare wie <!-- Kommentar> und XML-Steueranweisungen wie <?ACME
page-preak>.
Entities sind in XML Platzhalter für Text. Hier müssen Definitionen und Anwendungen
unterschieden werden. Die DOM-Implementierung kann die Definitionen beim Parsen entweder
direkt einsetzen oder entsprechende Entity- und EntityReference-Knoten in den Baum einfügen.
EntityReference-Knoten besitzen keinen Wert, sondern statt dessen (nicht-veränderbare)
Kindknoten, die durch die Ersetzung entstehen. In einigen Fällen kann es sinnvoll sein, auch die
Definitionen mit in den DOM-Baum aufzunehmen, etwa wenn externe Binärdateien statt Text
eingefügt werden. Dazu dient die Entity-Klasse, die das Node-Interface um Methoden erweitert,
um Name („Boot“), Ort („pictures/boat.gif“) und Notation („GIF“) abzufragen. Für Notations gibt
es ebenfalls eine Abart von Nodes, die Auskunft über das Format der (im Allgemeinen nicht zu
parsenden) Daten gibt.
Um eine Folge von Knoten behandeln zu können, etwa wenn das Dokument nach bestimmten
Elementen abgesucht wird oder alle Kindknoten zurückgeliefert werden sollen, wurde die Klasse
NodeList eingeführt. Spielt die Reihenfolge der Knoten keine Rolle, soll also etwa eine Menge von
Attributen behandelt werden, kann man diese zu einer NamedNodeMap zusammenfassen.
Weiterhin gibt es einen Nodetyp DocumentFragment, in dem sich temporär Dokumentabschnitte
wie in einer Zwischenablage speichern lassen.
3.5 DOM Level 2
In der Entwicklung von DOM gab es bisher zwei wichtige Meilensteine, nämlich die
Verabschiedung von der W3C Recommendation für DOM Level 1 und die Veröffentlichung von
DOM Level 2 als ‚Public Draft‘. Level 1 bietet bereits die volle Unterstützung für wohlgeformte
(well-formed) XML-Dokumente, also XML-Texte, die Instanzen beliebiger XML-DTDs sind, und
HTML-Dokumente (HTML Version 4.0 mit Frames). Level 1 enthält jedoch noch keinen
Mechanismus für eine Validierung.
In DOM Level 2 werden zusätzlich vor allem Interfaces spezifiziert, die den Zugriff auf
Mechanismen anbieten, die vorher bereits von DHTML angeboten wurden. Die neuen Features von
Level 2 kann man grob in drei Themengebiete aufteilen: Stylesheet Modell, Event Modell und
erweiterte Navigation und Manipulation. Die ersten beiden Teilgebiete machen deutlich, daß DOM
13
als Nachfolger von DHTML gedacht ist und vor allem für den Einsatz für das Scripting in WebBrowsern konzipiert wurde.
Das Stylesheet Modell von DOM Level 2 definiert zunächst ganz allgemein Stylesheet-Objekte, die
nicht auf eine bestimmte Stylesheet-Sprache festgelegt sind (Interface StyleSheet). Darüberhinaus
gibt es Behälter-Objekte für Stylesheet-Objekte, die Sammlungen von alternativen Layouts für ein
einzelnes Dokument darstellen (Interface StyleSheetCollection).
Der größte Teil des Stylesheet Modells, wie es sich in DOM Level 2 darstellt, ist jedoch auf
Cascading Style Sheets Level 2 spezialisiert (Interface CSSStyleSheet). Ein Objekt, das
CSSStyleSheet implementiert, ist ein Behälter für CSS2-Regeln, die wiederum nach ihrem Typ
unterschieden werden.
Einige DOM Core Interfaces müssen um Methoden für die Assoziation mit Stylesheets bzw. mit
einzelnen Regeln erweitert werden.
Das Event-Modell unterscheidet zunächst verschiedene Event-Typen, die in drei Gruppen eingeteilt
werden können:
• User Interface Events (z.B. Maus-Klick)
• Mutation Events (durch Ändern der Dokumentstruktur ausgelöst)
• HTML Events (FORMs)
Zusätzlich sind benutzerdefinierte Event-Typen vorgesehen. Jedes Event hat ein Node-Objekt als
Event-Target, für ein Node-Objekt kann man mehrere Event-Listener registrieren. Event-Objekte
sind durch das Interface Event charakterisiert und werden bei Auslösung als Argument an EventListeners übergeben. Von Event abgeleitete Interfaces bieten eine genauere Beschreibung des
Ereignisses (z.B. Maus-Koordinaten beim Interface UIEvent). Der Mechanismus des EventCapturing ermöglicht das Abfangen von Events beim Absteigen in der Node-Hierarchie. Hierzu
muß ein Node-Objekt das Interface EventCapturer implementieren. Manche Event-Typen
unterstützen Event-Bubbling, d.h. das Aufsteigen von Events in der Node-Hierarchie. Das
Bubbling kann von Node-Objekten abgebrochen werden, indem das cancelBubble-Attribut des
Event-Objekts gesetzt wird. Über den Mechanismus Event-Cancellation kann man das
Standardverhalten bestimmter Events unterbinden.
Erweiterte Navigation und Manipulation umfaßt hier die neuen Klassen Iterator, Filter und Range.
Ein Iterator ist ein bekanntes Design-Pattern im objektorientierten Umfeld. DOM-Iteratoren
verbergen die Organisationsstruktur von Behältern für Node-Objete (z.B. als Baum oder als Liste).
Es ist vorgesehen, die Interfaces Node und NodeList um sogenannte Factory-Methoden zum
Erzeugen von Iterator-Objekten zu erweitern. Funktionen, die Iterator-Objekte als Argument
erwarten, sind allgemeiner einsetzbar. Der Erzeuger eines Iterator-Objekts soll die Kontrolle
darüber besitzen, ob der erzeugte Iterator "live" ist, d.h. ob anschließende Veränderungen der
Dokumentstruktur reflektiert werden, oder ob die verwalteten Objekte unabhängige Kopien sind.
Das Interface Filter hat lediglich die Methode acceptNode, die ein Node-Objekt als Argument
erwartet und einen boole'schen Wert zurückliefert. Mit einem Filter-Objekt kann man
beispielsweise Iteratoren erzeugen, die nur die gewünschte Klasse von Nodes darbieten.
Bereiche werden durch das Interface Range unterstützt und identifizieren einen
zusammenhängenden Bereich eines Dokuments. Bereiche können beispielsweise die Grundlage für
Operationen wie Kopieren, Ausschneiden und Einfügen bilden.
14
3.6 Ausblick auf DOM Level 3
Zukünftige Schritte in der Standardisierung, die bereits in den "DOM Requirements" vom
September 1997 festgelegt wurden, betreffen den Zugriff auf die zugrundeliegende XML-DTD,
den Zugriff auf das zugrundeliegende Windows-System (hiermit ist kein herstellerspezifisches
System gemeint) und ein Sicherheitsmodell. Außerdem wird es in DOM Level 3 erweiterte
Möglichkeiten zum Zugriff auf den Dokumentenbaum geben, etwa Suche nach Attributwerten oder
direktes Verschieben von Knoten im Baum. Mit dem XSP-Prozessor besteht die Möglichkeit,
beliebige Logik in Java zu implementieren. Diese Funktion ist bisher als spezielles Feature
einzelner DOM-Implementierungen wie der von Sun verfügbar. Auch das Speichern von XML und
die Aufnahme von Formatierungsinformationen in den Dokumentbaum wird angegangen werden.
3.7 Diskussion DOM
Vorteile:
• DOM ermöglicht einen einheitlichen Zugriff auf XML-Dokumente in verschiedenen Sprachen
(neben Java und C++ etwa Perl und Python).
• Mit DOM hat man nach dem Parsen einen gezielten und schnellen Zugriff auf bestimmte
Einheiten des Dokuments.
• In der Regel muß weniger als bei SAX neu programmiert werden.
• Mit DOM läßt sich leicht dynamischer Inhalt aus XML-Dokumenten generieren.
Nachteile:
• Es gibt in der ursprünglichen DOM-Spezifikation keine Funktionen für das automatische
Durchschreiten und Auswerten des Baums. Diese Funktionen werden von den Parsern zwar
angeboten, sind jedoch wieder herstellerabhängig. Die Austauschbarkeit der Parser ist damit
eingeschränkt.
• Das gleiche gilt für das Schreiben von XML-Dateien. Mit der Speicherdarstellung der
Dokumentstruktur ist man diesem Ziel jedoch schon erheblich näher als bei SAX, insbesondere
wenn umfangreiche Änderungen an bestehenden Dokumenten durchgeführt werden sollen.
• Die konsequente Baumorientierung kann sich als zu umständlich erweisen, insbesondere die
Speicherung von Attributen als Kindknoten von Tags bedeutet sowohl einen gewissen
Programmieraufwand als auch Laufzeit- und Speicheroverhead.
• Durch die Sprachunabhängigkeit von DOM mußte hier auf spezielle Eigenschaften der Sprache
Java verzichtet wurden. Die Verwendung von Containerklassen, Objektinstanzen etc. wird
damit inkonsistent zu anderem Java-Quelltext.
3.8 JAXP
JAXP (Java API for XML Process), eine Obermenge von DOM 1.0 und SAX 1.0 in Java mit
Funktionen auf einem höheren Abstraktionsniveau. Auf „Java und XML“ bezogen stellt JAXP
damit eine Art Komplettlösung dar, die die Möglichkeiten der beiden Ansätze miteinander
verbindet.
JAXP kann auch als eine Art Zusatz-API zu DOM und SAX angesehen werden, das einen
einheitlicheren und vor allem herstellerneutralen Zugriff auf die beiden Teil-APIs ermöglichen soll.
So genannte Builder und Factories verbergen die herstellerspezifische Implementierung vor dem
API-Nutzer. Werden lediglich die spezifizierten API-Methoden genutzt, läßt sich das JAXP des
eines Herstellers leicht durch das eines anderen austauschen.
15
JAXP wurde von der Firma Sun entwickelt und wird in einer kommenden Version ein Bestandteil
der der Sprache Java, der „Java Plattform“. JAXP 1.1 wird dann auch SAX2, DOM2 und CSL
unterstützen.
Konkrete Parser, die dieses API ausfüllen, stammen etwa von Apache (Xerces) und IBM (XML4J),
und werden natürlich nicht mit dem JDK ausgeliefert. Es existiert jedoch auch eine frei verfügbare
Referenzimplementation von Sun.
3.9 JDOM
JDOM ist ein relativ neues OpenSource-API, das nach einer Spezifikation von Jason Hunter und
Brett McLaughlin entstanden ist - unter Mithilfe von James Duncan Davidson, dem Autor der
JAXP-Spezifiaktion. Ziel von JDOM ist es unter anderem, die teilweise recht umständlichen
Methoden zur Generierung und Manipulation eines DOM zu vereinfachen. Darüber hinaus ist
JDOM, anders als die DOM API, speziell auf die Sprache Java zugeschnitten und somit in einigen
Bereichen stark optimiert.
JDOM will als eine Art Nachfolger zu SAX und DOM gesehen werden, der das Beste aus den
beiden Standards vereint. Es soll sich dabei auf „80% der Anwendungsfälle“ eines Parsers
konzentrieren und dabei mit „20% des Programmieraufwandes“ für das verwendende Programm
auskommen.
Um zu verdeutlichen, wie sich dies äußert, mochte ich hier die Erfahrungen wiedergeben, die in
[Kleber01] und [Webreference01] beschrieben werden. Dadurch, daß DOM und SAX
ausschließlich aus Interfaces bestehen, ist der häufige Einsatz von Fabrikmethoden oder sogar von
Parser-spezifischen Methoden nötig. Das macht DOM verwirrender und fehleranfälliger als JDOM.
Außerdem erfordert der Einsatz von DOM häufig die Entwicklung eines Wrappers. In diesem muß
Funktionalität implementiert werden, die zumindest teilweise schon in JDOM enthalten ist. Für
einen ausführlichen, technischen Vergleich verweise ich auf [Webreference01].
16
4 Anwendungen der Kombination Java und XML
Beispielhaft möchte ich hier typische Anwendungen von Java und XML aufzählen.
Selbstverständlich existiert hier jedoch eine Unzahl von möglichen Verwendungsmöglichkeiten der
Kombination Programmiersprache Java mit Datenformat XML.
4.1 Java-gestützte Transformation von XML
Häufig werden sprachliche Inhalte, etwa Zeitungsartikel, in einer anwenderspezifischen XMLSyntax gespeichert, um sie dann je nach Verwendungszweck in verschiedenen Formaten zu
präsentieren: HTML für die verschiedenen Webbrowser, Postscript zum Drucken, Adobe PDF zum
Download, andere XML-Formate für die Weiterverarbeitung etc. Auch strukturierte Daten wie
Tabellen und Pläne kann man als XML speichern und dann später in leichter verständliche Formate
wandeln. Die Notwendigkeit einer Transformation des Text-Datenformats XML in andere
Textdarstellungen verdeutlicht folgendes Beispiel, das aus einer Kundendatenbank stammen könnte
[Partl00].
<person id="p4681" >
<vorname>Hubert</vorname>
<vorname>Hans</vorname>
<zuname>Partl</zuname>
<titel>Dr.</titel>
<adresse>Muthgasse 18</adresse>
<plz>A-1190</plz>
<ort>Wien</ort>
<geburtstag>
<tag>8</tag>
<monat>März</monat>
<jahr>1949</jahr>
</geburtstag>
</person>
Diese Darstellung ist äußerst unübersichtlich. Durch Transformation in HTML könnte etwa
folgende Form erzielt werden:
HUBERT HANS PARTL
Muthgasse 18
A-1190 Wien
geb. 8. März 1949
Es stellt sich also die Frage, wie XML-Quelltext in eine für den Betrachter ansprechende Form
überführt werden kann. Hier kann man nach dem Zeitpunkt der Konvertierung verschiedene
Möglichkeiten unterscheiden:
•
•
•
Einmalige Transformation (i.d.R. in HTML)
Transformation on the fly bei der Anfrage
Verarbeitung von XML- (und XSL) im Browser
Die zweite Möglichkeit bietet dabei den Vorteil, daß der Inhalt dynamisch passend auf die
Fähigkeiten des Browsers zugeschnitten werden kann. Aus der Sicht des Websurfers ist dies völlig
17
transparent. Beim Server tritt ein Skript in Aktion, das Stylesheet und Dokument miteinander
kombiniert und HTML ausgibt. Signalisiert der Browser in seiner Anfrage XML-Fähigkeiten
können diese Daten auch direkt durchgereicht werden (siehe Abbildung).
datei.xml
DOM-Parser
DOMRepräsentation
serverinterne Verarbeitung
StylesheetProzessor
Ausgabe, z.B.
HTML
Abbildung 2: XML-Transformation [Mintert00]
Auch stellt sich die Frage, wie man Inhalte auf XML-Ebene effizient dynamisch erzeugen kann.
Eine Lösung dafür ergibt sich aus den ‚Processing Instructions‘, die man in XML angeben kann.
Indem man in den XML-Text einen ‚Aufruf‘ etwa einer Javascript-Datei einbaut, können direkt
nach dem Parsen, aber noch vor der Anwendung der XSL Stylesheets, Manipulationen auf den
DOM-Objekten durchgeführt werden. Diese Technik nennt sich DCP, Dynamic Content Processor,
wobei auch andere Sprachen als Java(-script) denkbar sind.
4.2 XML für Datenaustausch und Datenpersistenz
Unter dem Stichwort Integration (auch: EAI, Enterprise application integration) sind
Anstrengungen bekannt geworden, mit der Technologie XML als gemeinsamem Nenner
Anwendungssysteme verschiedener Herkunft miteinander zu verknüpfen.
Dazu ist es notwendig, sich auf eine standardisierte semantische Beschreibung zu einigen, welches
Tag welches Datenelement auszeichnet. Darauf aufbauend können dann Schemata für XMLDateien entwickelt werden, die dann als Input für XML-Tools und als Basis für selbstentwickelte
Programme dienen: Häufig werden zunächst Konverter zur Konvertierung von XML-Daten in
Inhouse-Daten und zurück sowie Programme zur Kommunikationssteuerung erstellt.
Auf technischer Ebene sind zwei Standards definiert worden, wie Programme (im Sinne verteilter
Systeme) miteinander über XML Kommunikation betreiben können: SOAP (Simple object access
protocol) und JAXP (Java API for XML Messaging). Diese zwei konkurrierenden
Übertragungsprotokolle sollen den Austausch strukturierter Daten über synchrone oder asynchrone
Standardprotokolle wie z.B. HTTP und SMTP normieren. Ziel dabei ist Robustheit und Effzienz
durch den Einsatz von vorhandener, optimierter Technik.
Teile eines solchen Standards sind (Beispiel SOAP):
•
•
•
Nachrichtenaufbau in XML (Envelope, Header, Body)
Kodierung von Datentypen, Serialisierung von Klassen
RPC-Mechanismen für Prozeduraufrufe
18
Neben der Kommunikation zwischen Systemen spielt auch immer die Datenhaltung eine wichtige
Rolle. Hier kommen Datenbanken oder einfache Dateien zum Einsatz.
Dafür wurden in der Vergangenheit oft proprietäre Formate geschaffen. Dies wird sich auch mit
XML nicht ändern, denn oft können spezifische Anforderungen nicht mit Standardformaten erfüllt
werden. Mit XML kann man jedoch zumindest auf einem festen Meta-Format aufbauen. Diese
Darstellung erleichtert die Programmentwicklung durch die größere Transparenz und die
Verfügbarkeit von Standardwerkzeugen.
Durch die Spezifikation als XML-Schema können die Daten so abgefaßt werden, daß die
Konvertierung zwischen verschiedenen XML-Formaten vollständig automatisch ablaufen kann.
19
5. Fazit
XML stellt eine interessante neue Technologie zur Speicherung und Übertragung von Information
dar. Durch eine klare Standardisierung ermöglicht es insbesondere die Verknüpfung von Systemen
über die Grenzen von Organisationen hinweg.
Um wie erhofft die Kosten der Anwendungsentwicklung zu reduzieren und die korrekte Einhaltung
des Standards zu gewährleisten, bietet es sich an, fertige Produkte für das Generieren und Einlesen
von XML-Daten zu verwenden. Das reichste Angebot an Standards und Funktionsbibliotheken
steht bei Verwendung der Sprache Java zur Verfügung.
Weiterhin ist festzustellen, daß zwischen den beiden Technologien Java und XML zahlreiche
konzeptionelle Parallelen zu ziehen sind. Dazu gehört die Plattformunabhängigkeit, die Eignung für
den Datenaustausch insbesondere in Netzwerken, die Verabschiedung als ‚offener‘, also für
jedermann erhältlicher, Standard, sowie die breite Palette verfügbarer Werkzeuge aufgrund der
weiten Verbreitung. XML und Java können als komplementäre Produkte angesehen werden, die
sich, wie beschrieben, ideal ergänzen.
In vielen Anwendungsfällen dürften diese Vorteile den Nachteil der geringeren Effizienz von Java
und den Overhead durch das Parsing wieder ausgleichen.
Zusammenfassend läßt sich also sagen, daß die Kombination dieser beiden Konzepte etwa für die
aufgezeigten typischen Anwendungsfelder durchaus als empfehlenswert angesehen werden kann.
20
Anhang: Java und XML - Werkzeuge
Für die Arbeit mit Java und XML existiert eine Fülle von Bibliotheken und Werkzeugen. Als
Ausblick und Anregung für eigene Recherche will ich hier einige Beispiele der führenden
Hersteller aufzählen. Weitere Beispiele finden sich zum Beispiel auf [Damore01].
Parser
•
•
•
IBM XML Parser for Java: Hierbei handelt es sich um einen validierenden XML-Parser, der in
reinem Java implementiert wurde. Zusätzlich enthält das Java Package Methoden um XMLDokumente zu generieren, manipulieren und zu validieren (DOM 2, SAX 2). Der IBM-XML
Parser for Java gilt als sehr robust und standardkonform. (Zu IBMs XML-Projekten siehe
[Alphaworks01])
Apache Xerces XML Parser in Java, C++: Auf dem IBM Parser aufbauend unterstützt das
Apache-Produkt ebenfalls DOM- und SAX 2. Xerces läßt sich neben Java auch über C++, Perl
und Microsoft COM ansprechen.
Auch von Sun gibt es, wie oben erwähnt, mit JAXP 1.1 einen XML-Parser.
IBM XML and Web Services Development Environment
Eine der Firmen, die sich am stärksten auf dem Markt für XML-Produkte engagiert, ist IBM. Bei
IBM entstand ein ganzes Paket an XML-spezifischen Programmen, das für alle typischen
Aufgabenbereiche passende Werkzeuge bereithält. Beim XML and Web Services DE handelt es
sich um eine plattformneutrale Entwicklungsumgebung, die HTML, Java, SQL und XML
zusammenführt. Ziel ist die effektive Entwicklung von E-Business-Applikationen, wobei der Grad
der Vollständigkeit dieser Sammlung sicherlich seinesgleichen sucht. Zentrale Komponenten sind:
•
•
•
•
•
Visual XML Builder für die Entwicklung von XML-Dokumemten
Visual DTD für die visuelle Entwicklung von DTDs
Visual XML Creation für das Generieren von XML-Dokumenten aus SQL-Abfragen
Visual XML Transformation als XSL-Transformator
Visual XML Query für das Erzeugen von XML-Abfragen
Apache
Mit dem Apache-XML-Projekt werden die verschiedenen XML-relevanten Entwicklungen
koordiniert. Unter der Federführung der Apache Software Foundation (ASF) entsteht eine mächtige
Publishing-Plattform, die neben dem eigentlichen Webserver alle erforderlichen Tools zur
Bearbeitung und Veröffentlichung von XML-basierten Content umfasst. Das Apache-XML-Projekt
enthält aktuell sieben Einzelprojekte:
•
•
Xerces: XML-Parser
Xalan: XSLT-Stylesheet-Prozessor
21
•
•
•
•
•
Cocoon: XML-basiertes Web-Publishing (XML generieren, verarbeiten, nach HTML
konvertieren)
FOP: XSL-Formatierungsobjekte
Xang: Entwicklungsumgebung für dynamische Server Pages
SOAP: Simple Object Access Protocol
Batik: SVG-Toolkit
22
Quellen
Datum des letzten Zugriffs auf die angegebenen Webseiten: 22.5.2001
[Alphaworks01]http://www.alphaworks.ibm.com/
[Apparao98]Apparao, Byrne u.a. Document Object Model Level 1 Specification
http://www.w3c.org/TR/1998/REC-DOM-Level-1-19981001
[Bergmann98]Christoph Bergmann / ACCESS Internet, http://java.seite.net/wasisjava.html
[Bos99] Bos, Bernd, XML in 10 points, http://www.w3.org/XML/1999/XML-in-10-points
[Bray00] Bray, Paoli u.a. Extensible Markup Language http://www.w3.org/TR/2000/REC-xml20001006
[Damore00] D‘Amore, Stefan, Zukunft XML, http://www.tecchannel.de/internet/452/
[Damore01] D’Amore, Stefan, XML-Werkzeugkisten, http://www.tecchannel.de/internet/617/
[Helfrich99] Helfrich, Christoph, Document Object Model http://www2.informatik.uniwuerzburg.de/staff/wolfram/lehre/9899ws_semdok/dom/ausarbeitung/
[Kleber01] Kleber, Oliver, Dom versus JDOM http://home.tonline.de/home/Oliver.Kleber/DOMvsJDOM.html
[Megginson01] Megginson, David, SAX Homepage, http://www.megginson.com/SAX/
[Mintert00] Stefan Mintert, Serving XML, iX 4/00
[Partl00] Partl, Hans Hubert, XML-Extensible Markup Language,
http://www.boku.ac.at/htmleinf/xmlkurz.html
[Patrizio00] Patrizio, Andy, Java And XML: Complementarily Yours,
http://www.informationweek.com/795/java.htm
[Quark01] Quark Deutschland, Was ist XML, http://www.quark.de/avenue.quark/xml.html
[Sun01] Sun Microsystems,
Inc.,http://developer.java.sun.com/developer/onlineTraining/new2java/overview.html
[Sun01b] Sun Microsystems, Inc., XML und Java Technologies,
http://www.sun.ch/d/java/01_xmljava.html
[W3C00] The W3C committee, http://www.w3.org/XML/
[Webreference01]Webreference.com, JDOM the Java DOM,
http://webreference.com/xml/column25/
[XMLDev] XML-Dev Mailingliste http://www.lists.ic.ac.uk/hypermail/xml-dev/
23
Herunterladen