Reflective EMF Tutorial

This tutorial demonstrates how to create an EMF Ecore metamodel and a sample model that conforms to it reflectively (i.e. without generating any code).


To go through this tutorial you need to first install the Eclipse Modeling Distribution, Epsilon and Emfatic. Installation instructions are available here.

Create a new project

Go to File→New→Other... and select General→Project. Type library as the project name:

Create library.emf

Go to File→New→Other... and select File. Type library.emf as the file name:

This is where we'll specify our Ecore metamodel using the Emfatic textual syntax

Add content to library.emf

Now library.emf should be open and you can copy-paste the following text into it (our sample metamodel) and save.

@namespace(uri="library", prefix="")
package library;

class Library {
   val Writer[*] writers;
   val Book[*] books;

class Writer {
   attr String name;
   ref Book[*] books;

class Book {
   attr String title;
   attr int pages = 100;
   attr BookCategory category;

enum BookCategory {

Now your library.emf editor should look like this:

Generate library.ecore from library.emf

The next step is to generate a proper XMI-based Ecore metamodel from the Emfatic textual representation. To do this, you can right-click library.emf and select Generate Ecore model as shown below:

Once you've done this you should have a new file called library.ecore sitting next to your library.emf. Congratulations! You're half-way there!

Tip: If at some point you change library.emf, you need to repeat this step in order to update library.ecore.

Register library.ecore

The next step is to let EMF know of the existence of your newly created library.ecore metamodel. To do this, right-click library.ecore and select Register EPackages as shown below:

Create a model that conforms to library.ecore

Now we're ready to create models that conform to our new Ecore metamodel! To create a model, go to File→New→Other... and select EMF Model as shown below:

Click Next and set the name of the model to mylibrary.model:

Then hit the Browse... button next to the Metamodel URI field and select library in the list that pops up:

Finally, select Library from the Root instance type combo box and hit Finish:

Now mylibrary.model should be open in a tree-based editor:

Add content to mylibrary.model

To create a new Book under the library, you can right-click it and select New Child→Books Book

To set the title of the new book, you can right-click it and select Show Properties View

Then, in the Title field of the Properties view, you can type the name of the book:

Congratulations! You've just created your first EMF model!