Altova MapForce 2027 Professional Edition

Cet exemple vous montre comment combiner de manière conditionnelle les données issues de deux structures XML, à l'aide d'un composant join. L'exemple est accompagné d'un exemple de mappage disponible à l'emplacement suivant : <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\JoinPeopleInfo.mfd.

 

L'objectif de ce mappage est de regrouper les données relatives aux personnes (prénom, nom, adresse, e-mail et numéro de téléphone) provenant de deux fichiers XML sources dans un seul fichier XML cible.

 

Le premier fichier XML stocke le prénom et le nom de chaque personne, ainsi que son e-mail et son numéro de téléphone, comme le montre l'extrait de code ci-dessous (notez que la déclaration XML, les espaces de noms et certains enregistrements ont été omis, par souci de simplicité) :

 

<People>
  <Person>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <Email>m.bailey@nanonull.com</Email>
    <Phone>555323698</Phone>
  </Person>
  <Person>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <Email>t.rea@nanonull.com</Email>
    <Phone>555598653</Phone>
  </Person>  
</People>

People.xml

Le deuxième fichier XML stocke le prénom et le nom de chaque personne, ainsi que ses coordonnées :

 

<Addresses>
  <Address>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <City>Bridgedell</City>
    <Street>Olive Street</Street>
    <Number>4</Number>
  </Address>
  <Address>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <City>Roseford</City>
    <Street>Evergreen Lane</Street>
    <Number>34</Number>
  </Address>
</Addresses>

Addresses.xml

L’objectif de ce mappage est de combiner les informations <Person> du premier fichier avec les informations <Address> du second fichier, chaque fois que le prénom et le nom de famille correspondent. Plus précisément, pour chaque élément <Person> du premier fichier et pour chaque élément <Address> du second fichier, les attributs FirstName et LastName doivent être comparés. Si les deux valeurs sont identiques, les enregistrements <Person> et <Address> correspondants font référence à la même personne et doivent être fusionnés. La structure XML cible doit se présenter comme suit :

 

<PeopleInfo>
  <Row>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <City>Bridgedell</City>
    <Street>Olive Street</Street>
    <Number>4</Number>
    <Email>m.bailey@nanonull.com</Email>
    <Phone>555323698</Phone>
  </Row>
  <Row>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <City>Roseford</City>
    <Street>Evergreen Lane</Street>
    <Number>34</Number>
    <Email>t.rea@nanonull.com</Email>
    <Phone>555598653</Phone>
  </Row>  
</PeopleInfo>

PeopleInfo.xml

Cet objectif de mappage peut être facilement atteint en ajoutant un composant join au mappage. Notez qu'il est également possible d'obtenir le même résultat en utilisant d'autres types de composants ; toutefois, dans les étapes ci-dessous, vous utiliserez un composant join, qui fait l'objet de cet exemple.

 

Pour créer le mappage requis, suivez les étapes ci-dessous.

 

Étape 1 : Ajouter les fichiers XML sources au mappage

1.Dans le menu Insérer, cliquez sur Schéma XML/Fichier, puis recherchez le fichier source suivant : <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\People.xml.

2.Répétez l’étape ci-dessus pour Addresses.xml (le deuxième fichier source).

 

Étape 2 : Ajoutez le fichier de schéma cible au mappage

•Dans le menu Insérer, cliquez sur Schéma XML/Fichier, puis recherchez <Documents>\Altova\MapForce2027\MapForceExamples\DocExamples\PeopleInfo.xsd (le fichier de schéma XSD cible). Quand vous êtes invité à fournir un échantillon de fichier XML, cliquez sur Ignorer. Lorsque vous êtes invité à sélectionner un élément racine, sélectionnez PeopleInfo comme élément racine.

 

Étape 3 : Ajouter le composant join

1.Dans le menu Insérer, cliquez sur Join. (Vous pouvez également cliquer sur le bouton Join mf_ic_join_button de la barre d'outils). À ce stade, le mappage devrait se présenter comme suit (vous devrez faire glisser et redimensionner les composants afin qu’ils correspondent à l’illustration ci-dessous) :

mf_map_JoinPeopleInfo1

Observez la structure du composant join. Il comporte deux éléments nodes/rows, ce qui permet d’y connecter les deux structures à comparer (dans ce cas, les structures Person et Address).

 

2.Tracez une connexion entre Person et le premier élément nodes/rows du composant join. De même, reliez Address au deuxième élément nodes/rows.

mf_map_JoinPeopleInfo2

3.Comme mentionné précédemment, la jointure ne doit avoir lieu que si les valeurs FirstName et LastName sont identiques dans les deux structures. Pour définir cette condition, cliquez sur le bouton Définir condition join mf_ic_join_key.

4.Sélectionnez la paire d’éléments qui définit la première condition join (FirstName dans la Structure 1 et FirstName dans la Structure 2).

5.Cliquez sur Ajouter condition, puis répétez l’étape ci-dessus pour LastName.

mf_map_JoinPeopleInfo3

Dans certains mappages, une condition consistant en une seule comparaison peut suffire pour effectuer la jointure. Cependant, dans cet exemple, il est important de créer deux comparaisons :

 

1)FirstName dans la Structure1 = FirstName dans la Structure 2

2)LastName dans la Structure 1 = LastName dans la Structure 2.

 

Lorsque plusieurs conditions sont définies, elles doivent toutes être vraies pour que la jointure ait lieu. Par conséquent, dans cet exemple, une jointure n’aura lieu que lorsque les deux comparaisons seront vraies (ce qui correspond au comportement souhaité). Sinon, si une seule des comparaisons ci-dessus était définie, une jointure pourrait se produire pour des personnes ayant le même prénom mais des noms de famille différents.

 

Étape 4 : Mapper le composant join au schéma cible

Maintenant que les deux structures sont jointes, vous pouvez définir quels éléments de la structure jointe doivent être mappés vers la cible. Pour ce faire, créez des connexions entre les éléments des deux structures jointes et le composant cible, comme illustré ci-dessous. La connexion entre joined et Row a pour objectif suivant : chaque fois que la condition join est satisfaite, elle crée un nouvel élément Row dans la cible.

mf_map_JoinPeopleInfo

Pour prévisualiser le résultat du mappage, cliquez sur le volet Sortie. Comme prévu, chaque enregistrement de personne (<Row>) comprend désormais les coordonnées complètes, issues de deux sources différentes.

© 2020-2026 Altova GmbH