EssentialOCL Model Compliance

This document describes clarifications and fixes to

realised by the Ecore-based and EMOF-based EssentialOCL models.

The EMOF-based EssentialOCL model is intended to exactly comply with the spirit of the latest QVT specification; the model therefore corrects numerous problems in the official QVT 1.0 models. The EMOF-based model should be used for modelling, where accuracy is important.

The Ecore-based EssentialOCL model is intended to provide identical behaviour subject to the replacement of

The Ecore-based model should be used within tools, where the power of Ecore and its associated tooling is important.

EMOF-based Model Compliance with respect to the OMG QVT Rose Model

The OMG QVT Rose Model is the source of all diagrams in the QVT specification and the notional source of all other generated models.

The Eclipse EssentialOCL Model resolves the following errors and anomalies in the OMG QVT Rose Model.


nsURI for EssentialOCL is http://schema.omg.org/spec/QVT/1.0/essentialocl.xml rather than http:///essentialocl.ecore
name for EssentialOCL is EssentialOCL rather than essentialocl
name for FeatureCallExp is FeatureCallExp rather than FeaturePropertyCall
name for ExpressionInOcl.contextVariable is contextVariable rather than context
name for Variable.representedParameter is representedParameter rather than bindParameter
NavigationCallExp is defined
OpaqueExpression is undefined
TypeType is defined
CollectionKind::Collection is defined
eSuperTypes for ExpressionInOcl is TypedElement rather than OpaqueExpression
eSuperTypes for PropertyCallExp is NavigationCallExp rather than FeaturePropertyCall
eSuperTypes for AnyType is Type rather than Class,Type
abstract for CollectionType is false rather than true
containment for TupleLiteralPart.attribute is false rather than true
lowerBound for CollectionType.elementType is 1 rather than 0
upperBound for ExpressionInOcl.parameterVariable is -1 rather than 1
ordered for ExpressionInOcl.parameterVariable is false rather than true
ordered for OperationCallExp.argument is true rather than false

EMOF-based Model Compliance with respect to the OMG Ecore Model

The OMG Ecore Models are notionally generated from the OMG QVT Rose Model.

The Eclipse EssentialOCL Model resolves the following errors and anomalies in the corresponding OMG Ecore Model.


nsURI for EssentialOCL is http://schema.omg.org/spec/QVT/1.0/essentialocl.xml rather than http://www.schema.omg.org/spec/OCL/2.0/essentialocl
name for EssentialOCL is EssentialOCL rather than essentialocl
name for ExpressionInOcl.contextVariable is contextVariable rather than context
name for Variable.representedParameter is representedParameter rather than bindParameter
NavigationCallExp is defined
OpaqueExpression is undefined
TypeType is defined
CollectionKind::Collection is defined
eSuperTypes for ExpressionInOcl is TypedElement rather than OpaqueExpression
eSuperTypes for PropertyCallExp is NavigationCallExp
eSuperTypes for AnyType is Type rather than Class,Type
lowerBound for CollectionType.elementType is 1 rather than 0
upperBound for ExpressionInOcl.parameterVariable is -1 rather than 1
abstract for CollectionType is false rather than true
containment for TupleLiteralPart.attribute is false rather than true
ordered for CollectionLiteralExp.part is false rather than true
ordered for ExpressionInOcl.parameterVariable is false rather than true
ordered for LoopExp.iterator is false rather than true
ordered for TupleLiteralExp.part is false rather than true
Unnavigable opposite of CallExp.source is modelled
Unnavigable opposite of CollectionRange.first is modelled
Unnavigable opposite of CollectionRange.last is modelled
Unnavigable opposite of EnumLiteralExp.referredEnumLiteral is modelled
Unnavigable opposite of ExpressionInOcl.bodyExpression is modelled
Unnavigable opposite of ExpressionInOcl.contextVariable is modelled
Unnavigable opposite of ExpressionInOcl.parameterVariable is modelled
Unnavigable opposite of ExpressionInOcl.resultVariable is modelled
Unnavigable opposite of IfExp.condition is modelled
Unnavigable opposite of IfExp.elseExpression is modelled
Unnavigable opposite of IfExp.thenExpression is modelled
Unnavigable opposite of IterateExp.result is modelled
Unnavigable opposite of LoopExp.body is modelled
Unnavigable opposite of OperationCallExp.argument is modelled
Unnavigable opposite of OperationCallExp.referredOperation is modelled
Unnavigable opposite of PropertyCallExp.referredProperty is modelled
Unnavigable opposite of Variable.initExpression is modelled
Unnavigable opposite of VariableExp.referredVariable is modelled

EMOF-based Model Compliance with respect to the OMG EMOF Model

The OMG EMOF Model is notionally generated from the OMG QVT Rose Model.

The Eclipse EssentialOCL Model resolves the following errors and anomalies in the corresponding OMG EMOF Model.


