Cartographie des données pour les objets binaires
Les objets binaires sont difficiles à gérer dans les bases de données. Ils sont volumineux, leur contenu n'est pas lisible par l'homme, et ils peuvent contenir des octets de données qui peuvent facilement être interprétés comme des caractères de contrôle. Même le nom du type de données utilisé pour les objets binaires volumineux – BLOB – reflète le peu d'enthousiasme que les gestionnaires de bases de données ont pour ces éléments. Avant l'avènement des bases de données relationnelles, la définition d'un BLOB était « quelque chose d'indéfini ou d'amorphe »
Altova MapForce, ce logiciel primé, Outil de cartographie de données graphiques pour la conversion et l'intégration de données de tout type, Il intègre des fonctionnalités qui permettent de mapper facilement des objets binaires vers ou depuis toutes les bases de données relationnelles les plus courantes. Des données telles que des images, des fichiers PDF, des fichiers vidéo ou tout autre type de données binaires peuvent être mappées. Examinons un exemple.

MapForce comprend deux fonctions intégrées, read-binary-file et write-binary-file, qui permettent de faire correspondre des objets binaires et des bases de données. Dans cet article, nous allons développer un exemple de la fonction read-binary-file présent dans l'aide en ligne de MapForce, afin de créer une correspondance complète permettant d'insérer divers objets binaires dans une base de données relationnelle.
Voici un exemple tiré de la section d'aide qui illustre comment insérer une image dans une base de données :

Cette opération permet d'insérer le fichier local nommé image01.png dans une table de base de données. On peut constater que la base de données est structurée de manière à inclure des métadonnées concernant l'image dans des colonnes distinctes, ce qui permet de rechercher et de récupérer l'image correspondante. Il est important de ne pas insérer de gros fichiers binaires dans la base de données sans prévoir un moyen de les retrouver ultérieurement !
Pour notre cas d'utilisation, nous allons créer une base de données SQLite pour suivre divers fichiers binaires qui constituent des éléments essentiels pour plusieurs produits au sein d'un service marketing. Ces données binaires peuvent inclure des fichiers images de logos, des fichiers PDF pour les fiches techniques des produits, des captures d'écran du produit en action, des photographies, des fichiers vidéo, etc.
Nous allons commencer par un simple fichier texte au format CSV pour décrire les informations que nous souhaitons insérer :

Une fois ce projet terminé, les utilisateurs pourraient avoir des dizaines, voire des centaines, d'éléments enregistrés dans la base de données. Lorsque nous devrons extraire un élément ultérieurement, les noms des types d'éléments seront des métadonnées essentielles pour les requêtes. Cependant, si une seule entrée dans la colonne "type" contient une faute d'orthographe ou est incohérente, un énorme objet binaire risque de devenir orphelin et de devenir irrécupérable.
Nous pouvons définir une liste de types d'actifs en important le fichier CSV dans XMLSpy et en générant un schéma XML où l'élément "Type" est sélectionné à partir d'une liste prédéfinie. Ensuite, un stagiaire en marketing, même sans grande expérience, peut créer une liste d'actifs dans la vue grille de XMLSpy. Le champ "Type" est alors imposé :

Nous pourrions également ajouter une liste de noms de produits au schéma XML, ou au moins exiger la présence de l'élément "Produit". Nous pouvons même définir le type de l'élément "Asset" comme xs:anyURI, ce qui obligerait à faire référence à un fichier. Voici la fenêtre d'aide "Détails" dans la vue schéma de XMLSpy, avec le type de données défini pour l'élément "Asset" :

La manière dont les objets binaires sont mappés dans MapForce est essentiellement la même, que nous effectuions le mappage à partir d'une source CSV ou XML.
Nous allons commencer par ouvrir un nouveau projet MapForce, puis nous allons importer notre liste d'éléments et la table de base de données.

Nous avons utilisé DatabaseSpy pour créer une nouvelle table de base de données SQLite, en apportant quelques améliorations à l'exemple fourni dans l'aide de MapForce. La colonne "product" contiendra le nom du produit, et le type d'actif sera inséré dans la colonne "description". La colonne "recordDate" permettra de suivre l'ancienneté de chaque objet binaire.
Maintenant, nous allons configurer la colonne "id" pour qu'elle génère automatiquement des numéros, comme décrit dans l'aide de MapForce, et nous allons établir les connexions simples entre la source et la cible

Les champs "Produit" et "Type", extraits directement de la carte de données source, sont associés aux colonnes de la base de données. La définition de l'élément "Ligne" indique que chaque ligne de données d'entrée doit créer un nouvel enregistrement dans la base de données.
Maintenant, nous allons associer les données binaires aux objets binaires (BLOB) dans la base de données

La fonction intégrée MapForce, "read-binary-file", utilise le nom de fichier fourni dans l'élément "Asset" de la source pour créer l'objet blob. La fonction "read-binary-file" traite toujours la source comme des données binaires encodées en base64, indépendamment de toute convention basée sur le nom du fichier source.
Pour finaliser la cartographie, nous avons besoin de connexions qui permettent d'extraire le nom du fichier à partir de l'élément et d'enregistrer la date de stockage

La fonction "supprimer dossier" extrait automatiquement le nom du fichier à partir de n'importe quel chemin, que ce soit pour les fichiers locaux, les fichiers réseau ou les fichiers accessibles sur le web.
La fonction "now" enregistre la date et l'heure d'exécution de l'opération, mais nous ne voulons que la date, nous avons donc utilisé la fonction "substring-before" pour supprimer l'heure.
Le bouton "Exécuter" situé en bas du panneau de mappage permet de lancer le processus de mappage et de générer un script SQL :

Le script n'est qu'un aperçu destiné à vérifier les résultats obtenus jusqu'à présent. Pour exécuter le script, sélectionnez l'option correspondante dans le menu principal "Sortie"

Le résultat du script est affiché :

Nous cliquerons sur le bouton "Requête de base de données" pour nous connecter à la base de données et valider ensuite le résultat directement dans MapForce :

Il est difficile de tirer des conclusions en examinant les données binaires (BLOB) dans la colonne "productfile", mais les autres colonnes fournissent des métadonnées utiles concernant chaque élément.
Dans un [data-mapping-binary-objects-part-2|suite de la publication Nous allons démontrer comment faire correspondre des données et des objets binaires [extraire les données de la base de données]] et les enregistrez dans leur forme originale. Si vous ne pouvez absolument pas attendre, Téléchargez une version d'essai gratuite y compris des tutoriels, une aide en ligne, et de nombreux exemples pour vous aider à démarrer votre propre projet de modélisation, de conversion et de transformation de données !