ATL转换规则与嵌套的BPMN2元素

时间:2016-05-12 20:14:40

标签: eclipse-emf-ecore ecore bpmn.io eclipse-atl

我正在编写从BPMN2到另一个模型的ATL翻译。问题是代码没有检测到任何嵌套元素。

我已在以下网址发布了atl代码和我的输入:https://github.com/behnaaz/BPMN2ATL.git

您可以从输出中看到,唯一执行的规则是def2mod,它在输出中创建了一个Reo模块元素。

如果我删除输入bpmn文件中的第一级元素,则启动规则mapProcess。

同样在日志中,命令BPMN20!Process.allInstances()应该提供所有进程的列表,只能在mapProcess规则中使用。

我认为解析我的bpmn模型存在一些问题。非常感谢!

=== ATL CODE ====

-- @path BPMN20=/atttl/BPMN2/BPMN20.ecore
create OUT: reo from IN: BPMN20;

rule def2mod {
    from
        b: BPMN20!Definitions
    to
        m: reo!Module
    do {
        b.debug('definition to module > ' + BPMN20!Process.allInstances()); 
    }
}

rule mapProcess {
    from
        proc: BPMN20!Process
    to
        conn: reo!Connector
    do {
        proc.debug('process to connector ' + proc.name + proc.flowElements); 
        proc.debug( BPMN20!Process.allInstances());
    }
}

=== BPMN输入===

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:Definitions xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL-XMI">
  <bpmn2:Process id="bpmnid-80c796ae-c11d-42d8-92ae-1d88bab84536" name="Process" isClosed="false" processType="None" xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL-XMI">
    <bpmn2:serviceTask id="bpmnid-11047880-09d8-4147-8382-523145eeb8b6" name="Task 1"/>
    <bpmn2:serviceTask id="bpmnid-2f925dd9-4ec8-45b7-936c-0c14597319a9" name="Task 2"/>
    <bpmn2:serviceTask id="bpmnid-21a0fc44-3c02-4a00-9b6e-aa6c058992d3" name="Task 3"/>
    <bpmn2:startEvent id="bpmnid-196c656e-baa2-4306-809b-56ba006057b9" name="Start Event"/>
    <bpmn2:endEvent id="bpmnid-5cfcf354-ba3f-4b13-a5bf-bdf27ca70acc" name="End Event"/>
    <bpmn2:sequenceFlow id="bpmnid-be0a37d4-8054-4367-82ae-b43430d5fc6f" name="Sequence Flow0" sourceRef="bpmnid-11047880-09d8-4147-8382-523145eeb8b6" targetRef="bpmnid-2f925dd9-4ec8-45b7-936c-0c14597319a9"/>
    <bpmn2:sequenceFlow id="bpmnid-01d687a3-66ee-40d7-9e17-97aa5724eef7" name="Sequence Flow" sourceRef="bpmnid-196c656e-baa2-4306-809b-56ba006057b9" targetRef="bpmnid-11047880-09d8-4147-8382-523145eeb8b6"/>
    <bpmn2:sequenceFlow id="bpmnid-b687d3ec-b6d7-480a-a1e1-57fbe220e579" name="Sequence Flow2" sourceRef="bpmnid-21a0fc44-3c02-4a00-9b6e-aa6c058992d3" targetRef="bpmnid-5cfcf354-ba3f-4b13-a5bf-bdf27ca70acc"/>
    <bpmn2:sequenceFlow id="bpmnid-4596a8fb-f1dc-46b3-bc28-9a2e11c26f96" name="Sequence Flow1" sourceRef="bpmnid-2f925dd9-4ec8-45b7-936c-0c14597319a9" targetRef="bpmnid-21a0fc44-3c02-4a00-9b6e-aa6c058992d3"/>
  </bpmn2:Process>
</bpmn2:Definitions>

1 个答案:

答案 0 :(得分:1)

问题似乎不在于ATL转换,而在于输入模型。它似乎不符合您的元模型。

E.g。定义有一个关系&#34; rootElements&#34;处理。这应该在XMI模型中看起来像这样:

<bpmn2:Definitions 
    xmi:version="2.0" 
    xmlns:xmi="http://www.omg.org/XMI" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL-XMI">
    <rootElements xsi:type="bpmn2:Process" id="bpmnid-80c796ae-c11d-42d8-92ae-1d88bab84536" />
</bpmn2:Definitions>

要快速获得符合模型,您可以右键单击ecore元模型中的Definitions元素,然后选择&#34;创建动态实例&#34;。然后,您可以建模快速样本并再次运行转换。我很快就尝试了并获得了以下输出

<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:reo="http://www.cwi.nl/reo">
  <reo:Module/>
  <reo:Connector/>
</xmi:XMI>