2016-05-12 3 views
0

J'écris une traduction ATL de BPMN2 vers un autre modèle. Le problème est que le code ne détecte aucun élément imbriqué.Les règles de transformation ATL ne correspondent pas aux éléments BPMN2 imbriqués

J'ai posté le code atl et mon entrée ici à: https://github.com/behnaaz/BPMN2ATL.git

Vous pouvez voir à la sortie que la seule règle est exécutée def2mod qui a créé un élément de module Reo dans la sortie.

Si je retire le premier élément de niveau dans le fichier bpmn d'entrée, puis la règle mapProcess est botté dans.

également dans les journaux la commande BPMN20! Process.allInstances() qui devrait donner une liste de tous les processus ne fonctionne que dans la règle mapProcess.

Je pense qu'il y a un problème avec l'analyse de mon modèle bpmn. Aide beaucoup apprécié!

=== 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()); 
    } 
} 

=== entrée 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

Également publié dans https://www.eclipse.org/forums/index.php/m/1732184/#msg_1732184 – BeC

Répondre

1

Le problème ne semble pas se trouver à la transformation ATL, mais avec le modèle d'entrée . Il semble que ce n'est pas conforme à votre métamodèle.

E.g. Définitions a une relation "rootElements" à traiter. Cela devrait dans le modèle XMI ressembler à ceci:

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

Pour obtenir rapidement un modèle, vous pouvez conformer le bouton droit sur l'élément Définitions dans votre métamodèle ecore et choisissez « Créer instance dynamique ». Vous pouvez ensuite modéliser un exemple rapide et réexécuter votre transformation. Je l'ai essayé rapidement et a obtenu la sortie suivante

<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

Merci pour votre réponse PogoMips. L'approche que vous proposez pour le fichier d'entrée a été créée de la manière que vous avez expliquée. Mais lorsque je reçois un autre modèle BPMN2 généré par différents outils, y compris l'éditeur Eclipse BPMN et bpmn.io, il ne sera pas analysé par ma règle ATL. – BeC

+0

Tout ce que je peux voir que les éditeurs BPMN génèrent des modèles qui ne sont pas conformes au méta-modèle BPMN20.ecore, par exemple la sortie de bpmn.io est juste correcte selon BPMN20.ecore. Il ne semble pas de leur code source dans github qu'ils ont une approche basée sur un modèle. – BeC

+1

Salut Behnaz, oui c'est peut-être vrai. En fonction de l'origine de votre métamodèle ecore (par exemple, avez-vous créé le métamodèle vous-même, ou a-t-il été fourni par quelqu'un?), Cela pourrait être différent du métamodèle utilisé par les éditeurs BPMN. Comme vous l'avez dit, il est peu probable qu'ils utilisent des approches fondées sur des modèles. Si vous avez beaucoup de modèles existants pour lesquels il n'est pas possible de les remodeler manuellement, vous pouvez utiliser des transformations xslt pour générer des modèles valides. Exemple: -> PogoMips