You are on page 1of 24

ATL / Tutoriales - Crear una transformacin ATL sencilla

< ATL
En este tutorial se muestra cmo crear tu primera transformacin sencilla con ATL, a
travs de un ejemplo bsico conocido: Families2Persons .
Nota: Este tutorial es seguido paso a paso en el cheatsheet ATL bajo Eclipse: Desarrollo
ATL> Crear una transformacin ATL sencilla . Ir a la Ayuda> Cheat Sheets ... men
para encontrarlo.

Contenido
[ ocultar ]
1 Objetivos
o 1.1 Las Familias
o 1.2 Las personas
2 Requisitos
3 Cree un nuevo proyecto ATL
4 Los metamodelos
o 4.1 El metamodelo Familias
o 4.2 Las personas metamodelo
5 El cdigo de transformacin ATL
6 El archivo de modelo de las familias de la muestra
7 La configuracin de lanzamiento
8 Ejecucin de la transformacin
9 Vea tambin
Objetivos
Los objetivos de este tutorial son para llevar a cabo una transformacin de una lista
de las familias a una lista de personas .
Por un lado (el origen), tenemos una lista de las familias . Cada familia tiene un apellido,
y contiene un padre, una madre y un nmero de hijos e hijas (0, 1 o ms), todas con un
nombre de pila. Queremos transformar esta lista en una nueva lista de personas (el
objetivo), esto significa que cada miembro de la familia va a ser una persona, sin
diferenciar a los padres de los nios, y sin ningn vnculo entre los miembros de una
misma familia (excepto un parte de su nombre). Al final, slo tenemos que tener a una
persona con su nombre completo (nombre y apellido), hombre o mujer.
Las Familias

Las Personas

Con el fin de llegar a hacer esto, hay una serie de requisitos.


Requerimientos
En primer lugar, usted tendr que instalar ATL en eclipse. Si ya se ha instalado, omita
esta tarea. De lo contrario, siga los dos pasos a seguir:
haga clic en Ayuda> Instalar nuevo software ...

entonces usted tiene que seleccionar un sitio de actualizacin, una bsqueda


de ATL en el campo de filtro cuando una lista de software disponible
una vez que haya hecho esto, usted debe ver un "SDK ATL - SDK ATLAS
Transformacin Idioma" lnea en la lista a continuacin, en el nodo de modelado

comprobarlo, haga clic en Siguiente> , y siga las instrucciones


Usted puede comprobar si ATL est instalado, vaya a Ayuda> Acerca de Eclipse SDK ,
a continuacin, haga clic en el detalles de instalacin del botn, y bajo el Plugins ficha debera ver varias lneas con ATL.

Si usted tiene cualquier problema, por favor consulte la Gua del usuario para obtener
ms informacin sobre la instalacin de ATL.
Crear un nuevo proyecto ATL
Despus de la teora, vamos a empezar a crear el proyecto.
Para crear un nuevo proyecto ATL, tienes que ir a File> New> Other ...

y luego seleccione ATL ATL Project> ... .

A continuacin, haga clic en el Siguiente> botn. Escriba un nombre para el proyecto


(diga "Families2Persons" para nuestro ejemplo).

El proyecto debera aparecer ahora en la lista de proyectos.


La Gua del usuario tambin proporciona una seccin detallado para la creacin de un
nuevo proyecto ATL .
Los metamodelos
Ahora que nuestro proyecto est listo para usar, podemos llenarlo. Nuestros primeros
archivos son la representacin de una familia y una persona, es decir, cmo queremos
simbolizar entonces (como un mapa de simbolizar el mundo real). Esto se llama
un metamodelo , y corresponde a un archivo de Ecore.
Para crear el archivo Ecore, vaya a File> New> Other ... y seleccione Eclipse Modeling
Framework> Ecore modelo y haga clic en Siguiente> .

Seleccione su proyecto Families2Persons en la lista, escriba un nombre para el archivo


