- Level M0: User Object Layer (Instances)
- Level M1: Model (DSL – Domain Specific Language)
- Level M2: Meta-Model (Schema description Language)
- Level M3: Meta-Meta-Model (The Schema of the Schema)
Surprisingly applying the levels to concrete problems is not always obvious or straight forward.
I used the plugin.xml file as an example. I take here a MDSD centric approach, by assuming that the plugin.xml file "generates" the plugin....
- Level M0: (Instance) The deployable component
- Level M1: (Model) The plugin.xml file itself
- Level M2: (Meta-Model) The extension point schema description (.exsd) files
- Level M3: (Meta-Meta-Model) Schema of the .exsd files (implemented somehow in the .exsd editor)
Someone (a compiler person) asked me, how I would apply this to a programming language like C.
- Level M0: (Instance) Executable code
- Level M1: (Model) .C file (or a AST (Abstract Syntax Tree) representation)
- Level M2: (Meta-Model) C language syntax definition (e.g. in yacc)
- Level M3: (Meta-Meta-Model) Yacc language syntax definition
In this case, the meta model describes the constraints on the are AST (that's what the CDT does). This shows, that it makes sense to have a DSL (Domain Specific Language) at some levels. The DSL of C is simply the c syntax. The DSL of the c-syntax is yacc (or EBNF)... It is also interesting to have transformation between different representations of a model at the same level. C versus AST, yacc versus EBNF... The "code generation" happens between M1 and M0 (compiling). Another code generation happens between M2 and M1 when using a compiler-compiler like yacc.
But whenever I read about UML and MOF I get confused. This might have to do with the fact that I never really used UML....
- Level M0: (Instance) Generated C/Ada code
- Level M1: (Model) Concrete UML diagrams
- Level M2: (Meta-Model) UML "language"
- Level M3: (Meta-Meta-Model) ??
Again, a generator/transformer is applied between M1 and M0. Is this a correct application of MOF to UML?
But explaining both (the MDSD and the UML approach) to someone who has not been exposed to modeling gets very confusing.
So, in "my world" I prefer to see the MOF hierarchy very MDSD centric. I wonder if the MDSD centric view is confusing for UML experts is is the a natural way to see the world....