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

Post on 16-Aug-2020

7 views 0 download

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

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

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

INSTALACIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

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

Instalación MOFScript

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

Help → Install New Software

INTRODUCCIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

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

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

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

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

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.

COMPONENTES

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

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

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

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")  

{    

…  

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;  

}  

 

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…’;  

CARACTERÍSTICAS DEL LENGUAJE

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

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

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;  

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

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

DESARROLLO DE UNA TRANSFORMACIÓN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

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

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

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

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

Establecer rutas de trabajo

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

Crear una transformación MOFScript

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

File → New → MOFScript File

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")  {  

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  

   }  

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';          

   }  

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>';                  

   }  

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();              

 }  

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>';  

   }  

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>';      }  

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">';  

   }  

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>';      }  

Desarrollo de un modelo origen

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

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.

Resultado: Página HTML

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

RESUMEN

TRANSFORMACIONES DE MODELO A TEXTO CON MOFSCRIPT

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

¿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

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 ivan.ruiz@uca.es