ATL转换规则不匹配嵌套的BPMN2元素
我正在写一个从BPMN2到另一个模型的ATL转换。问题是代码没有检测到任何嵌套元素。ATL转换规则不匹配嵌套的BPMN2元素
我已经发布了ATL代码和我的投入在这里:https://github.com/behnaaz/BPMN2ATL.git
您可以从输出中看到,只有执行的规则是创造了在输出呼肠孤模块元素def2mod。
如果我删除了第一级别的元素在输入BPMN文件则该规则mapProcess被踢。
另外在日志中的命令BPMN20!Process.allInstances()这应该给所有进程的列表只适用于mapProcess规则。
我认为解析我的bpmn模型存在一些问题。非常感谢!
=== ATL代码====
-- @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>
这个问题似乎不说谎与ATL改造但与输入模型。它看起来不符合你的元模型。
E.g.定义与流程的“rootElements”关系。这应该在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元模型,你可以用鼠标右键单击定义元素,然后选择“创建动态实例”。然后,您可以建模一个快速样本并再次运行您的转换。我赶紧试了一下,得到了下面的输出
<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>
谢谢您的回答PogoMips。您建议您为输入文件工作的方法以您解释的方式创建。但是,当我获得由包括Eclipse BPMN编辑器和bpmn.io在内的不同工具生成的任何其他BPMN2模型时,它将不会被我的ATL规则解析。 – BeC
所有我可以看到,BPMN编辑器生成的模型不符合BPMN20.ecore元模型,例如bpmn.io的输出根据BPMN20.ecore正确。从github的源代码看,他们似乎没有基于模型的方法。 – BeC
嗨贝赫纳兹,是的,这可能是真的。根据您的ecore元模型来自哪里(例如,您自己创建了它,还是由某人提供?),它可能与BPMN编辑将使用的元模型不同。正如你所说,他们不太可能使用模型驱动的方法。如果您有许多现有的模型不适合手动对其进行重新编程,则可以使用xslt转换生成有效的模型。例如:
还张贴在https://www.eclipse.org/forums/index.php/m/1732184/#msg_1732184 – BeC