2016-05-12 22 views
0

Ich schreibe eine ATL-Übersetzung von BPMN2 in ein anderes Modell. Das Problem besteht darin, dass der Code kein verschachteltes Element erkennt.ATL-Transformationsregeln stimmen nicht mit verschachtelten BPMN2-Elementen überein

Ich habe den ATL-Code und meine Eingabe geschrieben hier bei: https://github.com/behnaaz/BPMN2ATL.git

Sie aus der Ausgabe sehen, dass die einzige ausgeführte Regel def2mod ist, die ein Reo Modulelement in der Ausgabe erzeugt hat.

Wenn ich das erste Level-Element in der Eingabe BPMN-Datei entfernen dann die Regel mapProcess in gekickt.

auch in den Protokollen der Befehl BPMN20! Process.allInstances(), die eine Liste aller Prozesse geben sollte funktioniert nur in der mapProcess-Regel.

Ich denke, es gibt ein Problem mit der Analyse meines BPMN-Modells. Hilfe sehr geschätzt!

=== 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 Eingang ===

<?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

Auch in https://www.eclipse.org/forums/index.php/m/1732184/#msg_1732184 – BeC

Antwort

1

Das Problem ist nicht mit der ATL-Transformation, sondern mit dem Eingabemodell zu liegen scheint . Es scheint, als wäre es nicht konform mit deinem Metamodell.

z. Definitionen haben eine Beziehung "rootElements" zu Process. Dies sollte im XMI-Modell wie folgt aussehen:

<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> 

schnell einem Muster entsprechen, erhalten Sie mit der rechten Maustaste auf die Definitionen Element in Ihrem ecore Metamodell und wählen Sie „Erstellen von dynamischen Instanz“. Sie können dann ein schnelles Beispiel modellieren und die Umwandlung erneut ausführen. Ich versuchte es schnell und bekam

<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

Vielen Dank für Ihre Antwort PogoMips folgende Ausgabe geschrieben. Der Ansatz, den Sie vorschlagen, funktioniert für die Eingabedatei so, wie Sie es erläutert haben. Aber wenn ich ein anderes BPMN2-Modell erhalte, das von verschiedenen Tools erzeugt wird, einschließlich dem Eclipse BPMN-Editor und bpmn.io, wird es nicht von meiner ATL-Regel analysiert. – BeC

+0

Ich kann nur sehen, dass BPMN-Editoren Modelle erzeugen, die nicht dem BPMN20.ecore-Metamodell entsprechen, zum Beispiel ist die Ausgabe von bpmn.io genau gemäß BPMN20.ecore korrekt. Es scheint nicht von ihrem Quellcode in GitHub, dass sie einen modellbasierten Ansatz haben. – BeC

+1

Hallo Behnaz, ja das könnte wahr sein. Abhängig davon, woher dein ecore-Metamodell stammt (z. B. hast du es selbst erstellt oder wurde es von jemandem zur Verfügung gestellt?), Könnte es sich von den Metamodell-BPMN-Editoren unterscheiden. Wie Sie sagten, ist es unwahrscheinlich, dass sie modellgetriebene Ansätze verwenden. Wenn Sie viele vorhandene Modelle haben, für die eine manuelle Umgestaltung nicht möglich ist, können Sie xslt-Transformationen verwenden, um gültige Modelle zu generieren. Beispiel: -> PogoMips