MDA之路

MDA,UML,XML,Eclipse及Java相关的Blog
posts - 53, comments - 494, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

MTF(Model Transformation Framework),一日散记

Posted on 2005-04-07 00:41 wxb_nudt 阅读(1483) 评论(4)  编辑  收藏 所属分类: 技术杂谈

一日散记:

BLOG竟然坏了一天,补贴昨天的。

上午

OCL的研究终于告一段落,至于建立一个用OCL约束的UML工程的完整例子,要等辅导的那个学生学完OCL再进行。因此今天马上投入模型转换的研究。模型转换的伪代码看得多了,始终没有试过一个可以run的工具,那么就从MTFModel Transformation Framework)开始吧,毕竟是IBM开发的,实力强大。况且阿飞说还不错的。

找到早早就保存的那个MTF主页,http://www.alphaworks.ibm.com/tech/mtf,进入先看了一下介绍:

What is the Model Transformation Framework?

The Model Transformation Framework (MTF) is a set of tools that helps developers make comparisons, check consistency, and implement transformations between Eclipse Modeling Framework (EMF) models. The framework also supports persistence of a record of what was mapped to what by the transformation; this record can be used to support round-tripping, reconciliation of changes, or display of the results to a user.

 How does it work?

The framework consists of the following:

  • a language for defining mappings between EMF models
  • a transformation engine capable of interpreting mapping definitions in order to check or enforce consistency between models
  • editor and debugger for mapping definitions
  • support for generating text documents from EMF models using templates.

感觉还不错的,虽然MTF主要是基于EMF做模型转换,不过EMF作为目前最著名的开源平台Eclipse的模型框架,前途也是不可限量。下载前要先登陆IBM国际网站,没有ID的必须注册一个,IBMID很奇怪,必须是电子邮件格式的,仔细看了说明才注册成功。MTF不大,才1M多,一会就下载完了。

安装也很顺手,就是一个典型的Eclipse插件。注意目前MTF1.0版本,需要Eclipse3.0或者3.0.1版本,以及EMF2.0XSD2.0,再加上EclipseUML2.0版本。不过这些东正好我都已经安装好了。于是不到2分钟顺利搞定。

到处找Readme,在MTF的主目录下面就有一个,介绍了例子程序在哪儿。但是每个例子怎么run就包含在规则文件里面。MTF的主要代码(转换规则)存放在rdl文件(Rule Definition Language)里面。同时每个rdl文件里面有配置运行和代码解释。于是建立了一个EMF工程(java工程也行吧),importsample1.rdl,看了里面的说明,然后配置,run

未命名.JPG嗯,马上一个模型就被转换(创造?)出来了,可以用EclipseUML显示出来。Rdl文件如下:

import ecore "http://www.eclipse.org/emf/2002/Ecore"

import emf "http:///com/ibm/mtf/model/emf.ecore"

import ws "http:///com/ibm/mtf/model/workspace.ecore"

// entry rule

relate sample1(ws:IFile file)

{

    createTopPackage [1] (match over file.resource.contents, "Sample1")

}

 

 

relate createTopPackage(ecore:EPackage pkg, ecore:EString name)

{

    equals(pkg.name, name),

    createPackage [1] (match over pkg.eSubpackages, "SubPackage1"),

    createPackage [1] (match over pkg.eSubpackages, "SubPackage2"),

    createPackage [1] (match over pkg.eSubpackages, "SubPackage3"),

    createClass [1] (match over pkg.eClassifiers, "Sample1_class"),

    createDataType [1] (match over pkg.eClassifiers, "Sample1_datatype"),

    createEnum[1] (match over pkg.eClassifiers, "Sample1_enum"),

    createClassWithSuper [1] (match over pkg.eClassifiers, "Sample1_class2","Sample1_class")

}

 

relate createPackage(ecore:EPackage pkg, ecore:EString name)

     when equals( pkg.name, name)

 

relate createClass(ecore:EClass class, ecore:EString name)

     when equals( class.name, name)

 

relate createDataType(ecore:EDataType type, ecore:EString name)

     when equals( type.name, name)

     

relate createEnum(ecore:EEnum enum, ecore:EString name)

     when equals( enum.name, name)

 

