Im folgenden Artikel wird erklärt, wie man aus einer etwas nebulösen Anforderung an eine Anwendung mit XML eine flexible funktionierende Lösung macht.
Nebulös ist ein schönes Wort, das perfekt die Anforderungen an ein Projekt beschreibt, an dem der Autor dieser Zeilen kürzlich arbeitete. Die Anforderungen lasen sich etwa so: "Übernehme eine reine Textdatei von einer vorgeschalteten Mainframe-Anwendung und mache daraus ein XML-Dokument für eine nachfolgende Anwendung." Keinerlei Angaben, wie die Eingabedaten aussahen, nur dass es sich um eine reine Textdatei handelte. Der einzige Punkt, mit dem man etwas anfangen konnte, war die Ausgabeseite, denn XML ist sehr flexibel und mit etwas XSLT kann man es genau so aussehen lassen, wie der Kunde es wünscht.
Da außer der Tatsache, dass es sich um eine reine Textdatei handelte, über die Eingabeseite nichts bekannt war, fiel die Entscheidung, ein Utility zu schreiben, das Datensätze fester Länge sowie Datensätze mit Trennzeichen handhaben kann. Eine Datei mit Datensätzen fester Länge besteht aus vordefinierten Datensätzen mit jeweils vordefinierten Feldern, die immer eine feste Länge haben. Der Datensatz A besteht zum Beispiel aus den Feldern X, Y und Z, mit einer Länge von 3 Bytes für X, 10 für Y und 5 für Z. Die Gesamtlänge beträgt immer 18 Bytes, weil die Länge der einzelnen Felder immer fest ist.
Bei Dateien mit Trennzeichen ist dies nicht der Fall. Statt eine feste Länge zu haben, sind die einzelnen Felder durch ein spezielles Zeichen voneinander getrennt, zum Beispiel ein Komma oder Semikolon. Daher kann man für einen Datensatz vom Typ B nicht vorab die Länge der Felder M, N und O feststellen. Man weiß jedoch, dass die einzelnen Felder entweder mit dem Trennzeichen oder mit dem Ende des Datensatzes enden, je nachdem, was eher kommt. Da die Art der Eingangsdaten unbekannt war, half eine "geborgte" Idee von Microsoft. Dort wird in den Dateien app.config und web.config ein XML-Dokument zur Beschreibung einer reinen Textdatei verwendet. Diese Vorgehensweise ist extrem flexibel, so dass man nur das zur Beschreibung der Eingangsdaten verwendete XML-Dokument anpassen muss, wenn das Eingabeformat schließlich bekannt ist.
Nach der Wahl von XML und angesichts der benötigten Flexibilität bot sich die Verwendung von Elementen und Attributen an, welche die grundlegende Struktur der Eingabedatei beschreiben. Eine Textdatei mit Eingabedaten besteht aus einzelnen Datensätzen, die wiederum aus einzelnen Feldern bestehen. Diese Beziehung lässt sich mit den Elementen eines XML-Dokuments sehr gut abbilden, wobei die Felder die Elemente auf der untersten Ebene darstellen und die Datensätze ihre jeweils übergeordneten Elemente repräsentieren. Die Eingabedatei als Ganzes würde durch das XML-Dokument selbst dargestellt.
Die Funktionsweise dieser Struktur lässt sich am einfachsten durch ein Beispiel erklären: Listing A zeigt die Textdatei mit den Daten, Listing B die XML-Datenzuordnung, welche die Eingabedatei beschreibt, und Listing C das daraus resultierende XML-Dokument. Diese Dokumente sind nicht besonders komplex, aber das müssen sie auch nicht sein, denn sie sollen ja verdeutlichen, wie das Verfahren funktioniert.
Listing A
Listing B
Listing C
Einer der großen Vorteile "nebulöser" Anforderungen ist, dass daraus resultierende Lösungen so flexibel sind, dass sie auch bei künftigen Projekten verwendet werden können. Das nach diesen Anforderungen entstandene C#-Projekt ist eine vollständige Implementierung eines Tools, das eine Textdatei mit Daten in eine XML-Datei und wieder zurück in eine Textdatei transformiert. Der einzige Nachteil gegenüber handelsüblicher Software mit demselben Zweck ist das Fehlen einer schicken grafischen Benutzeroberfläche sowie eines Editors zum Erstellen der Datenzuordnungen für die XML-Datei. Dafür ist diese Implementierung aber auch nicht so teuer wie die kommerziellen Produkte.
Technische Informationen
Die hier herunterladbare Datei data_mapper_zml_legacy.zip[1] enthält den C#-Quellcode sowie als Beispiel eine kompilierte ausführbare Datei der Anwendung, wie im Download beschrieben. Der Quellcode und die ausführbare Datei dienen als Anschauungsmaterial für die im Download gelieferten Informationen. Der Quellcode und die ausführbare Datei sind nicht als voll funktionsfähige Anwendung gedacht. Daher empfiehlt es sich unbedingt, die Datei data_mapper_zml_legacy.zip in einer Entwicklungsumgebung und nicht auf einem Produktionsrechner zu entpacken, der an ein Unternehmensnetzwerk angeschlossen ist. Außerdem sollte man die Unternehmensrichtlinien für Software-Installationen beachten.
URLs in diesem Artikel:
[1] = http:/