Eclipse Modeling Framework
2.12.0 / May 26, 2016
|License||Eclipse Public License|
From a model specification described in XML Metadata Interchange (XMI), EMF provides tools and runtime support to produce a set of Java classes for the model, a set of adapter classes that enable viewing and command-based editing of the model, and a basic editor. Models can be specified using annotated Java, UML, XML documents, or modeling tools, then imported into EMF. Most important of all, EMF provides the foundation for interoperability with other EMF-based tools and applications.
Ecore is the core (meta-)model at the heart of EMF. It allows expressing other models by leveraging its constructs. Ecore is also its own metamodel (i.e.: Ecore is defined in terms of itself).
According to Ed Merks, EMF project lead, "Ecore is the defacto reference implementation of OMG's EMOF" (Essential Meta-Object Facility). Still according to Merks, EMOF was actually defined by OMG as a simplified version of the more comprehensive 'C'MOF by drawing on the experience of the successful simplification of Ecore's original implementation.
Using Ecore as a foundational meta-model allows a modeler to take advantage of the entire EMF ecosystem and tooling - in as much as it's then reasonably easy to map application-level models back to Ecore. This isn't to say that it's best practice for applications to directly leverage Ecore as their metamodel; rather they might consider defining their own metamodels based on Ecore.
- Acceleo, a code generator using EMF models in input
- ATL, a model transformation language
- Connected Data Objects (CDO), a free implementation of a Distributed Shared Model on top of EMF
- Generic Eclipse Modeling System (GEMS)
- Graphical Modeling Framework (GMF)
- List of EMF based software
- Model-driven architecture
- "Eclipse Modeling Framework - Interview with Ed Merks". jaxenter.com. 2010-04-14. Retrieved 2013-11-13.
- EMF project page
- EMFStore A Model Repository (Server) for EMF
- EMF Tutorial for Beginners, Part 1 and Part 2
|This software-engineering-related article is a stub. You can help Wikipedia by expanding it.|