Konzeption und Implementation einer funktionalen Querying- und Transformations-API
Zusammenfassung der Projektergebnisse
In vielen Anwendungsgebieten wie Software-Entwicklung, Reverse- und Re-Engineering, Simulation und Verifikation und Optimierung spielen Modelle heute eine zentrale Rolle. Zu ihren Vorteilen gehört, dass sie durch ihr Metamodell präzise definiert sind und von generischen Tools verarbeitet werden können. Zu den wichtigsten Tools im Umgang mit Modellen gehören Anfragesprachen, mit denen sich Modelle analysieren und Informationen extrahieren lassen. Weiterhin spielen Transformationen eine wichtige Rolle, die Modelle manipulieren oder neue Modelle aus vorhandenen Modellen generieren. Das Thema des Forschungsprojekts ist die Konzeption und Realisierung eines neuen Modellanfrage- und Transformationsansatzes namens FunnyQT, der als Menge von APIs und domänenspezifischen Sprachen (DSLs) in den funktionalen Lisp-Dialekt Clojure eingebettet ist. Basierend auf einer leistungsstarken API zur Verwaltung und Manipulation von Modellen bietet FunnyQT Anfragekonstrukte wie Comprehensions, quantifizierte Ausdrücke, reguläre Pfadausdrücke, relationale Anfragen und Pattern Matching. Auf Seite der Transformationen unterstützt es die Definition typischer unidirektionaler Modell-zu-Modell-Transformationen, und es unterstützt die Definition komplexer In-Place-Transformationen basierend auf Regeln, die mittels Pattern Matching Strukturen im Modell finden und manipulieren. Zudem können bidirektionale Transformationen definiert werden, welche Informationen zwischen zwei Modellen in jedwede Richtung synchronisieren können. Weiterhin wird eine neue Art von Co-Evolutions-Transformationen ermöglicht, welche ein Metamodell evolvieren und dabei gleichzeitig ein Instanzmodell anpassen. Neben den Anfrage- und Tranformationsdiensten werden auch noch einige weitere Hilfsdienste bereitgestellt. Dazu gehören polymorphe Funktionen, Modell-Visualisierung und XML-Verarbeitung. FunnyQT besitzt einige Eigenschaften, die es einzigartig machen. Zunächst ist FunnyQT nur eine gewöhnliche Clojure-Bibliothek. Anfragen und Transformationen sind also gewöhnliche Clojure-Programme. Allerdings benutzt FunnyQT Clojures leistungsfähiges Makro-System, um die meisten seiner höherwertigen Dienste als eingebettete, domänenspezifische Sprachen mit speziell für die jeweilige Aufgabe maßgeschneiderten Sprachkonstrukten anzubieten. Da Anfragen und Transformationen gewöhnliche Clojure-Programme sind, können sie selbst auch beliebige Clojure- und Java-Bibliotheken verwenden. Beispielsweise bietet FunnyQT keine spezialisierte API oder DSL zur Definition von Modell-zu-Text-Transformationen weil diese ebensogut mittels FunnyQTs Anfrage-API und einem beliebigen existierenden Templating-Tool definiert werden können. Umgekehrt kompilieren FunnyQT-Anfragen und Transformationen wie alle Clojure-Programme zu gewöhnlichem JVM-Bytecode und können somit leicht aus anderen JVM-Sprachen wie Java aufgerufen werden. Eine weitere Besonderheit ist FunnyQTs Plattformunabhängigkeit. Es unterstützt Modelle des Eclipse Modeling Frameworks und von JGraLab, und Unterstützung für weitere Modellierungs-Frameworks kann mit minimalem Aufwand und ohne Änderungen an FunnyQT selbst hinzugefügt werden. Da FunnyQT in eine funktionale Sprache eingebettet ist, hat es selbst eine überwiegend funktionale Ausrichtung. Jede Anfrage und jede Transformation ist eine Funktion, welche an Funktionen höherer Ordnung übergeben oder selbst mit anderen Funktionen parametrisiert werden kann.
Projektbezogene Publikationen (Auswahl)
- (2013): Solving the TTC 2013 Flowgraphs Case with FunnyQT. In: van Gorp, Pieter; Rose, Louis; Krause, Christian: Proceedings Sixth Transformation Tool Contest (TTC 2013)
Horn, Tassilo
(Siehe online unter https://dx.doi.org/10.4204/EPTCS.135.7) - (2015): A Functional, Comprehensive and Extensible Multi-Platform Query and Transformation Approach. Logos Verlag, Berlin, 2016
Horn, Tassilo
(Siehe online unter https://dx.doi.org/10.5281/zenodo.58302) - (2015): Graph Pattern Matching as an Embedded Clojure DSL. In: Parisi-Presicce, Francesco; Westfechtel, Bernhard: Graph Transformation - 8th International Conference, ICGT 2015, Held as Part of STAF 2015, L'Aquila, Italy, July 21- 23, 2015. Proceedings. S. 189-204
Horn, Tassilo
(Siehe online unter https://doi.org/10.1007/978-3-319-21145-9_12) - (2015): Solving the TTC Java Refactoring Case with FunnyQT. In: 8th Transformation Tool Contest, TTC 2015, Held as Part of STAF 2015, L'Aquila, Italy, July 24, 2015. Proceedings
Horn, Tassilo