urbanisation-si

urbanisation-si

Query View Transform (QVT) Operational : tutoriel, plus simple tu meurs !

query-view-transform-qvt-operational-tutoriel.png

Le métamodèle source et cible. 

 

Mes derniers articles sont consacrés au langage de transformation de modèles ATL (Atlas Transformation Language). 

Voir par exemple le tutoriel complet :

http://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-idm-tutoriel-atl-atlas-transformation-language-le-da-vinci-code-de-la-transformation-atl

ou bien le cours complet qui commence :

http://www.urbanisation-si.com/ingenierie-dirigee-par-les-modeles-idm-documentation-atl-atlas-transformation-language-vous-saurez-tout-ou-presque-sur-les-modules

 

ATL est un langage opensource, largement utilisé utilisé dans l'industrie. Son implémentation est robuste et performante. Et surtout il existe des outils fiables comme le plugin pour Eclipse.

 

Mais ATL n'est pas une norme.

 

Son concurrent à l'avantage d'être une norme de l'OMG Object Management Group , l'organisation qui a fait notamment UML, MDA, ...

Il s'agit de QVT (Query View Transform). Il existe 2 types de QVT : QVTd (déclaratif, diisé en QVTr Relation et QVTc Core), équivalent des "matched rules" ATL et QVT Operational (impératif), équivalent des "called rules" ATL.

QVT avec son pédigré, pourrait être "La Solution" ultime pour transformer des modèles.

Seulement voilà, comme très souvent dans les normes, QVT souffre d'une grande complexité.

Mais il y a pire ! Les outils l'implémentant sont rares et incomplet. Seul QVTo commence à être implémenté alors que QVT-Relation est à l'état d'embryon.

 

Eclipse propose un plugin pour QVT Operational et un autre non finalsé pour QVT Relation.

 

Pour l'installer :

  1. http://projects.eclipse.org/projects/modeling.mmt.qvt-oml/downloads
  2. Décompressez le zip dans un répertoire.
  3. Dans Eclipse, allez dans le menu Help - Install new software - Add - Local - sélecionnez le répertoire - nommez et OK

N'échapperons pas à la règle de commencer par le traditionnel "Hello world" que font tous les débutants dans un langage.

 

Tout d'abord le métamodèle source et cible dans notre cas de tutoriel "plus simple tu meurs", voici son fichier Ecore (ABC.ecore) : 

 

<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="ABC" nsURI="http:///ABC.ecore" nsPrefix="ABC">
<eClassifiers xsi:type="ecore:EClass" name="Root">
<eStructuralFeatures xsi:type="ecore:EReference" name="element" upperBound="-1"
eType="#//Element" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="A" eSuperTypes="#//Element">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="a" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="B" eSuperTypes="#//Element">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="b" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="C" eSuperTypes="#//Element">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="c" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="abc" upperBound="-1" eType="#//Element"
containment="true"/>
</eClassifiers>
</ecore:EPackage>

Créer un nouveau projet : File - New - Project - Eclipse Modeling Framework -Empty EMF Project

 

Clic droit sur ABC.ecore - Initialize ecore diagram : pour générer le diagramme du modèle, cela ne peut pas faire de mal !

 

Double clic droit sur ABC.genmodel - clic droit sur ABC (2 ème icône dans la hiérarchie) - Generate All

 

Clic droit sur le projet - run As - Run Configurations - onglet Arguments - VM arguments :

-Dosgi.requiredJavaVersion=1.6  -Xms256m  -Xmx768m  -XX:MaxPermSize=256m

puis Run

 

Une nouvelle instance d'Eclipse se lance pour exécuter le nouveau plugin.

 

File - New - Project - Model to Model Transformation - Operational QVT Project.

Nommez votre projet

 

Ecrire le source de la transformation :

 

modeltype ABC uses ABC('http:///ABC.ecore');

transformation NewTransformation(in source:ABC, out target:ABC);

main() {
      source.rootObjects()[Root]->map Root2Root();
}

mapping Root :: Root2Root() : Root {
      element += self.element->select(a |
            a.oclIsKindOf(A))[A]->map A2B();
}

mapping A :: A2B() : B
      when {
            self.id > 0
      }
      {
      result.id := self.id;
      result.b := self.a + " World!";
}

 A est transformé en B, en utilisant le même id et en concaténant l'attribut "a" à la chaîne "World" pour créer l'attribut "b".

 

Créer le modèle à transformer : 

Clic droit sur le projet - New - Other - Example EMF Model Creation Wizards - ABC Model 

Double clic sur le modèle vide - clic droit sur Root - New chlid - ajouter et modifier dans la vue Properties : 

  • A: id=1, A=”Hello”
  • A: id=-1, A=”World”
  • C: id=1, C=”C'est quoi ce truc ?”

query-view-transform-qvt-operational-tutoriel-1.png

 

Pour exécuter la transformation :

Clic droit sur le fichier de transformation (.qvto) - Run As - Run Configuration - Operational QVT Interpreter - New_configuration - Run

 

query-view-transform-qvt-operational-tutoriel-2.png

 

Le modèle transformé se trouve dans le fichier "sortie.abc" :

 

query-view-transform-qvt-operational-tutoriel-3.png

 

 

"La vraie valeur d'un homme réside, non dans ce qu'il a, mais dans ce qu'il est."
Oscar Wilde

 

Voir aussi :  

 

http://urbanisation-si.wix.com/blog

http://urbanisme-si.wix.com/blog

http://urbanisation-si.wix.com/urbanisation-si

http://urbanisation-si.over-blog.com/

http://rhonamaxwel.over-blog.com/

http://urbanisation-des-si.blogspot.fr/

http://bonnes-pratiques-si.eklablog.com/

http://urbanisation-si.eklablog.com/



20/10/2015
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 132 autres membres