reconciling tggs with qvt - mcgill universitymsdl.cs.mcgill.ca/conferences/campam/.../qvttgg.pdf ·...

Post on 22-Sep-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

A Study of Model Transformation Technologies:

Reconciling TGGs with QVTJoel Greenyer

Diploma Thesis supervised by Dr. Ekkart Kindler and Robert Wagner

Software Engineering Group

2007 Bellairs

CAMPaM Workshop

2

Example: ComponentTools To Petrinet

Track

Track

Project Petrinet

3

Example: ComponentTools To Petrinet

Track

Track

Project Petrinet

Track

Project Petri net

context

relation/transformation

● Example Rule: TrackToPlaceArcTransition– Declarative– Relational– Graph-pattern-

based

4

Example: ComponentTools To Petrinet

Track

Project Petri net

context

relation/transformation

● Example Rule: TrackToPlaceArcTransition– Declarative– Relational– Graph-pattern-

based

Track

Track

Project Petri net

Track

Track

Project Petri net

5

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

left

right

Track

Project Petri net

context

relation/transformation

● The correspondingTGG rule:

6

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

left

right

project:Project petrinet:PetrinetprToPn:ProjectToPetrnet

::= ::= ::=

7

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

left

right

Track

Project Petri net

context

relation/transformation

● The correspondingTGG rule:

8

TGG Rule TrackToPlaceArcTransition

Track

Project Petri net

context

relation/transformation

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

++

++

++

++

++

++ ++

++

++

● The correspondingTGG rule:

9

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

++

++

++

++

++

++ ++

++

++

Track

Track

Project Petri net

Track

Track

Project Petri net

10

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

++

++

++

++

++

++ ++

++

++

Track

Track

Project Petri net

Track

Track

Project Petri net

bound?

11

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

++

++

++

++

++

++ ++

++

++

Track

Track

Project Petri net

Track

Track

Project Petri net

unbound?

bound?

12

TGG Rule TrackToPlaceArcTransition

project:Project

track:Track

inPort:Port

outPort:Port

petrinet:Petrinet

place:Place

arc:Arc

tr...:Transition

prToPn:ProjectToPetrnet

outPortToTrans:OutPortToTransition

trackToPAT:TrackToPAT

inPortToPlace:InPortToPlace

ctools correspondence pnet

++

++

++

++

++

++ ++

++

++

Track

Track

Project Petri net

Track

Track

Project Petri net

unbound?

bound?

create!

13

QVT Overview

● Model Transformation Approaches in MDD and MDA– Many techniques, different strenghts and weaknesses

● OMG's QVT (Query/Views/Transformations)[2]

– Result of selecting and merging different approaches– Combination of declarative and imperative languages– Focus on declarative languages

Operational Black Box

Relations

Core

RelationsToCoreTransformation

14

QVT-Core vs. TGGs – Short Comparison

● Structurally similar rules

domain A correspondence domain B

++

++

++

++

++

++

++

precnd.

create++ ++

● Graph structure: Nodes and Edges

● Multiple Correspondence Nodes

domain A mapping domain B

guard

bottom

● Graph structure: Variables and OCL-Predicates

● One Trace Class

QVT-Core* TGG

*:QVT-Core does not specify a graphical notation

15

QVT-Core vs. TGGs – Short Comparison

● Structurally similar rulesQVT-Core TGG

map TrackToPlaceArcTransition{ check ctools(project:Project){ track:Track, portIn:Port| track.project = project; track.port = portIn; track.port = portOut; } check enforce pnet(petrinet:Petrinet){ realize place:Place, ...

● Graph structure: Nodes and Edges

● Multiple Correspondence Nodes

● Graph structure: Variables and OCL-Predicates

● One Trace Class

domain A correspondence domain B

++

++

++

++

++

++

++

precnd.

create++ ++

16

Mapping QVT to TGGs

● Main focus: Mapping QVT-Core to TGG– Realized through a TGG transformation– For fundamental pattern structure expressions

QVT-Core TGG

17

Mapping QVT to TGGs

● Main focus: Mapping QVT-Core to TGG– Realized through a TGG transformation– For fundamental pattern structure expressions

● Approach presented: QVT-Relations to TGG● Learn from QVT: More usable “TGG++”?

QVT-Relations

QVT-Core

TGG++

TGG

18

QVT Relation TrackToPlaceArcTransition

Track

Project Petri net

context

relation/transformation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr..:Transition

c e<<domain>> <<domain>>ctools pnet

whenProjectToPetrinet(pr, pn);

Relation TrackToPlaceArcTransition

19

QVT Relation TrackToPlaceArcTransition

Track

Project Petri net

context

relation/transformation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr..:Transition

c e<<domain>> <<domain>>ctools pnet

whenProjectToPetrinet(pr, pn);

Relation TrackToPlaceArcTransition

pr:Project pn:Petrinete e

<<domain>> <<domain>>ctools pnet

ProjectToPetrinet

20

QVT Relation TrackToPlaceArcTransition

Track

Project Petri net

context

relation/transformation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr..:Transition

c e<<domain>> <<domain>>ctools pnet

whenProjectToPetrinet(pr, pn);

Relation TrackToPlaceArcTransition

pr:Project pn:Petrinete e

<<domain>> <<domain>>ctools pnet

ProjectToPetrinet

Domain-Element:● “Root” of pattern● Parameter for “relation calls”

21

QVT-Core Mapping TrackToPlaceArcTransition

Track

Project Petri net

context

relation/transformation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

● Is transformed into aQVT-Core Mapping:

22

Semantics of a QVT-Core Mapping (fwd)

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

23

Semantics of a QVT-Core Mapping (fwd)

1) If Bottom Pattern found in unbound source model

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

unbound?

24

Semantics of a QVT-Core Mapping (fwd)

1) If Bottom Pattern found in unbound source model

