P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de...

39
Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz 20/01/14 1 Transformaciones de modelo a texto con MOFScript Procesadores de Lenguajes 2 PL2 - Transformaciones de modelo a texto con MOFScript Curso 2013-2014

Transcript of P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de...

Page 1: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz

20/01/14 1

Transformaciones de modelo a texto con

MOFScript

Procesadores de Lenguajes 2

PL2 - Transformaciones de modelo a texto con MOFScript

Curso 2013-2014

Page 2: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Contenidos

�  Instalación �  Introducción � Componentes � Características del lenguaje � Desarrollo de una transformación

20/01/14 2 PL2 - Transformaciones de modelo a texto con MOFScript

Page 3: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

INSTALACIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

20/01/14 3 PL2 - Transformaciones de modelo a texto con MOFScript

Page 4: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Instalación MOFScript

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 4

Help → Install New Software

Page 5: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

INTRODUCCIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

20/01/14 5 PL2 - Transformaciones de modelo a texto con MOFScript

Page 6: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

MOFScript

� Herramienta muy utilizada para transformaciones de modelo a texto (código o documentación).

�  Implementación de la especificación M2T de la OMG. Alineamiento con el estándar QVT.

� Existen alternativas M2T más recientes como Acceleo, JET o Xtend.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 6

Page 7: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Características (I)

� Generación de texto desde modelos basados en MOF, UML, Ecore u otros creados con EMF.

� Permite crear múltiples ficheros de salida. Codificación configurable.

� Control de la trazabilidad desde el modelo a los bloques de código generado.

�  Integración con código Java externo.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 7

Page 8: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Características (II)

�  Fácil de usar: lenguaje sencillo con pocos constructores.

� Lenguaje imperativo, similar a los lenguajes de scripting.

� Reglas invocadas explícitamente, excepto la inicial (main).

�  Se permite la herencia de transformaciones.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 8

Page 9: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Arquitectura

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 9

MOFScript se distribuye como un plugin que incorpora las herramientas necesarias para que el usuario pueda interaccionar

con los servicios de reconocimiento y verificación de los programas, ejecución de las transformaciones, etc.

Page 10: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

COMPONENTES

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

20/01/14 10 PL2 - Transformaciones de modelo a texto con MOFScript

Page 11: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Componentes

� Los módulos MOFScript se componen de los siguientes elementos: ◦ Declaración del módulo ◦ Reglas de transformación �  Incluyendo una regla main.

◦ Operaciones de escritura en ficheros

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 11

Page 12: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Declaración del módulo

� Define el nombre del módulo de transformación, el/los metamodelo(s) de origen y opcionalmente, la importación de otros módulos.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 12

import  “otraTransformacion.m2t"    