(Families.ecore por ejemplo), y haga clic en Finalizar . Un archivo vaco se agrega a su
proyecto. Repita esta tarea para el metamodelo Persons.ecore.

Ahora tenemos que llenar estos archivos.


(Tenga en cuenta que la Gua del usuario muestra otros ejemplos metamodelos .)
El metamodelo Familias
Como vimos en el Objetivo parte, una familia tiene un apellido, y un padre, una madre,
hijos e hijas con un nombre de pila. Eso es lo que tenemos que decirle al archivo
Families.ecore.
Abrir con el editor por defecto (Ecore modelo de la muestra Editor). Tambin
necesitaremos las Propiedades de vista, por lo que si no est ya abierto, le podemos
mostrar que se va en Window> Show View> Other ... , seleccionando General>
Propiedades y haga clic en Aceptar .

El archivo de Families.ecore viene en la forma de un rbol. La raz debe ser: "La


plataforma :/ resource/Families2Persons/Families.ecore". Si expande ella, hay un nodo
vaco bajo l.

Haga clic en l, y en el Propiedades de vista, escriba "Families" en el valor de la


propiedad "Name". Este nodo es donde vamos a poner todo lo que hace una familia.
As que primero creamos una clase "Familia", haciendo clic derecho sobre el nodo de
Familias , y al hacer clic en Nuevo para nios> EClass .

Puede que el nombre de la misma manera que usted nombr las familias nodo anterior.
A continuacin le damos un atributo ( Nuevo Nio> EAttribute ) y el nombre "Apellido".

Queremos tener una y slo una apellido por familia, por lo que el control de su
multiplicidad: set 1 para el lmite inferior (que se debe establecer en 0 por defecto), y 1
para el lmite superior (que ya debera ser 1). Estos lmites se pueden ajustar de la
misma manera que el nombre, sino en las de lmite inferior y el lmite superior de
propiedades. Podemos especificar un tipo de este atributo, y queremos que sea una
cadena. As que en la propiedad EEscriba, buscar el tipo Estring.

