Epsilon Merging Language

EML is a hybrid, rule-based language for merging homogeneous or heterogeneous models. As a merging language requires all the features of a transformation language (merging model A with an empty model into model B is equivalent to transforming A->B), EML reuses the syntax and semantics of ETL and extends it with concepts specific to model merging.

Before merging can be performed, correspondences between elements of the input models need to be established. This can be achieved using the comparison language of Epsilon (or using Java).


  • Merge homegeneous models
  • Merge heterogeneous models
  • Complete specification of the merging logic
  • Declarative rules with imperative bodies
  • Export the merge trace to a custom model/format
  • Automated rule execution
  • Lazy and greedy rules
  • Multiple rule inheritance
  • Guarded rules
  • Support for simultaneously accessing/modifying many models of (potentially) different metamodels
  • All the usual programming constructs (while and for loops, statement sequencing, variables etc.)
  • Support for those convenient first-order logic OCL operations (select, reject, collect etc.)
  • Ability to create and call methods of Java objects
  • Support for dynamically attaching operations to existing meta-classes and types at runtime
  • Support for cached operations
  • Support for extended properties
  • Support for user interaction
  • Ability to create reusable libraries of operations and import them from different Epsilon (not only EOL) modules

Examples and Screencasts


Chapter 10 of the Epsilon book provides a complete reference of the syntax and semantics of EML.