• 237.10 KB
  • 2022-06-17 14:50:44 发布

一种模型转换的编织框架

  • 13页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
ISSN1000-9825,CODENRUXUEWE-mail:jos@iscas.ac.cnJournalofSoftware,Vol.17,No.6,June2006,pp.1423−1435http://www.jos.org.cnDOI:10.1360/jos171423Tel/Fax:+86-10-62562563©2006byJournalofSoftware.Allrightsreserved.∗一种模型转换的编织框架+王学斌,王怀民,吴泉源,史殿习(国防科学技术大学计算机学院网络与信息安全研究所,湖南长沙410073)AWeavingFrameworkforModelTransformation+WANGXue-Bin,WANGHuai-Min,WUQuan-Yuan,SHIDian-Xi(InstituteofNetworkTechnologyandInformationSecurity,SchoolofComputer,NationalUniversityofDefenseTechnology,Changsha410073,China)+Correspondingauthor:Phn:+86-731-4573694,Fax:+86-731-4512504,E-mail:wxb_nudt@163.com,http://www.nudt.edu.cnWangXB,WangHM,WuQY,ShiDX.Aweavingframeworkformodeltransformation.JournalofSoftware,2006,17(6):1423−1435.http://www.jos.org.cn/1000-9825/17/1423.htmAbstract:ModeltransformationsarethecoreandresearchfocusofMDA(modeldrivenarchitecture).Nowadays,therearemanymodeltransformationapproachesandtools,andtheheterogeneityofthemcausesthatthemodeltransformationcodecan’tbereusedeasilyandthecostofstudyingandusingmodeltransformationincreases.Toeliminatetheseshortcomings,inspiredbymodelweavingtechnique,thispaperproposesaQVT(modelquery/view/transformation)-basedmodeltransformationweavingframeworknamedQMTW(QVT-basedmodeltransformationweavingframework).Theconception,semantics,metamodelandsyntaxofQMTWaddedwithamappingfromitselftotheQVTRelationlanguagearesubscribed.AstudycaseisprovidedtoshowhowdeveloperscanuseandtakeadvantageofQMTW.Theapproachpromotestheabstractionlayerofmodeltransformations,unitesothermodeltransformationlanguages,andsupportsQVTspecification.Soiteliminatestheheterogeneityofmodeltransformationpartly.Itissimple,specification-basedandextensible.Keywords:modelweaving;modeltransformation;MDA(modeldrivenarchitecture);QVT(modelquery/view/transformation);softwarearchitecture摘要:模型转换是MDA(modeldrivenarchitecture)的核心技术之一,也是目前MDA研究的热点.目前,MDA范畴内存在多种模型转换方法和工具,它们之间的异构性造成了模型转换代码重用的困难,并使学习和使用模型转换方法的成本增加.受到模型编织技术的启发,提出了一种基于QVT(modelquery/view/transformation)规范的模型转换编织框架QMTW(QVT-basedmodeltransformationweavingframework)来解决以上缺点.展示了模型转换编织的概念、语义、元模型和语法,以及到目标语言的转换定义,并以一个具体实例说明了本框架的使用方法和优点.QMTW提高了模型转换的抽象层次,统一了多种模型转换语言,并支持OMG最新的模型转换规范,在一定程度上消除了模型转换技术的异构性,同时具有简单、规范、扩展性强3个优点.∗SupportedbytheNationalNaturalScienceFoundationofChinaunderGrantNo.90412011(国家自然科学基金);theNationalGrandFundamentalResearch973ProgramofChinaunderGrantNo.2005cb321800(国家重点基础研究发展规划(973));theProgramforChangjiangScholarsandInnovativeResearchTeaminUniversityofChinaunderGrantNo.IRT0446(教育部创新团队)Received2006-01-09;Accepted2006-03-13 1424JournalofSoftware软件学报Vol.17,No.6,June2006关键词:模型编织;模型转换;MDA(modeldrivenarchitecture);QVT(modelquery/view/transformation);软件体系结构中图法分类号:TP301文献标识码:A提高软件质量和弥补不同技术平台间的差异是目前软件界最为迫切需要解决的问题.模型驱动架构[1](modeldrivenarchitecture,简称MDA)被认为是达到上述目的的有效途径之一.作为由OMG组织推动的一种新的软件开发方法,它以模型作为软件开发的核心元素,并为其提供了多种技术规范作为基础框架.在MDA出现之前,软件体系结构(softwarearchitecture,简称SA)的研究受到了广泛的关注和重视,被认为将会在软件开发中发挥十分重要的作用.SA的目的是弥补需求分析工程和软件建模技术之间的鸿沟,避免需求分析的结果不能[2]体现在软件建模中,从而导致需求分析和软件实现的脱节.而MDA的目的是解决从软件建模到具体实现中面临的种种问题,减弱各种语言和中间件平台的差异对软件开发造成的影响.MDA和SA是两种相辅相成的技术,SA中可以使用MDA中的建模语言和建模方法来表示其体系结构,而SA中的体系结构又可作为MDA中的模型来进行转换、检验、查询和维护.MDA中需要解决的两个主要问题是如何有效地建立软件模型以及如何在模型之间进行有效的转换.前一∗个问题目前已经达成了较为一致的意见,即以UML及其扩展机制作为建模的标准语言;而后一个问题目前仍然没有一个统一的答案.模型转换是模型驱动架构中的核心技术,其目的是为了解决软件开发过程中以模型作[3][4]为基础元素的查询、变换、视图等技术问题.目前,支持模型转换的方法和平台很多,例如MTF,ATL,MTL等,但现有的各种模型转换方法和工具各自使用了自定义的语言和规范,导致了模型转换技术的异构性.这种异构性带来了两个问题:一是现有的模型转换代码不能在其他工具中重用;二是多种并存的模型转换语言导致模型转换技术的学习成本增加,使用困难增大.[5]为了消除此异构性,OMG在2002年提出了一个QVT(modelquery/view/transformation)RFP,其目的是为[6]了对模型的查询、视图和转换定义一个统一的规范.其后相继收到了8个QVT的提案,经过筛选、淘汰与合[7]∗∗并,最后在2005年7月形成了一个最后的联合修正案.此修正案即QVT规范的初稿,OMG期望这个标准能够统一模型转换技术.但是,短期内将各种模型转换语言统一到QVT中是不现实的,毕竟在各个工具上已经积累了众多的模型转换代码.从另一个角度说,也不一定所有的研究机构和工具厂商会完全支持QVT规范.那么,模型转换技术的异构性仍然是当前一个不可回避的问题.为了解决模型转换的异构性,同时遵循QVT规范,还要支持现有的模型转换语言,本文基于模型编织的思想提出了一种解决方案——基于QVT的模型转换编织框架QMTW(QVT-basedmodeltransformationweavingframework).模型编织是模型转换领域中的新概念,它能够提升模型转换的抽象层次,构造一个称为模型编织(modelweaving)的抽象层,在此抽象层上可以定义编织模型(weavingmodel),它代表了一组模型转换规则,然后生成目标语言的模型转换代码.文献[8,9]描述了基于ATL语言构造的一个模型编织框架AMW,它可以描述基于ATL语言的模型转换规则.但是,这种方法存在3个弱点:1)描述模型转换的能力不足,例如,它只能描述一个源模型和一个目标模型间的转换,不能描述两个以上模型间的转换定义;2)没有与QVT规范相结合,不具有规范性;3)没有定义从编织模型到具体模型转换语言的代码生成机制.QMTW将模型编织的思想运用于解决模型转换异构性的问题,在更高的抽象层次上定义了模型转换的语义.遵循此语义的编织模型可以转换为多种模型转换语言,包括QVT规范中的Relation语言.因为它基于QVT规范,所以对转换规则的描述能力更强,基本上能够涵盖所有基于规则的模型转换语义.同时还定义了可扩展的代码生成机制,可以将编织模型转换为多种目标语言.与AMW相比,它更加符合规范,具有更强的规则描述能力和可扩展能力.∗虽然目前仍存在UML和DSL之间的争论,但在通用建模领域,UML已成为事实上的标准.∗∗本文中所指的QVT规范即这个联合修正案,在提交本文时,这个修正案还没有正式成为规范. 王学斌等:一种模型转换的编织框架1425图1比较了QMTW的层次结构与常用模型转换语言的差异.从层次结构上来看,QMTW比常用模型转换语言略为复杂.图中左边是模型转换的层次结构,右边则是QMTW的层次结构.从图中可以看出:在模型转换语[10]言中,源元模型SrcMM、目标元模型DesMM和转换语言元模型MMt同属于MOF中的M2层,而源模型SrcM、目标模型DesM和转换定义Mt同属于M1层.在QMTW中增加了一个模型编织元模型QMTW和一个编织模型WM.从理论上来说,QMTW是由MOF直接定义的,属于M2层,而WM是由QMTW定义的,属于M1层.但Mt又是由WM生成的,所以它应该属于M0层,这样就与前面的结论形成了矛盾.事实上,模型编织中的WM和Mt同属于M1层,它们只是相同语义的不同表达方式,并能够互相转换.本方法的优势在于:QMTW定义了一个平台/语言无关的模型转换元模型,符合这个元模型的编织模型WM描述了一个平台无关的模型转换规则模型.利用此平台无关模型,WM可以生成多种符合特定技术平台的目标语言代码,这样,部分地解决了模型转换技术的异构性问题.M3MOFMOFConformToConformToConformToConformToConformToConformToQMTWM2SrcMMMMtDesMMSrcMMConformToDesMMRelatedRelatedRelatedWMRelatedConformToConformToConformToConformToGenerateConformToM1SrcMMtDesMSrcMMtDesMInputExecuteOutputInputExecuteOutputFig.1ComparisonbetweenmodeltransformationlayersandQMTWlayers图1模型转换层次与QMTW层次比较图与模型转换语言相比,QMTW具有如下优点:(1)简单性,降低了学习模型转换方法的复杂性,且不必一一学习复杂的模型转换语言;[11](2)规范性,基于QVT规范以及OMG的其他规范MOF,OCL等;(3)扩展性,可以扩展到多个模型转换语言,并且自身可以再扩展,以适应不同领域的需要.本文的第1节介绍QVT规范的框架结构及其关系型模型转换语言Relation.第2节介绍QMTW的基本架构,包括概念、抽象语法和语义以及具体语法.第3节介绍一个使用QMTW构建编织模型的实例.第4节以上述编织模型为例来描述从QMTW到Relation语言的转换定义,并附有相关代码.第5节介绍本领域内的国内外相关工作.第6节对本文工作进行总结,并指出未来的工作内容.1QVT架构QVT是用MOF定义的,它位于MOF四层模型中的元模型层.它主要由4种模型转换语言和一个转换组成,而模型的查询则是使用OCL完成的,模型的视图功能在此规范中并没有得到解决.Relation语言是QVT的核心语言,它可以将模型转换规则描述为一组源模型元素与目标模型元素之间的关系(relation).每个Relation包含几个domain,这些domain指向参与转换的模型元素,每个domain包含一组 1426JournalofSoftware软件学报Vol.17,No.6,June2006pattern,通过匹配pattern可以选择出符合转换规则的模型元素.如果pattern不能匹配,则通过修改、删除、创建目标模型元素来达到匹配,同时完成模型转换.Relation语言与文献[12]中介绍的关系型模型转换语言很类似,与目前一些常用的模型转换语言ATL,MTF等也有相同之处.因此,本文使用Relation语言作为QMTW的主要目标语言.除了Relation以外,QVT还包括Core,OperationalMapping和BlackBox这3种语言.其中,Core与Relation同属声明性(declarative)语言,而OperationalMapping和BlackBox则是命令性(imperative)语言.此外,QVT还定义了从Relation语言到Core的一个转换定义RelationsToCoreTransformation.Relation是一种规则型的、声明性的模型转换语言,它的语义涵盖了几乎所有规则型或者声明性模型转换语言的语义.本文提出的QMTW的语义与Relation的语义相等,因此,使用QMTW建立的编织模型有能力被转换为任意的关系型或者声明性模型转换语言.2QMTW模型转换编织架构模型编织是将AOP(aspectorientedprogramming)思想引入模型转换领域中而出现的新概念.目前有两种不同的模型编织方法:第1种类似于传统的AOP方法,在模型中引入modelaspect,modelpointcut和modeljoinpoint,把转换规则写入一个模型编织定义文件,然后用modelweaver读入源模型和编织定义文件,从而生成目标[4]模型;第2种是将模型转换规则表达为有类型的模型元素连接,连接的类型代表了这种连接的语义.连接之间[8]通过“联合”关联起来,这些联合表达了连接之间关系的语义.QMTW采用并扩展了第2种方法,更加精确地定义了模型转换编织架构并给出了一个代码生成机制.如图2所示,模型转换规则用连接来表示,连接之间通过“组织”来定义其间的依赖、引用、继承等关系.每个连接的类型对应一个代码段,可以通过模板的方式把一个连接转换为一个代码段.通过对组织的解释,可以将所有的规则代码段组合为最终的模型转换代码.由于连接类似于纬线,而组织类似于经线,一组转换规则就像一张交织的网,所以这种表达模型转换的方法就被命名为“模型转换编织”.LinkType1CodeFragment1SrcM1Link1DesM1CodeTemplate1Organization1OrganizationType1SrcM2Link2DesM2SrcM3Link3DesM3Organization2SrcM4Link4DesM4LinkType2Fig.2Modeltransformationweavingsketchmap图2模型转换编织示意图 王学斌等:一种模型转换的编织框架14272.1QMTW概念简单地说,一个模型转换方法应该具有如下功能:1)访问源模型;2)定义模型转换规则;3)执行模型转换;4)生成目标模型.根据以上功能,本文提出了一个基于QVT规范的模型转换编织元模型QMTW,它包含如下概念:模型元素引用:可以使得转换规则能够访问源模型和目标模型,并利用特定的机制对模型元素进行操作;连接:将源模型和目标模型中的一些模型元素连接起来,并赋予这个连接一定的语义,使其表达一个转换规则;组织:一个编织模型中往往含有多个连接,它们代表了多种转换规则.组织将这些规则以一定的方式关联起来,定义规则间的依赖、包含等关系,确保转换能够按照一定的步骤执行;约束:定义了连接中的一些限定条件,例如连接的先决条件和连接的几个端点之间的约束等;编织模型:定义了整个模型转换算法,包括对模型元素的访问以及转换规则、规则组织和约束.注意,模型转换的执行要依赖于具体的模型转换语言.目标模型的生成也要依赖于具体的语言.2.2QMTW的抽象语法及语义QMTW的抽象语法用其元模型表示.为了清晰起见,我们将元模型拆分到两个图中,如图3、图4所示.QElement-ownedElement-name:String1..*-description:String-modelQModelQRefQLinkEnd-ref:String-isCheckable:Boolean-isEnforceable:Boolean-wovenModelQModelRefQElementRef-element1..*-wovenElementRef-modelRef0..*Fig.3Thepart1ofmetamodeldiagramofQMTW图3QMTW元模型图第1部分下面依照上述的5个QMTW概念来说明图中各元模型元素的语义、属性和约束.模型元素引用主要解决的是转换中对模型元素访问的功能.它主要由图3中描述的QElement,QRef,QElementRef和QmodelRef这4个元素来组成.QElement是QMTW中所有元素的父类,对应于EMOF中的Element;QRef是一个抽象类,它定义了一个引用,指向一个源或目标模型元素.它可以看作是编织模型和源模型以及目标模型间的接口;QElementRef和QModelRef都是QRef的子类,前者指向一个具体的源或者目标模型元 1428JournalofSoftware软件学报Vol.17,No.6,June2006素,后者指向一个源模型或者目标模型.连接的概念主要由图4中的Qlink,QLinkEnd和QlinkType这3个元素组成.QLink定义了源模型元素和目标模型元素之间的一个连接,代表着一个模型转换规则.每个QLink包含两个以上的连接端QlinkEnd.它有两个主要的作用:一是从连接端可以引用到参与此连接的模型元素;二是可以在连接端定义约束和连接端属性.每个连接有一个连接类型QLinkType,它代表着此连接的具体语义,并且指向一组目标代码模板.一个QLink的isTop属性指明了这个连接是否为入口规则,一个QModel中应该最少具有一个入口规则.约束如下:contextQModelinv:self.ownedElement->select(l|l.oclIsKindOf(QLink))->exist(lo|lo.isTop=true)组织的概念由图4中的Qorganization,QOrganizationEnd和QOrganizationType共同组成.QOrganization定义了多个连接之间的关系,例如依赖、包含等,一个编织模型中所有的组织共同定义了一个模型转换算法的结构,即模型转换规则的执行步骤和顺序.每个组织包含了两个以上的组织端QOrganizationEnd,它定义了组织到一个连接的引用.每个组织有一个组织类型QOrganizationType,它代表着此组织的具体语义,并含有一个组装连接代码模板的方案.约束的概念由QConstraint来表达.约束可以附加在连接端上面,它继承了OCL规范中的表达式,可以用OCL来直接表达模型编织中的各种约束.编织模型概念由QModel来表达.一个编织模型可以包含QMTW中的任何元素,例如连接、组织、引用和约束,即一组完整的模型转换规则.TypedElementOCLExpression(fromEMOF)(fromEssentialOCL)QElement-ownedConstraintQConstraint-name:String0..*-description:String-child-organization-relatedLink0..*QorganizationQlinkQorganizationEnd2..*isTop:Boolean-parent1-organizationEnd-link-linkEnd1QLinkEndQorganization-linkEnd-typeTypeQLinkType-isCheckable:Boolean2..*-isEnforceable:Boolean-typeType(fromEMOF)Fig.4Thepart2ofmetamodeldiagramofQMTW图4QMTW元模型图第2部分 王学斌等:一种模型转换的编织框架14292.3QMTW的具体语法QMTW是一个中间语言,最终会被转换为可执行的模型转换语言,所以没有必要以BNF范式的方式来定义∗∗∗其具体语法和关键字,而是定义了其元模型的XMI格式以及一个XMLSchema.符合此Schema的XML文件可以用来作为从编织模型到模型转换代码的输入.由于目前QMTW的工具尚未实现,所以并没有定义QMTW的图形符号.3一个QMTW的实例本节介绍了一个应用QMTW进行模型转换编织的实例.源模型是一个Book类,它含有title属性和Chapter类,每个Chapter又包含title,nPages和author属性.目标模型是一个Publication类,包含title,nPages和author属性.它们之间的转换规则如下:规则1.Book的title不变的转换为Publication的title;规则2.Publication的nPages属性为Book中全部Chapter的nPages值相加所得;规则3.Publication的author属性为Book中全部Chapter的author值相连,并除去重复值,然后在中间加上空格所得.规则2中的约束:Book中的Chapter对象的数目不能少于2.下面用QMTW对这个转换建立编织模型,为了清晰起见,编织模型被拆分在图5和图6两个图中,并作了适当简化.<>Book2PubBook<><><>PublicationBookRefPublicationRefequalLink-title:String-title:String-nPages:Integer-author:StringChapter<><><><>srcTitleRefeLinkEnd1eLinkEnd2desTitleRef-title:String-nPages:Integer-author:String<><>srcChapterRefsumLink<><><><>srcNPagesRefsLinkEnd1sLinkEnd2desNPagesRef<>concatLink<><><><>srcAuthorRefcLinkEnd1cLinkEnd2desAuthorRefFig.5Book2Publicationweavingmodelinstancediagram—structure图5Book2Publication编织模型实例图——整体结构∗∗∗由于篇幅所限,本文没有详细列出XMI以及XMLSchema.其代码可以在http://www.gfkd.org/blog/UploadFiles/2006-3/322549035.rar下载.元模型的XMI使用MagicDraw10.5来定义并去掉了其扩展部分.XMLSchema使用hyperModel0.2生成并手动做了修改. 1430JournalofSoftware软件学报Vol.17,No.6,June2006图5中Book和Chapter类是源模型,Publication类是目标模型.编织模型中的连接使用QLink的实例来表示,连接端为QLinkEnd的实例.可以看到:规则1使用equalLink来表达;规则2和规则3分别使用sumLink和concatLink来表达.图6描述的是编织模型的约束和组织部分.从图中可以看出:sumLink的一个连接端sLinkEnd1带有一个约束sLinkEnd1Constraint,此约束使用OCL进行了描述.sumLink和concatLink之间存在依赖的关系,其语义是只有在sumLink已经执行的情况下concatLink才能执行,因此,使用一个组织的实例prevOrganization将这两个连接组织起来.从这个编织模型的实例中可以看出:它完整地表达了整个模型转换算法的规则以及约束,并规定了整个转换执行的顺序,确定了此转换过程可以精确地执行.但是,QMTW本身是不可运行的,要在生成目标代码以后才能够以目标代码的形式运行.下一节将介绍目标代码的生成.contextsLinkEnd1Constraintinv:self.linkEnd.element.modelRef->AllInstance()->select(c|c.oclIsKindOf(Chapter))->sum()>2<><><>eLinkEnd1equalLinkeLinkEnd2<><><><>sLinkEnd1sLinkEnd1sumLinksLinkEnd2Constraint<<>ganizationEnd>><<>ganization>><<>ganizationEnd>>ppOrOrganizationEnd1anizationEnd1ppOrreOgranizationganizationpOrpOrganizationEnd2anizationEnd2<><><>cLinkEnd1concatLinkcLinkEnd2Fig.6Book2Publicationweavingmodelinstancediagram—Linkandorganization图6Book2Publication编织模型实例图——连接与组织4从QMTW到目标语言的转换QMTW可以完整、精确地表达一个编织模型,即一组模型转换规则.但是,模型转换还是需要具体的模型转换语言来执行的.为了达到此目的,本文定义了从QMTW到QVTRelation语言之间的映射.为了适应更多的模型转换语言,可以定义从QMTW到其他模型转换语言的算法.因为其他语言,例如ATL和MTF的语义都弱于Relation,所以,以它们作为目标语言的转换会更加简洁.4.1QMTW到Relation的转换定义从QMTW到Relation的转换也属于模型转换的一个实例,因此也可以使用一个编织模型来定义.为了清晰起见,仅仅给出用自然语言描述的转换规则:规则1.QModel转换为Transformation,表示整个转换的定义;规则2.QModelRef转换为TypedModel,表示被转换的模型; 王学斌等:一种模型转换的编织框架1431规则3.QLink转换为Relation,表示转换规则或者映射;规则4.QElementRef转换为Domain,表示一个转换规则中涉及的模型元素;规则5.QConstraint转换为Pattern中的一个断言Predicate,表示一个转换规则中的约束;规则6.所有转换后的Relation以QOrganization定义的关系来组织.说明:Relation中的RelationImplementation在QMTW中没有对应的元素,因为QMTW是基于声明性的转换,不涉及命令式的转换规则.4.2连接类型和代码模板上面的实例涉及了3种类型的连接,分别是equal,sum和concat.equal的语义是各个连接端的模型元素的值相等,其代码模板如下:$isToprelation$linkName//equlelinktemplate.Alinkismappedtoarelation,representatransformationrule.{$var:$varType;$linkEnd_isCheckable_end1$linkEnd_isEnforceable_end1//AlinkEndismappedtoadomain.domain$linkend_element_modelRef_end1:$modelType1{$elment_attribute=$var};//domaincanaccess$linkEnd_isCheckable_end1$linkEnd_isEnforceable_end2//sourceortargetmodel.domain$linkend_element_modelRef_end2:$modelType2{$elment_attribute=$var};//thesourceandtarget}//elementattributebothequalto$var.说明:以$符号开头的变量都是模板中需要替换的参数,其含义可以从名称中看出来.另外,所有的连接端都有一个接口用来生成编织模型中的约束代码,为了清晰起见,省略了这个接口.sum的语义是某个连接端的模型元素是一个集合,这个集合中所有的值相加,等于另一个连接端元素的值,其代码模板如下:$isToprelation$linkName//sumlinktemplate{$varName:$varType;$linkEnd_isCheckable_end1$linkEnd_isEnforceable_end1//checkablemeansthedomaincouldbecheck,domain$linkend_element_modelRef_end1:$modelType1{//whileenforceablemeansitcouldbechange.self->collect(a|a.$attribute)->iterate(i;acc:$varType=0|//theOCLexpressioncouldbeexecutedtoacc+i)=$var//computethesumofallattributevalues.};$linkEnd_isCheckable_end2$linkEnd_isEnforceable_end2domain$linkend_element_modelRef_end2:$modelType2{$elment_attribute=$var};}concat连接的语义是将某个连接端的模型元素组成一个集合,过滤掉所有相同的值,然后用空格将这些值串联起来,等于另一个连接端模型元素的值,其代码模板如下:$isToprelation$linkName//concatlinktemplate{$varName:$varType;$linkEnd_isCheckable_end1$linkEnd_isEnforceable_end2domain$linkend_element_modelRef_end1:$modelType1{self->collect(a|a.$attribute)->asSet->iterate(i;acc:$varType=‘’|//theOCLexpressionputallattributeacc+//valuesinaset,whichcouldremoveifacc=‘’//allrepeatvalue.Thenconcatenate 1432JournalofSoftware软件学报Vol.17,No.6,June2006thenI//thesevalueswithablankbetweenelse‘’+I//everytwoofthem.endif)=$var};$linkEnd_isCheckable_end1$linkEnd_isEnforceable_end2domain$linkend_element_modelRef_end2:$modelType2{$elment_attribute=$var};}本文只使用了这3个连接类型.连接类型及其代码模板以库的方式存储.用户可以自己扩展这个连接类型库,以表达更加丰富的连接类型.4.3组织类型和代码模板组织的类型包括依赖(先决、后继)、包含等.其语义表明了组织中各个连接之间的关系,根据组织的关系可以对不同的目标语义定义代码模板,这些模板的定义是比较直观和简洁的,由于篇幅所限,文中省略.本文只使用了先决组织.4.4转换步骤在转换定义、连接类型与代码模板以及组织类型与代码模板这3个条件都具备以后,就可以进行从QMTW到目标语言的映射了.转换步骤如下:1.从QModel中得到Transformation的各种属性,并从QModelRef中得到源模型和目标模型;2.根据Qlink,QlinkEnd,QConstraint以及目标语言的代码模板来具体生成每一条规则;3.根据QOrganization的实例来修改规则中的调用与约束代码,体现连接间的依赖与包含等关系,并将所有规则组合成一个完整的程序;4.最后,利用目标语言的解释器/编译器对生成的目标语言进行解释或者编译,检查目标代码的正确性.最后得到的Relation代码如下:transformationBook2Publication(book:Book,pub:Publication){toprelationBook_equal_Publication{var:String;checkonlydomainbook:Book{title=var};enforcedomainpub:Publication{title=var};}toprelationBook_sum_Publication{var:Integer;checkonlydomainbook:Book{self->collect(chapter.nPages)->iterate(i;acc:Integer=0|acc+i)=varandself.chapter->AllInstance()->sum()>2};enforcedomainpub:Publication{nPages=var};where{Book_concat_Publication(book,pub);}} 王学斌等:一种模型转换的编织框架1433relationBook_concat_Publication{var:Integer;checkonlydomainbook:Book{self->collect(chapter.author)->asset()->iterate(i;acc:String=‘’|acc+ifi=‘’thenauthorelsei)=var};enforcedomainpub:Publication{author=var};}}同上述方法一样,还可以定义从QMTW到其他模型转换语言之间的转换.需要注意的是,如果编织模型定义了超出目标语言功能的规则,则无法生成正确的目标语言.5相关工作目前,国际上MDA研究的热点集中在模型转换技术的发展和应用上.在模型转换概念出现之初,各种各样的模型转换方法不断涌现,它们各自致力于表达模型转换技术中的一个侧重点.文献[12]强调用集合以及关系代数的方法来描述模型转换的结构;文献[13]强调能够在一个模型转换方法中描述双向的转换规则,让模型转换可以双向执行;文献[3]强调了如何更有效地执行模型转换;在文献[14]中,将图转换技术和产生式编程应用到模型转换过程中,定义了一种模型转换语言Genermorphous.它将图形转换通过一组产生式规则来定义,每个产生式规则包括一个LHS图形和一个RHS图形.如果LHS图形匹配了源模型中的图形,那么它被规则中的RHS所代替,在对源模型进行匹配和重写的过程中逐步生成目标模型;文献[15]中也描述了一种将图形转换和重写技术应用到模型转换过程中的方法,并构造了一个图形重写和转换系统GReAT(graphrewritingandtransformation),其中包含一种基于图重写技术的模型转换语言UMT.但是,上述种种模型转换方法的异构性反而给自身的发展造成了障碍.为了统一模型转换技术,OMG推出[7]了QVT标准,但它还有待成熟和完善,目前还不是事实上的标准.况且,遗留的模型转换代码不能被简单地丢[16]弃.简单地将目前的一些模型转换语言与QVT结合起来困难很大.在AOP的启发下,出现了模型编织方法.目前的模型编织方法有两种:一种类似于AOP方法,它给出了模型转换中的aspect,pointcut和joinpoint,使用类似于AOL的语言来描述模型转换规则,例如文献[4,17];另一种提高了模型转换的层次,给出了一个模型转换的元模型,此元模型的实例称为编织模型.一个编织模型代表了一组模型转换规则,它可以被转换为不同的模型转[8,9]换目标语言,从而部分地消除了模型转换语言的异构性.本文提出的方法对第2种模型编织方法作了扩充,还定义了一种到QVTRelation语言的映射,具有符合标准、简单易用等优点.国内的MDA研究也逐渐成为热点,研究者在以下几个方向做出了努力:文献[18]对MDA技术作了一个整体的介绍,并讨论了MDA技术中有待研究的3个问题,为其他研究者作了一个很好的综述;文献[19]描述了一个具体的MDA工具的架构,并实现了该工具,这个工作在MDA的建模领域做出了贡献;文献[20]将模型转换技术运用到了某个具体的领域,并用形式化的语言描述了其算法,此工作属于模型转换的应用;文献[21]对MDA技术中从CIM到PIM这个问题进行了表述,提出了一种面向特征的、基于组件的CIM-PIM转换方法,对转换中的可跟踪性以及PIM的形成问题做出了解答.这个工作关注了模型转换中很少涉及的CIM-PIM转换,填补了这个领域的空白.本文提出的QMTW是在模型转换的更高层次上力求统一模型转换的方法,消除模型转换技术的异构性,促进QVT规范的统一和模型转换技术的广泛运用. 1434JournalofSoftware软件学报Vol.17,No.6,June20066未来的工作和结论未来的工作包括以下几个方面:1)继续完善QMTW的抽象语法和具体语法,使其更加精确地与QVT规范结合,并随着QVT规范的改进而变动;2)扩充连接和组织类型库,使其能够表达更加复杂的规则与规则间的关系;3)构造基于QMTW的模型编织工具.本文提出了一种基于QVT规范的模型转换编织架构QMTW,给出了其概念、抽象语法和语义、具体语法、使用实例以及从QMTW编织模型到Relation语言的转换.QMTW的主要目的是为了消除模型转换技术中的异构性,同时可以让使用者掌握模型转换技术的实质,降低模型转换的技术门槛和使用难度.其优点包括:1)使用简单.因为QMTW将模型转换的实质以最简单的方式表达了出来,所以学习和使用QMTW的难度要低于学习某种具体的模型转换语言.2)符合规范.QMTW是完全符合QVT标准的,它也可以作为一种模型转换算法的标准表达形式来进行交流.3)使用范围广.因为QMTW的最基本元素连接和组合都是可以扩展的,因此使用者可以按照自己的需要扩展QMTW使其满足自己的需要,从而在各个领域应用这种方法.QMTW的缺点一是难以描述命令式的模型转换规则,对于非规则型的模型转换描述能力不强;二是描述复杂转换规则的能力不够,因为此类规则难以映射到关系型的转换方法中.总而言之,与QVT规范相比,QMTW更简单,更容易学习和使用.与其他模型编织方法相比,QMTW语义丰富,且符合规范.与具体模型转换语言相比,QMTW可以通过扩展自己的目标语言来完成到这种模型转换语言的映射,从而保护其遗留代码.致谢感谢在此工作中给予我们帮助和支持的同行,包括北京大学的马浩海同学,南京大学的于笑丰同学等.References:[1]OMG.MDAguideversion1.0.1.2003.http://www.omg.org/cgi-bin/apps/doc?formal/03-06-01.pdf[2]SunCA,JinMZ,LiuC.Overviewsonsoftwarearchitectureresearch.JournalofSoftware,2002,13(7):1228−1237.(inChinesewithEnglishabstract)http://www.jos.org.cn/1000-9825/13/1228.htm[3]JouaultF,KurtevI.TransformingmodelswithATL.In:BruelJM,ed.Proc.oftheModelTrans.inPracticeWorkshopatMoDELS.LNCS3844,Jamaica:Springer-Verlag,2005.[4]SilaghiR,FondementF,StrohmeierA.“Weaving”MTLmodeltransformations.In:Proc.ofthe2ndInt’lWorkshoponModelDrivenArchitecture,FoundationsandApplications(MDAFA).Sweden:Springer-Verlag2004.123−138.[5]OMG.MOF2.0query/views/transformationsRFP.OMGdocumentad/2002-04-10,2002.http://www.omg.org/docs/ad/02-04-10.pdf[6]OMG.AreviewofOMGMOF2.0query/views/transformationssubmissionsandrecommendationstowardsthefinalstandard.OMGDocument:ad/03-08-02,2003.http://www.omg.org/docs/ad/03-08-02.pdf[7]OMG.RevisedsubmissionforMOF2.0query/view/transformationsRFP(ad/2002-04-10).OMGDocumentad/2005-07-01,2005.http://www.omg.org/docs/ad/05-07-01.pdf[8]MarcosDDF,JeanB,FrédéricJ,ErwanB,GuillaumeG.AMW:Agenericmodelweaver.In:Proc.ofthe1èresJournéessurl"IngénierieDirigéeparlesModèles.2005.http://www.sciences.univ-nantes.fr/lina/atl/www/papers/IDM_2005_weaver.pdf[9]FabroMDD,JouaultF.ModeltransformationandweavingintheAMMAplatform.In:Proc.oftheGenerativeandTrans.TechniquesinSoftwareEngineering(GTTSE2005).2005.71−77.http://www.sciences.univ-nantes.fr/lina/atl/www/papers/CR_2005_GTTSE_transfo_weaving.pdf[10]OMG.Metaobjectfacility(MOF)specification,version1.4.OMGDocumentformal/2002-04-03,2002.http://www.omg.org/docs/formal/02-04-03.pdf[11]OMG.UML2.0OCLspecification.OMGDocumentptc/03-10-14,2003.http://www.omg.org/docs/ptc/03-10-14.pdf[12]DavidK,StuartA.Arelationalapproachtodefiningtransformationsinametamodel.In:HussmannH,JézéquelJM,CookS,eds.UML2002—TheUnifiedModelingLanguage5thInt’lConf.LNCS2460,Dresden:Springer-Verlag,2002,243−258. 王学斌等:一种模型转换的编织框架1435[13]BraunP,MarschallF.BOTLtheBidirectionalObjectOrientedTransformationLanguage.TUM-I0307:TechnischeUniversitätMünchen,2003.[14]ShaneS.Combininggenerativeandgraphtransformationtechniquesformodeltransformation:Aneffectivealliance?In:Proc.ofthe2ndOOPSLAWorkshoponGenerativeTechniquesinthecontextofModelDrivenArchitecture.Anaheim:ACMPress,2003.http://cui.unige.ch/~sendall/files/sendall-mda-workshop-OOPSLA03.pdf[15]KarsaiG,AgrawalA.GraphtransformationsinOMG’smodel-drivenarchitecture.In:LNCSvol.onApplicationsofGraphTrans.withIndustrialRelevance.Springer-Verlag,2003.[16]JouaultF,KurtevI.OnthearchitecturalalignmentofATLandQVT.In:Proc.oftheACMSymp.onAppliedComputing(SAC2006).Dijon:ACMPress,2006.[17]MilewskiM,RobertsG.Themodelweavingdescriptionlanguage(MWDL)—TowardsaformalaspectorientedlanguageforMDAmodeltransformations.In:Proc.ofthe1stWorkshoponModelsandAspects—HandlingCrosscuttingConcernsinMDSDAtthe19thEuropeanConf.onObject-OrientedProgramming.2005.http://www.st.informatik.tu-darmstadt.de:8080/ecoop2005/maw/acceptedPapers/Milewski.doc[18]JiangYB,XingCX.ThestateofartandroadmapofMDA.JournalofNanjingUniversity,2005,41(10):360−366(inChinesewithEnglishabstract).[19]MaZY,MaHH,ZhangNB,LaoZP,ZhuZG.DevelopmentofthesoftwaredevelopmentplatformbasedonUML2.0.JournalofNanjingUniversity,2005,41(10):374−381(inChinesewithEnglishabstract).[20]WangXB,WuQY,WangHM,ShiDX.ArelationalmodeltransformationapproachbetweenUMLmetamodelandSQLmetamodel.JournalofNanjingUniversity,2005,41(10):347−352(inChinesewithEnglishabstract).[21]ZhangW,MeiH,ZhaoHY,YangJ.TransformationfromCIMtoPIM:Afeature-orientedcomponent-basedapproach.In:WilliamsL,ClayB,eds.Proc.oftheMoDELS.LNCS3713,Jamaica:Springer-Verlag.2005.248−263.附中文参考文献:[2]孙昌爱,金茂忠,刘超.软件体系结构研究综述.软件学报,2002,13(7):1228−1237.http://www.jos.org.cn/1000-9825/13/1228.htm[18]蒋炎冰,邢春晓.模型驱动的体系结构研究综述.南京大学学报,2005,41(10):360−366.[19]麻志毅,马浩海,张能宾,劳卓鹏,朱志高.一个基于UML2.0的软件开发平台的研制.南京大学学报,2005,41(10):374−381.[20]王学斌,吴泉源,王怀民,史殿习.南京大学学报,2005,41(10):347−352.王学斌(1978-),男,湖北云梦人,博士生,主吴泉源(1942-),男,教授,博士生导师,主要要研究领域为软件工程,模型驱动架构.研究领域为智能软件,分布计算.王怀民(1962-),男,博士,教授,博士生导史殿习(1966-),男,博士,副研究员,主要研师,CCF高级会员,主要研究领域为分布式究领域为分布式计算.计算,人工智能,Agent计算.