Exportieren mit dem Lotus XML Toolkit

Werbung
Exportieren von Domino-Datenbanken in XML
Mit Hilfe des seit kurzem in Version 1.0 verfügbaren Lotus XML Toolkits lassen sich
nahezu alle Inhalte von Notes-Datenbanken exportieren und importieren. Neben der
grundsätzlichen Funktionsweise des Toolkits beschreibt der Artikel die notwendigen
Erweiterungen für den Export bestimmter Inhalte sowie deren Transformation mit
XSLT.
Das Lotus XML Toolkit
Dem Java Entwickler standen bisher nur sehr begrenzte Möglichkeiten zur
Erzeugung von XML-Daten aus Domino-Datenbanken zur Verfügung. Auch der
Import von formatierten Texten im XML-Format oder das Erzeugen von Datenbanken
waren über das Domino-Java-API nur sehr rudimentär möglich. Das Lotus XML
Toolkit stellt eine Sammlung von C++ und Java-Klassen dar, die den Export und
Import nahezu aller Datenbankinhalte ermöglichen. Da der Inhalt von RTF-Feldern
(formatierte Texte) vollständig exportierbar ist, kann man diese extrahieren und in
einem anderen Format aufbereiten. Denkbar wäre z. B. HTML, das die Eigenarten
spezieller Browser berücksichtigt, oder WML für Mobiltelefone.
Die Ausgabe des Toolkits ist eine DXL-Datei (Domino XML) bzw. ein DXL-Stream.
DXL ist ein XML-Format, das von Lotus festgelegt wurde. Es ist in Form einer DTD
(Document Type Definition) beschrieben und kann damit von jedem XML-kundigen
Entwickler leicht verstanden werden. Da DTDs nur einen begrenzten
Detaillierungsgrad zulassen, werden sie wohl bald durch sogenannte SchemaDefinitionen ersetzt. Das DXL-Schema, das zur Zeit als Vorabversion erhältlich ist,
gibt folglich einen tieferen Einblick in die Struktur der DXL-Daten.
Abbildung 1 – Anwendung des Lotus XML Toolkits
Die DXL-Datei kann mit einem XSLT-Prozessor wie z. B. LotusXSL transformiert
werden. LotusXSL ist inzwischen fester Bestandteil jeder Domino-Distribution. Der
XSLT-Prozessor liest die DXL-Datei und erzeugt aus ihr eine neue XML-Datei oder
eine Datei in einem anderen Format. Die dazu verwendete XSLT-Schablone
beschreibt, welche XML-Daten wie umgewandelt werden. Durch die Möglichkeit, eine
DXL-Datei mit verschiedenen Schablonen zu transformieren, kann man folglich eine
Datenquelle für beliebige Zielformate aufbereiten. Ein Beispiel wäre die
Transformation einer Notes-Hilfe-Datenbank nach HTML unter Berücksichtigung des
Adressaten. Je nach Zielgruppe könnte man z. B. bestimmte Textteile filtern,
verdichten oder anders darstellen.
Seite 1 von 8
DXL = Domino XML
DXL ist die gemeinsame Basis auf der Daten exportiert oder importiert werden
können. Domino Datenbanken werden durch das XML-Toolkit nicht direkt sondern
immer über diese klar definierte Schnittstelle angesprochen. Sie ist für jede
Datenbank gleich, da DXL nicht die Inhalte der Datenbank, sondern die Namen der
Notes-Elemente als Tags (Strukturelemente) verwendet.
Die DXL-Datei besteht normalerweise aus der <database>-Struktur, die eine
beliebige Anzahl von <document>-Elementen enthält. Der <document>-Tag
beinhaltet die UNID (eindeutige ID) des Notes-Dokumentes als Attribut. Innerhalb
jedes <document>-Elements ist eine vom Dokument in der Notes-Datenbank
abhängige Folge von <item>-Tags zu finden. Jedes <item> repräsentiert ein Feld des
Notes-Dokumentes. Der Name des Feldes wird als Attribut vermerkt. Die Daten des
Feldes sind Teil der <item>-Struktur.
Abbildung 2 – RTF-Feld als DXL-Daten
In Abbildung 2 ist die DXL-Repräsentation eines RTF-Feldes zu sehen. Absätze
werden als <par>-Strukturen kodiert. Diese können <run>-Elemente enthalten, über
die Formatierungen wie z. B. "fett" oder die Verwendung spezieller Zeichensätze
(<font>) abgebildet werden. Weitere interessante Elemente von RTF-Feldern sind
<table> für Tabellen oder <doclink> für Dokumentverknüpfungen. Die Verknüpfungen
werden über die Dokument-ID der referenzierten Dokumente hergestellt. Die
<pardef>-Tags geben detaillierte Auskunft über die Formatierung von Absätzen.
Die Daten aus den Feldern sind als Unicode (utf-8) kodiert. Alle noch nicht als DXL
strukturierbaren Elemente werden als binäre Daten ausgegeben. Dazu zählen z. B.
Bitmaps, Word-Dokumente oder andere angehängte Dateien. Damit ist ein
verlustfreier Ex- und Import aller Daten einer Notes-Datenbank möglich.
Seite 2 von 8
Gestaltungselemente in DXL
Über die detaillierten Definitionsmöglichkeiten innerhalb einer DXL-Datei lassen sich
auch erstmals nahezu vollständige Datenbankgestaltungen exportieren und
importieren. Dabei werden Formeln und Lotus Script Code ebenso exportiert wie
verwendete Bitmaps.
Masken werden z. B. als <form>-Strukturen kodiert, die ein <body>-Element
enthalten, das wiederum <richtext> ist. Für die Beschreibung der Darstellung einer
Maske werden dieselben RTF-Tags verwendet, die auch bei der Kodierung des
Inhalts eines RTF-Feldes zum Einsatz kommen. Neben Texten, die z. B. als
Beschriftung eines Feldes in der Maske verwendet werden, sind in den DesignInformationen zur Maske die <field>-Elemente Teil der <richtext>-Struktur. Die RTFTags erlauben eine exakte Definition der Position der Felder.
Abbildung 3 – Feld mit Formel
Abbildung 3 zeigt ein berechnetes Feld aus dem persönlichen Adressbuch
(names.nsf). Die Formel zum Ereignis "defaultvalue" ist als Daten eines <formula>Tags angegeben. Wie die übrigen Gestaltungselemente repräsentiert werden, kann
man durch ein wenig Experimentieren mit dem XML Toolkit leicht ermitteln.
Eine mögliche Anwendung des DXL-Exports von Gestaltungselementen ist
beispielsweise die exakte Dokumentation einer Datenbank. Über den DXL-Import
könnten von einem Programmgenerator erzeugte Datenbankgestaltungen
eingelesen werden.
Seite 3 von 8
Notwendige Erweiterungen
Das API des Toolkits stellt leider nur sehr rudimentäre Funktionen zur Verfügung. So
ist der Export lediglich für einzelne Dokumente oder die gesamte Datenbank möglich.
Es wäre zwar prinzipiell möglich, das Filtern einer DXL-Datei, die eine vollständige
Datenbank enthält, durch XSLT-Schablonen vorzunehmen, jedoch ist dieser Ansatz
für große Datenbanken aus Performanzgründen nicht praktikabel.
Mit Hilfe des Einzeldokumentexports sowie der in der Domino-DTD vorgegebenen
<Database>-Struktur lässt sich eine Erweiterung des DXL-Exports programmieren.
Dazu werden zunächst mit Hilfe des Standard Domino Java APIs eine Menge von
Dokumenten über eine beliebige Formel definiert. Im Beispielprogramm (Listing 1
und 2) kann diese Formel in der Kommandozeile der Exportapplikation angegeben
werden. Anschließend wird jedes Dokument aus der Ergebnismenge der Selektion
einzeln abgearbeitet. Mit der NotesID jedes Dokumentes wird die exportDXL()Methode einer Instanz der Klasse DXLExporter aus dem XML-Toolkit aufgerufen.
Diese speichert ihr Ergebnis in einem ByteArrayOutputStream. Dort befinden sich die
relevanten Daten zwischen den <Document>-Tags, die in der dritten Zeile der ByteFolge beginnen.
Abbildung 4 – Zusammenführen der Einzelexporte
Wie in Abbildung 4 dargestellt, werden die Daten jedes einzeln exportierten
Dokumentes in die Zieldatei des Exports übernommen. Am Anfang dieser Datei
werden ein XML-Header sowie die Informationen über die Datenbank vermerkt, aus
welcher der Export erfolgt ist. Die Datei enthält eine beliebige Menge von
<document>-Datensätzen und endet mit dem </database>-EndTag.
Möchte man den Code der Beispielapplikation in einer länger laufenden Anwendung
wie z. B. einem Servlet einbetten, so sollte man nicht vergessen, die von der Notes
Schnittstelle gebundenen Ressourcen mit der recycle()-Methode der verwendeten
Java-Instanzen freizugeben.
Seite 4 von 8
Aufbereitung der XML-Daten
Aus einer Datenbank exportierte DXL-Daten enthalten keine
Formatierungsinformationen. Betrachtet man sie im Internet-Explorer, sieht man
daher nur die Standarddarstellung für XML-Strukturen. Um sie formatiert darstellen
zu können, müssen sie in ein Format mit Darstellungsinformationen wie z. B. HTML
transformiert werden.
Die in Abbildung 5 dargestellte Beispielschablone extrahiert den Inhalt der
LastName-Felder aus einer DXL-Datei mit Personen-Dokumenten aus dem
persönlichen Adressbuch. Die einzelnen Namen werden jeweils in einer eigenen
Zeile ausgegeben. Zu beachten sind die türkis dargestellten Textabschnitte. Die
DXL-Tags aus der Quelldatei, auf welche die Schablone angewendet werden soll,
befinden sich im Namespace DXL. Dieser muss im <xsl:stylesheet>-Tag definiert
werden. Außerdem funktioniert der Zugriff auf ein Tag aus der DXL-Datei nur mit
dem dxl:-Präfix. Eine hervorragende Einführung und Vertiefung der umfangreichen
XSLT-Möglichkeiten und Befehle ist Micheal Kays "XSLT Programmer's Reference",
das bei Wrox Press erschienen ist.
Abbildung 5 – XSLT-Schablone für das persönliche Adressbuch
Die XSLT-Schablone wird mit Hilfe eines XSLT-Prozessors auf die DXL-Datei
angewendet. Wie bereits erwähnt, enthält jede neuere Domino-Distribution den Lotus
XSL Prozessor in der Datei LotusXSL.jar. Zusätzlich sollte sich XML4J.jar im
Klassenpfad befinden, da sowohl die DXL-Datei als auch die XSLT-Schablone mit
dem dort enthaltenen Parser eingelesen werden. Der in Abbildung 6 zu findende
Aufruf startet den XSL-Prozessor und teilt ihm mit, welche DXL-Datei (names.xml)
mit welcher XSLT-Schablone (names2html.xsl) in welche Ausgabe-Datei
(names.html) umgewandelt werden soll. Außerdem wird der XML4J-Parser als XMLParser spezifiziert.
Seite 5 von 8
Abbildung 6 – Aufruf von LotusXSL und XML4J als Parser
Ein weiteres interessantes Transformationsziel ist die Definition einer speziellen
XML-Struktur, die sich an einer konkreten Datenbank orientiert. Man würde in dieser
die <item>-Elemente in Tags umwandeln, die dem Feldnamen im Notes-Dokument
entsprechen. Dadurch wäre eine typisiertere Schnittstelle möglich, die in der DTD
bzw. der Schema-Definition dieser XML-Struktur klar dokumentiert ist.
Aus XML- und damit auch aus DXL-Dateien lassen sich PDF-Dokumente (Portable
Document Format) für den Acrobat Reader erstellen. Auf der Homepage des
Apache-Projektes findet man die notwendigen Werkzeuge und Anleitungen, wie man
aus beliebigen XML-Dateien mit Hilfe von FOP PDF-Dateien erzeugen kann.
Zusammenfassung
Das Lotus XML Toolkit eröffnet für den Java-Programmierer bisher ungeahnte
Möglichkeiten. Der vollständige Ex- und Import von Datenbankinhalten und
-gestaltung auf XML-Basis öffnet die Domino Plattform ganz erheblich. Das Toolkit
lässt sich problemlos an spezielle Bedürfnisse anpassen.
Links
Seite 6 von 8
Listing 1 – Selektive DXLExport Applikation (Teil 1)
Seite 7 von 8
Listing 2 – Selektive DXLExport Applikation (Teil 2)
Seite 8 von 8
Herunterladen