Generierung eines BMEcat XML Kataloges aus CSV Dateien

BMEcat ist ein XML-Standard für die Übertragung elektronischer Produktkataloge. Mit ihm lassen sich Artikeldaten standardisiert speichern und zwischen verschiedenen System übertragen. Entwickelt wird der Standard seit Ende der 90er Jahre vom Fraunhofer IAO Institut in Stuttgart und der Universität Duisburg-Essen.

In einem aktuellen Projekt sollte basierend auf vorhandenen Artikeldaten aus unterschiedlichen Quellen so ein Katalog im BMEcat - Format erstellt werden. Alle Quellen lagen als CSV - Dateien vor und definieren pro Zeile jeweils einen Artikel und seine Eigenschaften. Die Datensätze werden mit Hilfe der Artikelnummer verknüpft, welche als Primärschlüssel dient.

Für die Umsetzung des Projektes habe ich mich gegen verfügbare Softwarepakete entschieden und ein eigenes Programm in Java entwickelt, welches zuerst die Quellen parst und alle vorhandenen Datensätze in internen Datenstrukturen ablegt. Zusätzlich wird eine hierarchische Kategoriestruktur auf den <CATALOG_GROUP_SYSTEM> - Tag umgesetzt. Aus diesen Daten wird dann ein XML-Baum aufgebaut, welcher der Struktur des BMEcat - Formates entspricht. Dafür verwende ich die bereits vor einiger Zeit vorgestellte Klasse XMLTree, mit der so ein Baum aufgebaut und anschließend ausgegeben werden kann.

Eine Besonderheit stellt die Behandlung der Bilder dar: In den Quelldaten werden diese mit ihren URLs definiert. Im Zielkatalog können aber nur die Dateinamen der Bilder angegeben werden, da beim Upload des Kataloges immer auch das Bildmaterial mit hochgeladen werden muss. Diese Einschränkung ist durch das Zielsystem vorgegeben. Der BMEcat Standard sieht durchaus vor, dass Bilder relativ zu einem Rootverzeichnis angegeben werden. Allerdings kann das Zielsystem die Bilder nicht selbständig herunterladen und erwartet sie stattdessen in einem Verzeichnis auf dem FTP-Server. Deshalb speichere ich beim Verarbeiten der Bilder die URLs in einer Liste zwischen und übergebe diese anschließend an ein Unterprogramm, welches alle Bilder nacheinander herunterlädt und sie in einem Ordner ablegt. Dieser kann dann zusammen mit dem XML-Katalog per FTP übertragen werden.

Die Vorteile einer Eigenentwicklung im Vergleich zu einer fertigen Lösungen waren bei diesem Projekt klar zu erkennen: Ein eigenes Programm bietet volle Flexibilität was das Einbinden bestehender Quelldaten angeht. In der Firma gab es bereits hochwertige Artikeldaten inkl. Kategorieinformationen, welche natürlich weiter verwendet werden sollten. Außerdem konnte nur so die Besonderheit bei den Bildern effizient gelöst werden. Ein fertiges Programm hätte hier viel zu viel manuelle Sortier- und Nacharbeit verlangt, was schlussendlich in Verbindung mit dem Anschaffungspreis deutlich teurer geworden wäre.

Haben auch Sie Interesse an einer individuellen Lösung zur Erstellung eines BMEcat Kataloges basierend auf Ihren Artikeldaten? Kontaktieren Sie mich für eine unverbindliche Anfrage.

Geschrieben am 13.08.2008 von Stefan Schlichthärle | Kommentar hinzufügen | Tags: Projekte XML Java E-Business BMEcat

XML - Dateien generieren mit Java

XML gehört mittlerweile nicht nur im Internet zu den wichtigsten Datenaustauschformaten. Die klare maschinenlesbare Struktur einerseits und gleichzeitig der Vorteil, dass sich bei Bedarf auch der Anwender direkt einen Überblick verschaffen kann, haben wesentlich zur hohen Verbreitung des Formates beigetragen.

Zur Generierung von XML-Dateien bzw. zum Speichern der in ihnen abgelegten Daten eignen sich Bäume optimal. Jeder Knoten stellt dabei einen Tag dar, welcher entweder einen Wert beinhaltet oder aber beliebig viele Nachfolger. Zusätzlich kann jeder Tag n Attribute haben. Nachfolger und Attribute realisiert man am Besten mit Hilfe von Listen, da so das Hinzufügen von n Elementen keine Probleme bzgl. maximaler Länge macht.

Die Klasse für so einen Knoten könnte folgendermaßen implementiert werden:

class Knoten
{
   XMLTagsListe nachfolger;
   XMLAttributeListe a;
   String tag;
   String wert;

   void AddNachfolger(Knoten k);
   void AddAttribut(String attribut, String wert);
   void AddWert(String wert);
}

XMLTagsListe und XMLAttributeListe sind Listen, deren Elemente auf die Nachfolger des Knotens bzw. auf Objekte zeigen, welche die Attribute (Name und Wert) abspeichern.

Zum Ausdrucken der XML-Datei mit den im Baum gespeicherten Daten eignet sich ein an den Pre-Order-Tiefendurchlauf angelehnter Durchlauf. Beim Eintritt in den Knoten wird zuerst der Tag ausgegeben, anschließend eventuell vorhandene Attribute. Falls es Nachfolger gibt, wird die Liste der Nachfolger mit einer While-Schleife durchlaufen und für jeden Knoten wieder die Print - Methode rekursiv aufgerufen. Falls es keine Nachfolger gibt wird der gespeicherte Wert ausgegeben. Beim Verlassen des Knotens folgt dann die Ausgabe zum Schließen des Tags. So ergibt sich dann rekursiv das komplette XML-Dokument, welches die gespeicherten Daten repräsentiert.

Das Einfügen eines neuen Tags in den Baum ist (noch) nicht elegant. Da der Baum keinerlei Sortierung aufweist weiß die Klasse beim Hinzufügen natürlich nicht, wo der neue Tag eingefügt werden soll. Der Add - Routine muss also der Elternknoten mitgegeben werden. Das verlangt vom Programmierer eine eigene Datenhaltung für Verweise in den Baum, um neue Tags an der richtigen Stelle einfügen zu können.

Eine erste Version der Java-Klasse zum Verwalten von XML-Daten in Bäumen kann hier heruntergeladen werden: XMLTree.java

Geschrieben am 24.03.2007 von Stefan Schlichthärle | Kommentar hinzufügen | Tags: Java Programmieren Projekte