Éléments de choix XML et mappages XML vers domaine | Mendix

Passer au contenu principal

Éléments de choix XML et mappages XML vers domaine

Les éléments de choix XSD existent pour spécifier un certain nombre d'alternatives dont une seule peut être présente dans un fichier XML. Auparavant, l'importation de données à partir de fichiers XML contenant des éléments de choix n'était pas entièrement prise en charge dans le Mendix La version 5.14 a résolu ce problème. Dans cet article, nous expliquons pourquoi cela est important et comment utiliser la nouvelle fonctionnalité.

1. Situation actuelle et limites

Intégrer Mendix applications avec le monde extérieur, il est possible d'importer des documents XML et de créer Mendix objets basés sur les informations contenues dans le document. Pour ce faire, deux choses sont nécessaires. Tout d'abord, un document de schéma XML (fichier XSD) qui décrit à quoi les données XML doivent ressembler, pour pouvoir reconnaître les objets décrits à l'intérieur. Deuxièmement, une traduction de ces objets XML en Mendix objets est nécessaire. Un utilisateur de la Mendix La plateforme décrit cette traduction dans un document de mappage XML vers domaine et ce document est le sujet principal de cet article. Dans ce document, l'utilisateur doit configurer :

  1. Organisateur Ce que Mendix des objets doivent être créés
  2. Comment ces objets doivent être associés les uns aux autres
  3. Comment les attributs de ces entités doivent être renseignés

Enfin, pour aider l'utilisateur à construire ce document, il existe une fonctionnalité permettant de créer le Mendix entités automatiquement basées sur les éléments définis dans le schéma XML.

Les principales limitations de la mise en œuvre de la situation décrite ci-dessus ont été résolues dans la version 5.14 et sont décrites dans cet article. Ces limitations étaient les suivantes :

  1. Les alternatives pour le choix ont été prises comme des associations distinctes pour l'entité référençant le choix
  2. La multiplicité sur l'élément de choix a été perdue (toutes les différentes options de choix avaient une multiplicité de 1, même si le schéma XML définissait une liste)
  3. Les éléments de choix n'étaient pas explicitement affichés dans le mappage qui n'était pas transparent.
  4. Lors de la génération automatique d'entités pour le mappage, les entités existantes ne sont pas réutilisées.

Dans la suite de cet article, nous expliquons comment les problèmes ci-dessus ont été résolus. Il est donc destiné à Mendix Les développeurs qui utilisent les mappages XML vers domaine en général et les personnes qui utilisent des documents de schéma XML avec des éléments de choix en particulier. Nous présentons d'abord un exemple explicite d'un schéma XML avec un élément de choix pour illustrer la nouvelle fonctionnalité dans la section 2. Par la suite, dans la section 3, nous illustrons les limitations en montrant l'exemple en action dans la Mendix plateforme antérieure à la version 5.14. Ensuite, dans la section 4, nous utilisons le même exemple pour illustrer comment cela a été corrigé dans la version 5.14. Enfin, dans la section 5, nous illustrons plus en détail la valeur des modifications en utilisant les informations de type plus riches dans le nouveau mappage XML vers domaine dans un microflow.

2. Notre exemple : les personnes

Nous considérons le schéma XML suivant :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema" >
<xs:complexType name="employee">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="salary" type="xs:int"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="customer">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="company" type="xs:string"/>
</xs:sequence>
</xs:complexType>

<xs:element name="persons">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="employee" type="employee"/>
<xs:element name="customer" type="customer"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

Ce schéma définit un élément « personnes ». Il contient une liste d'éléments de choix reflétant chaque « personne » (minOccurs=« 0 » maxOccurs=« unbounded »). Chaque entrée de cette liste est soit un « employé » soit un « client » (mais pas les deux).
Voici un exemple de message XML valide :

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<employee>
<firstname>Piet </firstname>
<lastname>Pieters</lastname>
<salary>5</salary>
</employee>
<customer>
<firstname>Customer</firstname>
<lastname>Klant</lastname>
<company>Company</company>
</customer>
<employee>
<firstname>Other</firstname>
<lastname>Guy</lastname>
<salary>50</salary>
</employee>
</persons>

Ici, la liste des personnes contient 3 entrées : un employé, un client et un autre employé.

3. Exemple de personnes dans la situation actuelle

Dans cette section, nous montrons comment la création d'un mappage XML vers domaine basé sur ce schéma XML fonctionne dans la situation actuelle. Tout d'abord, vous créez un nouveau document de schéma XML et choisissez le schéma XML que nous avons défini dans la section 2. Ensuite, vous créez un nouveau mappage XML vers domaine, cliquez sur « sélectionner les éléments » et dans la fenêtre contextuelle qui s'affiche, sélectionnez le schéma XML que nous venons de créer comme source de schéma.1. L'écran résultant est affiché dans la Figure 1. Dans cette figure, nous voyons que l'élément de choix n'est pas affiché dans l'arborescence des éléments du schéma et que sa multiplicité 0-* est donc manquante.

