Beispiel ohne join für einen kompletten View sollte jedoch nicht mit ModelJoin kompatibel sein
View name: completeViewkeep supertype library.Person as ViewPersonkeep subtype Employee as ViewEmployeekeep supertype Library as ViewLibrarykeep attribute library.Library.name as viewLibraryNamekeep attribute library.Employee.name as viewEmployeeNamekeep attribute library.Employee.manager as viewManagerkeep attribute library.Library.employees as viewLibraryEmployeeswithout join
ModelJoin kompatibeles Beispiel mit natural join von einem Element mit sich selbst
viewname CompleteViewnatural join library.Library with library.Library as ViewLibrary { keep attributes library.Library.name as viewName keep outgoing library.Library.employees as type ViewEmployee as reference viewEmployees { keep supertype library.Person as ViewPerson { keep attributes library.Person.name as viewName } keep outgoing library.Employee.manager as reference viewManager keep attributes library.Employee.salary as viewSalary }}
Benötigter Prozess
Eingaben:
Ecore Model
ModelJoin Query als Text Datei
Braindump dazu
Views auf 2 unterschiedlichen Modellen erzeugen:
für den Join brauchen wir eine neue CompartmentKlasse, welche funktionen zum Zugriff auf die Elemente anbietet Beispiel
Movie -> Aktor
Movie aus imdb.Film und library.VideoCassette
Aktor aus imdb.Actor[playedBy] (über imdb.Figure[figures]) und library.Person[cast]
von imdb zu Library playedBy Relation abbildbar aber nicht anders Rum da keine Information über Figure vorhanden ist
Sync Regeln auch in ModelJoin enthalten:
imdb.Person == library.Person
imdb.Film == library.VideoCassete
Join ideen
outer joins brauchen wir vermutlich gar nicht da wir erwarten das die Modelle im vollen sync stehen
außer wir haben sowas was von a nach b erstellt und ansonsten nur verbindet wenn vorhanden
library.VideoCassette kann auch nur physisch vorhanden sein wenn sie da ist, sobald ein Film gedreht wird gibt es den der muss aber in einer Bibliothek nicht vorhanden sein
theta join baut das cartesische produkt und filtert dann mit einer where clausel
views sollten alle dispatch regel haben das in ihnen aufgerufene Funktionen nicht nach sich selbst suchen