Altova MapForce 2024 Enterprise Edition

Cette section décrit comment MapForce gère les valeurs NULL dans les composants source et cible. Pour pouvoir utiliser l’attribut xsi:nil="true" dans votre fichier XML, vous devez spécifier l’attribut nillable="true" pour les élément(s) dans votre fichier de schéma. Pour en savoir plus sur les attributs nillable et xsi:nil, voir la spécification W3C. Notez que l’attribut xsi:nil n’est pas visible dans une arborescence de composant dans le volet Mappage.

 

Les sous-sections ci-dessous illustrent quelques scénarios possibles de valeurs NULL de mappage.

 

Valeurs NULL dans les composants XML

Cette sous-section décrit quelques uns des scénarios possibles de mappage des éléments avec un attribut xsi:nil="true".

 

Uniquement l’élément source a xsi:nil="true"/Les deux éléments source et cible ont xsi:nil="true"

Ce scénario a les conditions suivantes :

 

La connexion est target-driven.

L’élément source a un attribut xsi:nil="true". L’élément cible correspondant n’a pas cet attribut.

En alternative, les deux éléments source et cible peuvent avoir les attributs xsi:nil="true".

Les attributs nillable="true" doivent être définis dans les schémas source et cible.

Les éléments source et cible sont de type simple.

 

Dans ce cas, l’élément cible aura l’attribut xsi:nil="true" dans le fichier de sortie, tel qu’affiché dans le modèle de fichier de sortie ci-dessous (en surbrillance jaune).

 

<book id="7">

 <author>Edgar Allan Poe</author>

 <title>The Murders in the Rue Morgue</title>

 <category xsi:nil="true"/>

 <year>1841</year>

 <OrderID id="213"/>

</books>

 

Note :si l’attribut nillable="true" n’est pas défini dans le schéma cible, l’élément cible correspondant sera vide dans la sortie.

 

Seul l’élément cible a xsi:nil="true"

Ce scénario a les conditions suivantes :

 

La connexion est target-driven.

L’élément source n’a pas d’attribut xsi:nil="true".

L’élément cible correspondant a un attribut xsi:nil="true".

L’élément source et cible peut être de type simple ou complexe.

 

Dans ce cas, l’élément source écrasera l’élément cible contenant l’attribut xsi:nil="true". L’exemple ci-dessous montre un modèle de fichier de sortie. L’élément <genre> inclut l’attribut xsi:nil="true" dans l’élément cible. Toutefois, cet élément a été écrasé lors de l’exécution de mappage. Pour cette raison, l’élément <genre> (en surbrillance jaune) a Fiction dans la sortie.

 

</publication>

 <id>1</id>

 <author>Mark Twain</author>

 <title>The Adventures of Tom Sawyer</title>

 <Genre>Rock</Genre>

 <year>1876</year>

 <OrderID id="124"/>

</publication>

 

L’élément source Complex-type/les éléments complex-type ont xsi:nil="true"

Ce scénario a les conditions suivantes :

 

La connexion est target-driven.

L’élément source est de type complexe. Dans notre exemple, l’élément source a un attribut id="213" et un attribut xsi:nil="true". L’élément cible correspondant est de type complexe et a un attribut id="124" , mais n’a pas d’attribut xsi:nil="true".

En alternative, les éléments source et cible, dont les deux sont de type complexe, peuvent avoir des attributs xsi:nil="true".

 

