Altova MapForce 2024 Enterprise Edition

Comme mentionné auparavant, la règle de mappage générale est : "pour chaque item se trouvant dans la source, en créer un dans la cible". Ici, "item" signifie une des choses suivantes :

 

un nœud unique d’instance du fichier ou de la base de données d’entrée

une séquence de zéro à plusieurs nœuds d’instance du fichier ou de la base de données d’entrée

 

Pendant l’exécution de mappage, si une séquence atteint un item de cible, cela crée une boucle qui génère autant de nœuds cible qu’il y a de nœuds de source. Néanmoins, il y a quelques exceptions à cette règle :

 

Si l’item de cible est un élément root XML, il est créé une fois (et une seule 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 du mappage. C’est pourquoi, il est nécessaire de connecter une séquence à l’élément XML root.

Si l’item de cible accepte uniquement une valeur, elle est créée une seule fois. Des exemples d’items qui acceptent uniquement une seule valeur : 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, cas la cible est un seul composant de résultat qui accepte une seule valeur. Les deux autres valeurs sont ignorées.

mf_semantics_02

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écocher la case activer les optimisation de traitement d’entrée sur la base de min/maxOccurs depuis les paramètres de composant, voir aussi Paramètres de composant XML.

 

Si la 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.

 

Les fonctions agissent de manière similaire : si elles obtiennent une séquence en tant qu’entrée, alors elles seront appelées (et produire autant de résultats que) autant de fois qu’il y a d’items dans la séquence.

 

Si une fonction obtient une séquence vide en tant qu’entrée, elle retourne un résultat vide également, par conséquent, elle ne produit aucune sortie.

 

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 souhaitez remplacer une valeur vide, ajouter la fonction substitute-missing au mappage et remplacer la valeur vide par une valeur de substitution de votre choix. En alternative, vous pouvez obtenir le même résultat en utilisant Fonctions Défauts et Nœud.

 

Les fonctions peuvent avoir plusieurs entrées. Si une séquence est connectée à chaque entrée, cela résulte en un produit cartésien de toutes les entrées, ce qui n’est généralement pas le résultat souhaité. 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.

© 2018-2024 Altova GmbH