M2M-Transformation mitder QVTOperational Mappings



Ähnliche Dokumente
M2M-Transformation mitder QVTRelations Language

Arbeiten mit UMLed und Delphi

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Objektorientierte Programmierung

Einführung in die Java- Programmierung

Programmierkurs Java

Zwischenablage (Bilder, Texte,...)

Erwin Grüner

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Einführung in. Logische Schaltungen

5. Tutorium zu Programmieren

1 Mathematische Grundlagen

Veröffentlichen von Apps, Arbeitsblättern und Storys. Qlik Sense Copyright QlikTech International AB. Alle Rechte vorbehalten.

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Übungen Programmieren 1 Felix Rohrer. Übungen

Grundlagen von Python

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Bei der Anlage von Pauschalen ist folgendes zu beachten!!!!!!!!

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einführung in die Programmierung

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Rundung und Casting von Zahlen

Schulung Marketing Engine Thema : Einrichtung der App

2m Band der Freiwilligen. Feuerwehren im. Lkr. Rottal-Inn

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Definition von domänenspezifischen Sprachen mit Xtext: Einführung. 19. November 2014

Übersicht Programmablaufsteuerung

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Datenbanken Kapitel 2

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

1 topologisches Sortieren

Innovator 11 classix. Anbindung an Eclipse. Einführung, Installation und Konfiguration. Connect. Michael Kaaden.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

FRAGEBOGEN ANWENDUNG DES ECOPROWINE SELBSTBEWERTUNG-TOOLS

Hilfedatei der Oden$-Börse Stand Juni 2014

II. Daten sichern und wiederherstellen 1. Daten sichern

Bernadette Büsgen HR-Consulting

Bereich METIS (Texte im Internet) Zählmarkenrecherche

Regelwerk der "Electronical Infrastructure for Political Work"

Statuten in leichter Sprache

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Print2CAD 2017, 8th Generation. Netzwerkversionen

4. BEZIEHUNGEN ZWISCHEN TABELLEN

Scala kann auch faul sein

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Java Kurs für Anfänger Einheit 5 Methoden

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

Einführung in die Programmierung (EPR)

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

4 Aufzählungen und Listen erstellen

AutoTexte und AutoKorrektur unter Outlook verwenden

Druckerscriptsprache

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

So geht s Schritt-für-Schritt-Anleitung

Erstellen von x-y-diagrammen in OpenOffice.calc

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Tritt beim Aufruf ein Fehler aus, so wird eine MessageBox mit dem Fehlercode und der Kommandozeile angezeigt.

Vgl. Kapitel 4 aus Systematisches Requirements Engineering, Christoph Ebert

Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit

Menü auf zwei Module verteilt (Joomla 3.4.0)

Mind Mapping am PC. für Präsentationen, Vorträge, Selbstmanagement. von Isolde Kommer, Helmut Reinke. 1. Auflage. Hanser München 1999

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Einführung in die Programmierung

Wir machen neue Politik für Baden-Württemberg

Summenbildung in Bauteiltabellen mit If Then Abfrage

Dokument Lob erstellen

Wie ist das Wissen von Jugendlichen über Verhütungsmethoden?

Aufgabenheft. Fakultät für Wirtschaftswissenschaft. Modul Business/IT-Alignment , 09:00 11:00 Uhr. Univ.-Prof. Dr. U.

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

Produktskizze. 28. November 2005 Projektgruppe Syspect

TESTEN SIE IHR KÖNNEN UND GEWINNEN SIE!

etutor Benutzerhandbuch XQuery Benutzerhandbuch Georg Nitsche

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Grundlagen der Theoretischen Informatik, SoSe 2008

... MathML XHTML RDF

Umzug der abfallwirtschaftlichen Nummern /Kündigung

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Lehrer: Einschreibemethoden

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Import des Out of Office Status von Exchange in LANDESK Service Desk

Mit dem Tool Stundenverwaltung von Hanno Kniebel erhalten Sie die Möglichkeit zur effizienten Verwaltung von Montagezeiten Ihrer Mitarbeiter.

Welche Gedanken wir uns für die Erstellung einer Präsentation machen, sollen Ihnen die folgende Folien zeigen.

I.1 Die Parrot Assemblersprache

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

Transkript:

