MDA之路

          MDA,UML,XML,Eclipse及Java相關(guān)的Blog
          posts - 53, comments - 494, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          日歷

          <2005年4月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          公告

          我的郵箱是wxb_nudt@163.com。 我的Blog中發(fā)表的文章,如無說明,都是原創(chuàng),如果要引用,請(qǐng)注明出處。

          文章檔案(2)

          MDA技術(shù)相關(guān)網(wǎng)站

          友情Blog鏈接

          搜索

          •  

          最新評(píng)論

          一日散記:

          BLOG竟然壞了一天,補(bǔ)貼昨天的。

          上午

          OCL的研究終于告一段落,至于建立一個(gè)用OCL約束的UML工程的完整例子,要等輔導(dǎo)的那個(gè)學(xué)生學(xué)完OCL再進(jìn)行。因此今天馬上投入模型轉(zhuǎn)換的研究。模型轉(zhuǎn)換的偽代碼看得多了,始終沒有試過一個(gè)可以run的工具,那么就從MTFModel 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è),IBMID很奇怪,必須是電子郵件格式的,仔細(xì)看了說明才注冊(cè)成功。MTF不大,才1M多,一會(huì)就下載完了。

          安裝也很順手,就是一個(gè)典型的Eclipse插件。注意目前MTF1.0版本,需要Eclipse3.0或者3.0.1版本,以及EMF2.0XSD2.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工程也行吧),importsample1.rdl,看了里面的說明,然后配置,run!

          未命名.JPG嗯,馬上一個(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)鍵字還是很讓人模糊的。于是打開MTFUserGuide(兩個(gè)地方都有,pdf格式的在MTF的安裝目錄中;幫助文檔格式的已經(jīng)集成到Eclipse的幫助文檔中了),開始研讀。

          下午

          中午草草一飽,便回來午睡,午睡是一個(gè)很好的習(xí)慣,一個(gè)小時(shí)的午睡足夠保證整個(gè)下午和晚上的精神狀態(tài)良好。

          再來看MTFUserGuide,說實(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 scienceadvice,特別是第一篇文章“How to Organize your Thesis”,被翻譯成多國文字,我很感激的看到有人把它翻譯為簡(jiǎn)體中文。

          然后就接到了wife的電話,唉。兒女情長(zhǎng),英雄氣短。老老實(shí)實(shí)接受wife的教育改造,好好學(xué)習(xí)、天天向上、愛護(hù)老婆、尊敬師長(zhǎng)。


          評(píng)論

          # re: 一日散記  回復(fù)  更多評(píng)論   

          2005-04-07 08:33 by dudu
          非常抱歉!服務(wù)器故障給您帶來不便, 請(qǐng)諒解!

          # re: MTF(Model Transformation Framework),一日散記  回復(fù)  更多評(píng)論   

          2005-04-07 14:38 by 八進(jìn)制
          現(xiàn)在有沒有mtf的實(shí)際應(yīng)用,比如是否可以把ecore模型對(duì)應(yīng)到一個(gè)數(shù)據(jù)庫模式?
          您的文章對(duì)我很有用,只是我在瀏覽器里有很多字看不到,只能靠猜的。比如“模型轉(zhuǎn)換的研究”我就只能看到“模型 的研究”,是不是因?yàn)閺膚ord里貼過來的緣故?

          # re: MTF(Model Transformation Framework),一日散記  回復(fù)  更多評(píng)論   

          2005-04-07 15:08 by wxb_nudt
          1.MTF我也是剛剛接觸了兩天,實(shí)際應(yīng)用我還沒有搜集資料。
          2.MTF的轉(zhuǎn)換目前僅限于ECORE,UML,XML,XMI之間的轉(zhuǎn)換。不過它是可以擴(kuò)展的,轉(zhuǎn)換到數(shù)據(jù)庫模式應(yīng)該是可行的。
          3.可能你的瀏覽器不是Windows下面的,所以看我的文檔有問題。我是用WORD編輯,然后生成Web文檔,再貼過來的。
          4.MTF我會(huì)繼續(xù)學(xué)習(xí),告一段落時(shí)會(huì)再寫相關(guān)文檔。另外,最近還準(zhǔn)備看看Kent大學(xué)開發(fā)的KMF(Kent Model Framework),全面支持OCL,也是基于Ecilpse和EMF做的。

          # re: MTF(Model Transformation Framework),一日散記  回復(fù)  更多評(píng)論   

          2007-09-12 14:44 by mtf
          正在搜uml2和ecore的轉(zhuǎn)換,看到你的文章,很有幫助,剛剛下了MTF,非常感謝!^_^
          主站蜘蛛池模板: 霍州市| 罗源县| 大城县| 漳浦县| 务川| 交城县| 长春市| 北票市| 武强县| 桂林市| 东乌珠穆沁旗| 临潭县| 迁西县| 桃江县| 黎平县| 自治县| 甘南县| 富裕县| 绥化市| 阿尔山市| 华池县| 瓦房店市| 望都县| 康马县| 武鸣县| 怀集县| 从化市| 铜鼓县| 佳木斯市| 台北市| 麻江县| 来宾市| 兰溪市| 荣昌县| 滨海县| 榆社县| 连南| 来宾市| 布尔津县| 海林市| 故城县|