Mappage XML vers domaine

Figure 1. Sélection des éléments XSD à inclure dans un mappage XML vers domaine avant la version 5.14

Lorsque nous sélectionnons tous les éléments et cliquons sur OK, le côté gauche du mappage est rempli. Si nous cliquons ensuite sur « générer les mappages », les entités, attributs et associations associés sont créés (dans le modèle de domaine, voir la figure 2) et remplis sur le côté droit du mappage XML vers domaine. Le résultat est présenté dans la figure 3. Dans cette figure, nous pouvons voir que sur le côté gauche, l'option de choix est effectivement manquante. La principale conséquence de cela est que les personnes n'ont pas une association avec une liste remplie à la fois d'employés et de clients (mélangés) comme on pourrait s'y attendre d'après la définition dans le document de schéma XML, mais plutôt deux associations 1:1, une avec l'employé et une avec le client. Il s'agit d'une chose intrinsèquement différente et qui peut donc entraîner une perte de données si des listes de clients/employés sont importées, car seule la première est réellement mappée à un Mendix Objet. Ce problème a été résolu dans la version 5.14 de Mendix plate-forme comme nous l’illustrons dans la section suivante.

Microflow relation personne, employé, client

Figure 2. Le modèle de domaine généré automatiquement pour l'exemple de personnes avant la version 5.14

Configuration du mappage dans un mappage XML vers domaine

Figure 3. Configuration du mappage dans un mappage XML vers domaine dans l'exemple de personnes avant la version 5.14

4. Conversion de l'exemple de la personne à la nouvelle situation

Dans cette section, nous montrons comment résoudre la situation décrite dans la section précédente. Nous le faisons en partant de la situation précédente, en décrivant les étapes à suivre pour convertir le projet et en réfléchissant aux changements qui en résultent. Nous le faisons pour faciliter la mise à niveau. Bien entendu, il est parfaitement possible de démarrer un nouveau projet à partir de zéro dans la nouvelle situation. Pour ce faire, il suffit de suivre les mêmes étapes que celles décrites dans la section 3 et de les compléter avec les étapes supplémentaires décrites dans cette section.

Lorsque vous ouvrez le projet que nous avons créé dans la section 3 de la version 5.14 du Mendix Les étapes manuelles de la plateforme sont nécessaires pour convertir votre projet. Dans la fenêtre Erreurs, le message d'erreur suivant apparaît : « L'élément de mappage est une option de choix. Veuillez resélectionner les éléments de schéma et inclure l'élément de choix ». Si vous double-cliquez sur le message, le document XML-to-Domain s'ouvre et l'élément concerné est sélectionné (voir Figure 4).

Exemple de développement d'application

Figure 4. Après la conversion, des étapes manuelles sont nécessaires pour convertir le projet

Comme le message l'indique, nous devons resélectionner les éléments du schéma pour résoudre l'erreur de cohérence. Pour ce faire, cliquez sur « Sélectionner les éléments… » et la boîte de dialogue illustrée dans la Figure 5 apparaîtra.

Exemple de développement d'application

Figure 5. Resélection des éléments du schéma après conversion

Dans l'arborescence des éléments du schéma, nous voyons qu'il existe désormais un élément explicite pour l'élément de choix XML "(choix)". Notez que la multiplicité de cet élément est correctement fixée à 0..*. L'élément de choix a été automatiquement sélectionné à l'ouverture de cette fenêtre, cliquez donc sur Ok pour enregistrer le réglage et continuer la configuration du mapping.

Comme on peut le voir sur la figure 6, le "(choix)" L'élément de mappage a été inséré dans le document de mappage d'importation. La signification de cet élément de mappage supplémentaire est la suivante : toutes les alternatives pour le choix (dans ce cas, employé et client) doivent avoir quelque chose en commun car elles sont des alternatives pour quelque chose. Dans ce cas, le point commun entre elles est qu'elles sont toutes les deux une personne. Par conséquent, dans la nouvelle situation, toutes les alternatives d'un choix doivent hériter d'une entité plus générale (Personne) et cette entité doit être glissée dans le mappage. Il est important de bien comprendre la signification de cela. Pour l'exemple, cela signifie que l'entité personnes a une liste de type Personne et que les employés et les clients sont des types spécifiques de Personnes qui peuvent donc apparaître dans la liste.

