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
- ArgoUML --(source Java)--> Rose
- Unicorn --(XMI)--> Coral
- Rose --(MDL)--> Unicorn (info. perdues: types simples)
- Rose --(MDL)--> EMF-eclipse
- ArgoUML--> Poseidon (info. perdues)
- Rose, ArgoUML --(source Java)--> Rose, ArgoUML
- etc ...
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 !!!