Formats UML et interopérabilité

Précisions sur les différents dialectes XMI et UML, et autres formats pour les méta-données UML.

Formats UML

Grâce à l'OMG, c'est la tour de Babel!
Il y a les différentes versions de XMI (1.0, 1.1, 1.2 et 2.0) qui décrivent la façon d'encoder en XML un modèle UML, et il y a les différentes versions de UML lui-même (1.3 et 1.4 très répandues, 1.5, et 2.0 en cours de finalisation). Seul UML 2.0 décrit la façon de sauver les diagrammes avec leur mise en page et coordonnées graphiques. Et il y a les combinaisons possibles entre version de XMI et version de UML, qui sont toutes incompatibles. Et il y a les formats non-XMI, le plus important étant MDL et Petal de Rational Rose, un format à la Lisp. Pour échanger entre deux outils on peut aussi passer par du source Java; mais les  associations avec multiplicités>1 passent mal en général, car elles sont générées comme des Vector non typés. Il y a des format à la UML mais simplifiés, comme ecore de l'additif EMF de eclipse.

Liste des formats pour la méta-données UML:
XMI ArgoUML, XMI Unicorn(xmi 1.1 / UML 1.3), MDL, ecore(xmi:version="2.0, basé sur MOF mais pas UML), source Java, dia

Pour les traductions entre formats, Coral le modeleur UML en Python est intéressant car il peut lire et écrire du XMI 1.2 et 2.0; il est activement développé en ce moment.

Génération de diagrammes

En pratique on arrive assez bien à récupérer les modèle de classes. Par contre pour les diagramme il faut se faire à l'idée qu'on peut pas les transférer d'un outil à l'autre. Ce n'est pas très gênant car quand on a les classes, faire un diagramme  avec 5 ou 6 classes prend une minute ou deux, et les liens sont ajoutés automatiquement. Et il n'est pas bon de faire des diagrammes beaucoup plus gros.

Beaucoup d'outils, comme ArgoUML, génèrent automatiquement un diagramme par paquetage.
Il y a possibilité d'utiliser GraphViz pour générer des diagrammes, ce que fait par exemple uml-dot .
J'ai fait un adaptateur XSLT avec JDepend qui génére des diagrammes de dépendance entre paquetages en utilisant GraphViz.

Génération de sources

La génération de sources (Java, SQL, etc) est un sujet annexe, lié au concept MDA (model-driven Architecture). Mais on peut simplement l'utiliser pour démarrer le codage, dans l'esprit plutôt XP de Martin Fowler (UML distilled). L'idée importante est que, si on n'est pas content du générateur de son outil, on peut  prendre un autre générateur. Par exemple il y a plusieurs projets indépendants qui génèrent du code en différents langages à partir de fichiers UML de dia . Et il y a des générateurs à partir de XMI, le plus célèbre étant AndroMDA.

Outils UML avec leurs formats

Rose(MDL), ArgoUML(XMI 1.0/UML 1.3), Poseidon(utilise MDR: XMI 1.2/UML 1.4), Coral (XMI 1.2 et 2.0), Umbrello(XMI 1.2/UML 1.3), argo2ecore, EMF-eclipse (ecore), Omondo-eclipse(ecore seulement ??), MDR-NetBeans(XMI 1.2/ UML 1.4), Protégé(export XMI 1.2/UML 1.4 MDR, avec plugin protégé-uml), Unicorn(XMI 1.1)

Flux de données UML possibles

Rational Rose

Non, Rose n'est pas une voie de garage pour vos modèles. On peut les en sortir! Grâce à cet additif :
 Add-ins, plug-ins, and scripts - XMI Add-in 1.3.6 (updated 27-Aug-03, 4.8 MB)

Malheureusemen, ce n'est pas un programme indépendant en ligne de commande. Suite à cet installation, j'ai essayé cet additif XMI pour Rose 
(XMI Add-in 1.3.4 pour Rose  2000e) : ça MARCHE ; l'import dans ArgoUML MARCHE (choisir XMI 1.0 ) !!! Bien sûr seul le modèle passe, pas les diagrammes. Suite à un export depuis Rose en XMI 1.1, j'ai passé  mon modèle model-testXMI11.xmi par ma transformation XSLT xmi-summary.xslt , qui en fait un résumé sous forme tabulaire .

A noter que XMI Add-in 1.3.6 (updated 27-Aug-03, 4.8 MB) : NE MARCHE PAS: le Rose 2000e est trop vieux par rapport à l'additif !!!