2012-04-24 5 views
2

J'ai une question:UML XMI à Ecore

Dans mon outil de modélisation (Enterprise Architect), j'ai modélisé un méta-modèle (basé sur UML). Maintenant, je veux transformer le méta-modèle en Ecore. Mais je ne sais pas comment le faire.

Dans Enterprise Architect, je peux exporter le méta-modèle vers UML XMI. Est-ce que quelqu'un sait s'il est possible de transformer le XMI généré en Ecore XMI?!

Merci

Répondre

4

Est-ce que quelqu'un sait s'il est possible de transformer le XMI généré en Ecore XMI?!

Oui, c'est possible - au moins dans les grandes lignes. Vous pouvez penser au problème en deux parties:

  1. Qu'est-ce que la cartographie sémantique? En d'autres termes, comment mappez-vous les concepts de l'interface XMI source aux concepts du modèle eCore cible?
  2. Comment allez-vous mettre en œuvre ces mappages dans la pratique?

Cartographie sémantique

Je suppose ici votre métamodèle se concentre sur la structure statique. ECore ne supporte pas les concepts dynamiques en dehors de la déclaration des EOperations. Plus sur la dynamique ci-dessous si c'est pertinent.

Je ne connais pas EA spécifiquement, ni quelle (s) version (s) de XMI il supporte. Cependant, il sera une variante des concepts UML de base: classe, attribut, opération, Association, AssociationEnd, etc. eCore a similar (if smaller) set of concepts: EClass, EAttribute, EDataType, EReference, EOperation, etc. Il y a une corrélation assez forte entre les concepts 'type'; par exemple:

  • UML Class -> EClass
  • Attribut -> EAttribute
  • Opération -> EOperation

Ainsi, la cartographie devrait être straighforward. Fondamentalement créer une instance de l'équivalent ECore pour chaque concept UML.

Les relations sont un peu moins évidentes mais toujours réalisables. ECore ne supporte pas les relations directement; EReference est le seul concept analogue. Cependant, il est assez facile de synthétiser des associations, par exemple:

  • Une association UML navigable à sens unique devient un EReference avec min & max cardinalité copié sur
  • Une association UML bidirectionnelle devient deux EReferences, un dans chaque direction.Vous devez également définir la propriété EOtherEnd, ce qui signifie que les deux EReferences font partie de la même association.

Espérons que cela vous donne l'idée.

mise en œuvre

Après avoir défini votre cartographie conceptuelle, il y a beaucoup d'options sur la façon de le faire. Tous suivront généralement le même modèle de base:

Parse Source -> Concepts de source de la carte pour cibler les concepts -> générer le texte cible.

Vous pouvez utiliser xslt (car il s'agit juste d'une transformation XML-> XML). Vous pouvez également utiliser l'un des nombreux kits d'outils Model-to-model (M2M) et/ou Model-to-text (M2T) disponibles. Voir par exemple le projet de modélisation d'éclipse (M2M, M2T). Vous pouvez également aller directement à partir d'EA en lisant le modèle en utilisant l'API EA au lieu de générer & en analysant XMI. Ce que vous choisissez dépendra de votre environnement, de vos compétences, etc.

Si vous voulez voir à quoi cela pourrait ressembler en pratique, jetez un oeil à MagicDraw. Il fournit l'exportation ECore hors de la boîte. (Notez que c'est un outil payant - mais eval est disponible).

Il peut également être intéressant de demander directement à Sparx: je serais un peu surpris s'il n'y a pas de module d'extension/plugin d'exportation ECore disponible pour EA.

hth.


Dynamics

Si votre modèle est dynamique (modèles d'état, etc.) alors vous avez plus d'un problème. ECore ne couvre pas ces concepts du tout. Il est possible d'étendre ECore et cela pourrait être une option - mais c'est potentiellement plus de travail car les outils qui fonctionnent avec ECore seront moins susceptibles de comprendre vos extensions.

+0

Super commentaire! Merci beaucoup! – matthias

+0

de rien. Un wee upvote serait une belle façon de montrer son appréciation ... :-) – sfinnie

-1

Vous pouvez facilement aller de Ecore à UML, mais l'inverse est pas vraiment possible. Vous avez peu de plugins mais lorsque vous essayez de les utiliser, cela ne fonctionne pas.

Questions connexes