Beruflich Dokumente
Kultur Dokumente
< 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
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 ...
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>
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
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)
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
"