Das JDOM-Projekt


... [ Seminar ] ... [ DOM & JDOM ] ... [ Beispiele ] ...

Übersicht

In diesem Abschnitt werden die Grundlagen von JDOM behandelt.

Was ist JDOM ?
Was bietet JDOM ?
Das Datenmodell
Die wichtigsten Klassen


Was ist JDOM ?

Wie bereits erwähnt ist einer der Vorteile von DOM seine Plattform- und Sprachneutralität. Dieser Vorteil kann sich aber auch als Nachteil auswirken, wenn man als Programmierer auf diese Sprachneutralität verzichten kann. In diesen Fällen würde man sich ein Werkzeug wünschen, dass die Möglichkeiten der Zielsprache konsequent nutzt, um die Arbeit noch leichter zu gestalten. Ein solches Werkzeug möchte JDOM für Java sein. JDOM ist eine Schnittstelle für die Arbeit mit XML-Dokumenten und basiert vollständig auf Java. Hierzu nutzt es spezifische Elemente dieser Programmiersprache wie die Standard-Kollektionen, Methodenüberladung und Reflection. Diese Vorgehensweise macht die Benutzung für Java-Programmierer intuitiv und leicht erlernbar.

JDOM ist ein open-source Projekt, welches auf einer Spezifikation von Brett McLaughlin und Jason Hunter basiert. Es befindet sich zur Zeit in einer späten Beta-Testphase, die Änderungen bis zur endgültigen 1.0 Version sollten aber gering ausfallen. Die aktuellen Pakete lassen sich von der Webseite des Projektes herunterladen.


Was bietet JDOM ?

Einer der großen Nachteile von DOM ist sein enormer Speicherbedarf und seine relativ schwache Performanz. Um für JDOM zu einer besseren Lösung zu gelangen, wird zum Beispiel versucht Teile des Dokuments erst bei Bedarf zu interpretieren. Auch im Hinblick auf die Laufzeiteffizienz scheint JDOM im Vergleich zu DOM deutliche Vorteile zu haben.

Auch wenn diese Gründe alleine wohl schon ausreichend wären, um die Etablierung eines neuen Werkzeugs zu rechtfertigen, wird nicht die direkte Konkurrenz zu den bestehenden Standards (namentlich DOM und SAX), sondern die optimale Zusammenarbeit mit diesen angestrebt. Hierfür sollen die in den Paketen org.jdom.input und org.jdom.output enthaltenen Klassen sorgen. Sie ermöglichen es ein JDOM-Dokument aus diversen Quellen zu erzeugen und an diverse Empfänger auszugeben.

Betrachten wir zunächst die Erzeugung, dann ist besonders die Klasse SAXBuilder hervorzuheben, die zur Erzeugung eines JDOM-Dokuments eine SAX-Implementierung bemüht. Im selben Paket befindet sich außerdem die Klasse DOMBuilder, die für die gleiche Aufgabe einen DOM-Parser benutzt. Da alle zur Zeit existierenden DOM-Parser hinter den Kulissen ebenfalls SAX zum Parsen nutzen, macht die Verwendung dieser Klasse zum Parsen von XML keinen Sinn, da dies immer ineffizienter sein muss, als die zuvor besprochene Alternative. Der einzige Nutzen liegt in der Methode org.jdom.Document build(org.w3c.dom.Document), die ein existierendes DOM-Dokument in ein JDOM-Dokument umformt. Damit wird es möglich JDOM in Verbindung mit einem zweiten Programm zu benutzen, welches DOM als Ausgabeformat bereitstellt.

Noch interessanter wird der gesamte Ansatz, wenn man die Klassen im zweiten erwähnten Paket org.jdom.output betrachtet. So bietet die Klasse XMLOutputter die Standardmöglichkeit ein JDOM-Dokument als XML in einen beliebigen Ausgabestrom zu pumpen. Besonders interessant ist außerdem die Variante mit Hilfe der Klasse SAXOutputter entsprechend der Struktur des Dokuments SAX-Ereignisse auszulösen, die von einer anderen Komponente interpretiert werden können. Die vorangegangene Beschreibung soll durch die folgende Abbildung noch verdeutlicht werden.

Wichtiger jedoch als die beschriebenen Klassen, ist die durch diesen Ansatz ermöglichte Flexibilität einzuschätzen. Niemand ist gehindert, für sein bestimmtes Problem eigene Ein- bzw. Ausgabeklassen zu entwickeln (obwohl es so nirgendwo zu lesen war, muss dies in abgeschwächter Weise auch für DOM gelten). JDOM stellt in solchen Fällen lediglich ein erprobtes und mächtiges Datenmodell zur Repräsentation von XML-Dokumenten und die Möglichkeiten des Zugriffs auf die enthaltenen Daten zur Verfügung. 


Das Datenmodell

Kommen wir nun zum Kern von JDOM, dem Datenmodell. Hierzu zeigt das folgende OMT-Diagramm einige der wichtigsten Klassen des Pakets org.jdom ohne jeglichen Anspruch auf Vollständigkeit.

Bereits im Vergleich dieses Diagramms mit dem bereits vorher im DOM-Abschnitt gezeigten, lassen sich einige grundlegende Unterschiede bezüglich der Architektur der beiden Ansätzen ableiten.

Viele dieser Unterschiede wirken sich positiv auf die Benutzbarkeit von JDOM aus, wie auch die Beispiele des nächsten Kapitels zeigen werden.


Die wichtigsten Klassen

Im nun folgenden Abschnitt soll auf die wichtigsten Klassen kurz eingegangen werden.

Document

Die Klasse Document repräsentiert das gesamte XML-Dokument. Zu diesem Zweck enthält jedes Objekt zwingend ein Wurzelelement, wohingegen eine Dokumenttypdefinition und beliebig viele Kommentare und Verarbeitungsinstruktionen optional sind. Die wichtigsten Methoden werden nun kurz beschrieben:

Element

Diese Klasse ist das Äquivalent der XML-Tags und ähnelt in seiner Funktionalität der gleichnamigen DOM-Schnittstelle. Die wichtigsten Methoden sind wohl: Des weiteren finden sich weitere Methoden zum Hinzufügen von Kindern oder Attributen, beziehungsweise zum Auslesen von Attributwerten.

Attribute

Durch diese Klasse werden die Attribute von Elementen modelliert. Für das Auslesen der Werte stehen diverse Bequemlichkeitsroutinen zur Verfügung, die die Strings in das benötigte Format transformieren.
... [ Seminar ] ... [ DOM & JDOM ] ... [ Das JDOM-Projekt ] ... [ Beispiele ] ...