Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_hekateatl [2008/09/30 17:47] miw |
pl:miw:miw08_hekateatl [2008/10/10 17:07] miw |
====== Opis ======= | |
| |
Marek Mierzwa, <mierzwa.marek@gmail.com> | |
Jakub Ostrowski, <kubaostrowski@gmail.com> | |
| |
How we could use Atlas for ARD, XTT, design and integration? ATL: Atlas Transformation.... eclipse | |
* input | |
* output | |
| |
====== Spotkania ====== | |
| |
| |
| |
===== 08.02.26 ===== | |
* szto eta atlas? demo | |
| |
| |
| |
===== 08.03.11 ===== | |
* model [[hekate:hekate_concepts#ard|ARD]] w ATL | |
| |
| |
| |
===== 080318 ===== | |
* próba opisu całego ARD z TPH przy pomocy [[https://ai.ia.agh.edu.pl/wiki/hekate:hekate_markup_language|HML]] jako p. wyjścia dla XMI | |
| |
| |
===== 080401 ===== | |
* co to jest [[http://en.wikipedia.org/wiki/XML_Metadata_Interchange | |
|XMI]]? jakie ogr. nakłada [[http://www.omg.org/technology/documents/formal/xmi.htm|specyfikacja]] | |
* jak stworzyć model XMI dla ARD (opierając się na HML) | |
* zrobić KM3 dla ARD | |
| |
===== 080603 ===== | |
* trans? | |
| |
| |
| |
| |
| |
| |
| |
| |
====== Projekt ====== | |
| |
==== Transformacja ATL ==== | |
| |
{{:pl:miw:atl.jpg|:pl:miw:atl.jpg}} | |
| |
| |
Powyższy rysunek opisuje schemat transformacji ATL. Model Ma (plik wejściowy Ecore czyli XMI) odpowiadający metamodelowi MMa (plik Ecore) jest transformowany do modelu Mb (plik wyjściowy Ecore) odpowiadającemu metamodelowi MMb (Ecore). Transformacja definiowana jest przez model Mt (plik ATL) który odpowiada metamodelowi MMt (metamodel ATL). Metamodele MMt, MMa oraz MMb muszą odpowiadać metamdelowi MMM (MOF albo Ecore) | |
| |
====== Transformacja ARD w ARD ====== | |
| |
Aby dokonać transformacji należy stworzyć metamodel ARD, odpowaidający mu model będący plikiem wejściowym do transformacji, oraz plik ATL opisujący transformacje | |
| |
* Metamodel ARD (w oparciu o [[https://ai.ia.agh.edu.pl/wiki/hekate:hekate_markup_language|HML]]) - schemat | |
{{:pl:miw:ard.png|:pl:miw:ard.png}} | |
* Metamodel ARD KM3 zbudowany na podsawie schematu | |
<code> | |
package Hml { | |
abstract class Node { | |
reference children[*] container : Element oppositeOf parent; | |
} | |
| |
class Element { | |
attribute id : String; | |
reference parent : Node oppositeOf children; | |
} | |
| |
-- Type set | |
| |
class Type_set extends Node { | |
} | |
| |
-- ARD | |
| |
class Ard extends Node { | |
} | |
class Dep extends Element { | |
attribute independent : String; | |
attribute dependent : String; | |
} | |
| |
-- TPH | |
| |
class Tph extends Node { | |
} | |
class Trans extends Element { | |
attribute src : String; | |
attribute dst : String; | |
} | |
| |
-- Property set | |
| |
class Property_set extends Node { | |
} | |
class Property extends Element { | |
reference attributes[*] container : Attref oppositeOf properties; | |
} | |
class Attref { | |
attribute ref : String; | |
reference properties[0-1] : Property oppositeOf attributes; | |
} | |
| |
--Attributes set | |
| |
class Attribute_set extends Node { | |
} | |
class Att extends Element { | |
attribute name : String; | |
} | |
} | |
| |
package PrimitiveTypes { | |
datatype String; | |
} | |
</code> | |
| |
* Metamodel ARD XMI - wygenerowany przez środowisko ATL | |
<code> | |
<?xml version="1.0" encoding="ISO-8859-1"?> | |
<xmi:XMI 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"> | |
<ecore:EPackage name="Hml"> | |
<eClassifiers xsi:type="ecore:EClass" name="Node" abstract="true"> | |
<eStructuralFeatures xsi:type="ecore:EReference" name="children" ordered="false" upperBound="-1" eType="/0/Element" containment="true" eOpposite="/0/Element/parent"/> | |
</eClassifiers> | |
<eClassifiers xsi:type="ecore:EClass" name="Element"> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="id" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" ordered="false" lowerBound="1" eType="/0/Node" eOpposite="/0/Node/children"/> | |
</eClassifiers> | |
<eClassifiers xsi:type="ecore:EClass" name="Type_set" eSuperTypes="/0/Node"/> | |
<eClassifiers xsi:type="ecore:EClass" name="Ard" eSuperTypes="/0/Node"/> | |
<eClassifiers xsi:type="ecore:EClass" name="Dep" eSuperTypes="/0/Element"> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="independent" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="dependent" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
</eClassifiers> | |
<eClassifiers xsi:type="ecore:EClass" name="Tph" eSuperTypes="/0/Node"/> | |
<eClassifiers xsi:type="ecore:EClass" name="Trans" eSuperTypes="/0/Element"> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="src" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="dst" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
</eClassifiers> | |
<eClassifiers xsi:type="ecore:EClass" name="Property_set" eSuperTypes="/0/Node"/> | |
<eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="/0/Element"> | |
<eStructuralFeatures xsi:type="ecore:EReference" name="attributes" ordered="false" upperBound="-1" eType="/0/Attref" containment="true" eOpposite="/0/Attref/properties"/> | |
</eClassifiers> | |
<eClassifiers xsi:type="ecore:EClass" name="Attref"> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="ref" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
<eStructuralFeatures xsi:type="ecore:EReference" name="properties" ordered="false" eType="/0/Property" eOpposite="/0/Property/attributes"/> | |
</eClassifiers> | |
<eClassifiers xsi:type="ecore:EClass" name="Attribute_set" eSuperTypes="/0/Node"/> | |
<eClassifiers xsi:type="ecore:EClass" name="Att" eSuperTypes="/0/Element"> | |
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/1/String"/> | |
</eClassifiers> | |
</ecore:EPackage> | |
<ecore:EPackage name="PrimitiveTypes"> | |
<eClassifiers xsi:type="ecore:EDataType" name="String"/> | |
</ecore:EPackage> | |
</xmi:XMI> | |
</code> | |
| |
* Plik XMI do transformacji (Termostat) | |
<code> | |
<?xml version="1.0" encoding="ISO-8859-1"?> | |
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns="Hml"> | |
<Attribute_set> | |
<Att name = "thermostat" id = "att_0"/> | |
<Att name = "time" id = "att_1"/> | |
<Att name = "temperature" id = "att_2"/> | |
<Att name = "date" id = "att_3"/> | |
<Att name = "thermostat_settings" id = "att_4"/> | |
<Att name = "operation" id = "att_5"/> | |
<Att name = "season" id = "att_6"/> | |
<Att name = "today" id = "att_7"/> | |
<Att name = "hour" id = "att_8"/> | |
<Att name = "month" id = "att_9"/> | |
<Att name = "day" id = "att_10"/> | |
</Attribute_set> | |
| |
<Property_set> | |
<Property name = "thermostat_pr" id="prp_0"> | |
<Attref ref = "att_0"/> | |
</Property> | |
<Property name = "time_temp_pr" id="prp_1"> | |
<Attref ref = "att_1"/> | |
<Attref ref = "att_2"/> | |
</Property> | |
<Property name = "time_pr" id="prp_2"> | |
<Attref ref = "att_1"/> | |
</Property> | |
<Property name = "temperature" id="prp_3"> | |
<Attref ref = "att_2"/> | |
</Property> | |
<Property name = "date_hour_seasion_operation_pr" id="prp_4"> | |
<Attref ref = "att_3"/> | |
<Attref ref = "att_8"/> | |
<Attref ref = "att_6"/> | |
<Attref ref = "att_5"/> | |
</Property> | |
<Property name = "date_hour_pr" id="prp_5"> | |
<Attref ref = "att_3"/> | |
<Attref ref = "att_8"/> | |
</Property> | |
<Property name = "season_operation_pr" id="prp_6"> | |
<Attref ref = "att_6"/> | |
<Attref ref = "att_5"/> | |
</Property> | |
<Property name = "day_month_today_pr" id="prp_7"> | |
<Attref ref = "att_10"/> | |
<Attref ref = "att_9"/> | |
<Attref ref = "att_7"/> | |
</Property> | |
<Property name = "day_today_pr" id="prp_8"> | |
<Attref ref = "att_10"/> | |
<Attref ref = "att_7"/> | |
</Property> | |
<Property name = "thermostat_settings_pr" id="prp_9"> | |
<Attref ref = "att_0"/> | |
</Property> | |
<Property name = "operation_pr" id="prp_10"> | |
<Attref ref="att_1"/> | |
</Property> | |
<Property name = "season_pr" id="prp_11"> | |
<Attref ref="att_2"/> | |
</Property> | |
<Property name = "today_pr" id="prp_12"> | |
<Attref ref="att_3"/> | |
</Property> | |
<Property name = "hour_pr" id="prp_13"> | |
<Attref ref="att_4"/> | |
</Property> | |
<Property name = "month_pr" id = "prp_14"> | |
<Attref ref = "att_5"/> | |
</Property> | |
<Property name = "day_pr" id = "prp_15"> | |
<Attref ref = "att_6"/> | |
</Property> | |
<Property name = "date" id = "prp_16"> | |
<Attref ref = "att_3"/> | |
</Property> | |
</Property_set> | |
| |
<Tph> | |
<Trans src="prp_0" dst="prp_1"/> | |
<Trans src="prp_1" dst="prp_2"/> | |
<Trans src="prp_1" dst="prp_3"/> | |
<Trans src="prp_2" dst="prp_4"/> | |
<Trans src="prp_3" dst="prp_9"/> | |
<Trans src="prp_4" dst="prp_5"/> | |
<Trans src="prp_4" dst="prp_6"/> | |
<Trans src="prp_5" dst="prp_13"/> | |
<Trans src="prp_5" dst="prp_16"/> | |
<Trans src="prp_6" dst="prp_10"/> | |
<Trans src="prp_6" dst="prp_11"/> | |
<Trans src="prp_16" dst="prp_7"/> | |
<Trans src="prp_7" dst="prp_14"/> | |
<Trans src="prp_7" dst="prp_8"/> | |
<Trans src="prp_8" dst="prp_15"/> | |
<Trans src="prp_8" dst="prp_12"/> | |
</Tph> | |
| |
<Ard> | |
<Dep independent="prp_15" dependent="prp_12"/> | |
<Dep independent="prp_14" dependent="prp_11"/> | |
<Dep independent="prp_13" dependent="prp_10"/> | |
<Dep independent="prp_12" dependent="prp_10"/> | |
<Dep independent="prp_10" dependent="prp_9"/> | |
<Dep independent="prp_11" dependent="prp_9"/> | |
</Ard> | |
</xmi:XMI> | |
</code> | |
| |
| |
====== Sprawozdanie ====== | |
W związku z tym że instalacja środowiska ATL okazała się znacznie trudniejsza niż przypuszczaliśmy i samo doprowadzenie oprogramowania do pełnej funkcjonalności zajęło nam około tydzień i kosztowało wiele nerwów, chcielibyśmy podzielić się wrażeniami i opinią na temat aktualnej wersji ATL. | |
| |
| |
Chcielibyśmy zacząć od tego że sam pakiet instalacyjny dostępny na oficjalnej stronie ATL w formie skompilowanych pluginów do środowiska Eclipse (http://www.eclipse.org/modeling/m2m/downloads/index.php?project=atl) jest niekompletny. Wprawdzie dostępne pluginy umożliwiają dokonanie transformacji, ale brakuje jednej z kluczowych funkcjonalności polegającej na wygenerowaniu pliku ECORE (XMI) z KM3. W tej sytuacji dostępne oprogramowanie może służyć głównie do korzystania z gotowych transformacji dostępnych na stronie ATL (http://www.eclipse.org/m2m/atl/atlTransformations/), zaś tworzenie własnych transformacji jest bardzo utrudnione, gdyż jesteśmy zmuszeni do własnoręcznego napisania meta-modelu w XMI , co w ogóle podważa celowość wykorzystania KM3 którego funkcja polega właśnie na tym żeby móc w sposób łatwy (korzystając z języka zbliżonego do JAVA) zaprojektować meta-model. Jednak nie sam brak owej funkcjonalności jest najbardziej rażący. | |
| |
| |
To co najbardziej irytuje, to dokumentacja do środowiska. Otóż nie ma w niej słowa o powyższych brakach. W oficjalnym poradniku dla początkujących (http://www.eclipse.org/m2m/atl/doc/ATL_Starter_Guide.pdf) jest opisane krok po kroku jak stworzyć prosty projekt korzystając z „nieistniejących” funkcjonalności. Rady dotyczące konfiguracji oraz zamieszczone screenshoty ni jak się maja do tego, co przedstawia ATL w swej aktualnej wersji. Dodam ze instalację przeprowadziliśmy zgodnie z poradnikiem (http://www.eclipse.org/m2m/atl/doc/ATL_Installation_Guide[v0.1].pdf) ściągając i instalując wszystkie niezbędne składniki. Otóż jak się później okazało, aby ATL było w pełni funkcjonalne należy zainstalować 2 dodatkowe pakiety: AM3 (ATLAS MegaModel Management) i TCS (Textual Concrete Syntax) niewymienione w poradniku instalacyjnym. | |
| |
| |
AM3 w formie skompilowanej jest dostępne ze strony http://www.eclipse.org/gmt/am3/download/ jednak jak się okazało po lekturze Eclipse Newsgroups również nie jest w wersji kompletnej. Pewne kluczowe pluginy dostępne są tylko w formie źródeł do ściągnięcia z repozytorium CVS. Jeśli chodzi o TCS to żadne pliki w wersji binarnej nie są dostępne, jedyne co mamy do dyspozycji to pliki źródłowe z CVS. Nie było by to problemem gdyby nie to, że po ściągnięciu odpowiednich pluginów w formie źródeł(zgodnie z http://wiki.eclipse.org/AM3/How_Install_AM3_From_CVS i http://wiki.eclipse.org/TCS/Language_Project) niektóre pluginy nie dają się skompilować. Jak się okazało nie tylko my mieliśmy z tym problem http://dev.eclipse.org/newslists/news.eclipse.modeling.gmt/msg00642.html ). Wygląda na to że aktualna wersja owych pluginów nie jest odpowiednio zintegrowana z dostępną wersją ATL bądź z innymi składnikami. Kompilator zgłasza błędy związane z brakiem pewnych klas (które nota bene środowisko Eclipse wykrywa jako zaimportowane czyli dostępne dla projektów w „strefie roboczej”) Po odnalezieniu i zaimportowaniu odpowiednich klas bezpośrednio do projektów i wielogodzinnym debugowaniu (opierając się na lekturze grupy dyskusyjnej m.in.- http://dev.eclipse.org/newslists/news.eclipse.modeling.m2m/msg02427.html)ostatecznie udało nam się skompilować i zbudować wszystkie niezbędne pluginy. | |
| |
| |
| |
Po instalacji opcja „Inject KM3 to Ecore metamodel” pojawiła się w menu kontekstowym jednak jak się okazało później nie działała jak należy. Operacja generuje plik ECORE zawierający jedynie nagłówek XMI i nic poza tym. Próby instalacji powyższych pakietów w innych wersjach środowiska Eclipse również zakończyły się fiaskiem. Prawdopodobnie popadlibyśmy w rezygnacje gdyby nie odnalezienie postu, w którym autor zamieszcza link do pakietu ATL/AM3/TCS w wersjach binarnych (jak sam zaznacza „zagubiony w sieci” gdyż nigdzie nie było do niego odnośnika - http://dev.eclipse.org/newslists/news.eclipse.modeling.tmf/msg00175.html) Po niewielkiej modyfikacji udało nam się uruchomić pakiet, który jak na razie działa jak należy. | |
| |
| |
Podsumowując, aktualnie nie istnieje żaden skuteczny poradnik jak zainstalować ATL. Mamy wątpliwości czy w ogóle jest to możliwe korzystając tylko z aktualnych źródeł zamieszczonych w repozytorium CVS. Pliki w dziale downoload nie zawierają wszystkim potrzebnych pluginów. Dokumentacja do środowiska jest niespójna i niekompletna. Frédéric Jouault - jeden z developerów ATL przyznaje że trwają prace nad poprawą sytuacji (http://dev.eclipse.org/newslists/news.eclipse.modeling.gmt/msg00621.html), jednakże do chwili obecnej problem nie został rozwiązany. | |
| |
| |
| |
| |
| |
====== Materiały ====== | |
| |
[[http://modelware.inria.fr/rubrique.php3?id_rubrique=12|Co nieco o ATL]] | |
| |
[[http://en.wikipedia.org/wiki/ATLAS_Transformation_Language|ATL Wikipedia eng]] | |
| |
[[http://www.eclipse.org/m2m/atl/|ATLAS i Eclipse]] | |
| |
[[http://www.eclipse.org/m2m/atl/doc/ATL_User_Manual%5Bv0.7%5D.pdf|ATL User Manual]] | |
| |
[[http://www.eclipse.org/m2m/atl/doc/ATLUseCase_Families2Persons.pdf |Prezentacja prostego przykladu uzycia ATL(takie "Hello World" dla ATL)]] | |
| |
[[http://www.eclipse.org/m2m/atl/usecases/index.php|Przyklady uzycia]] | |
| |
[[http://www.eclipse.org/m2m/atl/publication.php|Publikacje o ATL]] | |
| |
[[http://www.eclipse.org/gmt/am3/km3/doc/KernelMetaMetaModel%5Bv00.06%5D.pdf|KM3 Manual]] | |
| |
| |