M2M-Transformation mitder QVTOperational Mappings Siegfried Nolte Beethovenstraße 57 22941 Bargteheide siegfried@siegfried-nolte.de Abstract: QVT ist ein Sprachkonzept der Object Management Group zur Transformation von formalen Modellen. In diesem Beitrag werden ausgehend von einem einfachen Fachklassenmodell die zentralen Konzepte und Techniken der Transformationssprache Operational Mappings vorgestellt, so dass abschließend eine vollständige Transformation eines UML-Modells der PIM-Ebene in eins der PSM-Ebenevorgenommen werden kann. 1 Einordnung der QVT-O in die MDA Modellgetriebene Architekturentwicklung bedeutet das iterative Erstellen von Anwendungssystemen über ständig wechselnde Modellierungs- und Transformationsschritte [MDA03, PM06]. Mit Hilfe von formalen Modellierungssprachen, sogenannten MOF- Sprachen, werden Modelle erstellt, die in einem Transformationsschritt mit QVT-Sprachen in ein neues Modell überführt werden, welches wiederum mit Hilfe einer formalen Modellierungssprache dargestellt und bearbeitet werden kann. Auf diesem Weg wird als Ausgangsmodell einer Entwicklungsphase jeweils ein konsistentes Modell durch Transformationinitial bereitgestellt. MOF-Sprachen sind Modellierungssprachen, denen nach demmof-ansatzder OMG [MOF06] einformalesmetamodell zugrunde liegt. Das Metamodell ist gewissermaßen eine Datenstruktur, die nach der MOF-SpezifikationinFormeines UML-Klassendiagramms definiert wird [Nol07]. Alle OMG-Modellierungssprachen so auch die BPMN, UML, SysML sind formale Modellierungssprachen, die in diesem Sinne mit UMLbasiertenMetamodellenspezifiziertwordensind. Eine weitere, etwasleichtgewichtigere Möglichkeit der Beschreibung von formalen Modellierungssprachen besteht aus der Einarbeitung vondomänenspezifischenbelangenindie ModellierungsspracheUML. Dies Mittel stellt das UML-Metamodell mit den UML-Profilen zur Verfügung [UML10]. ImRahmendieses Beitragsarbeiten wir exemplarisch miteinem UML-Profil, welches eine einfache Erweiterung des UML-Metamodells in Form des Stereotyps <<entity>> benutzt. Mit diesem Stereotyp, der mit der Metaklasse Class assoziiert ist, werdendie Fachklasseneines UML-Modells markiert, die mitder Transformationin besonderer Weise behandelt werden sollen. Mit der Wahl desuml-profilsist UML als Modellierungssprache und damit als Modelltyp für die Transformation festgelegt. 964

2 Transformation mit QVT-O QVT Operational Mappings (QVT-O) ist eine Sprache zur Transformation von formalen Modellen, die der Klasse der imperativen Sprachen zuzuordnen ist [QVT08]. In QVT-O werden die Transformationen nicht, wie bei der Relations Language, deskriptiv über gültige Relationen zwischen den Elementen von Quell- und Zielmodellen beschrieben, sondern imperativ durch Mapping-Operationen. Zur Erläuterung der Sprachkonzepte der QVT-O und der Modelltransformation [Nol09] soll ein einfaches Fachklassendiagramm der PIM-Ebene dienen. Die Fachklassen, die im Rahmen der Transformation in besonderer Weise behandelt werden sollen, sind unter Verwendung eines einfachen UML-Profiles mit dem Stereotyp <<entity>> markiert. Als Zielmodell wird ebenfalls ein UML- Klassendigramm hergestellt. 2.1 Transformationen Eine QVT-O-Transformation beschreibt die Überführung einer beliebigen Anzahl von Quellmodellen in eins oder mehrere Zielmodelle. Quellmodelle wie auch Zielmodelle müssen von bestimmten Modelltypen sein, die zu Beginn einer Transformation deklariert werden. Modelltypen referenzieren formale Metamodelle, die im Kontext bekannt sind. Im Fall des Eclipse-basierten Werkzeugs QVT-Operational [EMP10] werden Metamodelle alseclipse-plugins organisiert [Nol07]. modeltype UML uses 'http://www.eclipse.org/uml2/2.1.0/uml'; transformation GI1_Transform (in src :UML, out trgt :UML); main() src.objects()[package]->map transformpackage(); } Die main-methode ist die Mapping-Operation, die als Einstiegspunkt für die Transformation gilt. Es handelt sich dabei um eine Mapping-Operation, die die Modelle selbst, hier src und trgt, zum Gegenstand hat. Aus dem Grund ist es auch nicht erforderlich und bei manchen QVT-O-Interpretern auch nicht möglich, Eingangs- und Ausgangsargumente für die main-methode anzugeben. Mit dem Zusatz in und out wird festgelegt, ob ein Modell Quelle oder Ziel ist. QVT-O basiert auf OCL [OCL10]. Einerseits ist QVT-O mit Hilfe der OCL entwickelt worden, andererseits steht die OCL in QVT-O vollständig zur Verfügung, soweit sie in dem jeweiligen Interpreter implementiert ist. Die Syntax der Anweisungen entspricht imwesentlichen der OCL-Syntax. Die obige Anweisung objects()[package] ist ein sogenannter Shorthand für die QVT- Standardfunktion objectsoftype(package). 2.2 Objekterzeugung mit Mapping-Operationen und Inline Mapping Die Transformation besteht aus einer Reihe von Mapping-Operationen, mit denen Schritt für Schritt die Überführung von Elementen des Quellmodells in Elemente des Zielmodells beschrieben wird: 965