2) & If Guard Pattern found in prev. bound model

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

unbound?

bound?

25

Semantics of a QVT-Core Mapping (fwd)

1) If Bottom Pattern found in unbound source model

2) & If Guard Pattern found in prev. bound model

3) Then create target model (and Trace Class)

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

unbound?

bound?

create!

26

Semantics of a QVT-Core Mapping (fwd)

1) If Bottom Pattern found in unbound source model

2) & If Guard Pattern found in prev. bound model

3) Then create target model (and Trace Class)

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

unbound?

bound?

create!

Different processing of TGGs, but same result!

(Even more efficient...)

27

“where”-Relationships in QVT-Relations

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr..:Transition

c e<<domain>> <<domain>>ctools pnet

whenProjectToPetrinet(pr, pn);

Relation TrackToPlaceArcTransition

wherePortPropertyToPlaceAnnotation(inPort, place);

PortPropertyToTransitionAnnotation(outPort, transition);

28

“where”-Relationships in QVT-Relations

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr..:Transition

c e<<domain>> <<domain>>ctools pnet

whenProjectToPetrinet(pr, pn);

Relation TrackToPlaceArcTransition

wherePortPropertyToPlaceAnnotation(inPort, place);

PortPropertyToTransitionAnnotation(outPort, transition);

prop:Property

port:Port

an:Annotation

place:Place

c e

<<domain>> <<domain>>

ctools pnet

Relation TrackToPlaceArcTransition

29

When vs. Where

● “Where” similar to a backward “When” of the invoked Relation:

where

TrackToPlaceArcTransition

PortPropertyToPlaceAnnotation

when

TrackToPlaceArcTransition

PortPropertyToPlaceAnnotation

30

A “When”-Relationship in QVT-Core

prop:Property

port:Port

an:Annotation

place:Place

Mapping PortPropertyToPlaceAnnotation

t1:TTrackToPAT

t2:TPropToAnnotation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

31

when&where Relationships in QVT-Core

QVT-Relations

QVT-Core

RelationsToCoreTransformation

where where

when

where where

when

TrackToPlaceArcTransition

ProjectToPetrinet

PortPropToPlaceAnnot PortPropToTransitionAnnot

SignalToPlaceArcTransitions

whenwhen

ProjectToPetrinet

TrackToPlaceArcTransition SignalToPlaceArcTransitions

Track_PortPToPlaceAn Track_PortPToTransAn Signal_PortPToPlaceAn Signal_PortPToTransAn

whenwhen whenwhen

32

where where

when

where where

when

TrackToPlaceArcTransition

ProjectToPetrinet

PortPropToPlaceAnnot PortPropToTransitionAnnot

SignalToPlaceArcTransitions

whenwhen

ProjectToPetrinet

TrackToPlaceArcTransition SignalToPlaceArcTransitions

Track_PortPToPlaceAn Track_PortPToTransAn Signal_PortPToPlaceAn Signal_PortPToTransAn

whenwhen whenwhen

when&where Relationships in QVT-Core

QVT-Relations

QVT-Core

RelationsToCoreTransformation

33

“Unfolded” Mappings

prop:Property

port:Port

an:Annotation

place:Place

Mapping TrackToPlaceArcTransition_PortPropertyToPlaceAnnotation

t1:TTrackToPAT

t2:TPropToAnnotation

prop:Property

port:Port

an:Annotation

place:Place

Mapping SignalToPlaceArcTransition_PortPropertyToPlaceAnnotation

t1:TSignalToPAT

t2:TPropToAnnotation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

34

“Unfolded” Mappings

prop:Property

port:Port

an:Annotation

place:Place

Mapping TrackToPlaceArcTransition_PortPropertyToPlaceAnnotation

t1:TTrackToPAT

t2:TPropToAnnotation

