Altova MapForce 2025 Enterprise Edition

Cet exemple illustre comment combiner des données provenant de deux structures XML conditionnellement, en utilisant un composant Join. L'exemple est accompagné par un échantillon de mappage, disponible sous : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\JoinPeopleInfo.mfd.

 

L'objectif de ce mappage est de collecter des données personnelles (prénom, nom de famille, adresse, e-mail et téléphone) depuis deux fichiers XML de source dans un seul fichier XML cible.

 

Le premier fichier XML stocke le prénom et le nom de chaque personne, ainsi que leur adresse e-mail et leur numéro de téléphone, comme indiqué dans la liste de code ci-dessous (veuillez noter que la déclaration XML, les espaces de noms et certains enregistrements ont été omis pour des raisons 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 leur adresse e-mail :

 

<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 du mappage est de combiner les informations <Person> depuis le premier fichier avec l'information <Address> provenant du second fichier, à chaque fois que les prénom et nom correspondent. Spécifiquement, pour chaque <Person> dans le premier fichier et pour chaque <Address> dans le deuxième fichier, les FirstName et LastName doivent être comparés. Si les deux valeurs sont les mêmes, les enregistrements <Person> et <Address> correspondants se réfèrent à la même personne et doivent être joints. La structure XML de cible doit ressembler à :

 

<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

Le but de ce mapping est facilement atteignable en ajoutant un composant Join dans le mappage. Veuillez noter qu'il est également possible d'atteindre le même résultat en utilisant les autres types de composant ; néanmoins, dans les étapes ci-dessous, vous utiliserez un composant Join, qui est le sujet de cet exemple.

 

Pour créer le mappage requis, suivre les étapes suivantes.

 

Étape 1: Ajouter les fichiers XML de source au mappage

1.Dans le menu Insérer, cliquer sur Schéma XML/Fichier, et chercher le fichier de source suivant : <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\People.xml.

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

 

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

Dans le menu Insérer, cliquer sur Schéma XML/Fichier, et chercher <Documents>\Altova\MapForce2025\MapForceExamples\Tutorial\PeopleInfo.xsd (le fichier de schéma XSD cible). Lorsque vous serez invité à fournir un fichier XML d'échantillon, cliquez sur Sauter. Lorsque vous serez invité à choisir un élément racine, choisissez PeopleInfo en tant qu'élément racine.

 

Étape 3: Ajouter le composant Join

1.Dans le menu Insérer, cliquer sur Join. (ou bien cliquer sur la touche de barre d'outils Join mf_ic_join_button). À ce niveau, le mappage devrait ressembler à l'exemple suivant (vous devrez glisser et redimensionner les composants pour les faire ressembler au graphique ci-dessous) :

mf_map_JoinPeopleInfo1

Observez la structure du composant Join. Elle contient deux items nodes/rows, qui permettent d'y connecter les deux structures qui doivent être comparées (dans ce cas, les structures Person et Address).

 

2.Tracer une connexion depuis Person vers le premier item nodes/rows du composant Join. De même, connecter Address au deuxième item nodes/rows.

mf_map_JoinPeopleInfo2

3.Comme mentionné plus tôt, la jointure doit avoir lieu uniquement si les valeurs FirstName et LastName sont égales dans les deux structures. Pour définir cette condition, cliquer sur la touche Définir Condition Join mf_ic_join_key.

4.Choisir la paire des items qui définit la première condition Join (FirstName sous Structure 1, et FirstName sous Structure 2).

5.Cliquer Ajouter condition, et répéter l'étape ci-dessus pour LastName.

mf_map_JoinPeopleInfo3

Dans certains mappage, une condition consistant en une comparaison peut suffire à effectuer la jointure. Néanmoins, dans cet exemple, il est important de créer deux comparaisons :

 

1)FirstName dans Structure1 = FirstName dans Structure 2

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

 

Si plusieurs conditions sont définies, elles doivent toutes être vraies pour que la jointure puisse avoir lieu. C'est pourquoi, dans cet exemple, une jointure n'aura lieu que si les deux comparaisons sont vraies (ce qui est le comportement souhaité). Si une seule des comparaisons ci-dessus a été définie, une jointure peut se produire pour des personnes ayant le même prénom mais des noms de famille différents.

 

Étape 4: Mapper le composant Join vers le schéma de cible

Maintenant que les deux structures sont jointes, vous pouvez définir quels items de la structure jointe doivent être mappés dans la cible. Pour ce faire, créer des connexions depuis les items dans les deux structures jointes vers le composant de cible, comme indiqué ci-dessous. La connexion entre joined et Row a l'objectif suivant : lorsque la condition Join est satisfaite, elle crée un nouvel item Row dans la cible.

mf_map_JoinPeopleInfo

Pour consulter la sortie de mappage, cliquer sur l'onglet Sortie. Comme prévu, chaque enregistrement de personne (<Row>) comprend maintenant tous les détails d'adresse, joints depuis deux sources différentes.

© 2018-2024 Altova GmbH