2016-05-12 112 views
0

我正在寫一個從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> 
+0

還張貼在https://www.eclipse.org/forums/index.php/m/1732184/#msg_1732184 – BeC

回答

1

這個問題似乎不說謊與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> 
+0

謝謝您的回答PogoMips。您建議您爲輸入文件工作的方法以您解釋的方式創建。但是,當我獲得由包括Eclipse BPMN編輯器和bpmn.io在內的不同工具生成的任何其他BPMN2模型時,它將不會被我的ATL規則解析。 – BeC

+0

所有我可以看到,BPMN編輯器生成的模型不符合BPMN20.ecore元模型,例如bpmn.io的輸出根據BPMN20.ecore正確。從github的源代碼看,他們似乎沒有基於模型的方法。 – BeC

+1

嗨貝赫納茲,是的,這可能是真的。根據您的ecore元模型來自哪裏(例如,您自己創建了它,還是由某人提供?),它可能與BPMN編輯將使用的元模型不同。正如你所說,他們不太可能使用模型驅動的方法。如果您有許多現有的模型不適合手動對其進行重新編程,則可以使用xslt轉換生成有效的模型。例如: - > PogoMips