ImperativeOCL Model Compliance

This document describes clarifications and fixes to

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

The EMOF-based ImperativeOCL 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 ImperativeOCL 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 ImperativeOCL Model resolves the following errors and anomalies in the OMG QVT Rose Model.


nsURI for ImperativeOCL is http://schema.omg.org/spec/QVT/1.0/imperativeocl.xml rather than http:///imperativeocl.ecore
nsPrefix for ImperativeOCL is impocl rather than imperativeocl
name for ImperativeOCL is ImperativeOCL rather than imperativeocl
name for TryExp.exceptClause is exceptClause rather than undefined
containment for UnpackExp.targetVariable is false rather than true
lowerBound for ReturnExp.value is 0 rather than 1
defaultValueLiteral for AssertExp.severity is error rather than undefined
defaultValueLiteral for VariableInitExp.withResult is false rather than undefined
eSuperTypes for SwitchExp should not include CallExp

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 ImperativeOCL Model resolves the following errors and anomalies in the corresponding OMG Ecore Model.


nsURI for ImperativeOCL is http://schema.omg.org/spec/QVT/1.0/imperativeocl.xml rather than http://www.schema.omg.org/spec/QVT/1.0/imperativeocl
nsPrefix for ImperativeOCL is impocl rather than imperativeocl
name for ImperativeOCL is ImperativeOCL rather than imperativeocl
name for TryExp.exceptClause is exceptClause rather than undefined
containment for UnpackExp.targetVariable is false rather than true
ordered for DictLiteralExp.part is false rather than true
lowerBound for ReturnExp.value is 0 rather than 1
defaultValueLiteral for AssertExp.severity is error rather than undefined
defaultValueLiteral for VariableInitExp.withResult is false rather than undefined
eSuperTypes for SwitchExp is ImperativeExpression rather than CallExp,ImperativeExpression
Unnavigable opposite of AltExp.body is modelled
Unnavigable opposite of AltExp.condition is modelled
Unnavigable opposite of AssertExp.assertion is modelled
Unnavigable opposite of AssignExp.defaultValue is modelled
Unnavigable opposite of AssignExp.left is modelled
Unnavigable opposite of AssignExp.value is modelled
Unnavigable opposite of BlockExp.body is modelled
Unnavigable opposite of CatchExp.exception is modelled
Unnavigable opposite of ComputeExp.body is modelled
Unnavigable opposite of ComputeExp.returnedElement is modelled
Unnavigable opposite of DictionaryType.keyType is modelled
Unnavigable opposite of DictLiteralExp.part is modelled
Unnavigable opposite of DictLiteralPart.key is modelled
Unnavigable opposite of DictLiteralPart.value is modelled
Unnavigable opposite of ImperativeIterateExp.target is modelled
Unnavigable opposite of ImperativeLoopExp.condition is modelled
Unnavigable opposite of InstantiationExp.argument is modelled
Unnavigable opposite of LogExp.condition is modelled
Unnavigable opposite of OrderedTupleLiteralExp.part is modelled
Unnavigable opposite of OrderedTupleLiteralPart.value is modelled
Unnavigable opposite of OrderedTupleType.elementType is modelled
Unnavigable opposite of RaiseExp.exception is modelled
Unnavigable opposite of SwitchExp.alternativePart is modelled
Unnavigable opposite of SwitchExp.elsePart is modelled
Unnavigable opposite of TryExp.exceptClause is modelled
Unnavigable opposite of TryExp.tryBody is modelled
Unnavigable opposite of UnlinkExp.item is modelled
Unnavigable opposite of UnlinkExp.target is modelled
Unnavigable opposite of VariableInitExp.referredVariable is modelled
Unnavigable opposite of WhileExp.body is modelled
Unnavigable opposite of WhileExp.condition 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 ImperativeOCL 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 ImperativeOCL is defined
name for ImperativeOCL is ImperativeOCL rather than imperativeocl
name for TryExp.exceptClause is exceptClause rather than undefined
containment for UnpackExp.targetVariable is false rather than true
lowerBound for ReturnExp.value is 0 rather than 1
defaultValueLiteral for AssertExp.severity is error rather than undefined
defaultValueLiteral for VariableInitExp.withResult is false rather than undefined
eSuperTypes for SwitchExp is ImperativeExpression rather than CallExp,ImperativeExpression
SeverityKind::error is defined
SeverityKind::fatal is defined
SeverityKind::warning is defined
lowerBound for AssertExp.severity is 0 rather than 1
lowerBound for AssignExp.defaultValue is 0 rather than 1
lowerBound for AssignExp.isReset is 0 rather than 1
lowerBound for AssertExp.log is 0 rather than 1
lowerBound for AssignExp.value is 0 rather than 1
lowerBound for BlockExp.body is 0 rather than 1
lowerBound for CatchExp.body is 0 rather than 1
lowerBound for CatchExp.exception is 0 rather than 1
lowerBound for DictionaryType.keyType is 0 rather than 1
lowerBound for DictLiteralExp.part is 0 rather than 1
lowerBound for ImperativeIterateExp.target is 0 rather than 1
lowerBound for ImperativeLoopExp.condition is 0 rather than 1
lowerBound for InstantiationExp.argument is 0 rather than 1
lowerBound for InstantiationExp.extent is 0 rather than 1
lowerBound for LogExp.condition is 0 rather than 1
lowerBound for OrderedTupleLiteralExp.part is 0 rather than 1
lowerBound for OrderedTupleType.elementType is 0 rather than 1
lowerBound for RaiseExp.argument is 0 rather than 1
lowerBound for SwitchExp.alternativePart is 0 rather than 1
lowerBound for SwitchExp.elsePart is 0 rather than 1
lowerBound for TemplateParameterType.specification is 0 rather than 1
lowerBound for TryExp.exceptClause is 0 rather than undefined
lowerBound for TryExp.tryBody is 0 rather than 1
lowerBound for Typedef.condition is 0 rather than 1
lowerBound for VariableInitExp.withResult is 0 rather than 1
Unnavigable opposite of AltExp.body is modelled
Unnavigable opposite of AltExp.condition is modelled
Unnavigable opposite of AssertExp.assertion is modelled
Unnavigable opposite of AssignExp.defaultValue is modelled
Unnavigable opposite of AssignExp.left is modelled
Unnavigable opposite of AssignExp.value is modelled
Unnavigable opposite of BlockExp.body is modelled
Unnavigable opposite of CatchExp.exception is modelled
Unnavigable opposite of ComputeExp.body is modelled
Unnavigable opposite of ComputeExp.returnedElement is modelled
Unnavigable opposite of DictionaryType.keyType is modelled
Unnavigable opposite of DictLiteralExp.part is modelled
Unnavigable opposite of DictLiteralPart.key is modelled
Unnavigable opposite of DictLiteralPart.value is modelled
Unnavigable opposite of ImperativeIterateExp.target is modelled
Unnavigable opposite of ImperativeLoopExp.condition is modelled
Unnavigable opposite of InstantiationExp.argument is modelled
Unnavigable opposite of LogExp.condition is modelled
Unnavigable opposite of OrderedTupleLiteralExp.part is modelled
Unnavigable opposite of OrderedTupleLiteralPart.value is modelled
Unnavigable opposite of OrderedTupleType.elementType is modelled
Unnavigable opposite of RaiseExp.exception is modelled
Unnavigable opposite of SwitchExp.alternativePart is modelled
Unnavigable opposite of SwitchExp.elsePart is modelled
Unnavigable opposite of TryExp.exceptClause is modelled
Unnavigable opposite of TryExp.tryBody is modelled
Unnavigable opposite of UnlinkExp.item is modelled
Unnavigable opposite of UnlinkExp.target is modelled
Unnavigable opposite of VariableInitExp.referredVariable is modelled
Unnavigable opposite of WhileExp.body is modelled
Unnavigable opposite of WhileExp.condition 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 ImperativeOCL Model exhibits the following differences with respect to the Eclipse QVT Rose Model.


nsPrefix for ImperativeOCL is impocl rather than imperativeocl

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

The Ecore-based ImperativeOCL model exhibits the following differences with respect to its EMOF-based counterpart.


nsURI for ImperativeOCL is http://www.eclipse.org/qvt/1.0/ImperativeOCL rather than http://schema.omg.org/spec/QVT/1.0/imperativeocl.xml
nsPrefix for ImperativeOCL is eimpocl rather than impocl