Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertJonas Danielsen Endret for 9 år siden
1
Modeltransformasjoner med ATL
2
Atlas Transformation Language (ATL) Et transformasjonsspråk for model til model transformasjoner Et delvis deklarativt og delvis imperativt språk Et ATL transformasjons program består av et sett med regler som samen spessifiserer er transformasjon melom to modeller Finnes som eclipse plugin: ATL Development Tools (ADT)
3
Eksempel mapping - Class2Table Class - Name : String Class2Table{ from c : Class ! Class to t : Relational ! Table( t.name <- c.name)} Mapping Table - Name : String Student
4
Transformasjons eksempel: Mapping fra klasse modell til relasjons database modell
5
Transformasjonen Transformasjonen er beskrevet av et sett mapping regler som beskriver hvordan et klassediagram kan gjøres om til en databasemodell Bruker en metamodel som beskriver input modellen, og en som beskriver output modellen Tar en klassemodell som input og lager en databasemodell på grunnlag av denne, i henhold til metamodellen for databasemodellen
6
Metamodellene:
7
class.ecore
8
relational.ecore
9
Mappingreglene:
10
Spesifikasjon av input of outpu modeller module class2relational; create OUT : relational from IN : class;
11
ClassModel2DBModel ClassModelDBModel - name : String - elements: Classifier - tables : Table - types : Type
12
ClassModel2DBModel rule ClassModel2RelatinalModel{ from cm : class ! ClassModel to rm : relational ! DBModel( name <- cm.name, tables select(e | e.oclIsKindOf(class ! Class)), types select(e | e.oclIsKindOf(class ! DataType)) ) do{ thisModule.dbModel <- rm; }
13
helper def : dbModel helper def : dbModel : relational ! DBModel = relational ! DBModel;
14
Class2Table ClassTable - name : String - attributes: Attribute - columns : Column - key : Column
15
Class2Table rule Class2Table{ from c : class ! Class to t : relational ! Table( name <- c.name, columns select(a | a.multivalued = false)}, key <- k ), k : relational ! Column( name <- c.name+'Id', type <-thisModule.getInteger, keyOf <- t ) }
16
Helper def : getInteger helper def : getInteger : relational ! Type = class ! DataType.allInstances() -> select(d | d.name = 'Integer') -> first();
17
DataType2Type DataTypeType - name : String
18
DataType2Type rule DataType2Type{ from dt : class ! DataType to t : relational ! Type( name <- dt.name ) }
19
Attribute2Column1 AttributeColumn - name : String - owner : Class - type : DataType - keyOf : Table - type : Type- multivalued = false
20
Attribute2Column1 rule Attribute2Column1{ from a : class ! Attribute( a.multivalued = false and a.type.oclIsKindOf(class ! DataType) ) to c : relational ! Column( name <- a.name, type <- a.type ) }
21
Attribute2Column2 AttributeColumn - name : String - owner : Class - type : Class - keyOf : Table - type : Type- multivalued = false
22
Attribute2Column2 rule Attribute2Column2{ from a : class ! Attribute( a.multivalued = false and a.type.oclIsKindOf( class ! Class) ) to c : relational ! Column( name <- a.name + 'ID', type <- thisModule.getInteger ) }
23
Attribute2Table1 AttributeTable - name : String - owner : Class - type : DataType - key : Column - type : Type- multivalued = true
24
Attribute2Table1 rule Attribute2Table1{ from a : class ! Attribute( a.multivalued = true and a.type.oclIsKindOf(class ! DataType)) to t : relational ! Table( name <- a.name, columns <- Set{id, val}, key <- Set{id} ), id : relational ! Column( name <- a.owner.name + 'Id', type <- thisModule.getInteger, keyOf <- t ), val : relational ! Column( name <-a.name, type <- a.type ) do{ thisModule.dbModel.tables <- Set{t}; }
25
Attribute2Table2 AttributeTable - name : String - owner : Class - type : Class - key : Column - type : Type- multivalued = true
26
Attribute2Table2 rule Attribute2Table2{ from a : class ! Attribute(a.multivalued = true and a.type.oclIsKindOf(class ! Class) ) to t : relational ! Table( name <- a.owner.name + '_' + a.name, columns <- Set{id, fk}, key <- Set{id, fk} ), id : relational ! Column( name <- a.owner.name + 'Id', type <- thisModule.getInteger, keyOf <- t ), fk : relational ! Column( name <- a.name + 'Id', type <- thisModule.getInteger, keyOf <- t ) do{ thisModule.dbModel.tables <- Set{t}; }
27
Resultatet:
28
Input model
29
Output model
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.