blob: f93f6f6ab9bd0d86e4a15dcd9f7963225c3d6839 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<!-- This file was autogenerated on Sun Sep 21 12:49:35 BST 2008 by the org.eclipse.qvt.declarative.test.emof.emof.EMOFConsistencyTest.testEMOFConsistency() JUnit test -->
<html>
<head>
<title>EMOF Model Compliance</title>
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
</head>
<body lang="EN-US">
<h1>EMOF 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 EMOF models.
<p>
The EMOF-based <tt>EMOF</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>EMOF</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>EMOF</tt> Model resolves the following errors
and anomalies in the OMG QVT Rose Model.
<p>
<br><tt>nsURI</tt> for <tt>EMOF</tt> is <tt>http://schema.omg.org/spec/MOF/2.0/emof.xml</tt> rather than <tt>http:///emof.ecore</tt>
<br><tt>name</tt> for <tt>EMOF</tt> is <tt>EMOF</tt> rather than <tt>emof</tt>
<br><tt>name</tt> for <tt>Property.isID</tt> is <tt>isID</tt> rather than <tt>isId</tt>
<br><tt>Factory</tt> is defined
<br><tt>ReflectiveCollection</tt> is defined
<br><tt>ReflectiveSequence</tt> is defined
<br><tt>Comment.body</tt> is defined
<br><tt>Factory.package</tt> is defined
<br><tt>Element.tag</tt> is undefined
<br><tt>eOpposite</tt> for <tt>Tag.element</tt> is undefined
<br><tt>lowerBound</tt> for <tt>Operation.class</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Type.package</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.class</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>ordered</tt> for <tt>Class.ownedAttribute</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>ordered</tt> for <tt>Class.ownedOperation</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>ordered</tt> for <tt>Operation.ownedParameter</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>defaultValueLiteral</tt> for <tt>Class.isAbstract</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.isOrdered</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.isUnique</tt> is <tt>true</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.lower</tt> is <tt>1</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.upper</tt> is <tt>1</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isComposite</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isDerived</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isReadOnly</tt> is <tt>false</tt> rather than undefined
<br><tt>Element.container()</tt> is defined
<br><tt>Element.equals(object)</tt> is defined
<br><tt>Element.get(property)</tt> is defined
<br><tt>Element.getMetaClass()</tt> is defined
<br><tt>Element.isSet(property)</tt> is defined
<br><tt>Element.set(property,object)</tt> is defined
<br><tt>Element.unset(property)</tt> is defined
<br><tt>Extent.elements()</tt> is defined
<br><tt>Extent.useContainment()</tt> is defined
<br><tt>Factory.convertToString(dataType,object)</tt> is defined
<br><tt>Factory.create(metaClass)</tt> is defined
<br><tt>Factory.createFromString(dataType,string)</tt> is defined
<br><tt>ReflectiveCollection.add(object)</tt> is defined
<br><tt>ReflectiveCollection.addAll(objects)</tt> is defined
<br><tt>ReflectiveCollection.clear()</tt> is defined
<br><tt>ReflectiveCollection.remove(object)</tt> is defined
<br><tt>ReflectiveCollection.size()</tt> is defined
<br><tt>ReflectiveSequence.add(index,object)</tt> is defined
<br><tt>ReflectiveSequence.get(index)</tt> is defined
<br><tt>ReflectiveSequence.remove(index)</tt> is defined
<br><tt>ReflectiveSequence.set(index,object)</tt> is defined
<br><tt>Type.isInstance(object)</tt> is defined
<br><tt>URIExtent.contextURI()</tt> is defined
<br><tt>URIExtent.element(uri)</tt> is defined
<br><tt>URIExtent.uri(element)</tt> is defined
<br><tt>Package.nestingPackage</tt> is defined
<br><tt>eOpposite</tt> for <tt>Package.nestedPackage</tt> is <tt>Package.nestingPackage</tt> rather than undefined
<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>EMOF</tt> Model resolves the following errors and anomalies in the corresponding OMG Ecore Model.
<p>
<br><tt>nsURI</tt> for <tt>EMOF</tt> is <tt>http://schema.omg.org/spec/MOF/2.0/emof.xml</tt> rather than <tt>http:///emof.ecore</tt>
<br><tt>name</tt> for <tt>EMOF</tt> is <tt>EMOF</tt> rather than <tt>emof</tt>
<br><tt>name</tt> for <tt>Property.isID</tt> is <tt>isID</tt> rather than <tt>isId</tt>
<br><tt>Factory</tt> is defined
<br><tt>ReflectiveCollection</tt> is defined
<br><tt>ReflectiveSequence</tt> is defined
<br><tt>Comment.body</tt> is defined
<br><tt>Factory.package</tt> is defined
<br><tt>Element.tag</tt> is undefined
<br><tt>eOpposite</tt> for <tt>Tag.element</tt> is undefined
<br><tt>lowerBound</tt> for <tt>Operation.class</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Type.package</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.class</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>ordered</tt> for <tt>Class.superClass</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>Comment.annotatedElement</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>Element.ownedComment</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>Operation.raisedException</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>Package.nestedPackage</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>Package.ownedType</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>ordered</tt> for <tt>Tag.element</tt> is <tt>false</tt> rather than <tt>true</tt>
<br><tt>defaultValueLiteral</tt> for <tt>Class.isAbstract</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.isOrdered</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.isUnique</tt> is <tt>true</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.lower</tt> is <tt>1</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.upper</tt> is <tt>1</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isComposite</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isDerived</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isReadOnly</tt> is <tt>false</tt> rather than undefined
<br><tt>Element.container()</tt> is defined
<br><tt>Element.equals(object)</tt> is defined
<br><tt>Element.get(property)</tt> is defined
<br><tt>Element.getMetaClass()</tt> is defined
<br><tt>Element.isSet(property)</tt> is defined
<br><tt>Element.set(property,object)</tt> is defined
<br><tt>Element.unset(property)</tt> is defined
<br><tt>Extent.elements()</tt> is defined
<br><tt>Extent.useContainment()</tt> is defined
<br><tt>Factory.convertToString(dataType,object)</tt> is defined
<br><tt>Factory.create(metaClass)</tt> is defined
<br><tt>Factory.createFromString(dataType,string)</tt> is defined
<br><tt>ReflectiveCollection.add(object)</tt> is defined
<br><tt>ReflectiveCollection.addAll(objects)</tt> is defined
<br><tt>ReflectiveCollection.clear()</tt> is defined
<br><tt>ReflectiveCollection.remove(object)</tt> is defined
<br><tt>ReflectiveCollection.size()</tt> is defined
<br><tt>ReflectiveSequence.add(index,object)</tt> is defined
<br><tt>ReflectiveSequence.get(index)</tt> is defined
<br><tt>ReflectiveSequence.remove(index)</tt> is defined
<br><tt>ReflectiveSequence.set(index,object)</tt> is defined
<br><tt>Type.isInstance(object)</tt> is defined
<br><tt>URIExtent.contextURI()</tt> is defined
<br><tt>URIExtent.element(uri)</tt> is defined
<br><tt>URIExtent.uri(element)</tt> is defined
<br><tt>Package.nestingPackage</tt> is defined
<br><tt>Package.nestingPackage</tt> is the <tt>opposite</tt> of <tt>Package.nestedPackage</tt>
<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>EMOF</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>EMOF</tt> is defined
<br><tt>name</tt> for <tt>EMOF</tt> is <tt>EMOF</tt> rather than <tt>emof</tt>
<br><tt>name</tt> for <tt>Property.isID</tt> is <tt>isID</tt> rather than <tt>isId</tt>
<br><tt>Factory</tt> is defined
<br><tt>Real</tt> is defined
<br><tt>ReflectiveCollection</tt> is defined
<br><tt>ReflectiveSequence</tt> is defined
<br><tt>Comment.body</tt> is defined
<br><tt>Factory.package</tt> is defined
<br><tt>Element.tag</tt> is undefined
<br><tt>eOpposite</tt> for <tt>Tag.element</tt> is undefined
<br><tt>eType</tt> for <tt>MultiplicityElement.lower</tt> is <tt>Integer</tt> rather than <tt>pathmap://models/emof/primitivetypes.emof#o2</tt>
<br><tt>eType</tt> for <tt>MultiplicityElement.upper</tt> is <tt>UnlimitedNatural</tt> rather than <tt>pathmap://models/emof/primitivetypes.emof#o4</tt>
<br><tt>lowerBound</tt> for <tt>Class.isAbstract</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Class.ownedAttribute</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Class.ownedOperation</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Class.superClass</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Comment.annotatedElement</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Element.ownedComment</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Enumeration.ownedLiteral</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>EnumerationLiteral.enumeration</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>MultiplicityElement.isOrdered</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>MultiplicityElement.isUnique</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>MultiplicityElement.lower</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>MultiplicityElement.upper</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>NamedElement.name</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Operation.class</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Operation.ownedParameter</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Operation.raisedException</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Package.nestedPackage</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Package.ownedType</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Package.uri</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Parameter.operation</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.class</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.default</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.isComposite</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.isDerived</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.isID</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.isReadOnly</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Property.opposite</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Tag.element</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Tag.name</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Tag.value</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>Type.package</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>lowerBound</tt> for <tt>TypedElement.type</tt> is <tt>0</tt> rather than <tt>1</tt>
<br><tt>transient</tt> for <tt>EnumerationLiteral.enumeration</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>transient</tt> for <tt>Operation.class</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>transient</tt> for <tt>Parameter.operation</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>transient</tt> for <tt>Property.class</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>transient</tt> for <tt>Type.package</tt> is <tt>true</tt> rather than <tt>false</tt>
<br><tt>defaultValueLiteral</tt> for <tt>Class.isAbstract</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.isOrdered</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.isUnique</tt> is <tt>true</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.lower</tt> is <tt>1</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>MultiplicityElement.upper</tt> is <tt>1</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isComposite</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isDerived</tt> is <tt>false</tt> rather than undefined
<br><tt>defaultValueLiteral</tt> for <tt>Property.isReadOnly</tt> is <tt>false</tt> rather than undefined
<br><tt>Element.container()</tt> is defined
<br><tt>Element.equals(object)</tt> is defined
<br><tt>Element.get(property)</tt> is defined
<br><tt>Element.getMetaClass()</tt> is defined
<br><tt>Element.isSet(property)</tt> is defined
<br><tt>Element.set(property,object)</tt> is defined
<br><tt>Element.unset(property)</tt> is defined
<br><tt>Extent.elements()</tt> is defined
<br><tt>Extent.useContainment()</tt> is defined
<br><tt>Factory.convertToString(dataType,object)</tt> is defined
<br><tt>Factory.create(metaClass)</tt> is defined
<br><tt>Factory.createFromString(dataType,string)</tt> is defined
<br><tt>ReflectiveCollection.add(object)</tt> is defined
<br><tt>ReflectiveCollection.addAll(objects)</tt> is defined
<br><tt>ReflectiveCollection.clear()</tt> is defined
<br><tt>ReflectiveCollection.remove(object)</tt> is defined
<br><tt>ReflectiveCollection.size()</tt> is defined
<br><tt>ReflectiveSequence.add(index,object)</tt> is defined
<br><tt>ReflectiveSequence.get(index)</tt> is defined
<br><tt>ReflectiveSequence.remove(index)</tt> is defined
<br><tt>ReflectiveSequence.set(index,object)</tt> is defined
<br><tt>Type.isInstance(object)</tt> is defined
<br><tt>URIExtent.contextURI()</tt> is defined
<br><tt>URIExtent.element(uri)</tt> is defined
<br><tt>URIExtent.uri(element)</tt> is defined
<br><tt>Package.nestingPackage</tt> is defined
<br><tt>Package.nestingPackage</tt> is the <tt>opposite</tt> of <tt>Package.nestedPackage</tt>
<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>EMOF</tt> Model exhibits the following differences with respect to the Eclipse QVT Rose Model.
<p>
<br>No differences
</body>
</html>