De UML vers XML

Quelques règles de passage de UML à XML. A partir d'un modèle UML, on peut générer un schéma (extension .xsd) qui lui est équivalent. Ce schéma définit un "language XML". Ce schéma permet de valider les données contenues dans les fichiers xml utilisant ce langage: on vérifie si la structure, les cardinalités, les plages de valeurs possibles y sont correctes.

Un modèle UML (ou un schéma XSD) s'intéresse à la définition de la structure générale du language, un fichier xml instancie un cas concret dans ce language.

Les classes

Chaque classe UML est associée à un élément XML. Par convention les noms de classe commencent par une majuscule dans les diagrammes UML alors que les éléments XML correspondants commencent par une minuscule.

Exemple:

<vehicule />

Les attributs

Les attributs d'une classe peuvent être modélisés sous la forme d'attributs de l'élément correspondant à la classe. Exemple:

<vehicule marque="Toyota" modele="Traffic" />

Autre possibilité (plus lourde): chaque attribut UML devient un élément fils de l'élément correspondant à la classe: Exemple:

<vehicule><marque>Toyota</marque><modele>Traffic</modele></vehicule>

C'est cette deuxième solution qui a été retenue pour noter le XML Datex2.

Composition

(en UML: losange noir).
Une "sous-classe" est l'équivalent d'un attribut complexe. Représente une partie d'un tout.

Exemple: un corps est composé d'une tête, d'un tronc, de deux bras et de deux jambes. Mais une tête est composée à son tour de deux yeux, d'une bouche, ...

Se représente en xml par un élément fils.

Aggrégation

(en UML: losange blanc).
Proche de la relation de composition. Exemple: une facture concerne un client et des articles. La différence est que lorsque l'on annule une facture, le code client et les codes articles ne sont pas supprimés. En général on modélise la relation d'aggrégation soit en faisant un élément fils comme pour la composition (on recopie les attributs) soit en utilisant des codes (un pointeur vers la classe à aggréger).

Héritage

On utilise un élément: <pere xsi:type="fils"> et on reprend tous les attibuts (et sous-classes) du père et du fils au même niveau. D'éventuelles classes intermédiaires ne sont pas nommées.

Exemple avec utilisation des attributs

Exemple sans utilisation des attributs

A savoir

Pour la relation de composition entre classes, si le lien porte un nom, c'est ce nom qui est repris pour l'élément XML et non pas le nom de la "sous-classe". Par exemple, la classe Itineraire est composée de deux fois la "sous-classes" Point avec un premier lien nommé origine et un second nommé destination.
En XML cela donnera:

Exemple avec Datex II.