Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

When describing Ecore's modelling constructs below, we will take the latter of these perspectives. For the code perspective, see Genmodel.

...

Main modelling

...

elements

Ecore supports classes with attributes (properties of simple types), associations (references to other modelled classes) and operations, and multiple inheritance. The main construct is the class, which is called EClass in Ecore terminology. An EClass contains (structural) features, which are either attributes or references (one-way associations) and operations, and can be related to other classes through inheritance.

...

ConstructRuntime instance structures

EClassifier

Abstract superclass of EClass and EDataType

 

EClass

The class construct, has a name and can be abstract (cannot be instantiated) and also marked as interface (no state, just methods). A container of so-called structural features (attributes and associations). May have a list of superclasses (EClass).

Example:

PlantUML Macro
class OrgUnit
class Person

Non-abstract classes can be instantiated. Instances will have attributes values and links to other objects corresponding to contained and inherited features.

 

PlantUML Macro
object "~#o1 : OrgUnit" as o1
object "~#p1 : Person" as p1

EDataType

A non-modelled or "foreign" type, provided by the host language and runtime environment, like int, double, String, Date etc. Many such types are pre-defined by Ecore, e.g. EInt, EIntegerObject, EDouble, EDoubleObject, EBoolean, EBooleanObject, EString, EDate corresponding to Java's int, Integer, double, Double, boolean, Boolean, String and Date types. You can define your own, to be able to use other Java types in your model.

Instances of the corresponding (non-abstract) Java classes can be created from Strings.

EStructualFeature

Abstract superclass of EAttribute and EReference. The distinction between these two is the kind of type they have, EDataType and EClassifier, respectively.

 

EAttribute

Has a name, type (an EDataType) and multiplicity (lower and upper bounds).

 

PlantUML Macro
class OrgUnit {
	String name
}
class Person {
	String name
}
or using inheritance
PlantUML Macro
class Named {
	String name
}

class OrgUnit extends Named
class Person extends Named

Both OrgUnit and Person instances have a name attribute.

 

PlantUML Macro
object "~#o1: OrgUnit" as o1 {
	name = "IDI"
}
object "~#p1: Person" as p1 {
	name = "Hallvard"
}

EReference

Has a name, type (an EClass) and multiplicity. Corresponds to the target role of an association from the owning EClass to a target EClass. The association itself is not explicitly modelled.

PlantUML Macro
class OrgUnit {
}
class Person {
}
OrgUnit <- Person: works-in

PlantUML Macro
object "~#o1: OrgUnit" as o1 {
	name = "IDI"
}
object "~#p1: Person" as p1 {
	name = "Hallvard"
}
o1 <- p1: works-in

Two EReferences may be each other's opposite, meaning they correspond to roles of the logically same association. This implies the consistency requirement that if one instance refers to another, the other must refer back, and vice versa.

 

PlantUML Macro
class OrgUnit {
}
class Person {
}
OrgUnit "works-in" <--> "workers *" Person

Consistency requirement: Since o1 has workers links to p1 and p2, p1 and p2 must both have a works-in link to o1.

PlantUML Macro
object "~#o1: OrgUnit" as o1 {
	name = "IDI"
}
object "~#p1: Person" as p1 {
	name = "Hallvard"
}
object "~#p2: Person" as p2 {
	name = "Letizia"
}
o1 <-- p1: works-in
o1 --> p1: workers
o1 <-- p2: works-in
o1 --> p2: workers

EOperation

Corresponds to methods. Includes return type (EClassifier), typed (EClassifier) parameters and a list of types it may throw (EDataType).


PlantUML Macro
class OrgUnit {
   void fire(Person)
}
class Person {
}

 

Packages

The classes and data types (EClassifiers) in an Ecore model must be inserted into an EPackage as its classifiers. Hence, an Ecore model will consist of one or more EPackages containing EClasses and EDataTypes. The EPackage has a name and an identifier (nsUri), the latter must be globally unique, and typically is or includes the identifier of the software module (e.g. Eclipse plugin, OSGi bundle or maven module) containing the model. Take care when deciding on the name and nsUri as these will be used by tools. E.g. the name is used by the code generator as the last element of the Java package for the generated classes, and the nsUri is used for looking up the package in a global registry.

Annotations

Ecore includes a mechanism for attaching extra data to all the above modelling elements, in the form of key-value pairs. The extra data is typically used by tools, e.g. it is used for naming constraints (that will need to be implemented by hand in the generated code, see Validation) and providing method bodies for the code generator. You may also add your own custom annotations that are utilised by your own tools.

An annotation is added as an EAnnotation object to a model element, and its source attribute is used as a qualifier to identify its meaning/purpose. This qualifier is typically an URI or qualified name that identifies the tool that uses it. E.g. to use Ecore-specific annotation you use http://www.eclipse.org/emf/2002/Ecore as the source attribute value. The annotation data are added as key-value pairs and value in the annotation's details map.