| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> |
| <!-- This file was autogenerated on Fri Jun 06 17:49:52 BST 2008 by the org.eclipse.gmt.umlx.eqvto.tests.QVTOperationalConsistencyTest.testQVTOperationalConsistency() JUnit test --> |
| <html> |
| <head> |
| <title>QVTOperational Model Compliance</title> |
| <meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> |
| </head> |
| <body lang="EN-US"> |
| <h1>QVTOperational 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 QVTOperational models. |
| <p> |
| The EMOF-based <tt>QVTOperational</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>QVTOperational</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>QVTOperational</tt> Model resolves the following errors |
| and anomalies in the OMG QVT Rose Model. |
| <p> |
| <br><tt>nsPrefix</tt> for <tt>QVTOperational</tt> is <tt>qvto</tt> rather than <tt>qvtoperational</tt> |
| <br><tt>nsURI</tt> for <tt>QVTOperational</tt> is <tt>http://schema.omg.org/spec/QVT/1.0/qvtoperational.xml</tt> rather than <tt>http:///qvtoperational.ecore</tt> |
| <br><tt>name</tt> for <tt>QVTOperational</tt> is <tt>QVTOperational</tt> rather than <tt>qvtoperational</tt> |
| <br><tt>name</tt> for <tt>MappingParameter.referredDomain</tt> is <tt>referredDomain</tt> rather than <tt>refinedDomain</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ImperativeCallExp</tt> is <tt>OperationCallExp</tt>,<tt>ImperativeExpression</tt> rather than <tt>OperationCallExp</tt> |
| <br><tt>eSuperTypes</tt> for <tt>MappingOperation</tt> is <tt>ImperativeOperation</tt> rather than <tt>ImperativeOperation</tt>,<tt>Operation</tt>,<tt>NamedElement</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ModelType</tt> is <tt>Class</tt> rather than <tt>Class</tt>,<tt>URIExtent</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ResolveExp</tt> is <tt>CallExp</tt>,<tt>ImperativeExpression</tt> rather than <tt>CallExp</tt> |
| <br><tt>eType</tt> for <tt>Module.entry</tt> is <tt>EntryOperation</tt> rather than <tt>Operation</tt> |
| <br><tt>lowerBound</tt> for <tt>ModelType.metamodel</tt> is <tt>1</tt> rather than <tt>0</tt> |
| <br><tt>defaultValueLiteral</tt> for <tt>ImperativeCallExp.isVirtual</tt> is <tt>true</tt> rather than undefined |
| <br><tt>defaultValueLiteral</tt> for <tt>ModelType.conformanceKind</tt> is <tt>effective</tt> rather than undefined |
| <br><tt>ordered</tt> for <tt>OperationBody.content</tt> is <tt>true</tt> rather than <tt>false</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>QVTOperational</tt> Model resolves the following errors and anomalies in the corresponding OMG Ecore Model. |
| <p> |
| <br><tt>nsURI</tt> for <tt>QVTOperational</tt> is <tt>http://schema.omg.org/spec/QVT/1.0/qvtoperational.xml</tt> rather than <tt>http://www.schema.omg.org/spec/QVT/1.0/qvtoperational</tt> |
| <br><tt>nsPrefix</tt> for <tt>QVTOperational</tt> is <tt>qvto</tt> rather than <tt>qvtoperational</tt> |
| <br><tt>name</tt> for <tt>QVTOperational</tt> is <tt>QVTOperational</tt> rather than <tt>qvtoperational</tt> |
| <br><tt>name</tt> for <tt>MappingParameter.referredDomain</tt> is <tt>referredDomain</tt> rather than <tt>refinedDomain</tt> |
| <br><tt>eType</tt> for <tt>Module.entry</tt> is <tt>EntryOperation</tt> rather than <tt>Operation</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ImperativeCallExp</tt> is <tt>OperationCallExp</tt>,<tt>ImperativeExpression</tt> rather than <tt>OperationCallExp</tt> |
| <br><tt>eSuperTypes</tt> for <tt>MappingOperation</tt> is <tt>ImperativeOperation</tt> rather than <tt>ImperativeOperation</tt>,<tt>Operation</tt>,<tt>NamedElement</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ModelType</tt> is <tt>Class</tt> rather than <tt>Class</tt>,<tt>URIExtent</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ResolveExp</tt> is <tt>CallExp</tt>,<tt>ImperativeExpression</tt> rather than <tt>CallExp</tt> |
| <br><tt>upperBound</tt> for <tt>MappingOperation.when</tt> is <tt>1</tt> rather than <tt>-1</tt> |
| <br><tt>upperBound</tt> for <tt>MappingOperation.where</tt> is <tt>1</tt> rather than <tt>-1</tt> |
| <br><tt>lowerBound</tt> for <tt>ModelType.metamodel</tt> is <tt>1</tt> rather than <tt>0</tt> |
| <br><tt>defaultValueLiteral</tt> for <tt>ImperativeCallExp.isVirtual</tt> is <tt>true</tt> rather than undefined |
| <br><tt>defaultValueLiteral</tt> for <tt>ModelType.conformanceKind</tt> is <tt>effective</tt> rather than undefined |
| <br><tt>ordered</tt> for <tt>Module.ownedVariable</tt> is <tt>false</tt> rather than <tt>true</tt> |
| <br><tt>ordered</tt> for <tt>OperationBody.variable</tt> is <tt>false</tt> rather than <tt>true</tt> |
| <br>Unnavigable <tt>opposite</tt> of <tt>ContextualProperty.initExpression</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ContextualProperty.overridden</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ImperativeOperation.overridden</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingBody.endSection</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingBody.initSection</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.disjunct</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.inherited</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.merged</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.refinedRelation</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.when</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.where</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingParameter.referredDomain</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ModelType.additionalCondition</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ModuleImport.importedModule</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>Module.entry</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>Module.ownedTag</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>Module.ownedVariable</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ObjectExp.referredObject</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationBody.content</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationBody.variable</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.intermediateClass</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.intermediateProperty</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.modelParameter</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.refined</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.relation</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ResolveInExp.inMapping</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>QVTOperational</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>QVTOperational</tt> is defined |
| <br><tt>name</tt> for <tt>QVTOperational</tt> is <tt>QVTOperational</tt> rather than <tt>qvtoperational</tt> |
| <br><tt>name</tt> for <tt>MappingParameter.referredDomain</tt> is <tt>referredDomain</tt> rather than <tt>refinedDomain</tt> |
| <br><tt>eType</tt> for <tt>Module.entry</tt> is <tt>EntryOperation</tt> rather than <tt>Operation</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ImperativeCallExp</tt> is <tt>OperationCallExp</tt>,<tt>ImperativeExpression</tt> rather than <tt>OperationCallExp</tt> |
| <br><tt>eSuperTypes</tt> for <tt>MappingOperation</tt> is <tt>ImperativeOperation</tt> rather than <tt>ImperativeOperation</tt>,<tt>Operation</tt>,<tt>NamedElement</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ModelType</tt> is <tt>Class</tt> rather than <tt>Class</tt>,<tt>URIExtent</tt> |
| <br><tt>eSuperTypes</tt> for <tt>ResolveExp</tt> is <tt>CallExp</tt>,<tt>ImperativeExpression</tt> rather than <tt>CallExp</tt> |
| <br><tt>DirectionKind::in</tt> is defined |
| <br><tt>DirectionKind::inout</tt> is defined |
| <br><tt>DirectionKind::out</tt> is defined |
| <br><tt>ImportKind::access</tt> is defined |
| <br><tt>ImportKind::extension</tt> is defined |
| <br><tt>defaultValueLiteral</tt> for <tt>ImperativeCallExp.isVirtual</tt> is <tt>true</tt> rather than undefined |
| <br><tt>defaultValueLiteral</tt> for <tt>ModelType.conformanceKind</tt> is <tt>effective</tt> rather than undefined |
| <br><tt>transient</tt> for <tt>ModuleImport.module</tt> is <tt>true</tt> rather than <tt>false</tt> |
| <br><tt>transient</tt> for <tt>OperationBody.operation</tt> is <tt>true</tt> rather than <tt>false</tt> |
| <br><tt>transient</tt> for <tt>VarParameter.ctxOwner</tt> is <tt>true</tt> rather than <tt>false</tt> |
| <br><tt>transient</tt> for <tt>VarParameter.resOwner</tt> is <tt>true</tt> rather than <tt>false</tt> |
| <br><tt>upperBound</tt> for <tt>MappingOperation.when</tt> is <tt>1</tt> rather than <tt>-1</tt> |
| <br><tt>upperBound</tt> for <tt>MappingOperation.where</tt> is <tt>1</tt> rather than <tt>-1</tt> |
| <br><tt>lowerBound</tt> for <tt>ContextualProperty.initExpression</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ContextualProperty.overridden</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Helper.isQuery</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ImperativeCallExp.isVirtual</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ImperativeOperation.body</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ImperativeOperation.context</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ImperativeOperation.isBlackbox</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ImperativeOperation.overridden</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ImperativeOperation.result</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingBody.endSection</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingBody.initSection</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingCallExp.isStrict</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingOperation.disjunct</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingParameter.extent</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingOperation.inherited</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingOperation.merged</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingOperation.refinedRelation</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingOperation.when</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingOperation.where</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>MappingParameter.referredDomain</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ModelType.additionalCondition</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ModelType.conformanceKind</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ModuleImport.binding</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ModuleImport.kind</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ModuleImport.module</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.configProperty</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.entry</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.isBlackbox</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.moduleImport</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.ownedTag</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.ownedVariable</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>Module.usedModelType</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationBody.content</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationBody.operation</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationBody.variable</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationalTransformation.intermediateClass</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationalTransformation.intermediateProperty</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationalTransformation.modelParameter</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationalTransformation.refined</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>OperationalTransformation.relation</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ResolveExp.condition</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ResolveExp.isDeferred</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ResolveExp.isInverse</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ResolveExp.one</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ResolveExp.target</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>ResolveInExp.inMapping</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>VarParameter.ctxOwner</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>VarParameter.kind</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br><tt>lowerBound</tt> for <tt>VarParameter.resOwner</tt> is <tt>0</tt> rather than <tt>1</tt> |
| <br>Unnavigable <tt>opposite</tt> of <tt>ContextualProperty.initExpression</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ContextualProperty.overridden</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ImperativeOperation.overridden</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingBody.endSection</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingBody.initSection</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.disjunct</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.inherited</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.merged</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.refinedRelation</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.when</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingOperation.where</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>MappingParameter.referredDomain</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ModelType.additionalCondition</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ModuleImport.importedModule</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>Module.entry</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>Module.ownedTag</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>Module.ownedVariable</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ObjectExp.referredObject</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationBody.content</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationBody.variable</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.intermediateClass</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.intermediateProperty</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.modelParameter</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.refined</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>OperationalTransformation.relation</tt> is modelled |
| <br>Unnavigable <tt>opposite</tt> of <tt>ResolveInExp.inMapping</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>QVTOperational</tt> Model exhibits the following differences with respect to the Eclipse QVT Rose Model. |
| <p> |
| <br><tt>nsPrefix</tt> for <tt>QVTOperational</tt> is <tt>qvto</tt> rather than <tt>qvtoperational</tt> |
| <h2>Ecore-based Model Compliance with respect to the EMOF-based Model</h2> |
| The Ecore-based <tt>QVTOperational</tt> model exhibits the following differences with respect to its EMOF-based counterpart. |
| <p> |
| <br><tt>nsURI</tt> for <tt>QVTOperational</tt> is <tt>http://www.eclipse.org/qvt/1.0/QVTOperational</tt> rather than <tt>http://schema.omg.org/spec/QVT/1.0/qvtoperational.xml</tt> |
| <br><tt>nsPrefix</tt> for <tt>QVTOperational</tt> is <tt>eqvto</tt> rather than <tt>qvto</tt> |
| <br><tt>eType</tt> for <tt>Module.ownedTag</tt> is <tt>EAnnotation</tt> rather than <tt>Tag</tt> |
| </body> |
| </html> |