Arbeiten mit dem XML-Toolkit

11. November 2008 | Von | Kategorie: Programmierung

Die praktische Anwendung der hier beschriebenen Regeln können Sie sehr gut anhand des Beispielprogramms nachvollziehen, das wir zum Artikel „XML-Verarbeitung mit RPG, DOM und dem XML-Toolkit“ in Print-Ausgabe März 2007 von NEWSolutions bereitstellen.

cl7_CIMG1053Bei der Arbeit mit dem XML-Toolkit gibt es einige Besonderheiten zu beachten

von Craig Caulfield

Die praktische Anwendung der hier beschriebenen Regeln können Sie sehr gut anhand des Beispielprogramms nachvollziehen, das wir zum Artikel „XML-Verarbeitung mit RPG, DOM und dem XML-Toolkit“ in Print-Ausgabe März 2007 von NEWSolutions bereitstellen.

Wenn Sie SAX und DOM auf dem System i einsetzen wollen, installieren Sie das IBM XML-Toolkit for iSeries oder System i5. Fragen Sie Ihren Vertriebspartner danach; die Produkte sind kostenlos erhältlich. Das Toolkit ist eine Sammlung von XML-Tools, die auf den C++ Versionen das Parsers Xerces und der Transform Engine Xalan der Apache Software Foundation (xml.apache.org) basieren. Das Toolkit enthält Schnittstellen und Serviceprogramme, mit denen RPG-, Cobol- und C-Entwickler den vollen Funktionsumfang von SAX und DOM nutzen und XML-Dokumente parsen, erstellen, bearbeiten und prüfen können. Da hinter den Kulissen mit C++ gearbeitet wird, müssen prozedurale Sprachen, die das Toolkit nutzen, einige spezielle Bereinigungsregeln beachten, die weiter unten beschrieben werden.

Nach dem Installieren des XML-Toolkits steht Ihnen folgendes zur Verfügung:

  • Zwei Serviceprogramme in der Bibliothek QXMLTOOLS: QXML4C531 für die Verwendung mit C++ und QXML4PR531 für prozedurale Sprachen (RPG, Cobol und C). Die Versionsnummmern am Ende der Serviceprogramme unterscheiden sich je nach den bei der Installation gewählten Optionen.
  • API-Dokumentation, Beispielprogramme und Include-Dateien für die RPG-, C- und Cobol-XML-Wrapper in der Bibliothek QXMLDEV531 und vergleichbare Komponenten für C++ im IFS unter /QIBM/Prod/Data/xmltoolkit/xml5_3_1. Die Namen der Bibliotheken und Verzeichnisse sind wieder von der jeweiligen Installation abhängig.
  • Serviceprogramme und Dokumentation für die XSL Transform Engine.

Craig Caulfield ist Senior Software Engineer bei der Thales Group in Perth (Australien). Er besitzt Zertifikate in Java, RPG, WebSphere, DB2 und XML. Sie erreichen ihn unter ccaulfi@bigpond.net.au. Übersetzt und für den deutschsprachigen Markt überarbeitet von Mathias Spateneder.

Der praktische Einsatz

Eine der wichtigsten Funktionen des XML-Toolkits ist die Möglichkeit, XML-Dokumente direkt in einem RPG-Programm zu verarbeiten. Dafür muss man allerdings einige kleine Zugeständnisse an die zugrunde liegende C++-Implementierung machen, die die Einrichtung der Runtime-XML-Umgebung, die Behandlung von Ausnahmefehlern und das Arbeiten mit Strings betreffen.

Einrichten der XML-Runtime-Umgebung

Alle Programme, die das XML-Toolkit verwenden, müssen zwischen Aufrufen der Prozeduren QxmlInit und QxmlTerm ablaufen. Diese Prozeduren definieren die Grenzen einer initialisierten Sitzung, während derer die meisten vom Parser XML4PR verwendeten Objekte entsprechend der zugrunde liegenden C++-Implementierung vom Heap-Space zugeordnet werden. Die Befolgung dieser Regeln und die Durchführung einiger anderer Bereinigungsfunktionen ermöglicht die Wiederverwendung von Object Handles und verhindert Probleme mit Speicherlücken.
Beachten Sie, dass QxmlInit als Parameter einen Pointer auf eine DOM-Exception-Datenstruktur erwartet. Diese Datenstruktur wird immer dann gefüllt, wenn von C++ eine DOM-Exception ausgegeben wird und kann eine wertvolle Hilfe beim Debuggen sein. Wenn Sie kein Interesse an diesen Informationen haben, übergeben Sie einfach einen Null-Pointer.

Fehlerbehandlung

Die Fehler, die in der Datenstruktur von QxmlInit dargestellt werden, weisen meistens auf einen Fehler in der Handhabung des DOM-APIs hin, wie z.B. den Versuch, ein Feature zu nutzen, das von der entsprechenden Parser-Implementierung nicht voll unterstützt wird. Der Parser kann aber auch auf Fehlersituationen stoßen, die mehr mit Inhalt und Struktur des zu verarbeitenden XML-Dokuments zusammenhängen. Diese Fehler werden in der SAX-Fehlerdatenstruktur festgehalten, deren Adresse beim Erstellen der DOM-Parser-Instanz als Parameter an die Prozedur QxmlXercesDOMPARSER_new übergeben wird. Üblicherweise wird unmittelbar nach dem Parsen eines XML-Dokuments die Variable Qxml_ErrorType in dieser Datenstruktur geprüft, um festzustellen, ob die Arbeit mit dem DOM-Modell begonnen werden kann. Falls erforderlich, können die Prozeduren printErrLoc und printErrMsg verwendet werden, die mit Hilfe anderer Variablen aus den Fehlerdatenstrukturen detaillierte Fehlermeldungen erstellen.
Eine SAX-Fehlerdatenstruktur in einem DOM-Programm – ist das richtig? Es ist tatsächlich sinnvoll: SAX ist ein so effizienter XML-Prozessor, dass es durchaus üblich ist, dass ein DOM-Parser es zum Erstellen seines Modells einsetzt.

Arbeiten mit Strings

Jeder, der schon einmal mit Java und RPG gearbeitet hat, weiß, wie unterschiedlich die beiden Sprachen Zeichenketten darstellen. Ein Java-String ist z.B. eher ein Objekt als ein einfacher Datentyp, während ein RPG-String ein Array von EBCDIC-Zeichen ist. Ähnliche Differenzen tauchen auf, wenn man mit dem XML-Toolkit arbeitet, das intern Unicode-Strings verwendet.
Da das Konvertieren zwischen verschiedenen String-Encodings eine häufig anfallende Aufgabe ist, stellt das XML-Toolkit die Prozedur QxmlTranscode zur Verfügung, die als Parameter einen Pointer auf einen Unicode-String, zwei Konstanten oder Zahlenwerte für die Von- und Nach-CCSID, einige Puffer-Größenangaben und einen Ausgabepuffer erwartet.

Schlagworte: , , , , , , , , , , , , , , , , ,

Schreibe einen Kommentar

Sie müssen eingeloggt sein, um einen Kommentar schreiben.