Datenzuordnung für binäre Objekte

Binäre Objekte sind in Datenbanken schwer zu verwalten. Sie sind groß, ihr Inhalt ist für Menschen nicht lesbar, und sie können Bytes enthalten, die leicht als Steuerzeichen fehlinterpretiert werden können. Selbst der Begriff für große binäre Objekte – BLOB – spiegelt die Ablehnung wider, die viele Datenbankmanagementsysteme gegenüber ihnen haben. Vor der Einführung relationaler Datenbanken wurde ein BLOB als „etwas Unbestimmtes oder Formloses“ definiert

Altova MapForce, das preisgekrönte, grafische Werkzeug zur Datenzuordnung für die Konvertierung und Integration von Daten in beliebigen Formaten, bietet Funktionen zur einfachen Zuordnung von Binärdaten zu oder von allen gängigen relationalen Datenbanken. Daten wie Bilder, PDF-Dateien, Videodateien oder andere Binärdaten können zugeordnet werden. Betrachten wir ein Beispiel.

MapForce enthält zwei integrierte Funktionen, "read-binary-file" (binäre Datei lesen) und "write-binary-file" (binäre Datei schreiben), für die Abbildung zwischen binären Objekten und Datenbanken. In diesem Artikel erweitern wir ein Beispiel für die Funktion "read-binary-file" aus der Online-Hilfe von MapForce, um eine vollständige Abbildung zu erstellen, mit der verschiedene binäre Objekte in eine relationale Datenbank eingefügt werden können.

Hier ist ein Beispiel aus der Hilfedokumentation, das veranschaulicht, wie man ein Bild in eine Datenbank einfügt:

Diese Zuordnung fügt die lokale Datei mit dem Namen "image01.png" in eine Datenbanktabelle ein. Wir können sehen, dass die Datenbank so strukturiert ist, dass sie Metadaten über das Bild in separaten Spalten enthält, die abgefragt werden können, um dasselbe Bild abzurufen. Man möchte große Binärdaten nicht einfach in die Datenbank schreiben, ohne eine Möglichkeit, sie später wiederzufinden!

Für unseren Anwendungsfall erstellen wir eine SQLite-Datenbank, um verschiedene Binärdateien zu verwalten, die als Ressourcen für mehrere Produkte einer Marketingabteilung dienen. Diese Binärdaten können beispielsweise Logobilder, PDF-Dateien für Produktdatenblätter, Screenshots des Produkts in Aktion, Fotos, Videodateien usw. sein.

Wir beginnen mit einer einfachen CSV-Textdatei, um die Informationen zu beschreiben, die wir einfügen möchten:

Wenn wir dieses Projekt abschließen, könnten Benutzer bereits Dutzende oder sogar Hunderte von Objekten in der Datenbank haben. Wenn wir später ein Objekt abrufen müssen, werden die Namen der Objekttypen entscheidende Metadaten für die Abfragen sein. Wenn jedoch ein einzelner Eintrag in der Spalte "Objekttyp" falsch geschrieben oder inkonsistent ist, wird ein großes Binärobjekt verwaist und kann nicht wiederhergestellt werden.

Wir können eine Liste von Asset-Typen erzwingen, indem wir die CSV-Datei in XMLSpy importieren und ein XML-Schema erstellen, bei dem das Element "Type" aus einer vordefinierten Liste ausgewählt wird. Anschließend kann ein unerfahrener Marketing-Praktikant eine Liste von Assets in der XMLSpy-Tabellenansicht erstellen. Das Feld "Typ" wird dabei durch die vordefinierte Liste eingeschränkt

Wir könnten auch eine Liste von Produktnamen zum XML-Schema hinzufügen, oder zumindest sicherstellen, dass das Element "Produkt" vorhanden ist. Wir könnten sogar den Datentyp für das Element "Asset" auf xs:anyURI setzen, um eine Referenz zu einer Datei zu erzwingen. Hier ist das Hilfefenster "Details" in der XMLSpy-Schemaansicht mit der Datentyp-Einstellung für das Element "Asset":

Die Zuordnung von Binärdaten in MapForce funktioniert im Wesentlichen gleich, unabhängig davon, ob wir Daten aus einer CSV- oder einer XML-Quelle zuordnen.

Wir beginnen damit, eine neue MapForce-Instanz zu erstellen, in die wir unsere Liste der Ressourcen und die Datenbanktabelle importieren.

Wir haben DatabaseSpy verwendet, um eine neue SQLite-Datenbanktabelle zu erstellen, wobei wir das Beispiel in der MapForce-Hilfe etwas erweitert haben. Die Spalte "Produkt" enthält den Produktnamen, und der Asset-Typ wird in der Spalte "Beschreibung" gespeichert. Die Spalte "RecordDate" speichert das Alter jedes Binärobjekts.

Jetzt legen wir die Spalte "id" als automatische Nummerierung fest, wie in der MapForce-Hilfe beschrieben, und erstellen die einfachen Verbindungen zwischen Quelle und Ziel:

Die Produkt- und Typinformationen aus der Quelldatei werden direkt den entsprechenden Spalten in der Datenbank zugeordnet. Die Zuordnung des "Row"-Elements weist die Datenbank an, für jede Zeile der Eingabedatei einen neuen Datenbankeintrag zu erstellen.

Jetzt werden wir binäre Daten in der Datenbank als BLOBs (Binary Large Objects) speichern

Die integrierte MapForce-Funktion "read-binary-file" verwendet den im Element "Asset" der Quelldatei angegebenen Dateinamen, um den BLOB (Binary Large Object) zu erstellen. Die Funktion "read-binary-file" behandelt die Quelldatei immer als binäre Daten im Base64-Format, unabhängig von Konventionen, die auf dem Namen der Quelldatei basieren.

Um die Zuordnung abzuschließen, benötigen wir Verbindungen, um den Dateinamen aus dem Asset zu extrahieren und das Speicherdatum zu speichern

Die Funktion "Ordner löschen" extrahiert automatisch den Dateinamen aus jedem Pfad, unabhängig davon, ob es sich um lokale Dateien, Netzwerkdateien oder Dateien im Internet handelt.

Die Funktion "now" speichert das Datum und die Uhrzeit der Ausführung, aber wir benötigen nur das Datum. Daher haben wir die Funktion "substring-before" verwendet, um den Zeitanteil zu entfernen.

Der "Ausführen"-Button am unteren Rand des Bereichs für die Zuordnung führt die Zuordnung durch und generiert ein SQL-Skript:

Das Skript dient lediglich als Vorschau, um die bisherigen Ergebnisse zu überprüfen. Um das Skript auszuführen, wählen Sie eine Option im Hauptmenü "Ausgabe"

Das Ergebnis des Skripts wird angezeigt:

Wir klicken auf die Schaltfläche "DB-Abfrage", um eine Verbindung zur Datenbank herzustellen und das Ergebnis direkt in MapForce weiter zu überprüfen:

Man kann aus den BLOB-Daten in der Spalte "productfile" nicht viel ableiten, aber die anderen Spalten enthalten nützliche Metadaten über jedes Element.

In einem [data-mapping-binary-objects-part-2|nachfolgenden Beitrag zeigen wir, wie man Daten zu Binärobjekten zuordnet, um [Ressourcen aus der Datenbank zu extrahieren]] und sie in ihren ursprünglichen Formaten zu speichern. Wenn Sie es nicht erwarten können, laden Sie eine kostenlose Testversion herunter, die Tutorials, Hilfestellungen und viele weitere Beispiele enthält, um mit Ihrem eigenen Projekt zur Datenzuordnung, -konvertierung und -transformation zu beginnen!