texttransformation    module_name    

 (in  InputMM1:“input_metamodel_uri1",    

 in  InputMM2:“input_metamodel_uri2")  

{    

…  

Page 13: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Reglas de transformación

� Las reglas de transformación son similares a los métodos en Java. Pueden tener un contexto, un tipo de retorno, parámetros y un conjunto de sentencias a ejecutar. Debe existir una regla main, sin parámetros y sin tipo de retorno.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 13

[InputMM.MMElement::]  rule_name  (param1:Type1,  param2:Type2)  {      

         //  statements  

         …  

 result=  exp;  

}  

 

Page 14: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Escritura en ficheros

�  Indicar el nombre (relativo o absoluto) del fichero donde se escribirá el texto de salida. Las sentencias println y el texto ‘escapado’ permitirán escribir en el último file declarado.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 14

file  fichero(“ficherodesalida.txt”);  

fichero.println(“escribiendo  texto…”);  

nl(1);  tab(2);  space(3);  

‘  escribiendo  más  texto…’;  

Page 15: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

CARACTERÍSTICAS DEL LENGUAJE

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript

Page 16: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Expresiones MOFScript

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 16

if  (condition)  {  

 //  statements  

}  else    {  

 //  statements  

}  

while  (condition){  

 //statements  

}    

property  name:Type  =  value;  

var  name:Type  =  value;  

Page 17: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Tipos de datos MOFScript � Predefinidos ◦  String ◦  Integer ◦ Real ◦  Boolean ◦  List ◦ Hashtable ◦  PropertyMap ◦ Object

� Tipos del metamodelo (metaclases)

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 17

Page 18: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Operaciones MOFScript � Predefinidos: ◦  String: substring(), toLower(), replace() ◦  Integer: +, -, *, / ◦  List: add(), remove(), forEach(), select() ◦ Hashtable: put(), get(), keys() ◦  PropertyMap: load(), loadXML(), storeXML()

� Tipos del metamodelo ◦  objectsOfType(), oclIsTypeOf(), oclIsKindOf()

� Utilidades del sistema ◦  position(), time(), date(),

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 18

Page 19: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

DESARROLLO DE UNA TRANSFORMACIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

20/01/14 19 PL2 - Transformaciones de modelo a texto con MOFScript

Page 20: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Creación de un proyecto

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 20

File → New Project → Empty EMF Project Los metamodelos los crearemos dentro de un proyecto EMF

Page 21: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Arquitectura del ejemplo

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 21

Ecore

MOFScript

WebPageMM

UCA web UCA.html

WebPage2HTML

conforme A

conforme A

conforme A

transformación

origen

Page 22: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Correspondencia del metamodelo

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 22

<html> … <img src=“Header.logo"/> <h1>Header.title</h1> <p>Paragraph.text</p> <img src="http://mapas.org/map?=Map.lat,Map.long"> <div align="center">Footer.text</div> … </html>

WebPageMM

Page 23: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Establecer rutas de trabajo

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 23

Page 24: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Crear una transformación MOFScript

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 24

File → New → MOFScript File

Page 25: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (I)

� Nuestro fichero M2T definirá un módulo de transformación, el cual transformará un modelo basado en el metamodelo de páginas web en texto.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 25

property  filename:String  =  "index.html“;  

 

texttransformation  WebPage2HTML  (in  WebPageMM:"http://webpagemm/1.0")  {  

Page 26: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (II)

�  Función principal, la cual abrirá el fichero de salida, escribirá las etiquetas de apertura del HTML, lo poblará y luego escribirá las etiquetas de cierre.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 26

WebPageMM.WebPage::main  ()  {          

       stdout.println  ("Generando  web  para...  "  +  self.name);                        

       file  (filename);  //  Creamos  archivo  

       writeHTMLHeader(self.name);  //  Apertura  del  fichero  HTML  

       self.toHTML();  //  Contenidos  del  HTML  

       writeHTMLEnd();  //  Cierre  del  fichero  HTML  

   }  

Page 27: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (III)

�  Función auxiliar que genera las etiquetas de cabecera del documento HTML.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 27

writeHTMLHeader(name:String){        

     '<html  lang="es">\n';  

     '<head>\n';  

     tab(1);    '<meta  http-­‐equiv="content-­‐type"  content="text/html;  charset=utf-­‐8">\n';  

     tab(1);      '<title>';  name;    '</title>\n';        '</head>\n';  

     '<body>\n';          

   }  

Page 28: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (IV)

�  Función auxiliar que genera las etiquetas de cierre del documento HTML.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 28

writeHTMLEnd(){        

     nl(1);  

     '</body>';  

     nl(1);  

     '</html>';                  

   }  

Page 29: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (V)

�  Función auxiliar que genera el contenido HTML desde el modelo origen.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 29

WebPageMM.WebPage::toHTML()  {                

       self.header.toHTML();          

       self.paragraphs-­‐>forEach(paragraph:WebPageMM.Paragraph){  

   paragraph.toHTML();  

       }      

       self.maps-­‐>forEach(map:WebPageMM.Map){  

   map.toHTML();  

       }          

       self.footer.toHTML();              

 }  

Page 30: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (VI)

�  Función auxiliar que genera el HTML necesario para representar el título y el logotipo de la página web.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 30

WebPageMM.Header::toHTML()  {  

       nl(1);tab(1);              

         '<img  width="300"  height="126"  src="'  self.logo  '"/>';            nl(1);tab(1);  

         '<H1>'  self.title  '</H1>';  

   }  

Page 31: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (VII)

�  Función auxiliar que genera el HTML necesario para representar un párrafo de la página web.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 31

WebPageMM.Paragraph::toHTML()  {              

         nl(1);tab(1);  

         '<p>'  self.text  '</p>';      }  

Page 32: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (VIII)

�  Función auxiliar que genera el HTML necesario para representar un mapa estático de Google.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 32

WebPageMM.Map::toHTML()  {              

 nl(1);  '<br/>';  

   nl(1);  tab(1);  

   '<img  src=  "http://maps.googleapis.com/maps/api/staticmap?center='  self.lat  ','  self.long  ‘  &zoom=11&  size=200x200  &sensor=false">';  

   }  

Page 33: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de la transformación (IX)

�  Función auxiliar que genera el HTML necesario para representar la información del pié de página.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 33

WebPageMM.Footer::toHTML()  {              

   nl(1);  

   '<br/><hr/>';  

   nl(1);tab(1);  

         '<div  align="center">'  self.info  '</div>';      }  

Page 34: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Desarrollo de un modelo origen

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 34

Page 35: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Ejecución de la transformación

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 35

Las opciones MOFScript de la barra de botones de Eclipse, permiten compilar el fichero M2T, ejecutar una transformación

para un modelo dado y ejecutar la transformación anterior.

Page 36: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

Resultado: Página HTML

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 36

Page 37: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

RESUMEN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

20/01/14 37 PL2 - Transformaciones de modelo a texto con MOFScript

Page 38: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

¿Qué hemos aprendido hoy?

� MOFScript es un lenguaje y un entorno de ejecución para generar texto a partir de modelos (M2T).

� Permite generar varios ficheros de salida de código ejecutable o documentación.

� El desarrollo de las reglas de transformación es similar a la programación de métodos en Java.

20/01/14 PL2 - Transformaciones de modelo a texto con MOFScript 38

Page 39: P9 - Transformaciones de modelo a texto con MOFScript · 20/01/14 15 PL2 - Transformaciones de modelo a texto con MOFScript . Expresiones MOFScript ... Los metamodelos los crearemos

20/01/14 39 PL2 - Transformaciones de modelo a texto con MOFScript

Transformaciones de modelo a texto con

MOFScript

Procesadores de Lenguajes 2

Iván Ruiz Rube [email protected]