En este momento, tenemos una familia con su apellido. Ahora necesitamos los
miembros de esta familia. Por lo tanto vamos a crear otra clase (como hemos creado
la clase de la familia): "Miembro". Esta clase ser el hijo de un nodo de familias, ya que
la otra clase de familia. Estos miembros tienen un nombre, por lo que aadir un atributo
"nombre" del tipo Estring, y de nuevo un miembro tiene uno y slo un nombre (vase
ms arriba si no te acuerdas de cmo crear un atributo, el nombre, darle un tipo y
cambiar su multiplicidad).
Ahora tenemos que hacer que los vnculos entre la familia y los miembros. Para ello,
usted tiene que crear hijos de la familia del tipo Ereferencia . Nombra estas referencias
"padre", "madre", "hijos" e "hijas". Tendrn la EEscriba miembro . Acerca de la
multiplicidad, tenemos una padre y una madre para una familia (los lmites superior e
inferior de manera ponen a 1), pero podemos tener tantos hijos e hijas como queramos,
incluso 0 (juego por lo cota inferior a 0, y la parte superior conjunto vinculado a -1, lo
que significa *). Y por fin, poner su Contencin propiedad verdadera para que puedan
contener miembros.
Una vez que estos atributos se crean y configuran, hacemos lo mismo para la clase de
miembros. Tambin necesita referencias hacia la clase de la familia.Slo tiene que
aadir 4 EReferences a la clase de usuario: "familyFather", "familyMother", "familySon"
y "familyDaughter" con EEscriba familia . Esta vez, cada referencia debe haber su
multiplicidad se define como 0 .. 1 (que es por defecto), debido a que un miembro es o
un padre o una madre o un hijo o una hija, por lo que la referencia que se define para
un miembro muestra su papel en la familia. Luego, con el fin de saber cul de ellos hace
referencia a que un familiar, puesto su campo EOpposite a su referencia en la clase de
la familia (por ejemplo, familyFather refiere al padre de referencia de la clase de la
Familia).
<? 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 nombre="Familias">
<eClassifiers xsi:type="ecore:EClass" nombre="Familia">
<EStructuralFeatures xsi: type = "ecore: EAttribute" name =
"Apellido" orden = "false"
unique = "false" lowerBound = "1" eType = "ecore:
eDataType http://www.eclipse.org/emf/2002/Ecore # / / Estring "/>
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "padre" orden = "false"
lowerBound = "1" eType = "# / 0/Member" contencin =
"true" eOpposite = "# / 0/Member/familyFather" />
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "madre" orden = "false"
lowerBound = "1" eType = "# / 0/Member" contencin =
"true" eOpposite = "# / 0/Member/familyMother" />
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "hijos" ordenaron = "false"
upperBound = "-1" eType = "# / 0/Member" contencin =
"true" eOpposite = "# / 0/Member/familySon" />
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "hijas" ordenaron = "false"
upperBound = "-1" eType = "# / 0/Member" contencin =
"true" eOpposite = "# / 0/Member/familyDaughter" />
</ EClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Member">
<EStructuralFeatures xsi: type = "ecore: EAttribute" name =
"nombre" orden = "false"
unique = "false" lowerBound = "1" eType = "ecore:
eDataType http://www.eclipse.org/emf/2002/Ecore # / / Estring "/>
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "familyFather" orden = "false"
eType = "# / 0/Family" eOpposite = "# / 0/Family/father"
/>
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "familyMother" orden = "false"
eType = "# / 0/Family" eOpposite = "# / 0/Family/mother"
/>
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "familySon" orden = "false"
eType = "# / 0/Family" eOpposite = "# / 0/Family/sons"
/>
<EStructuralFeatures xsi: type = "ecore: Ereferencia" name
= "familyDaughter" orden = "false"
eType
=
"#
/
0/Family"
eOpposite
=
"#
/
0/Family/daughters" />
</ EClassifiers>
</ Ecore: EPackage>
</ XMI: XMI>

Y aqu estamos con el metamodelo para nuestras familias!


El metamodelo Personas
El principio es el mismo para el metamodelo de destino, en menos complicada. Abra el
archivo Persons.ecore, y el nombre del nodo raz nio a "Personas". A continuacin,
agregue una "Persona" de clase, con un atributo: "Nombre completo" de
EEscriba Estring y multiplicidad 1 .. 1.
A continuacin, establezca el resumen de atributo de la clase a "true"
Persona. Tenemos que hacer esto porque no vamos a poner en prctica esta clase
directamente, pero otras dos subclases: "masculinos" y "femeninos", segn a quin era
la persona en la familia, un hombre o una mujer. Crear estas dos clases en el mismo
nivel de Persona. Los hacemos subclases de persona configurando sus Tipos
ESuper propiedad a persona.
<? 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="Persons">
<eClassifiers
xsi:type="ecore:EClass"
name="Person"
abstract="true">
<EStructuralFeatures xsi: type = "ecore: EAttribute" name =
"Nombre completo" orden = "false"
unique = "false" lowerBound = "1" eType = "ecore:
eDataType http://www.eclipse.org/emf/2002/Ecore # / / Estring "/>
</ EClassifiers>
<eClassifiers
xsi:type="ecore:EClass"
name="Male"
eSuperTypes="#/0/Person"/>
<eClassifiers
xsi:type="ecore:EClass"
name="Female"
eSuperTypes="#/0/Person"/>
</ Ecore: EPackage>
</ XMI: XMI>

Y nuestro segundo metamodelo est listo!