prop:Property

port:Port

an:Annotation

place:Place

Mapping SignalToPlaceArcTransition_PortPropertyToPlaceAnnotation

t1:TSignalToPAT

t2:TPropToAnnotation

pr:Project

track:Track

inPort:Port

outPort:Port

pn:Petrinet

place:Place

arc:Arc

tr...:Transition

t1:TProjectToPetrnet

t2:TTrackToPAT

ctools (check) mapping pnet (enforce)

guard

bottom

Mapping TrackToPlaceArcTransition

35

QVT-Core vs. TGGs – Short Comparison

● Structurally similar rules

domain A correspondence domain B

++

++

++

++

++

++

++

precnd.

create++ ++

● Graph structure: Nodes and Edges

● Multiple Correspondence Nodes

domain A mapping domain B

guard

bottom

● Graph structure: Variables and OCL-Predicates

● One Trace Class

QVT-Core* TGG

*:QVT-Core does not specify a graphical notation

36

QVT-Core vs. TGGs – Short Comparison

● Structurally similar rulesQVT-Core TGG

map TrackToPlaceArcTransition{ check ctools(project:Project){ track:Track, portIn:Port| track.project = project; track.port = portIn; track.port = portOut; } check enforce pnet(petrinet:Petrinet){ realize place:Place, ...

● Graph structure: Nodes and Edges

● Multiple Correspondence Nodes

● Graph structure: Variables and OCL-Predicates

● One Trace Class

domain A correspondence domain B

++

++

++

++

++

++

++

precnd.

create++ ++

37

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

38

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

track:Track outPort:Porttrack.port:=outPort;

39

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

Attribute Value Constraint(Simple) Attribute Value Predicate or Attribute Value Assignment

track:Track outPort:Porttrack.port:=outPort;

40

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

Attribute Value Constraint(Simple) Attribute Value Predicate or Attribute Value Assignment

track:Track outPort:Porttrack.port:=outPort;

outPort.type==”out”; outPort:Port type==”out”

41

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

Attribute Value Constraint(Simple) Attribute Value Predicate or Attribute Value Assignment

track:Track outPort:Porttrack.port:=outPort;

outPort.type==”out”; outPort:Port type==”out”

–String–Boolean– Integer

42

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

Attribute Value Constraint(Simple) Attribute Value Predicate or Attribute Value Assignment

track:Track outPort:Porttrack.port:=outPort;

outPort.type==”out”; outPort:Port type==”out”

place.title:=outPort.name; outPort:Port title:=name place:Place

–String–Boolean– Integer

43

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

Attribute Value Constraint(Simple) Attribute Value Predicate or Attribute Value Assignment

track:Track outPort:Porttrack.port:=outPort;

outPort.type==”out”; outPort:Port type==”out”

place.title:=outPort.name; outPort:Port title:=name place:Place

place.id:=”id_”+outPort.name;

OCL Attribute Value Constraint(Complex) Attribute Value Predicate/Assignment

id:=”id_”+outPort.name place:Place

–String–Boolean– Integer

44

QVT-Core vs. TGGs – Short Comparison

QVT-Core TGG

NodeVariable

EdgeReference Predicate (==) orReference Assignment (:=)

Attribute Value Constraint(Simple) Attribute Value Predicate or Attribute Value Assignment

track:Track outPort:Porttrack.port:=outPort;

outPort.type==”out”; outPort:Port type==”out”

place.title:=outPort.name; outPort:Port title:=name place:Place

place.id:=”id_”+outPort.name;

OCL Attribute Value Constraint(Complex) Attribute Value Predicate/Assignment

id:=”id_”+outPort.name place:Place

Outlook

–String–Boolean– Integer

45

Summary

● QVT and TGGs are very similar● TGGs still have advantages

– Multiple Correspondence Nodes– Formal theory, e.g. to support verification

● Flexible, extendable Interpreter– Effectively used– For popular meta-modelling facility EMF

(and also other Java models)– Flexible, e.g. n:m model transformations

● TGGs could be a valueable input for QVT

46

TGG Editor Screenshot

47

TGG Editor – Creating a Node

1. Create a TGG node with the Node creation tool

2. Enter the node name

3. Draw an association to the DomainGraph-Pattern node

4. Select the desired type class from the domain class model

48

TGG Editor – Creating an Edge

1. Draw an edge from a source to a target node

2. Select the appropriate type-reference

49

Starting a Transformation

configuration file

correspondence model file

50

Further TGG-Interpreter Features

● n-to-m model transformations● Multi Graph Grammars (“MGGs”)

51

Further TGG-Interpreter Features

v1:Variable

v2:Variable

node1:Node

node2:Node

++a:Assignment

++slotve:VariableExp

++valve:VariableExp

##

ereference:EReference

rgp:RightGraphPattern

++edge:Edge

var12node1:VariableToNode

var22node2:VariableToNode

++a2edge:ReferenceAssignmentToEdge

bp:BottomPatternbp2rgp:BottomPatternToRightGraphPattern

(Domain)

qvt

(Domain)

qvt2tgg

(Domain)

ecore

(Domain)

tgg

● No start node needed● Navigating backwards on Edges

52

Further TGG-Interpreter Features

v1:Variable

v2:Variable

node1:Node

node2:Node

++a:Assignment

++slotve:VariableExp

++valve:VariableExp

##

ereference:EReference

rgp:RightGraphPattern

++edge:Edge

var12node1:VariableToNode

var22node2:VariableToNode

++a2edge:ReferenceAssignmentToEdge

bp:BottomPatternbp2rgp:BottomPatternToRightGraphPattern

(Domain)

qvt

(Domain)

qvt2tgg

(Domain)

ecore

(Domain)

tgg

● No start node needed● Navigating backwards on Edges

matching start

53

Further TGG-Interpreter Features

v1:Variable

v2:Variable

node1:Node

node2:Node

++a:Assignment

++slotve:VariableExp

++valve:VariableExp

##

ereference:EReference

rgp:RightGraphPattern

++edge:Edge

var12node1:VariableToNode

var22node2:VariableToNode

++a2edge:ReferenceAssignmentToEdge

bp:BottomPatternbp2rgp:BottomPatternToRightGraphPattern

(Domain)

qvt

(Domain)

qvt2tgg

(Domain)

ecore

(Domain)

tgg

● No start node needed● Navigating backwards on Edges

matching start

54

Further TGG-Interpreter Features

v1:Variable

v2:Variable

node1:Node

node2:Node

++a:Assignment

++slotve:VariableExp

++valve:VariableExp

##

ereference:EReference

rgp:RightGraphPattern

++edge:Edge

var12node1:VariableToNode

var22node2:VariableToNode

++a2edge:ReferenceAssignmentToEdge

bp:BottomPatternbp2rgp:BottomPatternToRightGraphPattern

(Domain)

qvt

(Domain)

qvt2tgg

(Domain)

ecore

(Domain)

tgg

● No start node needed● Navigating backwards on Edges

matching start

55

Further TGG-Interpreter Features

v1:Variable

v2:Variable

node1:Node

node2:Node

++a:Assignment

++slotve:VariableExp

++valve:VariableExp

##

ereference:EReference

rgp:RightGraphPattern

++edge:Edge

var12node1:VariableToNode

var22node2:VariableToNode

++a2edge:ReferenceAssignmentToEdge

bp:BottomPatternbp2rgp:BottomPatternToRightGraphPattern

(Domain)

qvt

(Domain)

qvt2tgg

(Domain)

ecore

(Domain)

tgg

● No start node needed● Navigating backwards on Edges

matching start

56

Bibliography

[1] J. Greenyer: A Study of Model Transformation Technologies: Reconciling TGGs with QVT. University of Paderborn, July 2006. Master/Diploma thesis supervised by E. Kindler and R. Wagner

[2] OMG: MOF QVT Final Adopted Specification http://www.omg.org/docs/ptc/05-11-01.pdf, 2005.

[3] A. Schürr: Specification of Graph Translators with Triple Graph Grammars.. Proceedings of the 20th International Workshop on Graph-Theoretic Conceptsin Computer Science, Spinger Verlag, Germany, June 1994.

[4] H. Giese, R. Wagner: Incremental Model Synchronization with Triple Graph Grammars. Proc. of the 9th International Conference on Model Driven Engineering Languages and Systems (MoDELS) Springer Verlag, (to appear), October 2006.

[5] University of Paderborn, Germany: Fujaba Tool Suite http://www.fujaba.de, 2006.

[6] A. Gepting, J. Greenyer, E. Kindler, A. Maas, S. Munkelt, C. Pales, T. Pivl, O. Rohe, V. Rubin, M. Sander, A. Scholand, C. Wagner, R. Wagner: Component Tools: A vision for a tool. E. Kindler (ed.): Algorithmen und Werkzeuge für Petrinetze (AWPN) - Algorithms and Tools for Petri nets. Proceedings of the Workshop AWPN, pp. 37-42, September 30th, October 1st, 2004.

[7] Gepting A., Greenyer J., Maas A., Munkelt S., Pales C., Pivl T., Rohe O., Sanders M., Scholand A., Wagner C., ComponentTools, an Infrastructure for the Design of Component Based Systems, Informatiktage 2005, Congress of Computer Science, Sankt Augusting, Germany, April 2005.

[8] A. Geburzi: Synthese von Modelltransformationsregeln aus Uebersetzungsbeispielen (Synthesis of model transformation rules from examples). November, 2006. Master/Diploma thesis supervised by R. Wagner

top related