The model namespace is http://schema.omg.org/spec/MOF/2.0/emof.xml rather than http://www.schema.omg.org/spec/MOF/2.0/emof.xml
xmi:type of Boolean is emof:PrimitiveType rather than emof:Class
xmi:type of Integer is emof:PrimitiveType rather than emof:Class
xmi:type of String is emof:PrimitiveType rather than emof:Class
xmi:type of UnlimitedNatural is emof:PrimitiveType rather than emof:Class
package of Boolean is emof rather than primitivetypes
package of Integer is emof rather than primitivetypes
package of String is emof rather than primitivetypes
package of UnlimitedNatural is emof rather than primitivetypes


uri for EssentialOCL is defined
name for EssentialOCL is EssentialOCL rather than essentialocl
name for ExpressionInOcl.contextVariable is contextVariable rather than context
name for Variable.representedParameter is representedParameter rather than bindParameter
NavigationCallExp is defined
OpaqueExpression is undefined
TypeType is defined
CollectionKind::Bag is defined
CollectionKind::Collection is defined
CollectionKind::OrderedSet is defined
CollectionKind::Sequence is defined
CollectionKind::Set is defined
eType for IntegerLiteralExp.integerSymbol is Integer rather than pathmap://models/emof/primitivetypes.emof#o2
eType for RealLiteralExp.realSymbol is Real rather than String
eType for UnlimitedNaturalExp.symbol is UnlimitedNatural rather than pathmap://models/emof/primitivetypes.emof#o4
eSuperTypes for ExpressionInOcl is TypedElement rather than OpaqueExpression
eSuperTypes for PropertyCallExp is NavigationCallExp
eSuperTypes for AnyType is Type rather than Class,Type
upperBound for ExpressionInOcl.parameterVariable is -1 rather than 1
abstract for CollectionType is false rather than true
containment for TupleLiteralPart.attribute is false rather than true
transient for CollectionLiteralPart.collectionLiteralExp is true rather than false
transient for TupleLiteralPart.tupleLiteralExp is true rather than false
transient for Variable.letExp is true rather than false
lowerBound for BooleanLiteralExp.booleanSymbol is 0 rather than 1
lowerBound for CallExp.source is 0 rather than 1
lowerBound for CollectionLiteralExp.kind is 0 rather than 1
lowerBound for CollectionLiteralExp.part is 0 rather than 1
lowerBound for EnumLiteralExp.referredEnumLiteral is 0 rather than 1
lowerBound for ExpressionInOcl.contextVariable is 0 rather than 1
lowerBound for ExpressionInOcl.parameterVariable is 0 rather than 1
lowerBound for ExpressionInOcl.resultVariable is 0 rather than 1
lowerBound for IntegerLiteralExp.integerSymbol is 0 rather than 1
lowerBound for IterateExp.result is 0 rather than 1
lowerBound for LoopExp.iterator is 0 rather than 1
lowerBound for OperationCallExp.argument is 0 rather than 1
lowerBound for OperationCallExp.referredOperation is 0 rather than 1
lowerBound for PropertyCallExp.referredProperty is 0 rather than 1
lowerBound for RealLiteralExp.realSymbol is 0 rather than 1
lowerBound for StringLiteralExp.stringSymbol is 0 rather than 1
lowerBound for TupleLiteralExp.part is 0 rather than 1
lowerBound for TupleLiteralPart.attribute is 0 rather than 1
lowerBound for TupleLiteralPart.tupleLiteralExp is 0 rather than 1
lowerBound for TypeExp.referredType is 0 rather than 1
lowerBound for UnlimitedNaturalExp.symbol is 0 rather than 1
lowerBound for Variable.initExpression is 0 rather than 1
lowerBound for Variable.letExp is 0 rather than 1
lowerBound for VariableExp.referredVariable is 0 rather than 1
lowerBound for Variable.representedParameter is 0 rather than 1
Unnavigable opposite of CallExp.source is modelled
Unnavigable opposite of CollectionRange.first is modelled
Unnavigable opposite of CollectionRange.last is modelled
Unnavigable opposite of EnumLiteralExp.referredEnumLiteral is modelled
Unnavigable opposite of ExpressionInOcl.bodyExpression is modelled
Unnavigable opposite of ExpressionInOcl.contextVariable is modelled
Unnavigable opposite of ExpressionInOcl.parameterVariable is modelled
Unnavigable opposite of ExpressionInOcl.resultVariable is modelled
Unnavigable opposite of IfExp.condition is modelled
Unnavigable opposite of IfExp.elseExpression is modelled
Unnavigable opposite of IfExp.thenExpression is modelled
Unnavigable opposite of IterateExp.result is modelled
Unnavigable opposite of LoopExp.body is modelled
Unnavigable opposite of OperationCallExp.argument is modelled
Unnavigable opposite of OperationCallExp.referredOperation is modelled
Unnavigable opposite of PropertyCallExp.referredProperty is modelled
Unnavigable opposite of Variable.initExpression is modelled
Unnavigable opposite of VariableExp.referredVariable is modelled

EMOF-based Model Compliance with respect to the Eclipse QVT Rose Model

The Eclipse QVT Rose Model provides the definition for all models; it resolves numerous errors in the OMG QVT Rose Model.

The EMOF-based EssentialOCL Model exhibits the following differences with respect to the Eclipse QVT Rose Model.

No differences