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).
Features
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
Features inherited from EOL
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.)