El cdigo de transformacin ATL
Ahora que hemos representado a lo que tenemos (Familias, la fuente ) y lo que se
quiere obtener (personas, el objetivo ), podemos concentrarnos en el ncleo de la
transformacin: el cdigo de ATL. Este cdigo se va a coincidir con una parte de la
fuente con una parte de la diana.
Lo que queremos en nuestro ejemplo, es tomar cada miembro de cada familia , y
transformarlo en una persona . Eso implica la fusin de su nombre y apellido a tener un
nombre y apellido, que define si se trata de un hombre o una mujer, y copiar estas piezas
de informacin en una persona objeto.
Primero necesitamos un archivo de poner este cdigo en. Por lo tanto crear un nuevo
archivo de ATL, por ir a File> New> Other ... , y luego ATL> ATL archivo .

El nombre de "Families2Persons.atl", por ejemplo, no se olvide de seleccionar el


proyecto y, a continuacin, haga clic en Finalizar .

Si se le pide que abra la perspectiva de ATL, haga clic en S .


Al abrir el archivo, el error se marca (ya veremos cmo solucionarlo ms adelante), y
contiene una sola lnea:
Families2Persons mdulo;
En primer lugar se aaden dos lneas en la parte superior del archivo , una para cada
metamodelo, para que el editor puede utilizar la auto-realizacin y documentacin
cuando escribimos en algn cdigo en relacin con los dos metamodelos:
- @ Familias path = / Families2Persons/Families.ecore
- @ Trayectoria Personas = / Families2Persons/Persons.ecore
Entonces le decimos a ATL que tenemos familias y queremos que las personas fuera
(esto debera solucionar el error):
crear OUT: las personas contra las IN: Familias;
Ahora debemos definir algunos ayudantes:
auxiliares Familias contexto miembro def: isFemale (): Boolean =
Si no self.familyMother.oclIsUndefined () entonces
verdadero
ms
Si
no
self.familyDaughter.oclIsUndefined
()
entonces
verdadero
ms
falso
endif
endif;
auxiliares Familias contexto miembro def: familyName: String =

Si no self.familyFather.oclIsUndefined () entonces
self.familyFather.lastName
ms
Si no self.familyMother.oclIsUndefined () entonces
self.familyMother.lastName
ms
Si
no
self.familySon.oclIsUndefined
()
entonces
self.familySon.lastName
ms
self.familyDaughter.lastName
endif
endif
endif;
Estos ayudantes sern utilizados en las reglas que vamos a ver a continuacin.
El primero se llama a un miembro de una familia ( ! familias contexto miembro ), nos
da un booleano ( Boolean ), y nos dice si el miembro es una mujer o no, verificando
si se define la familyDaughter o familyMother referencia o no.
El segundo, tambin se llama a un miembro de una familia, esta vez nos da una
cadena ( String ) y devuelve el apellido del miembro. Debe buscarlo en todas las
referencias
a
la
familia,
para
ver
cul
se
define
( familyFather , familyMother , familySon o familyDaughter )
Y, por ltimo, aadimos dos reglas que crean personas de sexo masculino y femenino
de los miembros de las familias:
descartar Member2Male {
desde
s: Familias miembros (no s.isFemale ())
a
t: Personas Male (
fullName <- s.firstName + '' + s.familyName
)
}
descartar Member2Female {
desde
s: Familias miembros (s.isFemale ())
a
t: Personas Mujer (
fullName <- s.firstName + '' + s.familyName
)
}
Cada regla se llama en el objeto de que el respeto del predicado de filtro en
el de parte. Por ejemplo, la primera regla tiene cada miembro de cada una de las familias
( de s: Familias miembros ) que no es una mujer (con la ayuda que hemos descrito ms
arriba, no s.isFemale () ). Y entonces se crea una persona de sexo masculino ( para t:
Personas masculino ) y defina su fullName atributo al nombre de pila del miembro
seguida de su apellido (utilizando la aplicacin auxiliar familyName vimos ms arriba). El
principio es el mismo para la segunda regla, mientras que este tiempo se tarda slo los
miembros femeninos.
Tenga en cuenta que el editor de ATL proporciona resaltado de sintaxis y sangra mucho