Dans la Figure 6, il y a quatre erreurs de cohérence. Les deux premières sont résolues en sélectionnant une entité de généralisation correcte pour l'employé et le client. Les deux dernières sont liées au fait que dans la situation d'origine (sans l'élément de choix explicite), les alternatives de choix elles-mêmes (employé et client) avaient des associations avec des personnes dans le mappage. Cela n'est plus autorisé car cela doit être configuré dans l'élément de choix. Pour résoudre ce problème, double-cliquez sur l'employé et le client, un message s'affiche expliquant que l'association sera supprimée. Cliquez sur OK pour confirmer.

Exemple de développement d'application

Figure 6. Le document de mappage XML vers domaine après la sélection du nouvel élément (choix)

La résolution des deux premières erreurs de cohérence peut être effectuée en créant manuellement une classe de généralisation pour l'employé et le client et en la sélectionnant dans le document de mappage. Une autre solution consiste à utiliser le bouton « Mapper automatiquement » pour le faire à votre place. Si vous cliquez sur ce bouton, le message illustré à la figure 7 s'affiche, expliquant ce qui a été fait.

Exemple de développement d'application

Figure 7. Un aperçu des changements lors de la génération automatique des mappages, entités, associations et attributs

Ici, vous voyez que la plupart des entités et associations dans le mappage ont été conservées par rapport à la situation précédente. Pour l'élément de choix, une classe appelée ChoiceBase a été créée, l'employé et le client sont devenus des spécialisations de cette classe et ChoiceBase est associé à l'entité personnes. Il s'agit d'une grande amélioration par rapport à la façon dont le « Carte automatique » La fonction créait des entités, des attributs et des associations dans les versions précédentes car elle recréait toutes les entités, tous les attributs et toutes les associations à chaque exécution, ce qui donnait lieu à un modèle de domaine en constante croissance rempli d'entités qui ne sont plus nécessaires.

Le modèle de domaine résultant est présenté dans la figure 8.

modèle de domaine généré automatiquement

Figure 8. Le modèle de domaine généré automatiquement pour l'exemple des personnes

Notez que nous pouvons apporter quelques améliorations à ce modèle généré automatiquement. Tout d'abord, ChoiceBase est un terme très général et comme nous comprenons réellement notre propre modèle de domaine, nous pouvons le rendre plus spécifique. Nous pouvons par exemple renommer l'entité en "Personne". Si nous le faisons, c'est également une bonne idée de renommer le « ChoiceBase_personnes » association. Suite à cela, nous pouvons déplacer le "prénom" et "nom de famille" attributs des entités employé et client à cette entité Personne car les deux spécialisations contiennent ces attributs. Enfin, nous pouvons supprimer les associations entre employé et personnes, et client et personnes car elles ne sont plus nécessaires avec l'introduction de l'entité Personne. Cela parce qu'elles héritent de l'association avec les personnes de l'entité Personne. Après avoir effectué toutes ces modifications, le modèle de domaine ressemblera à celui illustré dans la Figure 9.

Amélioration manuelle du modèle de domaine généré automatiquement

Figure 9. Amélioration manuelle du modèle de domaine généré automatiquement pour l'exemple des personnes

Après avoir effectué ces modifications, nous remarquons quatre nouvelles erreurs de cohérence pour le mappage XML vers domaine. Ces erreurs de cohérence existent parce que nous avons déplacé le "prénom" et "nom de famille" attributs des entités de spécialisation (employé et client) à la généralisation (personne) et nous devons les remapper manuellement. Pour ce faire, accédez au mappage XML vers domaine et double-cliquez sur le client et l'employé et mappez les attributs manuellement ou en cliquant sur le bouton « Attributs de la carte par nom » bouton. Une fois cela fait, toutes les erreurs de cohérence sont résolues et le document de mappage XML vers domaine ressemble à celui illustré dans la Figure 10.

Version finale du document de mappage XML vers domaine

Figure 10. Version finale du document de mappage XML vers domaine pour l'exemple de personnes

5. Utilisation du nouveau mappage XML vers domaine

Après avoir expliqué comment créer et configurer un mappage XML vers domaine pour les schémas XML avec des éléments de choix dans les sections précédentes, nous concluons cet article en donnant un exemple d'utilisation de ce mappage dans un microflow. Dans cet exemple, nous calculons le total des salaires de tous les employés dans le fichier XML importé tout en ignorant les clients (qui n'ont pas de salaire défini).

Pour ce faire, nous créons le microflux représenté sur la figure 11. Nous procédons comme suit : nous sélectionnons d'abord un document de fichier comme paramètre d'entrée. Ensuite, nous faisons glisser un « Importer un document XML » action, sélectionnez le document Fichier comme entrée, notre mappage XML-à-Domaine défini comme mappage et choisissez de stocker la sortie dans une variable personnes. Ensuite, nous faisons glisser une action de récupération dans laquelle nous récupérons la liste de personnes sur le « Personne_personnes » association de la variable personnes. Après cela, nous créons une variable pour stocker le total de tous les salaires et l'initialisons à zéro. Ensuite, nous parcourons tous les éléments de la liste de personnes et effectuons une action différente en fonction du sous-type spécifique de personne de l'élément (en utilisant une division d'héritage). Lorsque la personne est un employé, nous la convertissons en employé et ajoutons son salaire au total. Si la personne est un client, nous l'ignorons. Après avoir parcouru tous les éléments, nous écrivons la somme de tous les salaires dans le journal.

 

Figure 11. Microflux pour additionner les salaires de tous les clients dans un fichier XML en utilisant le mappage XML vers domaine pour l'exemple des personnes

Remerciements

Cet article est co-écrit par Pieter van Balen et Kevin Dullemond.

Choisissez votre langue