mapping Package::transformPackage() : Package when self.name!= oclisundefined(); } name:=self.name; } In diesem Code-Abschnitt wird ein Package einesquellmodells in ein Package eines Zielmodells überführt. Die in dem optionalen when-prädikat angegebene Vorbedingung regelt, dass dies nur dann erfolgt, wenn das Package des Quellmodells als Objekt der Metaklasse NamedElement auch einen definierten Wert besitzt. self ist eine QVT-Standardvariable, die den Gegenstand des Mappings selbst, hier das aktuelle Package, repräsentiert. InMapping-Operationen stehen weitere Standardvariablen zur Verfügung, result, die das Zielobjekt einer Operation in seiner jeweiligen Ausprägung repräsentiert, und this, womit die Transformation selbst adressiert werden kann, um zumbeispiel Informationen über den Statusabzufragen. Bei der obigen Mapping-Operation handelt es sich um eine Kurzform. Ein vollständig spezifiziertes Mapping wird in frei gestaltbaren Blöcken organisiert, jeweils einem zur Initialisierung (init), zur Durchführung (population) und zur Nachbehandlung (end) der Operation. Dies kann bei komplexen Mappings durchaus Sinn machen. Die komplette Mapping-Anweisung mit allen optionalen syntaktischen Bestandteilen sieht folgendermaßen aus: mapping Package::transformPackage() : Package when self.name!= oclisundefined(); } init var pckgname := self.name; } population object result:package name:=pckgname; }} end /* Terminierende Anweisungen, Meldungen, */ /* Statusabfragen */ } } Der Aufruf einer Mapping-Operation erfolgt mit einer map-anweisung: src.objects()[package]->map transformpackage() Auf jedes Objekt vom Typ Package eines Eingangsmodells src wird die Mapping- Operation transformpackage angewendet. Mit dem Mapping haben wir eine Technik der expliziten Objekterzeugung kennen gelernt. Eine weitere Möglichkeit, Objekte in Zielmodellen zuerzeugen, besteht darin, dies implizit mit Hilfe eines Inline-Mappings vorzunehmen. Die Technik des Inline-Mappings bietet sich insbesondere dann an, wenn die Objekte, die im Zielmodell neu angelegt werden sollen, im Quellmodell nicht in irgendeiner Weise existieren, zum Beispiel die getter- und setter-methoden für denzugriffauf private Attribute: mapping Class::transformClasses() : Class name := self.name; ownedoperation+=self.ownedattribute->object(p) Operation name := 'get_' + p.name; }; 966

} ownedoperation+=self.ownedattribute->object(p) Operation name := 'set_' + p.name; }; 2.3 QVT-O und imperative Ausdrücke eine Auswahl Alle QVT-Sprachen basieren auf der Object Constraint Language [OCL10]. Dadurch können in beliebiger Weise QVT-Anweisungen mit OCL-Anweisungen kombiniert werden, was den QVT-Sprachen eine große Flexibilität verleiht. Eine der wertvollsten Anweisungen ist der log-ausdruck, mit dem an beliebiger Stelle in einer Mapping- Operation eine Ausgabe auf die Konsole vorgenommen werden kann, um zum Beispiel aktuelle Ausprägungen von Variablen oder Objekten anzuzeigen. log ( 'Do' ); log ( self.name ); log ( 'Inhalt der self-variable ', self ); Ein bedingter Ausdruck ist ein Ausdruck, in dem die Anweisungsteile in Abhängigkeit von einer Bedingung ausgeführt werden. QVT-O erlaubt als bedingte Ausdrücke ifund switch -Konstrukte: if (self == oclisundefined()) then log ( 'Self hat keinen definierten Wert' ); else log ( 'Self.name = ' + self.name ); endif; switch case (self == oclisundefined()) log ( 'Self hat keinen definierten Wert' ); } else log ( 'Self.name = ' + self.name ); } }; Schleifen und iterative Anweisungen werden entweder mit dem OCL-Iterationsausdruck iterate oder mit einem while-oder for-ausdruck implementiert: var s1:integer := 0, s2:integer := 0, s123 := Set1,2,3}; s1 := s123->iterate(idx: Integer; i: Integer = 0 i+idx); s123->foreach (idx) s2 := s2 + idx }; log ('Summe s1 = ', s1); log ('Summe s2 = ', s2); Für das Sammeln von Objekten kann die collect-anweisung hinzugezogen werden: ownedattribute := self.ownedattribute-> collect( p object Property name := p.name; } ); 967

