Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Modeltransformasjoner med ATL. Atlas Transformation Language (ATL) Et transformasjonsspråk for model til model transformasjoner Et delvis deklarativt.

Liknende presentasjoner


Presentasjon om: "Modeltransformasjoner med ATL. Atlas Transformation Language (ATL) Et transformasjonsspråk for model til model transformasjoner Et delvis deklarativt."— Utskrift av presentasjonen:

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


Laste ned ppt "Modeltransformasjoner med ATL. Atlas Transformation Language (ATL) Et transformasjonsspråk for model til model transformasjoner Et delvis deklarativt."

Liknende presentasjoner


Annonser fra Google