Séquences
Comprendre les séquences est essentiel pour gérer les techniques de mappage dans MapForce. La règle principale pour les séquences est exécutée comme suit :
Si une séquence de plus d’un nœud est connectée à un nœud cible, une boucle est créée qui génère autant de nœuds cible qu’il y a de nœuds source.
S’il y a un filtre en route, MapForce vérifie si au moins une condition booléenne dans la séquence qui évalue comme true et mappe les données qui satisfont cette condition dans la cible.
Si une séquence est vide, rien n’est généré du côté cible. Par exemple, si la cible est un document XML et que la séquence de source est vide, aucun élément XML ne sera créé dans la cible.
Exceptions
Notez quelques exceptions à la règle relatives aux séquences (voir ci-dessous).
Exception 1
Si l’item cible est un élément racine XML, il est créé uniquement une fois. Si vous y connectez une séquence, le résultat peut ne pas être valide pour le schéma. Si les attributs de l’élément root sont aussi connectés, la sérialisation XML échouera au moment de l’exécution. C’est pourquoi, il est nécessaire de connecter une séquence à l’élément XML root.
Exception 2
Si l’item de cible accepte uniquement une valeur, elle est créée une seule fois. Les exemples des items qui acceptent uniquement une valeur sont comme suit : Attributs XML, champs de base de données, composants de sortie simples. Par exemple, le mappage ci-dessous génère une séquence de trois entiers (1, 2, 3) avec l’aide de la fonction generate-sequence. Néanmoins, le résultat contiendra uniquement un seul entier, car la cible est un seul composant de résultat qui accepte une seule valeur. Les deux autres valeurs sont ignorées.
Exception 3
Si le schéma de source précise qu’un item spécifique ne se produit qu’une seule fois, mais que le fichier d’instance en contient de nombreux, MapForce peut extraire le premier item depuis la source (qui doit exister conformément au schéma) et créer un seul item dans la cible. Pour désactiver ce comportement, décochez la case Activer les optimisation de traitement d’entrée sur la base de min/max Occurs depuis les paramètres de composant, voir aussi paramètres de composant.
Fonctions
Si une fonction de non-séquence obtient une séquence en tant qu’entrée, la fonction est appelée plusieurs fois et produit autant de résultats qu’il y a d’items dans la séquence. Si une fonction obtient une séquence vide comme entrée, elle retourne un résultat vide et, en conséquence, ne produit pas de sortie.
Les fonctions qui renvoient une valeur, même si elles obtiennent une séquence vide
Néanmoins, il existe certaines catégories de fonctions qui, en raison de leur design, retournent une valeur même si elle obtiennent une séquence vide en tant qu’entrée :
•exists, not-exists, substitute-missing
•is-null, is-not-null, substitute-null (ces trois fonctions sont des alias des trois précédents)
•Fonctions aggregate (sum, count, etc.)
•Fonctions définies par l'utilisateur qui acceptent des séquences et sont des fonctions régulières (pas inlined)
Si vous devez remplacer une valeur manquante, ajoutez la fonction substitute-missing au mappage et remplacez la valeur manquante avec une valeur de choix substituée. En alternative, vous pouvez obtenir le même résultat en utilisant fonctions défauts et nœud.
Les fonctions avec de multiples entrées
Les fonctions peuvent avoir plusieurs entrées. Si une séquence est connectée à chaque entrée, ceci produit un produit cartésien de toutes les entrées (un ensemble de toutes les paires triées qui peuvent être créées en combinant les éléments de deux à plus d’ensembles), qui n’est généralement pas le résultat désiré. Afin d’éviter cela, ne connecter qu’une seule séquence à une fonction avec plusieurs paramètres ; tous les autres paramètres doivent être connectés aux items "singular" provenant de parents ou d’autres composants.