blob: 84cec72ac79f23e3c5e98d92d8ca4fda2da4dde2 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<!-- This file was autogenerated on Fri Jun 06 17:51:11 BST 2008 by the org.eclipse.gmt.umlx.eqvto.tests.ImperativeOCLConsistencyTest.testImperativeOCLConsistency() JUnit test -->
<html>
<head>
<title>ImperativeOCL Model Compliance</title>
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
</head>
<body lang="EN-US">
<h1>ImperativeOCL Model Compliance</h1>
<p>
This document describes clarifications and fixes to
<ul>
<li><a href="http://www.omg.org/docs/formal/06-01-01.pdf">OMG MOF 2.0 specification (06-01-01)</a></li>
<li><a href="http://www.omg.org/docs/formal/06-05-01.pdf">OMG OCL 2.0 specification (06-05-01)</a></li>
<li><a href="http://www.omg.org/docs/formal/08-04-03.pdf">OMG QVT 1.0 specification (08-04-03)</a></li>
</ul>
realised by the Ecore-based and EMOF-based ImperativeOCL models.
<p>
The EMOF-based <tt>ImperativeOCL</tt> 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.
<p>
The Ecore-based <tt>ImperativeOCL</tt> model is intended to provide identical behaviour subject to the replacement of
<ul>
<li>the <tt>EMOF</tt> package by Ecore (from Eclipse EMF)</li>
<li>the <tt>EssentialOCL</tt> package by the Ecore OCL package (from Eclipse MDT).</li>
</ul>
The Ecore-based model should be used within tools, where the power of Ecore and its associated tooling is important.
<h2>EMOF-based Model Compliance with respect to the OMG QVT Rose Model</h2>
The OMG QVT Rose Model is the source of all diagrams in the QVT specification
and the notional source of all other generated models.
<p>
The Eclipse <tt>ImperativeOCL</tt> Model resolves the following errors
and anomalies in the OMG QVT Rose Model.
<p>
<br><tt>nsURI</tt> for <tt>ImperativeOCL</tt> is <tt>http://schema.omg.org/spec/QVT/1.0/imperativeocl.xml</tt> rather than <tt>http:///imperativeocl.ecore</tt>
<br><tt>nsPrefix</tt> for <tt>ImperativeOCL</tt> is <tt>impocl</tt> rather than <tt>imperativeocl</tt>
<br><tt>name</tt> for <tt>ImperativeOCL</tt> is <tt>ImperativeOCL</tt> rather than <tt>imperativeocl</tt>
<br><tt>name</tt> for <tt>TryExp.exceptClause</tt> is <tt>exceptClause</tt> rather than undefined
<br><tt>containment</tt> for <tt>UnpackExp.targetVariable</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>lowerBound</tt> for <tt>ReturnExp.value</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>defaultValueLiteral</tt> for <tt>AssertExp.severity</tt> is <tt>error</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>VariableInitExp.withResult</tt> is <tt>false</tt> rather than undefined
<br><tt>eSuperTypes</tt> for <tt>SwitchExp</tt> should not include <tt>CallExp</tt>
<h2>EMOF-based Model Compliance with respect to the OMG Ecore Model</h2>
The OMG Ecore Models are notionally generated from the OMG QVT Rose Model.
<p>
The Eclipse <tt>ImperativeOCL</tt> Model resolves the following errors and anomalies in the corresponding OMG Ecore Model.
<p>
<br><tt>nsURI</tt> for <tt>ImperativeOCL</tt> is <tt>http://schema.omg.org/spec/QVT/1.0/imperativeocl.xml</tt> rather than <tt>http://www.schema.omg.org/spec/QVT/1.0/imperativeocl</tt>
<br><tt>nsPrefix</tt> for <tt>ImperativeOCL</tt> is <tt>impocl</tt> rather than <tt>imperativeocl</tt>
<br><tt>name</tt> for <tt>ImperativeOCL</tt> is <tt>ImperativeOCL</tt> rather than <tt>imperativeocl</tt>
<br><tt>name</tt> for <tt>TryExp.exceptClause</tt> is <tt>exceptClause</tt> rather than undefined
<br><tt>containment</tt> for <tt>UnpackExp.targetVariable</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>DictLiteralExp.part</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>lowerBound</tt> for <tt>ReturnExp.value</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>defaultValueLiteral</tt> for <tt>AssertExp.severity</tt> is <tt>error</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>VariableInitExp.withResult</tt> is <tt>false</tt> rather than undefined
<br><tt>eSuperTypes</tt> for <tt>SwitchExp</tt> is <tt>ImperativeExpression</tt> rather than <tt>CallExp</tt>,<tt>ImperativeExpression</tt>
<br>Unnavigable <tt>opposite</tt> of <tt>AltExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AltExp.condition</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssertExp.assertion</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssignExp.defaultValue</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssignExp.left</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssignExp.value</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>BlockExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>CatchExp.exception</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ComputeExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ComputeExp.returnedElement</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictionaryType.keyType</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictLiteralExp.part</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictLiteralPart.key</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictLiteralPart.value</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ImperativeIterateExp.target</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ImperativeLoopExp.condition</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>InstantiationExp.argument</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>LogExp.condition</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>OrderedTupleLiteralExp.part</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>OrderedTupleLiteralPart.value</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>OrderedTupleType.elementType</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>RaiseExp.exception</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>SwitchExp.alternativePart</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>SwitchExp.elsePart</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>TryExp.exceptClause</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>TryExp.tryBody</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>UnlinkExp.item</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>UnlinkExp.target</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>VariableInitExp.referredVariable</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>WhileExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>WhileExp.condition</tt> is modelled
<h2>EMOF-based Model Compliance with respect to the OMG EMOF Model</h2>
The OMG EMOF Model is notionally generated from the OMG QVT Rose Model.
<p>
The Eclipse <tt>ImperativeOCL</tt> Model resolves the following errors and anomalies in the corresponding OMG EMOF Model.
<p>
<br>The model namespace is <tt>http://schema.omg.org/spec/MOF/2.0/emof.xml</tt> rather than <tt>http://www.schema.omg.org/spec/MOF/2.0/emof.xml</tt>
<br><tt>xmi:type</tt> of <tt>Boolean</tt> is <tt>emof:PrimitiveType</tt> rather than <tt>emof:Class</tt>
<br><tt>xmi:type</tt> of <tt>Integer</tt> is <tt>emof:PrimitiveType</tt> rather than <tt>emof:Class</tt>
<br><tt>xmi:type</tt> of <tt>String</tt> is <tt>emof:PrimitiveType</tt> rather than <tt>emof:Class</tt>
<br><tt>xmi:type</tt> of <tt>UnlimitedNatural</tt> is <tt>emof:PrimitiveType</tt> rather than <tt>emof:Class</tt>
<br><tt>package</tt> of <tt>Boolean</tt> is <tt>emof</tt> rather than <tt>primitivetypes</tt>
<br><tt>package</tt> of <tt>Integer</tt> is <tt>emof</tt> rather than <tt>primitivetypes</tt>
<br><tt>package</tt> of <tt>String</tt> is <tt>emof</tt> rather than <tt>primitivetypes</tt>
<br><tt>package</tt> of <tt>UnlimitedNatural</tt> is <tt>emof</tt> rather than <tt>primitivetypes</tt>
<p>
<br><tt>uri</tt> for <tt>ImperativeOCL</tt> is defined
<br><tt>name</tt> for <tt>ImperativeOCL</tt> is <tt>ImperativeOCL</tt> rather than <tt>imperativeocl</tt>
<br><tt>name</tt> for <tt>TryExp.exceptClause</tt> is <tt>exceptClause</tt> rather than undefined
<br><tt>containment</tt> for <tt>UnpackExp.targetVariable</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>lowerBound</tt> for <tt>ReturnExp.value</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>defaultValueLiteral</tt> for <tt>AssertExp.severity</tt> is <tt>error</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>VariableInitExp.withResult</tt> is <tt>false</tt> rather than undefined
<br><tt>eSuperTypes</tt> for <tt>SwitchExp</tt> is <tt>ImperativeExpression</tt> rather than <tt>CallExp</tt>,<tt>ImperativeExpression</tt>
<br><tt>SeverityKind::error</tt> is defined
<br><tt>SeverityKind::fatal</tt> is defined
<br><tt>SeverityKind::warning</tt> is defined
<br><tt>lowerBound</tt> for <tt>AssertExp.severity</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>AssignExp.defaultValue</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>AssignExp.isReset</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>AssertExp.log</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>AssignExp.value</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>BlockExp.body</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>CatchExp.body</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>CatchExp.exception</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>DictionaryType.keyType</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>DictLiteralExp.part</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>ImperativeIterateExp.target</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>ImperativeLoopExp.condition</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>InstantiationExp.argument</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>InstantiationExp.extent</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>LogExp.condition</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>OrderedTupleLiteralExp.part</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>OrderedTupleType.elementType</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>RaiseExp.argument</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>SwitchExp.alternativePart</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>SwitchExp.elsePart</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>TemplateParameterType.specification</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>TryExp.exceptClause</tt> is <tt>0</tt> rather than undefined
<br><tt>lowerBound</tt> for <tt>TryExp.tryBody</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Typedef.condition</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>VariableInitExp.withResult</tt> is <tt>0</tt> rather than <tt>1</tt>
<br>Unnavigable <tt>opposite</tt> of <tt>AltExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AltExp.condition</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssertExp.assertion</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssignExp.defaultValue</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssignExp.left</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>AssignExp.value</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>BlockExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>CatchExp.exception</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ComputeExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ComputeExp.returnedElement</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictionaryType.keyType</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictLiteralExp.part</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictLiteralPart.key</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>DictLiteralPart.value</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ImperativeIterateExp.target</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>ImperativeLoopExp.condition</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>InstantiationExp.argument</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>LogExp.condition</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>OrderedTupleLiteralExp.part</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>OrderedTupleLiteralPart.value</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>OrderedTupleType.elementType</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>RaiseExp.exception</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>SwitchExp.alternativePart</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>SwitchExp.elsePart</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>TryExp.exceptClause</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>TryExp.tryBody</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>UnlinkExp.item</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>UnlinkExp.target</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>VariableInitExp.referredVariable</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>WhileExp.body</tt> is modelled
<br>Unnavigable <tt>opposite</tt> of <tt>WhileExp.condition</tt> is modelled
<h2>EMOF-based Model Compliance with respect to the Eclipse QVT Rose Model</h2>
The Eclipse QVT Rose Model provides the definition for all models; it resolves numerous errors in the OMG QVT Rose Model.
<p>
The EMOF-based <tt>ImperativeOCL</tt> Model exhibits the following differences with respect to the Eclipse QVT Rose Model.
<p>
<br><tt>nsPrefix</tt> for <tt>ImperativeOCL</tt> is <tt>impocl</tt> rather than <tt>imperativeocl</tt>
<h2>Ecore-based Model Compliance with respect to the EMOF-based Model</h2>
The Ecore-based <tt>ImperativeOCL</tt> model exhibits the following differences with respect to its EMOF-based counterpart.
<p>
<br><tt>nsURI</tt> for <tt>ImperativeOCL</tt> is <tt>http://www.eclipse.org/qvt/1.0/ImperativeOCL</tt> rather than <tt>http://schema.omg.org/spec/QVT/1.0/imperativeocl.xml</tt>
<br><tt>nsPrefix</tt> for <tt>ImperativeOCL</tt> is <tt>eimpocl</tt> rather than <tt>impocl</tt>
</body>
</html>