Dans ce cas, l’élément source écrasera l’élément cible (en surbrillance jaune ci-dessous. Toutefois, l’attribut xsi:nil="true" ne sera pas écrit dans le fichier de sortie automatiquement. Pour voir l’attribut xsi:nil="true" dans l’élément cible dans le fichier de sortie, utilisez la connexion copy-all.

 

<book id="7">

 <author>Edgar Allan Poe</author>

 <title>The Murders in the Rue Morgue</title>

 <year>1841</year>

 <OrderID id="213"/>

</books>

 

Fonctions utiles

Les fonctions suivantes pourraient vous aider à vérifier, remplacer et assigner les valeurs NULL :

 

is-xsi-nil : Aide à vérifier explicitement si un élément source a un attribut xsi:nil définit à true.

substitute-missing : Substitue une valeur NULL dans l’élément source avec quelque chose de spécifique.

set-xsi-nil : Assigne l’attribut xsi:nil="true » à un élément cible. Ceci fonctionne pour les éléments cible de types simple et complexe.

substitute-missing-with-xsi-nil : S’il y a un contenu, il sera écrit à l’élément cible ; s’il y a des valeurs qui manquent, utilisez cette fonction résultera en élément cible avec un attribut xsi:nil="true" dans la sortie.

Connecter une fonction exists à un élément source avec une valeur NULL retourne true, même si l’élément n’a pas de contenu.

 

Veuillez noter que les fonctions qui génèrent xsi:nil ne peuvent pas être passées par les fonctions ou composants qui opèrent uniquement sur des valeurs (telles que la fonction if-else).

 

Valeurs NULL dans les composants de base de données

Cette sous-section affiche comment les valeurs NULL sont traitées dans les composants de base de données.

 

Mapper les champs de base de données NULL dans les éléments NULL

Les éléments cibles qui obtiennent les valeurs NULL depuis les champs de base de données ne sont pas créés dans la sortie automatiquement. Pour voir de tels éléments dans la sortie, vous devez (i) ajouter les attributs nillable="true" aux éléments cibles pertinents dans le fichier de schéma et (ii) utilisez la fonction substitute-missing-with-xsi-nil dans le mappage. L’exemple ci-dessous montre comment gérer les valeurs NULL dans les mappages avec un composant de base de données source.

 

Table d’application dans le volet DB Query.

L’exemple de mappage est situé dans le chemin suivant : Tutorial\DBNullToXML.mfd. Pour notre exemple, nous avons choisi uniquement une table (Application) depuis la base de données Accounts (voir ci-dessous).

nill3

Pour voir la table Application, suivez les étapes suivantes :

 

Ouvrez le volet DB Query.

Sélectionnez la base de données Accounts pour voir sa structure dans le Navigateur de la base de données.

Cliquez avec la touche de droite dans la table Application et cliquez sur Afficher dans l'Éditeur SQL | SELECT.

Cliquez sur le bouton ic_execute-sql (Exécuter Requête). La table Application apparaîtra dans l’onglet Résultats.

 

Pour en savoir plus sur les requêtes de bases de données, voir Volet requête BD.

 

Mappage

La table Application ci-dessus montre que le deuxième enregistrement a des valeurs NULL dans les champs Description, Catégorie et URL. À des fins d’illustration, nous mapperons presque la totalité des colonnes directement vers les éléments cible correspondants. Pour la colonne URL, nous utiliserons la fonction substitute-missing-with-xsi-nil pour que les valeurs NULL dans l’élément cible ait un attribut xsi:nil="true" (voir le mappage ci-dessous).

nill4

Sortie

Le fichier de sortie ci-dessous affiche que le premier enregistrement de la table a été entièrement écrit à la sortie, tandis que le deuxième enregistrement a été écrit uniquement partiellement. Les valeurs de base de données NULL sont absentes de la sortie, à l’exception de l’élément URL. Depuis que l’élément URL est doté de l’attribut nillable="true" dans le fichier de schéma et nous avons utilisé la fonction substitute-missing-with-xsi-nil, l’élément URL est désormais doté de l’attribut xsi:nil="true" dans la sortie (en surbrillance jaune).

 

<Application>

 <AppID>1</AppID>

 <AppName>Altova MapForce</AppName>

 <Description>Best data mapping tool!</Description>

 <Category>IDE</Category>

 <URL>https://www.altova.com/mapforce</URL>

</Application>

<Application>

 <AppID>2</AppID>

 <AppName>Notepad</AppName>

 <URL xsi:nil="true"/>

</Application>

 

Mapper les éléments NULL aux champs de base de données NULL

Lorsque vous mappez un élément NULL XML à la colonne de la base de données, MapForce écrit la valeur NULL à la colonne de base de données correspondante. Vous pouvez aussi utiliser la fonction set-null si vous voulez définir un champ de base de données à NULL. Pour en savoir plus sur les fonctions liées à la base de données, voir Voir la bibliothèque BD.

 

© 2018-2024 Altova GmbH