relate createClassWithSuper (ecore:EClass class, ecore:EString name, ecore:EString superName)

     when equals( class.name, name)

{

    ref createClass(match over class.eSuperTypes, superName) 

}

简单来说,就是从“字符串”模型到ECORE模型的转换,其实质是用字符串规定模型包、类等等的名字,然后生成一个Ecore模型!在接下来的sample2里面定义了一个简单的转换规则,将这个生成的模型转换为另一个Ecore模型,其转换规则如下:

relate sample2(ws:IFile file1, ws:IFile file2)

{

    mapPackages(over file1.resource.contents, over file2.resource.contents)

}

relate mapPackages(ecore:EPackage pkg1, ecore:EPackage pkg2 )

{

    equals(pkg1.name, pkg2.name ),

    ordered mapPackages( over pkg1.eSubpackages, over pkg2.eSubpackages)

}

去掉了import部分。这个规则的含义是,将源模型EPackage转换为目标模型中的EPackage,其他元素不管,转换约束是源模型包的名称要等于目标模型包的名称。

尽管理解不难(刚刚看过OCL嘛,哈哈),但是关键字还是很让人模糊的。于是打开MTFUserGuide(两个地方都有,pdf格式的在MTF的安装目录中;帮助文档格式的已经集成到Eclipse的帮助文档中了),开始研读。

下午

中午草草一饱,便回来午睡,午睡是一个很好的习惯,一个小时的午睡足够保证整个下午和晚上的精神状态良好。

再来看MTFUserGuide,说实话,这个UserGuide写得并不好,因为它没有指导用户如何开始一个简单的例子,然后由浅入深的讲解。即使这些内容已经包含在rdl文件中,也应该花一章来写一下嘛。不过它还是从整个系统的概念入手,慢慢引入各种关键字的用法,以及MTF中的各种概念。熟悉模型转换技术的人已经很容易看懂吧。UserGuide不长,36页,不过看长了也有点头晕目眩了。

阴天,还有会,每周二的定时篮球活动算是完蛋了。郁闷中去吃了晚饭。

晚上

晚上打开Gmail开始看信,Penggu在米国也和我一样郁闷啊,都是PhD,都是那么难。两年了一篇paper都没有,惨!

无意中找到了penggu的主页,发现了一个链接,如获至宝,呵呵http://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/mleone/web/how-to.html

这是一个Advice on Research and Writing的站点,集合了很多著名的对于computer scienceadvice,特别是第一篇文章“How to Organize your Thesis”,被翻译成多国文字,我很感激的看到有人把它翻译为简体中文。

然后就接到了wife的电话,唉。儿女情长,英雄气短。老老实实接受wife的教育改造,好好学习、天天向上、爱护老婆、尊敬师长。


评论

# re: 一日散记  回复  更多评论   

2005-04-07 08:33 by dudu
非常抱歉!服务器故障给您带来不便, 请谅解!

# re: MTF(Model Transformation Framework),一日散记  回复  更多评论   

2005-04-07 14:38 by 八进制
现在有没有mtf的实际应用,比如是否可以把ecore模型对应到一个数据库模式?
您的文章对我很有用,只是我在浏览器里有很多字看不到,只能靠猜的。比如“模型转换的研究”我就只能看到“模型 的研究”,是不是因为从word里贴过来的缘故?

# re: MTF(Model Transformation Framework),一日散记  回复  更多评论   

2005-04-07 15:08 by wxb_nudt
1.MTF我也是刚刚接触了两天,实际应用我还没有搜集资料。
2.MTF的转换目前仅限于ECORE,UML,XML,XMI之间的转换。不过它是可以扩展的,转换到数据库模式应该是可行的。
3.可能你的浏览器不是Windows下面的,所以看我的文档有问题。我是用WORD编辑,然后生成Web文档,再贴过来的。
4.MTF我会继续学习,告一段落时会再写相关文档。另外,最近还准备看看Kent大学开发的KMF(Kent Model Framework),全面支持OCL,也是基于Ecilpse和EMF做的。

# re: MTF(Model Transformation Framework),一日散记  回复  更多评论   

2007-09-12 14:44 by mtf
正在搜uml2和ecore的转换,看到你的文章,很有帮助,刚刚下了MTF,非常感谢!^_^

只有注册用户登录后才能发表评论。


网站导航: