Altova MapForce 2025 Enterprise Edition

Certains composants de mappage ont un item optionnel parent-context.

 

parent-context est un argument optionnel dans certaines fonctions d'agrégation core MapForce (comme dans min, max, avg, count). Dans un composant de source qui possède plusieurs séquences hiérarchiques, le contexte parent détermine l'ensemble de nœuds dans lequel la fonction doit fonctionner.

 

À l’aide de cet item, vous pouvez influer sur le mappage dans lequel ce composant devrait opérer et par conséquent changer le résultat du mappage. Les composants qui ont un parent-context optionnel sont : fonctions aggregate, variables et composants Join.

 

fn-count

 

Pour voir comment la modification du contexte de parent peut être utile, consulter une démo en ouvrant le mappage suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\ParentContext.mfd.

mf_semantics_11

Dans le XML source du mappage ci-dessus, il y a un nœud Company unique qui contient deux nœud Office. Chaque nœud Office contient plusieurs nœuds Department, et chaque Department contient plusieurs nœud Person. Si vous ouvrez le fichier XML dans un éditeur XML, vous pouvez voir que la distribution des personnes par bureau et par département est la suivante :

 

Bureau

Département

Nombre d’employés

Nanonull, Inc.

Administration

3

Marketing

2

Engineering

6

IT & Technical Support

4

Nanonull Partners, Inc.

Administration

2

Marketing

1

IT & Technical Support

3

 

Le mappage compte toutes les personnes dans tous les départements. À cet effet, il utilise la fonction count depuis la bibliothèque core. Si vous cliquez sur le volet Output pour consulter le mappage, vous remarquerez qu’il produit une seule valeur, 21, qui correspond au nombre total de personnes contenues dans le fichier XML source.

 

Le mappage fonctionne comme suit:

 

Comme d’habitude, l’exécution de mappage débute avec le nœud supérieur du composant cible (rows, dans cet exemple). Il n’y a pas de connexion entrante pour rows. En résultat, un contexte de mappage implicite est établi entre Company (item supérieur du composant de source) et rows (item supérieur du composant cible).

Le résultat de la fonction est une seule valeur, puisqu’il n’y a qu’une seule entreprise dans le fichier source.

Afin de remplir l’item cible col1, MapForce exécute la fonction count dans le contexte de parent implicite mentionné ci-dessus, afin qu’il compte tous les nœuds Person depuis tous les bureaux et tous les départements.

 

L’argument parent-context de la fonction vous permet de modifier le contexte de mappage. Cela vous permet, par exemple, de compter le nombre de personnes dans chaque département. Pour ce faire, tracer deux (ou plus) connexions comme indiqué ci-dessous :

mf_semantics_12

Dans le mappage ci-dessus, la connexion A change le contexte de parent de la fonction count dans le Department. En résultat, la fonction comptera le nombre de personnes se trouvant dans chaque département. Chose importante, la fonction retournera maintenant une séquence de résultats au lieu d’un seul résultat, étant donné que plusieurs département existent dans la source. C’est la raison pour laquelle la connexion B existe: pour chaque item dans la séquence résultante, elle crée une nouvelle ligne dans le fichier cible. Le résultat de mappage change maintenant (veuillez noter que les nombres correspondent exactement au décompte des personnes dans chaque département) :

 

<rows>
  <row>
      <col1>3</col1>
  </row>
  <row>
      <col1>2</col1>
  </row>
  <row>
      <col1>6</col1>
  </row>
  <row>
      <col1>4</col1>
  </row>
  <row>
      <col1>2</col1>
  </row>
  <row>
      <col1>1</col1>
  </row>
  <row>
      <col1>3</col1>
  </row>
</rows>

 

Étant donné que le mappage actuel crée une ligne dans chaque département, vous pouvez copier en option le nom du bureau et du département aussi dans le fichier cible, en traçant des connexions C et D :

mf_semantics_13

Ainsi, le résultat affichera non seulement le nombre de personnes mais aussi le nom correspondant du bureau et du département.

 

Si vous souhaitez compter le nombre de personnes dans chaque bureau, connectez le contexte de parent de la fonction count à l’item Office dans la source.

mf_semantics_14

Avec les connexions affichées ci-dessus, la fonction count retourne un résultat pour chaque bureau. Il y a deux bureaux dans le fichier source, la fonction retournera maintenant deux séquences. Par conséquent, il y aura deux lignes dans le résultat, chaque ligne contiendra le nombre de personnes contenues dans ce bureau :

 

<rows>
  <row>
      <col1>15</col1>
      <col2>Nanonull, Inc.</col2>
  </row>
  <row>
      <col1>6</col1>
      <col2>Nanonull Partners, Inc.</col2>
  </row>
</rows>

 

© 2018-2024 Altova GmbH