Bonjour,

Je tente de faire une transformation ATL d'un modèle BPMN vers un modèle réseau de Pétri.

Dans le cas où on a une TasktoTask (l'arc qui est entre 2 tâches), il est transformé en 2 arcs + 1 place (puisque en réseau de Pétri, il faut avoir toujours une place entre 2 transitions qui sont la correspondance d'une tâche).

Cette place que je veux créer est une place intermédiaire qui prend comme entrée l'arc qui est entre les 2 tâches. Le problème est qu'en sortie, elle prend un nouvel arc que je crée également. Ce dernier ayant besoin que je lui indique qu'il commence à partir de cette nouvelle place pour créer la 2ème tâche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
rule Place {
    from
        g : bpmn3!Event
    to
        p : PetriNet!Place
        (
            location <- g.location,
            name <- g.name,
            net <- g.process,
            incomingArc <- g.incomingConnections,
            outgoingArc <- g.outgoingConnections
        )
}
-- task to transition
rule Transition {
    from
        g : bpmn3!Task 
    to
        p : PetriNet!Transition
        (
            location <- g.location,
            name <- g.name,
            net <- g.process,
            incomingArc <- g.incomingConnections or g.incomingConnectionst,
            outgoingArc <- g.outgoingConnections or g.outgoingConnectionst
        )
}
 
rule PlaceToTransition {
    from
        g : bpmn3!EventtoTask 
    to
        p : PetriNet!PlaceToTransition
        (
            location <- g.location,
            name <- g.name,
            net <- g.process,
            "from" <- g."from",
            "to" <- g."to"
        )
}
 
rule TransitionToPlace {
    from
        g : bpmn3!TasktoEvent 
    to
        p : PetriNet!TransitionToPlace
        (
            location <- g.location,
            name <- g.name,
            net <- g.process,
            "from" <- g."from",
            "to" <- g."to"
        )
}
 
rule TransitionToTransition {
    from
        g : bpmn3!TasktoTask
    to
        p : PetriNet!TransitiontoPlace
        (
            location <- g.location,
            name <- g.name,
            net <- g.process,
            "from" <- g."from",
            "to" <- r.Place  
        ),    
 
        q : PetriNet!PlaceToTransition
        (
            location <- g.location,
            name <- g.name + '2',
            net <- g.process,
            "from" <- r.Place, 
            "to" <- g."to"
        ),
 
        r : PetriNet!Place
        (
            location <- g.location,
            name <- g.name + 'place',
            net <- g.process,
            incomingArc <- p.outgoingConections,  
            outgoingArc <- q.incomingConnections 
        )
}
Quelqu'un saurait-il m'indiquer comment faire ?

Merci d'avance pour votre aide.