Data-mapping van binaire objecten

Binair objecten zijn moeilijk te beheren in databases. Ze zijn groot, hun inhoud is niet leesbaar voor mensen, en ze kunnen bytes aan data bevatten die gemakkelijk verkeerd kunnen worden geïnterpreteerd als besturingskarakters. Zelfs de naam van het gegevenstype voor binaire grote objecten – BLOB – weerspiegelt de weerzin die veel databasebeheerders tegen deze objecten voelen. Voordat relationele databases bestonden, was de definitie van een BLOB "iets ongedefinieerd of amorfe."

Altova MapForce, het bekroonde, grafische hulpmiddel voor het omzetten en integreren van data tussen verschillende formaten, biedt functies waarmee u moeiteloos binaire objecten kunt koppelen aan of van alle gangbare relationele databases. Data zoals afbeeldingen, PDF-bestanden, videobestanden of andere binaire data kunnen op deze manier worden gekoppeld. Laten we eens een voorbeeld bekijken.

MapForce bevat twee ingebouwde functies, read-binary-file en write-binary-file, voor het omzetten tussen binaire objecten en databases. In dit artikel zullen we een voorbeeld van de functie read-binary-file uit de online help van MapForce uitbreiden, om een complete conversie te creëren waarmee verschillende binaire objecten in een relationele database kunnen worden ingevoegd.

Hieronder volgt een voorbeeld uit de helpsectie om te illustreren hoe u een afbeelding in een database kunt invoegen:

Deze mapping plaatst het lokale bestand met de naam image01.png in een database-tabel. We kunnen zien dat de database is gestructureerd om metadata over de afbeelding in aparte kolommen op te slaan, zodat deze informatie gebruikt kan worden om dezelfde afbeelding op te halen. U wilt geen grote bestanden met binaire gegevens in de database plaatsen zonder een manier om ze later terug te vinden!

Voor ons specifieke gebruik gaan we een SQLite-database aanmaken om verschillende binaire bestanden bij te houden. Deze bestanden zijn assets die meerdere producten ondersteunen voor een marketingafdeling. De binaire data kan bestaan uit bijvoorbeeld logo-afbeeldingen, PDF-bestanden voor productinformatiebladen, screenshots van het product in gebruik, foto's, videobestanden, enzovoort.

We beginnen met een eenvoudig CSV-tekstbestand om de informatie te beschrijven die we willen invoegen:

Zodra we dit project hebben afgerond, kunnen gebruikers tientallen of zelfs honderden assets in de database hebben opgeslagen. Wanneer we later een asset moeten ophalen, zullen de namen van de assettypen cruciale metadata zijn voor de zoekopdrachten. Maar als er in een van de velden met assettypen een spelfout staat of als de informatie inconsistent is, dan zal een groot binair bestand "verloren" raken en niet meer te herstellen zijn.

We kunnen een lijst met toegestane asset-types afdwingen door het CSV-bestand te importeren in XMLSpy en een XML-schema te genereren, waarbij het element "Type" wordt geselecteerd uit een vooraf gedefinieerde lijst. Vervolgens kan een minder ervaren marketingstagiair een lijst met assets aanmaken in de XMLSpy-rasterweergave. Het veld "Type" wordt dan afgedwongen:

We kunnen ook een lijst met productnamen toevoegen aan het XML-schema, of in ieder geval eisen dat het element "Product" aanwezig is. We kunnen zelfs het type van het "Asset"-element instellen op xs:anyURI, waardoor er een verwijzing naar een bestand vereist wordt. Hieronder ziet u het "Details"-hulpmenu in de XMLSpy-schemaweergave, met de datatype-instelling voor het "Asset"-element:

Het mappen van binaire objecten in MapForce is in essentie hetzelfde, ongeacht of we gegevens importeren vanuit een CSV-bestand of een XML-bestand.

We beginnen met het openen van een nieuwe MapForce-omgeving voor het mappen van gegevens, waarna we onze lijst met activa en de database-tabel toevoegen.

We hebben DatabaseSpy gebruikt om een nieuwe SQLite-databasetabel te maken, met enkele verbeteringen ten opzichte van het voorbeeld in de MapForce-handleiding. De kolom "product" bevat de naam van het product, en het type asset wordt opgeslagen in de kolom "omschrijving". De kolom "recordDatum" houdt bij hoe oud elk binair object is.

Nu gaan we de kolom "id" instellen als een automatisch gegenereerde nummerreeks, zoals beschreven in de MapForce-handleiding, en vervolgens de eenvoudige verbindingen tussen de bron- en doelbestanden tekenen:

De "Product" en "Type" velden uit de brongegevens worden direct toegewezen aan kolommen in de database. Door het "Row"-element te configureren, wordt voor elke rij in de invoergegevens een nieuw database-record aangemaakt.

Nu gaan we binaire gegevens toewijzen aan BLOB's (Binary Large Objects) in de database:

De ingebouwde MapForce-functie "read-binary-file" gebruikt de bestandsnaam die is opgegeven in het "Asset"-element van de bron om de BLOB (Binary Large Object) te creëren. De functie "read-binary-file" behandelt de bron altijd als base64-binair data, ongeacht eventuele conventies die gebaseerd zijn op de naam van het bronbestand.

Om de koppeling compleet te maken, hebben we verbindingen nodig om de bestandsnaam uit de "Asset" te halen en de opslagdatum op te slaan

De functie "map verwijderen" haalt automatisch de bestandsnaam uit elk pad, of het nu gaat om lokale bestanden, netwerkbestanden of bestanden op het internet.

De functie "now" registreert de datum en tijd waarop de bewerking is uitgevoerd, maar we willen alleen de datum, dus we hebben de functie "substring-before" gebruikt om de tijd te verwijderen.

De knop "Uitvoeren" onderaan het venster voor de mapping voert de mapping uit en genereert een SQL-script:

Het script is slechts een voorproefje om de resultaten tot nu toe te controleren. Om het script uit te voeren, selecteert u een optie in het hoofdmenu "Output"

Het resultaat van het script wordt weergegeven:

We klikken op de knop "DB Query" om verbinding te maken met de database en het resultaat direct in MapForce verder te valideren:

Je kunt niet veel afleiden van de gegevens in de kolom "BLOB" in het productbestand, maar de andere kolommen bevatten nuttige metadata over elk item.

In een [data-mapping-binary-objects-part-2|volgende bericht zullen we laten zien hoe u gegevens kunt toewijzen aan binaire objecten om [bestanden uit de database te halen]] en deze in hun oorspronkelijke vorm op te slaan. Als u niet kunt wachten, download dan een gratis proefversie, inclusief tutorials, hulp en nog veel meer voorbeelden om direct aan de slag te gaan met uw eigen project voor gegevensmapping, conversie en transformatie!