Für diese Konstruktion stellt die QVT-O-Spezifikation wieder einen sogenannten Shorthand zur Verfügung, der allerdings noch nicht von allen QVT-O-Interpretern unterstützt wird: ownedattribute := self.ownedattribute->object (p) Property name := p.name;}; 2.4 Queries Ein weiteres Hilfsmittel der QVT-O sind Queries. Dies sind Hilfsfunktionen, mit denen sich QVT- und OCL-Anweisungen bündeln und umfangreiche Skripte besser strukturierenlassen: query gettypename( srctype : Type) : String return if ( srctype.name = 'UnlimitedNatural' ) then 'Double' else srctype.name endif; } Der Aufruf einer Query ist analog zudem Aufruf einer Mapping-Operation, wobei die map-anweisung weggelassen wird: name := gettypename(self); Queries in Kombination mit OCL-Anweisungen bieten recht vielfältige Möglichkeiten, mit denen sich das Leben eines MDA-Architekten doch sehr erleichtern lässt. Mit der folgenden Query zum Beispiel wird mit Hilfe der Standardfunktion getapplied- Stereotype() geprüft, ob eine Klasse mit dem Stereotyp <<entity>> des UML- Profils UMLEJB markiert ist. Wenn ja, kann die Klasse im Rahmen der Transformation angemessen behandelt werden: query Class::isStereotypedBy ( str : String ) : Boolean var st : Stereotype := null; st := self.getappliedstereotype( 'UMLEJB::' + str ); return if ( self.isstereotypeapplied(st) ) then true else false endif; } mapping Class::transformClasses () : Class when self.isstereotypedby('entity') }... } 2.5 Weiterführende Konzepte Häufig lassensich nicht alle Transformationen und Operationenineiner Phase erledigen, so dass QVT-O spezielle Sprachmittel und Funktionen anbietet, damit bestimmte Trans- 968

