CN106951305B - 一种基于模型转换由QVT-R语言生成midCore脚本的方法 - Google Patents
一种基于模型转换由QVT-R语言生成midCore脚本的方法 Download PDFInfo
- Publication number
- CN106951305B CN106951305B CN201710180952.XA CN201710180952A CN106951305B CN 106951305 B CN106951305 B CN 106951305B CN 201710180952 A CN201710180952 A CN 201710180952A CN 106951305 B CN106951305 B CN 106951305B
- Authority
- CN
- China
- Prior art keywords
- model
- qvt
- midcore
- code
- generating
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明基于模型转换由QVT‑R代码生成midCore脚本的方法,步骤1对QVT‑R语言进行设计和裁剪;步骤2获取符合步骤1规则面向数据转换的QVT‑R代码;步骤3通过Xtext为QVT‑R语言建模,构建编辑器、解析器及语法分析树;步骤4利用Xtend根据步骤3匹配得到的语法分析树,解析QVT‑R代码语义,并生成对应的midCore语句;步骤5将步骤2获得的QVT‑R代码作为输入,转换引擎生成midCore脚本。本发明将描述数据转换的QVT‑R代码自动转换成midCore脚本,降低了使用midCore程序成本,减少了编写midCore代码缺陷,更直观描述数据变换逻辑,降低大数据处理难度和成本。
Description
技术领域
本发明涉及一种代码生成方法,主要利用模型转换技术来实现由QVT-R语言自动化生成midCore脚本的任务,属于计算机技术、模型转换技术、领域特定语言和代码生成技术的交叉技术应用领域。
背景技术
模型转换技术是模型驱动软件开发中的重要一环,后者以模型为软件开发的核心制品,并提升模型在开发过程中的作用,利用模型指导开发人员对于软件系统的理解、设计、构造、维护和演化,从而提高软件的开发和维护效率,进而降低成本。模型转换用于将开发过程中的一个模型自动或者半自动的转换成另一个模型,从而推动整个开发过程的进行。它通常由模型、模型转换程序和模型转换引擎构成。其中模型分为源模型、源元模型、目标模型、目标元模型。元模型是模型的抽象,将作为模型转换程序的输入输出,而模型是元模型的实例,将作为模型转换引擎的输入输出;模型转换程序用于描述模型转换过程中输入输出模型转换规则,可以由多种模型转换语言表达;模型转换引擎是用来执行模型转换程序的程序,它将源模型按照模型转换规则进行处理得到目标模型。
计算机领域存在大量的领域特定语言(Domain Specific Language,简称DSL),它们通常用于处理各种领域特定问题,如本发明中涉及到的QVT-R(Qurey/View/Transformation-Relation)语言是一种用于描述模型转换规则的语言,它是一种声明式模型转换语言,由OMG(Object Management Group)标准化组织管理,具体可详见《Documentsassociated with Meta Objet Facility(MOF)2.0Query/View/Transformation,v1.3》http://www.omg.org/spec/QVT/1.3/。本发明中涉及的midCore脚本则是另一种DSL,它是由南京大学软件工程组设计的一种面向大数据转换的领域特定语言,提供了数据模型描述、匹配、转换等操作算子,可以向多个大数据处理平台自动化映射,从而更加简便的完成大数据处理任务。以上两种语言可以分别看成模型转换的输入模型和输出模型。
Xtext是基于Eclipse的开发领域特定语言的开源框架,是一种模型转换领域中成熟的模型转换引擎。该工具可以通过用户定义一套DSL的语法,高度自动化地创建出该DSL的编辑器、解析器。利用Xtend模块,还可以完成代码生成的任务。本发明利用Xtext框架通过解析QVT-R语言生成midCore脚本。
发明内容
技术问题:本发明提出一种基于模型转换由QVT-R代码生成midCore脚本的方法,利用模型驱动开发思想解决midCore特定领域知识造成使用困难的问题,使得开发人员可以通过编写直观的模型转换代码,自动生成面向大数据处理的midCore脚本,进而完成数据处理任务。
技术方案:本发明所述的基于模型转换由QVT-R代码生成midCore脚本的方法,流程如下:
步骤1、面向大数据转换方向对QVT-R语言进行设计和裁剪。
本发明所述的QVT-R属于原QVT-R语言的子集,这是由于该发明面向大数据转换领域,原QVT-R的表达能力存在冗余,这里对其进行了部分限制,因此无法直接复用原来的语法,需要进一步设计。
步骤11、不支持extends、overrides、implementedby、where、query关键字及其相关语句;
步骤12、规定Transformation语句的参数只允许使用sourceX、targetY作为元模型的名称,其中source表示源元模型,target表示目标元模型,X/Y表示0、1、2、……序号;
步骤13、规定source域的限定描述符只能是checkonly,target域的限定描述符只能是enforce;
步骤14、规定必须使用中间变量来绑定源模型和目标模型的属性值;
步骤15、除步骤11~14规定外,其它语法均与官方QVT-R相同,所有语义与官方QVT-R相同;
步骤2、获取满足步骤1定义的QVT-R代码,作为代码生成的输入数据。
所述QVT-R代码属于领域特定语言程序,相关领域人员理解,如何获取不在本发明的讨论范围内。
步骤3、使用Xtext对QVT-R语言建模,构建QVT-R语言的代码编辑器、解析器和语法分析树。
步骤31、依据Xtext语法要求,设计import语句结构,用于描述元模型文件的路径和名称;
步骤32、设计Transformation语句结构,用于描述模型转换名称、输入输出模型。且其中应包含所有非import语句;
步骤33、设计key语句结构,用于描述模型的主键属性;
步骤34、设计relation语句结构,用于描述两个模型之间的模型转换规则,其中应包含所有的属性绑定和赋值语句;
步骤35、设计属性绑定和赋值语句结构,用于描述目标模型和源模型的对应关系;
步骤36、设计when语句结构,用于描述多条relation相互间依赖关系;
步骤4、利用Xtend根据步骤3匹配得到的语法分析树,解析QVT-R代码语义,并生成对应的midCore语句。
步骤41、读取QVT-R的Transformation语句,并构建midCore脚本的模型描述和转换模块。
步骤42、读取QVT-R的import语句,生成midCore数据模型描述模块。
步骤421、根据import语句提供的路径获取元模型文件;
步骤422、用Dom4j解析元模型文件,提取模型的名称、类型和从属关系,并生成midCore的模型描述语句;
所述Dom4j是一个用于处理XML数据的解析工具,详细信息查看http:// dom4j.sourceforge.net/dom4j-1.6.1/index.html。
步骤43、读取QVT-R的key语句,根据属性生成midCore的deduplicate算子,写入模型转换模块。
步骤44、依次读取QVT-R的source域。
步骤441、若属性与中间变量绑定,则使用哈希表记录中间变量与源模型属性的对应关系;
步骤442、若属性由定值限制,则根据属性、定值和限制符生成midCore的filter算子,并顺序写入模型转换模块;
步骤45、若存在多个source域,使用列表记录共同使用的中间变量,然后根据这些中间变量生成midCore的join算子。
步骤46、依次读取QVT-R的target域,生成midCore模型转换逻辑。
步骤461、构建midCore的generate算子;
步骤462、根据中间变量和哈希表,获取源模型属性,并作为参数传入;
步骤463、依次读取属性赋值语句,生成midCore的expression算子;
步骤5、运行Xtext程序,将出现一个代码编辑器,通过将步骤2获得的QVT-R代码填入和运行,将在src-gen文件夹中看到生成的midCore脚本。
有益效果:本发明所述的基于模型转换由QVT-R代码生成midCore脚本的方法具有以下技术效果:
1、本发明方法使用户无需了解midCore代码细节,只需编写直观的模型转换程序作为系统输入,将自动生成可用的midCore脚本,进一步降低了大数据处理的门槛。
2、本发明利用模型转换技术,通过将QVT-R代码和midCore代码模型化,使系统直观易理解,具有较高的可维护性。
3、本发明所述代码生成方法高度自动化,生成的midCore代码执行可靠,可以有效减少midCore代码缺陷。
附图说明
图1是本发明实施例的QVT-R代码转换为midCore脚本的流程示意图。
图2是本发明实施例的经过设计裁剪后的QVT-R文法。
图3是本发明实施例的利用Xtext对QVT-R语言部分建模内容。
图4是本发明实施例的一段用于数据转换的QVT-R代码片段。
图5是由图4的代码生成的midCore脚本片段。
具体实施方式
下面结合附图对本发明作更详细的描述。
本发明建立在模型转换技术的基础上,利用QVT-R代码生成midCore脚本,从而降低了开发人员使用midCore完成大数据处理的学习成本,同时利用QVT-R的模型转换思想专注于描述数据转换的逻辑而非代码细节,从而更快更精确的完成数据转换任务。图1是本发明实施例的整体流程框架,本实施例的基于模型转换由QVT-R代码生成midCore脚本的方法,通过对QVT-R和midCore建模,使用Xtext构建模型转换引擎,实现了midCore脚本的自动化生成。包括以下步骤:
步骤1、面向大数据转换方向对QVT-R语言进行设计和裁剪。
步骤2、获取满足步骤1定义的QVT-R代码,作为代码生成的输入数据。
步骤3、使用Xtext对QVT-R语言建模,并生成相应的编辑器、解析器和语法分析树。
步骤4、利用Xtend根据步骤3匹配得到的语法分析树,解析QVT-R代码语义,并生成对应的midCore语句。Xtend模块描述了QVT-R与midCore语言的转换关系,建立了QVT-R与midCore代码的映射规则。
步骤5、运行Xtext程序,将出现一个代码编辑器,通过将步骤2获得的QVT-R代码填入和运行,将在src-gen文件夹中看到生成的midCore脚本。
其中在步骤1中所述对QVT-R语言进行设计和裁剪,指的是由于本发明是面向大数据转换领域,原QVT-R的表达能力存在冗余,如果不加限制会增加工具的复杂性,部分表达能力会造成无法与大数据变换操作对应的问题,同时需要增加部分标识变量以便识别转换方向,因此这里对其进行了设计裁剪,其步骤如下所示,其最终裁剪结果如图2所示:
步骤11、不支持extends、overrides、implementedby、where、query关键字及其相关语句;
步骤12、规定Transformation语句的参数只允许使用sourceX、targetY作为元模型的名称,其中source表示源元模型,target表示目标元模型,X/Y表示0、1、2、……序号;
步骤13、规定source域的限定描述符只能是checkonly,target域的限定描述符只能是enforce;
步骤14、规定必须使用中间变量来绑定源模型和目标模型的属性值;
步骤15、除步骤11~14规定外,其它语法均与官方QVT-R相同,所有语义与官方QVT-R相同。
其中步骤2所述QVT-R代码属于领域特定语言程序,相关领域人员理解,如何获取不在本发明的讨论范围内,图4是本例中获取的一份QVT-R代码片段,描述了两张表的筛选、合并的过程。
其中步骤3所述的Xtext建模,是利用Xtext语法描述步骤1中所定义的QVT-R语法,其过程如下:
步骤31、依据Xtext语法要求,设计import语句结构,用于描述元模型文件的路径和名称;
步骤32、设计Transformation语句结构,用于描述模型转换名称、输入输出模型。且其中应包含所有非import语句,图3展示了Xtext语法的表达;
步骤33、设计key语句结构,用于描述模型的主键属性;
步骤34、设计relation语句结构,用于描述两个模型之间的模型转换规则,其中应包含所有的属性绑定和赋值语句;
步骤35、设计属性绑定和赋值语句结构,用于描述目标模型和源模型的对应关系;
步骤36、设计when语句结构,用于描述多条relation相互间依赖关系;
其中步骤4中,使用Xtend模块描述了QVT-R和midCore的映射规则,其处理流程如下:
步骤41、读取QVT-R的Transformation语句,并构建midCore脚本的模型描述和转换模块。
步骤42、读取QVT-R的import语句,生成midCore数据模型描述模块。
步骤421、根据import语句提供的路径获取元模型文件;
步骤422、用Dom4j解析元模型文件,提取模型的名称、类型和从属关系,并生成midCore的模型描述语句;
所述Dom4j是一个用于处理XML数据的解析工具,详细信息查看http:// dom4j.sourceforge.net/dom4j-1.6.1/index.html。
步骤43、读取QVT-R的key语句,根据属性生成midCore的deduplicate算子,写入模型转换模块。
步骤44、依次读取QVT-R的source域。
步骤441、若属性与中间变量绑定,则使用哈希表记录中间变量与源模型属性的对应关系;
步骤442、若属性由定值限制,则根据属性、定值和限制符生成midCore的filter算子,并顺序写入模型转换模块;
步骤45、若存在多个source域,使用列表记录共同使用的中间变量,然后根据这些中间变量生成midCore的join算子。
步骤46、依次读取QVT-R的target域,生成midCore模型转换逻辑。
步骤461、构建midCore的generate算子;
步骤462、根据中间变量和哈希表,获取源模型属性,并作为参数传入;
步骤463、依次读取属性赋值语句,生成midCore的expression算子;
其中步骤5以步骤2所获取的QVT-R作为输入,以Xtext框架生成的Eclipse工具作为模型转换引擎,最终生成了相应的midCore脚本,如图5所示。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (3)
1.一种基于模型转换由QVT-R代码生成midCore脚本的方法,其特征在于:包括如下步骤:
步骤1、面向大数据转换方向对QVT-R语言进行设计裁剪;
步骤2、获取满足步骤1定义的QVT-R代码,作为代码生成的输入数据;
步骤3、使用Xtext对QVT-R语言建模,并生成相应的编辑器、解析器和语法分析树;
步骤4、利用Xtend根据步骤3匹配得到的语法分析树,解析QVT-R代码语义,并生成对应的midCore语句;
所述步骤4的设计过程包括:
步骤41、读取QVT-R的Transformation语句,并构建midCore脚本的模型描述和转换模块;
步骤42、读取QVT-R的import语句,生成midCore数据模型描述模块;
步骤421、根据import语句提供的路径获取元模型文件;
步骤422、用Dom4j解析元模型文件,提取模型的名称、类型和从属关系,并生成midCore的模型描述语句;
步骤43、读取QVT-R的key语句,根据属性生成midCore的deduplicate算子,写入模型转换模块;
步骤44、依次读取QVT-R的source域;
步骤441、若属性与中间变量绑定,则使用哈希表记录中间变量与源模型属性的对应关系;
步骤442、若属性由定值限制,则根据属性、定值和限制符生成midCore的filter算子,并顺序写入模型转换模块;
步骤45、若存在多个source域,使用列表记录共同使用的中间变量,然后根据这些中间变量生成midCore的join算子;
步骤46、依次读取QVT-R的target域,生成midCore模型转换逻辑;
步骤461、构建midCore的generate算子;
步骤462、根据中间变量和哈希表,获取源模型属性,并作为参数传入;
步骤463、依次读取属性赋值语句,生成midCore的expression算子;
步骤5、运行Xtext程序,将出现一个代码编辑器,通过将步骤2获得的QVT-R代码填入和运行,将在src-gen文件夹中看到生成的midCore脚本;
所述步骤5中需要将步骤2获取的QVT-R代码作为输入,将Xtext框架构建的Eclipse工具作为模型转换引擎,运行程序会在src-gen文件夹中看到生成的midCore脚本。
2.根据权利要求1所述的方法,其特征在于:所述步骤1的设计裁剪过程包括:
步骤11、不支持extends、overrides、implementedby、where、query关键字及其相关语句;
步骤12、规定Transformation语句的参数只允许使用sourceX、targetY作为元模型的名称,其中source表示源元模型,target表示目标元模型,X/Y表示0、1、2、……序号;
步骤13、规定source域的限定描述符只能是checkonly,target域的限定描述符只能是enforce;
步骤14、规定必须使用中间变量来绑定源模型和目标模型的属性值;
步骤15、除步骤11~14规定外,其它语法均与官方QVT-R相同,所有语义与官方QVT-R相同。
3.根据权利要求1所述的方法,其特征在于:所述步骤3的建模过程如下:
步骤31、依据Xtext语法要求,设计import语句结构,用于描述元模型文件的路径和名称;
步骤32、设计Transformation语句结构,用于描述模型转换名称、输入输出模型,且其中应包含所有非import语句;
步骤33、设计key语句结构,用于描述模型的主键属性;
步骤34、设计relation语句结构,用于描述两个模型之间的模型转换规则,其中应包含所有的属性绑定和赋值语句;
步骤35、设计属性绑定和赋值语句结构,用于描述目标模型和源模型的对应关系;
步骤36、设计when语句结构,用于描述多条relation相互间依赖关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710180952.XA CN106951305B (zh) | 2017-03-24 | 2017-03-24 | 一种基于模型转换由QVT-R语言生成midCore脚本的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710180952.XA CN106951305B (zh) | 2017-03-24 | 2017-03-24 | 一种基于模型转换由QVT-R语言生成midCore脚本的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106951305A CN106951305A (zh) | 2017-07-14 |
CN106951305B true CN106951305B (zh) | 2020-07-31 |
Family
ID=59472819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710180952.XA Active CN106951305B (zh) | 2017-03-24 | 2017-03-24 | 一种基于模型转换由QVT-R语言生成midCore脚本的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106951305B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107273143A (zh) * | 2017-07-26 | 2017-10-20 | 北京计算机技术及应用研究所 | 一种基于Xtext的特定领域语言的软件工程设计方法 |
CN108153522B (zh) * | 2017-12-25 | 2020-05-05 | 南京大学 | 基于模型转换由midcore生成Spark和Hadoop程序代码的方法 |
CN110543297B (zh) * | 2018-05-28 | 2021-03-30 | 北京京东尚科信息技术有限公司 | 用于生成源码的方法和装置 |
CN109522319A (zh) * | 2018-11-12 | 2019-03-26 | 北京懿医云科技有限公司 | 基于dsl的数据映射方法及装置、电子设备、存储介质 |
CN113127442B (zh) * | 2020-01-10 | 2023-12-22 | 马上消费金融股份有限公司 | 数据模型的可视化的方法、装置及存储介质 |
CN112083921B (zh) * | 2020-09-10 | 2023-12-19 | 之江实验室 | 一种基于声明式语法的两层可视化联动编排方法及系统 |
CN113485182A (zh) * | 2021-06-30 | 2021-10-08 | 中冶华天工程技术有限公司 | 自动生成料场皮带流程控制程序的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770363A (zh) * | 2005-06-27 | 2010-07-07 | 奎朴兹有限公司 | 代码转换 |
CN102799462A (zh) * | 2011-05-27 | 2012-11-28 | 深圳市金蝶中间件有限公司 | 基于Eclipse平台的脚本引擎装置及Eclipse平台的配置方法 |
CN104679511A (zh) * | 2015-02-10 | 2015-06-03 | 北京系统工程研究所 | 基于MDE模型转换的MapReduce代码生成方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8869098B2 (en) * | 2007-12-05 | 2014-10-21 | International Business Machines Corporation | Computer method and apparatus for providing model to model transformation using an MDA approach |
-
2017
- 2017-03-24 CN CN201710180952.XA patent/CN106951305B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101770363A (zh) * | 2005-06-27 | 2010-07-07 | 奎朴兹有限公司 | 代码转换 |
CN102799462A (zh) * | 2011-05-27 | 2012-11-28 | 深圳市金蝶中间件有限公司 | 基于Eclipse平台的脚本引擎装置及Eclipse平台的配置方法 |
CN104679511A (zh) * | 2015-02-10 | 2015-06-03 | 北京系统工程研究所 | 基于MDE模型转换的MapReduce代码生成方法 |
Non-Patent Citations (1)
Title |
---|
基于QVT的MOF模型转换技术的研究与实现;王宁波;《中国优秀硕士学位论文全文数据库(信息科技辑)》;20160715;第40-42页、图5-1 * |
Also Published As
Publication number | Publication date |
---|---|
CN106951305A (zh) | 2017-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951305B (zh) | 一种基于模型转换由QVT-R语言生成midCore脚本的方法 | |
US10162610B2 (en) | Method and apparatus for migration of application source code | |
US10324695B2 (en) | Method for transforming first code instructions in a first programming language into second code instructions in a second programming language | |
Haber et al. | Engineering delta modeling languages | |
CN106648662B (zh) | 基于工程造价计算描述语言bcl的报表生成装置及生成方法 | |
CN110673854A (zh) | Sas语言编译方法、装置、设备及可读存储介质 | |
JP6479184B2 (ja) | コンピュータ実行可能なモデルリバースエンジニアリング方法及び装置 | |
CN101185116A (zh) | 在软件程序中使用强数据类型表示语音识别语法 | |
Cánovas Izquierdo et al. | A domain specific language for extracting models in software modernization | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
US10474435B2 (en) | Configuration model parsing for constraint-based systems | |
CN105556504A (zh) | 从物理流生成逻辑表示 | |
Santurkar et al. | Stormgen-a domain specific language to create ad-hoc storm topologies | |
Rahman et al. | A DSL for importing models in a requirements management system | |
JP2011515755A (ja) | 予約されたコンポーネントコンテナ基盤ソフトウェアの開発方法及び装置 | |
Thalheim | From Models_For_Programming to Modelling_To_Program and Towards Models_As_A_Program | |
US20220075796A1 (en) | Architecture for data map converters | |
Giachetti et al. | Integration of domain-specific modelling languages and UML through UML profile extension mechanism. | |
Meedeniya | Correct model-to-model transformation for formal verification | |
CN113885844A (zh) | 一种业务服务编排方法及相关装置 | |
Pais et al. | From SysML state machines to petri nets using ATL transformations | |
Mascarenhas et al. | Mtp: Model transformation profile | |
Mani | A configuration-based domain-specific rule generation framework for process model customization | |
KR101974804B1 (ko) | 플로우 다이어그램 생성 방법 및 이를 실행하는 장치 | |
Alfonso Hoyos et al. | Fast prototyping of web-based information systems using a restricted natural language specification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |