一日散記:
BLOG竟然壞了一天,補(bǔ)貼昨天的。
上午
OCL的研究終于告一段落,至于建立一個(gè)用OCL約束的UML工程的完整例子,要等輔導(dǎo)的那個(gè)學(xué)生學(xué)完OCL再進(jìn)行。因此今天馬上投入模型轉(zhuǎn)換的研究。模型轉(zhuǎn)換的偽代碼看得多了,始終沒有試過一個(gè)可以run的工具,那么就從MTF(Model Transformation Framework)開始吧,畢竟是IBM開發(fā)的,實(shí)力強(qiáng)大。況且阿飛說還不錯(cuò)的。
找到早早就保存的那個(gè)MTF主頁,http://www.alphaworks.ibm.com/tech/mtf,進(jìn)入先看了一下介紹:
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.
感覺還不錯(cuò)的,雖然MTF主要是基于EMF做模型轉(zhuǎn)換,不過EMF作為目前最著名的開源平臺(tái)Eclipse的模型框架,前途也是不可限量。下載前要先登陸IBM國際網(wǎng)站,沒有ID的必須注冊(cè)一個(gè),IBM的ID很奇怪,必須是電子郵件格式的,仔細(xì)看了說明才注冊(cè)成功。MTF不大,才1M多,一會(huì)就下載完了。
安裝也很順手,就是一個(gè)典型的Eclipse插件。注意目前MTF是1.0版本,需要Eclipse3.0或者3.0.1版本,以及EMF2.0和XSD2.0,再加上EclipseUML2.0版本。不過這些東東正好我都已經(jīng)安裝好了。于是不到2分鐘順利搞定。
到處找Readme,在MTF的主目錄下面就有一個(gè),介紹了例子程序在哪兒。但是每個(gè)例子怎么run就包含在規(guī)則文件里面。MTF的主要代碼(轉(zhuǎn)換規(guī)則)存放在rdl文件(Rule Definition Language)里面。同時(shí)每個(gè)rdl文件里面有配置運(yùn)行和代碼解釋。于是建立了一個(gè)EMF工程(java工程也行吧),import了sample1.rdl,看了里面的說明,然后配置,run!
嗯,馬上一個(gè)模型就被轉(zhuǎn)換(創(chuàng)造?)出來了,可以用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)
}
簡(jiǎn)單來說,就是從“字符串”模型到ECORE模型的轉(zhuǎn)換,其實(shí)質(zhì)是用字符串規(guī)定模型包、類等等的名字,然后生成一個(gè)Ecore模型!在接下來的sample2里面定義了一個(gè)簡(jiǎn)單的轉(zhuǎn)換規(guī)則,將這個(gè)生成的模型轉(zhuǎn)換為另一個(gè)Ecore模型,其轉(zhuǎn)換規(guī)則如下:
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部分。這個(gè)規(guī)則的含義是,將源模型的EPackage轉(zhuǎn)換為目標(biāo)模型中的EPackage,其他元素不管,轉(zhuǎn)換約束是源模型包的名稱要等于目標(biāo)模型包的名稱。
盡管理解不難(剛剛看過OCL嘛,哈哈),但是關(guān)鍵字還是很讓人模糊的。于是打開MTF的UserGuide(兩個(gè)地方都有,pdf格式的在MTF的安裝目錄中;幫助文檔格式的已經(jīng)集成到Eclipse的幫助文檔中了),開始研讀。
下午
中午草草一飽,便回來午睡,午睡是一個(gè)很好的習(xí)慣,一個(gè)小時(shí)的午睡足夠保證整個(gè)下午和晚上的精神狀態(tài)良好。
再來看MTF的UserGuide,說實(shí)話,這個(gè)UserGuide寫得并不好,因?yàn)樗鼪]有指導(dǎo)用戶如何開始一個(gè)簡(jiǎn)單的例子,然后由淺入深的講解。即使這些內(nèi)容已經(jīng)包含在rdl文件中,也應(yīng)該花一章來寫一下嘛。不過它還是從整個(gè)系統(tǒng)的概念入手,慢慢引入各種關(guān)鍵字的用法,以及MTF中的各種概念。熟悉模型轉(zhuǎn)換技術(shù)的人已經(jīng)很容易看懂吧。UserGuide不長(zhǎng),36頁,不過看長(zhǎng)了也有點(diǎn)頭暈?zāi)垦A恕?/SPAN>
陰天,還有會(huì),每周二的定時(shí)籃球活動(dòng)算是完蛋了。郁悶中去吃了晚飯。
晚上
晚上打開Gmail開始看信,Penggu在米國也和我一樣郁悶啊,都是PhD,都是那么難。兩年了一篇paper都沒有,慘!
無意中找到了penggu的主頁,發(fā)現(xiàn)了一個(gè)鏈接,如獲至寶,呵呵http://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/mleone/web/how-to.html。
這是一個(gè)Advice on Research and Writing的站點(diǎn),集合了很多著名的對(duì)于computer science的advice,特別是第一篇文章“How to Organize your Thesis”,被翻譯成多國文字,我很感激的看到有人把它翻譯為簡(jiǎn)體中文。
然后就接到了wife的電話,唉。兒女情長(zhǎng),英雄氣短。老老實(shí)實(shí)接受wife的教育改造,好好學(xué)習(xí)、天天向上、愛護(hù)老婆、尊敬師長(zhǎng)。