formationsaktionen auch in nachfolgenden Phase vorgenommen werden können: Object Resolution und Intermediate Data. Alle Objekte, die im Rahmen einer Transformation angefasst werden, werden in einem Trace abgelegt. Mit Objekt-Resolution wird ein Ansatz beschrieben, die Objekte unter Verwendung des Traces zu adressieren. Dabei wird zwischen allgemeiner Resolution und spezieller Resolution unterschieden. Allgemeine Resolution gilt grundsätzlich für alle Objekte der gesamten Transformation; spezielle Resolutionadressiert gezielt die Objekte einer bestimmten Mapping-Operation. Allgemeine Resolutionsfunktionen sind: resolve(), welche zueinem Objekt desquellmodellseine Liste aller Zielobjekte eines vorgegebenentypsliefert, die ausdem Quellmodell generiert wordensind. resolveone() liefert das letzte Zielobjekt des gegebenen Typs, welches sich im Trace befindet. invresolve() wird angewendet aufein Zielobjektund liefert eine Listealler Quellobjekte eines gegebenen Typs, die zur Erzeugung des Zielmodells benutzt wurden. invresolveone() liefert dasletzte Quellobjekt eines gegebenentyps. Die speziellen Resolutionsfunktionen resolvein(), resolveonein(), invresolvein(), invresolveonein() sind analog definiert; beiihnen wird jeweils noch die Mapping-Operation mit Namenangegeben, die bei der Selektiondes oder der jeweiligen Elemente zusätzlichindie Betrachtung einbezogen werdensoll. Intermediate Data definiert einkonzept, demmetamodell im Rahmen einer Transformationdynamisch weitere Elemente hinzuzufügen, die nur während der Ausführungszeit dertransformationvorhanden sind und den Mapping-Operationen und Hilfsfunktionen zur Verfügung stehen. Es kann sich dabei umzusätzliche Metaklassen (intermediate class) oder umattribute von vorhandenen Metaklassen handeln (intermediate property). intermediate class Entity name:string; kind:string; }; intermediate property Package::entities:Sequence (Entity); In obigem Beispiel wird dem Metamodell eine weitere Klasse Entity hinzugefügt. Die Metaklasse Package erhält ein zusätzliches Attribut entities, welches eine Sammlung von Instanzen der Klasse Entity aufnehmen kann. Mit diesen Ergänzungen ist man inder Lage, Klassen immodell, die zum Beispiel mittels eines Stereotyps als <<entity>> markiert sind, zu sammeln und vorübergehend einem Paket zuzuordnen, damit sie später bei der Erzeugung des Zielmodells angemessen eingebracht werden können. Bei der Vertiefung dieser Konzepte kann auf[nol09] zurück gegriffen werden. 3 Zusammenfassung undausblick QVT-O ist ein Bestandteil der Eclipse Modeling Workbench [EMP10] und steht damit als mittlerweile recht stabiles Produkt einem großen Kreis von Entwicklern und IT-Architekten zur Verfügung. Die für diesen Beitrag verwendete MDA-Entwicklungsplatt- 969

form ist in[nol10] detailliert beschrieben. Die erforderlichen Metamodelle werden als Eclipse-Plugins erwartet, was jedoch mit Hilfe des Eclipse Modeling Frameworks und der UML Modeling Tools verhältnismäßig leicht zu bewerkstelligen ist [Nol07]. Das Metamodell der UML, so wie es hier verwendet wird, ist in einer spezifikationsnahen Ausprägung stets Bestandteil des Modeling Projektes. Die Repräsentation der Zielmodelle in einer grafischenform ist jedochnach wie vor eine Herausforderung, der sichdie Anbieter von Modellierungswerkzeugen noch stellen müssen. Ohne dies ist es fraglich, ob das Angebot der Modelltransformation angenommen wird, da man mit mittlerweile sehr leistungsfähigen Model-nach-Text-Transformatoren auch schon in frühen Phasen der Entwicklung sinnvoll und effektiv tragfähige Ergebnisse produzieren kann. Trotzdem bleibt zu hoffen, dass Modelltransformationen über kurz oder lang mehr in die Kultur einer systematischen modellgetriebenen Architekturentwicklung einfließen werden. Dies hätte zweifelsohne wertvolle Auswirkungen auf die Qualität und Stabilität der zu entwickelnden Softwaresysteme zur Folge. Literaturverzeichnis [EMP10] EclipseModelingProject; http://www.eclipse.org/modeling/ [MDA03] MDA Guide, Version1.0.1. www.omg.org/cgi-bin/doc?omg/03-06-01,2003 [MOF06]MOF 2.0/Meta Object Facility Core, Version 2.0. http://www.omg.org/spec/mof/, 2006 [Nol10] Nolte, S.: freemda -Eine freie Plattform für eine integrierte modellgetriebene Anwendungsentwicklung. EclipseMagazin -Heft 01, 2010 [Nol09] Nolte, S.: QVT Operational Mappings. Springer-Verlag, 2009 [Nol08] Nolte, S.: Modelle und Transformationen Eine pragmatische Betrachtung der MDA QVT. ObjektSpektrum -Heft 5,8.2008 [Nol07] Nolte, S.: Modelle und Metamodelle im Eclipse Kontext. ObjektSpektrum, Heft 6,2007 [OCL10] Object Constraint Language. http://www.omg.org/spec/ocl/2.2/,2010 [PM06] Petrasch R, Meimberg O: ModelDriven Architecture. dpunkt Verlag, 2006 [QVT08] MOF QVT-Version 1.0.http://www.omg.org/spec/QVT/1.0/,,2008 [UML10]UML Superstructureand Infrastructure. http://www.omg.org/spec/uml/2.3/,2010 970