mejor que lo que se puede ver arriba. Adems, usted puede encontrar ayuda en lo que
vimos anteriormente en la Gua del usuario, aqu y aqu .
El archivo del modelo de las familias de la muestra
La transformacin est listo para ser utilizado, slo necesitamos un modelo de ejemplo
de ejecutarlo en. Primero cree un archivo en el proyecto en el que pondremos el cdigo
del modelo. Ir a Archivo> Nuevo> Archivo

el nombre de "sample-Families.xmi", por ejemplo

y bralo con un editor de texto. He aqu algunos ejemplos de cdigo:


<? Xml version = "1.0" encoding = "ISO-8859-1">
<XMI:
XMI
XMI:
version
=
"2.0"
xmlns:
http://www.omg.org/XMI "xmlns =" Las familias ">
<Family LastName="March">
<father firstName="Jim"/>
<Mother firstName="Cindy"/>
<sons firstName="Brandon"/>
<daughters firstName="Brenda"/>
</ Familia>
<Family LastName="Sailor">
<father firstName="Peter"/>
<Mother firstName="Jackie"/>
<sons firstName="David"/>
<sons firstName="Dylan"/>
<daughters firstName="Kelly"/>
</ Familia>
</ XMI: XMI>

XMI

"

La configuracin de lanzamiento
Tenemos todo lo que necesitamos para hacer la transformacin, pero no es un paso
ms antes de lanzarlo, al menos la primera vez: tenemos que configurar el lanzamiento.
Cuando usted est en el archivo de ATL (Families2Persons.atl), haga clic en Ejecutar>
Ejecutar (o Ctrl + F11)

Se abrir un cuadro de dilogo. Varias piezas de informacin ya contienen: el mdulo


ATL (nuestro archivo de transformacin, Families2Persons.atl ), los metamodelos
( Families.ecore y Persons.ecore ), pero tenemos que completar la pgina.

Los Modelos de origen (en:, se ajusta a las Familias) parte es el modelo que
queremos transformar, es decir, nuestra muestra-Families.xmi ; navegar por el espacio
de trabajo para aadirlo.

Los modelos objetivo (Out:, se ajusta a las Personas) parte es el modelo que se
generen; navegar por el espacio de trabajo para encontrar su proyecto y escriba un
nombre para el archivo (decir "sample-Persons.xmi").

Una opcin til se puede encontrar en la ficha Comn de la pgina: podemos guardar
nuestra configuracin para que ATL puede encontrarlo la prxima vez nos gustara que
para ejecutarlo o si el proyecto se exporta. Si marca archivo compartido y navegar
dentro de su proyecto, puede guardar esta configuracin en un archivo
("Families2Persons.launch", por ejemplo).

Usted puede encontrar ayuda sobre cmo compilar un archivo ATL en la Gua del
usuario, aqu .
Ejecucin de la transformacin
Por fin podemos ejecutar la transformacin, haga clic en Ejecutar en la pgina de
configuracin. Entonces se genera un archivo, el nombre de la muestra-Persons.xmi ,
y que contiene la lista de los miembros de su familia se transforma en personas.
Esto es lo que debe conseguir si se abre con un editor de texto:
<? Xml version = "1.0" encoding = "ISO-8859-1">
<XMI:
XMI
XMI:
version
=
"2.0"
xmlns:
http://www.omg.org/XMI "xmlns =" Personas ">
<Male FullName="Jim March"/>
<Male FullName="Brandon March"/>
<Male FullName="Peter Sailor"/>

XMI

"

<Male FullName="David Sailor"/>


<Male FullName="Dylan Sailor"/>
<Female FullName="Cindy March"/>
<Female FullName="Brenda March"/>
<Female FullName="Jackie Sailor"/>
<Female FullName="Kelly Sailor"/>
</ XMI: XMI>
Ejecucin de una configuracin de lanzamiento ATL se explica en la Gua del
usuario, aqu
Este es el final de este ejemplo bsico. Ms documentacin, ejemplos y ayuda se puede
encontrar en el sitio web ATL: http://www.eclipse.org/atl/ .