<!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>
