|
|
pl:miw:miw08_hekateatl [2008/09/30 16:16] miw |
pl:miw:miw08_hekateatl [2019/06/27 15:50] |
====== 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 ====== | |
| |
* Metamodel ARD (w oparciu o HML) | |
{{:pl:miw:ard.png|:pl:miw:ard.png}} | |
* Metamodel ARD KM3 | |
<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 | |
<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]] | |
| |
| |