MOF Query/View/Transformation Avatar
  1. OMG Specification

MOF Query/View/Transformation — Closed Issues

  • Acronym: QVT
  • Issues Count: 286
  • Description: Issues resolved by a task force and approved by Board
Closed All
Issues resolved by a task force and approved by Board

Issues Summary

Key Issue Reported Fixed Disposition Status
QVT13-99 QVTo: Mapping Overloading MOF 1.2 QVT 1.3 Resolved closed
QVT13-93 QVTo: Mapping and other Identifiers MOF 1.2 QVT 1.3 Resolved closed
QVT13-78 QVTo: VariableInitExp wording for missing initializer MOF 1.2 QVT 1.3 Resolved closed
QVT13-97 QVTo: xselectOne, xcollectselectOne is Sequence of One not One MOF 1.2 QVT 1.3 Duplicate or Merged closed
QVT13-51 QVTo: null and AssignExp QVT 1.2 QVT 1.3 Resolved closed
QVT13-58 QVTo: access/extension default for ImportKind MOF 1.2 QVT 1.3 Resolved closed
QVT13-56 QVTo: List navigation operator example problems QVT 1.2 QVT 1.3 Resolved closed
QVT13-53 QVTo: Standard Library return types QVT 1.2 QVT 1.3 Resolved closed
QVT13-120 QVTo: object creation in helpers MOF 1.2 QVT 1.3 Duplicate or Merged closed
QVT13-61 QVTo: Calling the super implementation of an overriding operation MOF 1.2 QVT 1.3 Duplicate or Merged closed
QVT13-60 QVTo: non-mutating List operation example problem MOF 1.2 QVT 1.3 Resolved closed
QVT13-59 QVTc/QVTr: Imports QVT 1.0 QVT 1.3 Duplicate or Merged closed
QVT13-48 allInstances() QVT 1.2 QVT 1.3 Resolved closed
QVT13-47 QVTo: Per-transformation ModelTypes QVT 1.1 QVT 1.3 Closed; No Change closed
QVT13-35 QVTo: Incorrect ModelType.additionalCondition multiplicity QVT 1.1 QVT 1.3 Closed; No Change closed
QVT13-50 QVTc: initialized variables QVT 1.2 QVT 1.3 Resolved closed
QVT13-39 QVTo: Redundant argument on matchIdentifier QVT 1.1 QVT 1.3 Resolved closed
QVT13-38 QVTo: AssignExp unclear for OrderedSet QVT 1.1 QVT 1.3 Duplicate or Merged closed
QVT13-37 QVTo: deepclone on Collections QVT 1.1 QVT 1.3 Resolved closed
QVT13-36 QVTo: Extents, Models and Model Parameters QVT 1.1 QVT 1.3 Resolved closed
QVT13-43 QVTr: Variable Initialization QVT 1.2 QVT 1.3 Resolved closed
QVT13-41 QVTr: Exact Collection match QVT 1.2 QVT 1.3 Resolved closed
QVT13-40 QVTc/QVTr: abstract mappings/relations QVT 1.1 QVT 1.3 Resolved closed
QVT13-46 QVTo: multi-valued initialisation from single value QVT 1.2 QVT 1.3 Duplicate or Merged closed
QVT13-16 QVTo: Introductory Examples Problems QVT 1.1 QVT 1.3 Resolved closed
QVT13-14 QVTo: ListLiteralExp inheritance QVT 1.1 QVT 1.3 Resolved closed
QVT13-13 QVTo: Typedef for Standard Library predefined types QVT 1.0 QVT 1.3 Resolved closed
QVT13-24 QVTo: when and where as assertions QVT 1.1 QVT 1.3 Resolved closed
QVT13-23 QVTo: Tracing and Resolving QVT 1.1 QVT 1.3 Resolved closed
QVT13-22 QVTo: Trace data for an 'accessed' transformation QVT 1.1 QVT 1.3 Duplicate or Merged closed
QVT13-6 QVTc/QVTr: Imports QVT 1.0 QVT 1.3 Resolved closed
QVT13-4 QVTr: UML to RDBMS Example Problems QVT 1.0 QVT 1.3 Resolved closed
QVT13-20 QVTc/QVTr: Queries and their contexts QVT 1.1 QVT 1.3 Resolved closed
QVT13-26 Multiple input models QVT 1.1 QVT 1.3 Resolved closed
QVT13-2 Missing Identifier Syntax QVT 1.0 QVT 1.3 Resolved closed
QVT13-34 QVTo: xcollect is ambiguously flattened QVT 1.1 QVT 1.3 Resolved closed
QVT13-33 QVTo: Passing DataTypes 'by-reference' QVT 1.1 QVT 1.3 Resolved closed
QVT13-30 QVTo: Inadequate helper/query distinction QVT 1.2 QVT 1.3 Duplicate or Merged closed
QVT13-29 QVTo: invalid in ImperativeOCL QVT 1.2 QVT 1.3 Resolved closed
QVT13-28 QVTo: 'result' for Tuple returns QVT 1.2 QVT 1.3 Resolved closed
QVT13-42 QVTr: Multi-root match QVT 1.2 QVT 1.3 Resolved closed
QVT13-101 QVTc/QVTo/QVTr acronyms MOF 1.2 QVT 1.3 Resolved closed
QVT13-17 QVTo: Relationship between QVTo Mapping and QVTr Relation QVT 1.1 QVT 1.3 Deferred closed
QVT13-15 QVTr: syntax mapping (correction to Issue 10646 resolution) QVT 1.1 QVT 1.3 Deferred closed
QVT13-12 QVTo: Standard Library return types QVT 1.0 QVT 1.3 Duplicate or Merged closed
QVT13-11 QVTo: synonyms QVT 1.0 QVT 1.3 Resolved closed
QVT13-10 QVTo: Typedef QVT 1.0 QVT 1.3 Resolved closed
QVT13-9 QVTo: element creation and element attachment/detachment to/from an extent QVT 1.0 QVT 1.3 Duplicate or Merged closed
QVT13-8 QVTo: ImperativeOCL conflicts with EssentialOCL semantics QVT 1.0 QVT 1.3 Resolved closed
QVT13-7 QVTr: BlackBox operation signature difficulties QVT 1.0 QVT 1.3 Deferred closed
QVT13-3 QVTr: Undefined semantics QVT 1.0 QVT 1.3 Deferred closed
QVT13-21 QVTr: Deletion semantics QVT 1.1 QVT 1.3 Deferred closed
QVT13-19 QVTr: Rule Overriding semantics QVT 1.1 QVT 1.3 Deferred closed
QVT13-18 QVTc/QVTr: View/Transformation discrepancy QVT 1.1 QVT 1.3 Deferred closed
QVT13-1 QVTr: Missing Name and Expression syntax QVT 1.0 QVT 1.3 Duplicate or Merged closed
QVT13-32 Inconsistent multiple inheritance QVT 1.1 QVT 1.3 Deferred closed
QVT13-31 QVTr: working with stereotypes: QVT 1.0 QVT 1.3 Deferred closed
QVT13-45 QVTc/QVTr: Pattern.bindsTo composition QVT 1.2 QVT 1.3 Deferred closed
QVT13-52 QVTo: Standard Library mode and namespace QVT 1.2 QVT 1.3 Deferred closed
QVT13-27 QVTo: Inadequate definition of "late" semantics QVT 1.2 QVT 1.3 Deferred closed
QVT13-25 QVTo: Enhance ObjectExp to allow constructors invocation QVT 1.1 QVT 1.3 Deferred closed
QVT13-134 QVTo: How can an UnlinkExp.target be a Property QVT 1.2 QVT 1.3 Deferred closed
QVT-90 Pre-ballot 2 FTF Appendix A: Erroneous memberSelection grammar QVT 1.0b1 QVT 1.0 Resolved closed
QVT-89 Chapter 7 QVTrelation Standard Library QVT 1.0b1 QVT 1.0 Resolved closed
QVT-88 RelationalTransformation as a subclass of Transformation QVT 1.0b1 QVT 1.0 Resolved closed
QVT11-113 QVTo Standard Lybrary and typedefs Issue. Extending OCL predefined types QVT 1.0 QVT 1.1 Duplicate or Merged closed
QVT11-112 7.13.1 Qualified query name QVT 1.0 QVT 1.1 Resolved closed
QVT11-111 7.13.1 Multiple transformation extension QVT 1.0 QVT 1.1 Resolved closed
QVT-86 Top-levelness in QVT relations need to be enforced by a constraint QVT 1.0b1 QVT 1.0 Resolved closed
QVT-85 Escape characters in string literals QVT 1.0b1 QVT 1.0 Resolved closed
QVT-87 Rules for infering an extent QVT 1.0b1 QVT 1.0 Resolved closed
QVT-84 Kind of expressions in collection patterns QVT 1.0b1 QVT 1.0 Resolved closed
QVT-79 Member selection operator QVT 1.0b1 QVT 1.0 Resolved closed
QVT-83 Relation To Core Transformation QVT 1.0b1 QVT 1.0 Resolved closed
QVT-82 Formatting QVT 1.0b1 QVT 1.0 Resolved closed
QVT-81 Typos QVT 1.0b1 QVT 1.0 Resolved closed
QVT-80 Ambiguity QVT 1.0b1 QVT 1.0 Resolved closed
QVT-76 Missing paramDeclaration QVT 1.0b1 QVT 1.0 Resolved closed
QVT-75 Member selection as domain body QVT 1.0b1 QVT 1.0 Resolved closed
QVT-74 Unsafe oclExpressionCS QVT 1.0b1 QVT 1.0 Resolved closed
QVT-78 Filename QVT 1.0b1 QVT 1.0 Resolved closed
QVT-77 Missing oclExpressionCSList QVT 1.0b1 QVT 1.0 Resolved closed
QVT-73 Over-enthusiastic semicolon QVT 1.0b1 QVT 1.0 Resolved closed
QVT-72 Missing commas QVT 1.0b1 QVT 1.0 Resolved closed
QVT-71 Unquoted commas QVT 1.0b1 QVT 1.0 Resolved closed
QVT-70 Comments QVT 1.0b1 QVT 1.0 Resolved closed
QVT-69 OCL extensions QVT 1.0b1 QVT 1.0 Resolved closed
QVT-68 QVTrelation to QVTcore transformation QVT 1.0b1 QVT 1.0 Resolved closed
QVT-67 variable-assignment isn't defined in Core language QVT 1.0b1 QVT 1.0 Resolved closed
QVT11-110 Section: 9/17 page 134 QVT 1.0 QVT 1.1 Resolved closed
QVT11-109 Section: 9/17 page 132 QVT 1.0 QVT 1.1 Resolved closed
QVT11-108 Section: 8/2 page 102 QVT 1.0 QVT 1.1 Resolved closed
QVT11-107 Section: 8/2 page 101 QVT 1.0 QVT 1.1 Resolved closed
QVT11-106 Section: 8/2 page 99 QVT 1.0 QVT 1.1 Resolved closed
QVT11-105 Section: 8/2 page 98 QVT 1.0 QVT 1.1 Resolved closed
QVT11-104 Section: 8/2 page 97 QVT 1.0 QVT 1.1 Resolved closed
QVT11-103 Section: 8/2 QVT 1.0 QVT 1.1 Resolved closed
QVT11-102 Section: 8/2 page 95 QVT 1.0 QVT 1.1 Resolved closed
QVT11-101 Section: 8/2 page 94 QVT 1.0 QVT 1.1 Resolved closed
QVT11-100 Section: 8/2 page 93 QVT 1.0 QVT 1.1 Resolved closed
QVT11-99 Section: 8/2 page 92 QVT 1.0 QVT 1.1 Resolved closed
QVT11-96 Section: 8/2 page 79 QVT 1.0 QVT 1.1 Resolved closed
QVT11-95 Section: 8/2 page 70 QVT 1.0 QVT 1.1 Resolved closed
QVT11-94 Section: A.2.2 QVT 1.0 QVT 1.1 Resolved closed
QVT11-98 Section: 8/2 page 91 QVT 1.0 QVT 1.1 Resolved closed
QVT11-97 Section: 8/2 page 86 QVT 1.0 QVT 1.1 Resolved closed
QVT11-93 Section: 8/3 page 110 (03) QVT 1.0 QVT 1.1 Resolved closed
QVT11-92 Section: 8/3 page 110 (02) QVT 1.0 QVT 1.1 Resolved closed
QVT11-91 Section: 8/3 page 110 QVT 1.0 QVT 1.1 Resolved closed
QVT11-90 Section: 8/2 page 99 QVT 1.0 QVT 1.1 Resolved closed
QVT11-89 Section: 8/2 page 95 QVT 1.0 QVT 1.1 Resolved closed
QVT11-88 Section: 8/2 page 88 QVT 1.0 QVT 1.1 Resolved closed
QVT11-87 Section: 8/1 QVT 1.0 QVT 1.1 Resolved closed
QVT11-86 Section: 7/13 QVT 1.0 QVT 1.1 Resolved closed
QVT11-85 Section: 8/2 page 79 QVT 1.0 QVT 1.1 Resolved closed
QVT11-83 Section: 7/11 QVT 1.0 QVT 1.1 Resolved closed
QVT11-82 Section: 8/2 QVT 1.0 QVT 1.1 Resolved closed
QVT11-84 Section: 8/2 QVT 1.0 QVT 1.1 Resolved closed
QVT-66 QVT Issue: Support for CMOF metamodels QVT 1.0b1 QVT 1.0 Resolved closed
QVT-61 Missing iterator variable in resolve expressions QVT 1.0b1 QVT 1.0 Resolved closed
QVT-64 Inconsistency of multiplicity of ImperativeIterateExp::target QVT 1.0b1 QVT 1.0 Resolved closed
QVT-63 When and where clause for mapping operations QVT 1.0b1 QVT 1.0 Resolved closed
QVT-62 Missing multiplicity of AnonymousLiteralPart::value QVT 1.0b1 QVT 1.0 Resolved closed
QVT-65 Logging textual messages that depend on variables QVT 1.0b1 QVT 1.0 Resolved closed
QVT-60 Missing variable references within inlined object expressions QVT 1.0b1 QVT 1.0 Resolved closed
QVT-59 Missing association from MappingParameter to a ModelParameter QVT 1.0b1 QVT 1.0 Resolved closed
QVT-58 Typo error ImperativeIteratorExp expected in diagram QVT 1.0b1 QVT 1.0 Resolved closed
QVT-57 Entry operations in operational definitions QVT 1.0b1 QVT 1.0 Resolved closed
QVT-56 isTopLevel should not be a derived property QVT 1.0b1 QVT 1.0 Resolved closed
QVT-55 RelationalTransformation as a subclass of Transformation QVT 1.0b1 QVT 1.0 Resolved closed
QVT-54 Typo error for properties whenOwner and whereOwner QVT 1.0b1 QVT 1.0 Resolved closed
QVT-53 Bad navigability in cross-package links QVT 1.0b1 QVT 1.0 Resolved closed
QVT-52 Revise the encoding of primitive domains QVT 1.0b1 QVT 1.0 Resolved closed
QVT-51 Incorrect composition of variables in patterns QVT 1.0b1 QVT 1.0 Resolved closed
QVT-50 Page 131 QVT 1.0b1 QVT 1.0 Resolved closed
QVT-48 Page 117 QVT 1.0b1 QVT 1.0 Resolved closed
QVT-47 Page 45 and 165 QVT 1.0b1 QVT 1.0 Resolved closed
QVT-46 Page 30 QVT 1.0b1 QVT 1.0 Resolved closed
QVT-49 Page 118 QVT 1.0b1 QVT 1.0 Resolved closed
QVT-45 Page 28 QVT 1.0b1 QVT 1.0 Resolved closed
QVT12-8 abstract/concrete syntax for try/catch in clauses 8.2.2.13 & 8.2.2.14 lacks support for retrieving the exception caught QVT 1.1 QVT 1.2 Resolved closed
QVT12-7 bug in the uml to rdbms transformation example QVT 1.1 QVT 1.2 Resolved closed
QVT12-6 Rule Overriding in QVTr QVT 1.1 QVT 1.2 Resolved closed
QVT12-5 Figure 7.3 QVT 1.1 QVT 1.2 Resolved closed
QVT12-3 QVT1.1: Add an operation Model::getURI() QVT 1.1 QVT 1.2 Resolved closed
QVT12-2 Please provide a non-null text in the Scope section of documents ptc/09-12-06 and ptc/09-12-05 QVT 1.1 QVT 1.2 Resolved closed
QVT12-1 QVT 1.1 Opposite navigation scoping operator (Correction to Issue 11341 resolution) QVT 1.1 QVT 1.2 Resolved closed
QVT12-4 Derived properties in QVTr QVT 1.1 QVT 1.2 Resolved closed
QVT11-80 Wrong Chapter reference on Page 2 Language Dimension QVT 1.0 QVT 1.1 Resolved closed
QVT11-79 Typos in signatures of "allSubobjectsOfType" and "allSubobjectsOfKind" QVT 1.0 QVT 1.1 Resolved closed
QVT11-77 Minor typographical error in ImperativeIterateExp notation QVT 1.0 QVT 1.1 Resolved closed
QVT11-76 Typo in 'Model::rootObjects' signature QVT 1.0 QVT 1.1 Resolved closed
QVT11-70 Page 103: Associations Section 8.2.2.23 InstantiationExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-69 Page 100: Superclasses Section 8.2.2.8 LogExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-74 Page 106: Associations Section 8.2.2.29 DictLiteralExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-73 Page 105: Associations Section 8.2.2.26 DictionaryType QVT 1.0 QVT 1.1 Resolved closed
QVT11-78 Capitalization of leading characters in multiword operation names QVT 1.0 QVT 1.1 Resolved closed
QVT11-75 Page 108: Section 8.3 Standard Library QVT 1.0 QVT 1.1 Resolved closed
QVT11-71 Page 103: Figure 8.7 QVT 1.0 QVT 1.1 Resolved closed
QVT11-68 Page 95: Associations Section 8.2.2.8 SwitchExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-72 Page 105: Associations Section 8.2.2.24 Typedef QVT 1.0 QVT 1.1 Resolved closed
QVT11-65 Page 90: Notation Section 8.2.2.4 WhileExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-64 Page 89: Figure 8.6 QVT 1.0 QVT 1.1 Resolved closed
QVT11-67 Page 95: Notation Section 8.2.2.7 ImperativeIterateExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-66 Page 93: Associations Section 8.2.2.7 ImperativeIterateExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-63 Page 87: Notation Section 8.2.1.24 ObjectExp (03) QVT 1.0 QVT 1.1 Resolved closed
QVT11-62 Page 87: Section 8.2.1.24 ObjectExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-61 Page 87: Section 8.2.1.24 ObjectExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-81 A referenced picture is missing QVT 1.0 QVT 1.1 Resolved closed
QVT12-18 Specify List::reject and other iterations QVT 1.1 QVT 1.2 Resolved closed
QVT12-13 Inconsistent description about constructor names QVT 1.1 QVT 1.2 Resolved closed
QVT12-12 QVT atomicity QVT 1.1 QVT 1.2 Resolved closed
QVT12-17 Imprecise result types of resolveIn expressions QVT 1.1 QVT 1.2 Resolved closed
QVT12-16 Resolve expressions without source variable QVT 1.1 QVT 1.2 Resolved closed
QVT12-15 Not possible to remove from a mutable List QVT 1.1 QVT 1.2 Resolved closed
QVT12-14 ObjectExp Abstract Syntax misses a ConstructorBody QVT 1.1 QVT 1.2 Resolved closed
QVT12-9 clause 8.3.1.4 Exception needs to document the taxonomy of Exception types in QVT1.1 QVT 1.1 QVT 1.2 Resolved closed
QVT12-11 Intermediate data not allowed for libraries QVT 1.1 QVT 1.2 Resolved closed
QVT12-10 Consider submitting the QVTO profile out of UML Profile for NIEM, section 9-2 to QVT 1.2 QVT 1.1 QVT 1.2 Resolved closed
QVT12-21 Issue 19178 resolution is rubbish QVT 1.1 QVT 1.2 Resolved closed
QVT12-20 What happens when an exception is thrown by an exception handler QVT 1.1 QVT 1.2 Resolved closed
QVT12-19 List does not support asList() QVT 1.1 QVT 1.2 Resolved closed
QVT11-1 Missing explanations in BNF QVT 1.0 QVT 1.1 Resolved closed
QVT11-7 9.18 Top-level syntax QVT 1.0 QVT 1.1 Resolved closed
QVT11-6 9.18 The middle direction packages QVT 1.0 QVT 1.1 Resolved closed
QVT11-11 Consider renaming collectselect as xcollectselect QVT 1.0 QVT 1.1 Resolved closed
QVT11-10 9.18 Typographics Issues QVT 1.0 QVT 1.1 Resolved closed
QVT11-4 9.18 Trailing | QVT 1.0 QVT 1.1 Resolved closed
QVT11-3 9.17 Variable composition QVT 1.0 QVT 1.1 Resolved closed
QVT11-13 Assignment.slotExpression QVT 1.0 QVT 1.1 Resolved closed
QVT11-12 Consider using asTuple instead of tuple keyword for TupleExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-2 9.18: Realized QVT 1.0 QVT 1.1 Resolved closed
QVT11-8 9.18 Anonymous Maps QVT 1.0 QVT 1.1 Resolved closed
QVT11-9 9.18 EnforcementOperation QVT 1.0 QVT 1.1 Resolved closed
QVT11-5 9.18 GuardPattern assignments QVT 1.0 QVT 1.1 Resolved closed
QVT11-44 QVTo Standard Library. Clarification of the side-effect operations is needed. QVT 1.0 QVT 1.1 Resolved closed
QVT11-43 QVTo Standard Library: Some operation's signatures seem to be erroneous. QVT 1.0 QVT 1.1 Resolved closed
QVT11-54 Page 75: Section 8.2.1.13 Constructor QVT 1.0 QVT 1.1 Resolved closed
QVT11-53 Page 73: Section 8.2.1.11 Helper QVT 1.0 QVT 1.1 Resolved closed
QVT11-48 add the following operations to mutable lists QVT 1.0 QVT 1.1 Resolved closed
QVT11-47 Missing operations on Lists QVT 1.0 QVT 1.1 Resolved closed
QVT11-42 QVT 1.0 9.18 Missing transformation extension concrete syntax QVT 1.0 QVT 1.1 Resolved closed
QVT11-41 QVT 1.0 7.13.5 Transformation hierarchy QVT 1.0 QVT 1.1 Resolved closed
QVT11-51 Page 72, Figure 8-2 QVT 1.0 QVT 1.1 Resolved closed
QVT11-50 Page 65, Notation Section 8.2.1.3 Module QVT 1.0 QVT 1.1 Resolved closed
QVT11-45 Explanation of the 'Model::removeElement' operation needs clarification QVT 1.0 QVT 1.1 Resolved closed
QVT11-46 explanation of the operation: 'List(T)::insertAt(T,int) QVT 1.0 QVT 1.1 Resolved closed
QVT11-52 Page 73, Section 8.2.1.10 OperationalTransformation QVT 1.0 QVT 1.1 Resolved closed
QVT11-49 Pag 63, Section 8.2.1.1 OperationalTransformation QVT 1.0 QVT 1.1 Resolved closed
QVT11-39 Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtoperational.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-38 Errors and anomalies in QVT 1.0 07-07-08 ZIP imperativeocl.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-29 Section: 8.1.14 QVT 1.0 QVT 1.1 Resolved closed
QVT11-28 MOF QVT 1.0, 8.2.2.22, Unclear specification of Unpack notation shorthand QVT 1.0 QVT 1.1 Resolved closed
QVT11-32 Errors and anomalies in QVT 1.0 07-07-08 ZIP emof.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-31 Errors and anomalies in QVT 1.0 07-07-08 ZIP qvt_metamodel.emof.xml QVT 1.0 QVT 1.1 Resolved closed
QVT11-30 errors and anomalies in QVT_1.0.mdl in the 07-07-08 ZIP QVT 1.0 QVT 1.1 Resolved closed
QVT11-37 Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtcore.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-36 Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtrelation.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-34 Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtbase.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-33 Errors and anomalies in QVT 1.0 07-07-08 ZIP essentialocl.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-35 Errors and anomalies in QVT 1.0 07-07-08 ZIP qvttemplate.ecore QVT 1.0 QVT 1.1 Resolved closed
QVT11-27 Section: 8.2.2.22 QVT 1.0 QVT 1.1 Resolved closed
QVT11-40 QVT 1.0 9.* Missing query concrete syntax QVT 1.0 QVT 1.1 Resolved closed
QVT11-60 Page 86: Notation Section 8.2.1.23 ResolveExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-59 Page 84: Notation Section 8.2.1.22 MappingCallExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-57 Page 83: Notation Section 8.2.1.22 MappingCallExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-56 Page 83: Section 8.2.1.22 MappingCallExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-55 Page 75: Section 8.2.1.14 ContextualProperty QVT 1.0 QVT 1.1 Resolved closed
QVT11-58 Page 83: Notation Section 8.2.1.22 MappingCallExp QVT 1.0 QVT 1.1 Resolved closed
QVT11-14 QVT 1.0 Section 7,8,9,10 : Navigating non-navigable opposite roles QVT 1.0 QVT 1.1 Resolved closed
QVT11-19 Section 7.11.2.3: Empty CollectionTemplateExp is useful QVT 1.0 QVT 1.1 Resolved closed
QVT11-18 Inconsistent Rule.transformation multiplicity/composes for Mapping QVT 1.0 QVT 1.1 Resolved closed
QVT11-26 Issue against QVT ptc/07-07-07 : clause 7.2.3 QVT 1.0 QVT 1.1 Resolved closed
QVT11-25 Issue against QVT ptc/07-07-07 : relational grammar QVT 1.0 QVT 1.1 Resolved closed
QVT11-16 Section: 7.11.3 QVT 1.0 QVT 1.1 Resolved closed
QVT11-15 Section: 7.13 QVT 1.0 QVT 1.1 Resolved closed
QVT11-17 9.17.12, EnforcementOperation.operationCallExp should be composes QVT 1.0 QVT 1.1 Resolved closed
QVT11-23 Section: 7.13.3 / 8.4.2 QVT 1.0 QVT 1.1 Resolved closed
QVT11-22 There is a reference to a figure that does not exist : figure 1. QVT 1.0 QVT 1.1 Resolved closed
QVT11-24 Section: 8.4.7 QVT 1.0 QVT 1.1 Resolved closed
QVT11-21 Section: 8.2.1.7 QVT 1.0 QVT 1.1 Resolved closed
QVT11-20 Section: 8.2.1.6 QVT 1.0 QVT 1.1 Resolved closed
QVT-43 Consider using the case keyword within swith expression QVT 1.0b1 QVT 1.0 Resolved closed
QVT-42 Argument list missing in raise expression QVT 1.0b1 QVT 1.0 Resolved closed
QVT-44 Consider using the package keyword instead of metamodel QVT 1.0b1 QVT 1.0 Resolved closed
QVT-39 Missing notation to indicate the enforced direction in mapping operations QVT 1.0b1 QVT 1.0 Resolved closed
QVT-38 Some errors in BNF grammar of the operational part QVT 1.0b1 QVT 1.0 Resolved closed
QVT-41 Consider adjusting the notation for unpack QVT 1.0b1 QVT 1.0 Resolved closed
QVT-40 Inconsistency in definition of TryExp with figure QVT 1.0b1 QVT 1.0 Resolved closed
QVT-37 Missing text for notation for class properties in Section 8.4.6 QVT 1.0b1 QVT 1.0 Resolved closed
QVT-36 Any used instead of MOF::Object in operational type extensions QVT 1.0b1 QVT 1.0 Resolved closed
QVT-35 Typos and omissions in the QVT operational Part QVT 1.0b1 QVT 1.0 Resolved closed
QVT-34 Top-level constraint too restrictive QVT 1.0b1 QVT 1.0 Resolved closed
QVT-33 8.4.3.5 != and <> QVT 1.0b1 QVT 1.0 Resolved closed
QVT-32 8.4.3.5 = and == QVT 1.0b1 QVT 1.0 Resolved closed
QVT-31 Pre-ballot 2 FTF Appendix A: Erroneous collectionTemplate grammar QVT 1.0b1 QVT 1.0 Resolved closed
QVT-30 Chapter 7,8,9 EssentialOCL usage QVT 1.0b1 QVT 1.0 Resolved closed
QVT-29 Chapter 7 Collection::=() QVT 1.0b1 QVT 1.0 Resolved closed
QVT-26 QVTOperational examples have some errors and need to be inline with grammar QVT 1.0b1 QVT 1.0 Resolved closed
QVT-28 7.11.3.1 Relation.operationalImpl QVT 1.0b1 QVT 1.0 Resolved closed
QVT-27 Consider renaming 'AnonymousTuple' as 'OrderedTuple' QVT 1.0b1 QVT 1.0 Resolved closed
QVT-25 Find better notation for explicit extent indication in op mapping parameter QVT 1.0b1 QVT 1.0 Resolved closed
QVT-24 8.4.6.2 QVToperational is not a syntax extension of OCL QVT 1.0b1 QVT 1.0 Resolved closed
QVT-23 7.13 Implicit Variable Declarations QVT 1.0b1 QVT 1.0 Resolved closed
QVT-22 7.13 Comments QVT 1.0b1 QVT 1.0 Resolved closed
QVT-21 7.11.2.3 CollectionTemplateExp.referredCollectionType QVT 1.0b1 QVT 1.0 Resolved closed
QVT-20 7.11.2.3 CollectionTemplateExp QVT 1.0b1 QVT 1.0 Resolved closed
QVT-19 7.11.1.2 Meta-model Id persistence QVT 1.0b1 QVT 1.0 Resolved closed
QVT-16 7.13.1 Scoped transformation name QVT 1.0b1 QVT 1.0 Resolved closed
QVT-15 Distinguishing pure syntactic tags from other tags in QVTOperational QVT 1.0b1 QVT 1.0 Resolved closed
QVT-18 7.13.1 Collection conversions QVT 1.0b1 QVT 1.0 Resolved closed
QVT-17 7.13.1 Model class name semantics QVT 1.0b1 QVT 1.0 Resolved closed
QVT-14 Extent of intermediate classes in QVT Operational QVT 1.0b1 QVT 1.0 Resolved closed
QVT-13 The QVT Operational StdLib has various mispellings and copy-paste errors QVT 1.0b1 QVT 1.0 Resolved closed
QVT-12 Clarify the return type of xselect operator QVT 1.0b1 QVT 1.0 Resolved closed
QVT-11 Incomplete specification for the resolution operation ResolveExp QVT 1.0b1 QVT 1.0 Resolved closed
QVT-10 The representation and the containment of 'this' variable is missing QVT 1.0b1 QVT 1.0 Resolved closed
QVT-9 The BNF syntax of QVTOperational is not complete QVT 1.0b1 QVT 1.0 Resolved closed
QVT-8 rules for solving type identifiers are missing in the QVTOperational syntax QVT 1.0b1 QVT 1.0 Resolved closed
QVT-7 Relations language should support "default assignments" QVT 1.0b1 QVT 1.0 Resolved closed
QVT-6 Relations language QVT 1.0b1 QVT 1.0 Resolved closed
QVT-5 Identifiers syntax to avoid reserved keywords QVT 1.0b1 QVT 1.0 Resolved closed
QVT-4 Collection Type syntax ambiguities QVT 1.0b1 QVT 1.0 Resolved closed
QVT-3 Problem with Domain syntax QVT 1.0b1 QVT 1.0 Resolved closed
QVT-2 RelationalCallExp missing QVT 1.0b1 QVT 1.0 Resolved closed
QVT-1 Query result syntax QVT 1.0b1 QVT 1.0 Resolved closed

Issues Descriptions

QVTo: Mapping Overloading

  • Key: QVT13-99
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    QVTo has one form of mapping overloading provided by disjuncts. This is poorly specified.

    It probably has another provided by name collision. This is unspecified.

  • Reported: MOF 1.2 — Tue, 6 Oct 2015 19:34 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    What are the QVTo mapping overloading semantics?

    QVTo has one form of mapping overloading provided by disjuncts. This is poorly specified.

    It probably has another provided by name collision. This is unspecified.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Mapping and other Identifiers

  • Key: QVT13-93
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The <rulerefs> between mappings has no defined semantics.

    Presumably:

    <package-name>*::<transformation-name>::<context-type>::<mapping-name>

    allowing <package-name>*::<transformation-name> to be omitted defauklting to the current transdformation, and, preserving the current example semantics, resolving an omitted <context-type> by serching all mapping names in the transformation.

  • Reported: MOF 1.2 — Tue, 6 Oct 2015 12:29 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Undefined rulerefs

    The <rulerefs> between mappings has no defined semantics.

    Presumably:

    <package-name>*::<transformation-name>::<context-type>::<mapping-name>

    allowing <package-name>*::<transformation-name> to be omitted defauklting to the current transdformation, and, preserving the current example semantics, resolving an omitted <context-type> by serching all mapping names in the transformation.

    Issue Links

    Discussion

    Since <mapping_id> needs definition, we can take the opportunity to rename the strange <rulerefs>.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: VariableInitExp wording for missing initializer

  • Key: QVT13-78
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    8.2.2.10 VariableInitExp says

    A variable may not declare an initialization value.

    when surely it means

    A variable may omit an initialization value.

  • Reported: MOF 1.2 — Mon, 5 Oct 2015 11:32 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Unfortunate VariableInitExp wording for missing initializer

    8.2.2.10 VariableInitExp says

    A variable may not declare an initialization value.

    when surely it means

    A variable may omit an initialization value.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: xselectOne, xcollectselectOne is Sequence of One not One

  • Key: QVT13-97
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The return type of xselectOne, xcollectselectOne returns a SEquence rather than an optional value.

  • Reported: MOF 1.2 — Tue, 6 Oct 2015 18:42 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    xselectOne, xcollectselectOne is Sequence of One not One

    The return type of xselectOne, xcollectselectOne returns a Sequence rather than an optional value.

    Discussion

    QVT13-34 revealed numerous errors in the pseudocode. This error is just one of many fixed by its resolution.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: null and AssignExp

  • Key: QVT13-51
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    "A compound assignment is equivalent to perform as much simple assignments as there are expressions. Null values are skipped."

    This is poor English and it conflicts with the OCL specification.

    Pedantically it only skips "Null" values so "null values" are allowed anyway.

    "An assignment may receive a future variable produced by a deferred resolve expression (see ResolveExp). The effect is equivalent to receive a null value except that a side-effect action occurs in order to allow re-executing the assignment at the end of the transformation.
    An assignment expression returns the assigned value unless it is a future value, in which case null is returned."

    This is barely intelligible and presumably related to the SmartQVT implementation. It certainly has confusion about nulls.

    I recommend following OCL and allowing null values. ->excluding(null) is easily added.

  • Reported: QVT 1.2 — Tue, 31 Mar 2015 16:15 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Conflicting exclusion of null during assign

    "A compound assignment is equivalent to perform as much simple assignments as there are expressions. Null values are skipped."

    This is poor English and it conflicts with the OCL specification.

    Pedantically it only skips "Null" values so "null values" are allowed anyway.

    "An assignment may receive a future variable produced by a deferred resolve expression (see ResolveExp). The effect is equivalent to receive a null value except that a side-effect action occurs in order to allow re-executing the assignment at the end of the transformation.
    An assignment expression returns the assigned value unless it is a future value, in which case null is returned."

    This is barely intelligible and presumably related to the SmartQVT implementation. It certainly has confusion about nulls.

    I recommend following OCL and allowing null values. ->excluding(null) is easily added.

    Issue 19238

    AssignExp to an Collection should make clear that the results is

    target->including(source)->excluding(null)

    Issue 19687

    The two examples

    mymultivaluedproperty += object Node

    {…}; // additive semantics
    mymultivaluedproperty := object Node {…}

    ; // the list is reset and re-assigned

    are simple assignments from single valued RHS. These are not covered in the preceding description.

    I consider both to be errors since the RHS is unsuitable for assignment to the LHS. In both cases an asSet() or whatever should be appended.

    More generally, the library operation that exhibits the "additive semantics" should be clearly identified.

    Since addition to OCL collections is not permissible, it may be necessary to define constructors, so that

    var c : Set(String) := Set

    {"a"}

    ;

    invokes the Set(T)(Set(T)) constructor.

    This would allow initialization for a Sequence from a List and vice-versa that is otherwise magic.

    which should exploit an OCL definition of OrderedSet::including to be add at end if necessary.

    Discussion - nulls

    UML does not allow nulls in multi-values, therefore nulls must be excluded during assignments to properties.

    OCL does allow nulls, and even though this may appear to be a mistake, QVTo must support nulls in OCL collections until OCL is changed.

    Discussion - multiple values

    The current wording leaves open the design choice between:

    a) perfect fidelity of nested types, i.e. addition of a Collection of Collections adds the one Collection of Collection element

    b) perfect flattening, i.e. addition of a Collection of Collections adds all the elements in the nested collections.

    c) something in between, perhaps behaving differently depending whether the LHS is a nested collection or not,

    OCL unfortunately started without nested collections so that imploicit-collect flattens requiring the explicit collectNested for perfect Collection type fidelity. a) is not really an option. c) risks a confusing anarchy. b) is what is often wanted. If users want nested collections they can use more explicit operations.

    Discussion - future values

    Premature access to yet-to-be initialized values is obviously bad. Making this an error is an option, but it would be a breaking change; there may be users who poll the variable awaiting initialization. Simplest to just clarify the words to indicate that the value of any yet-to-be-initialized value is null, even when null is not assignable to the value. It is not initialized to null; it is null until initialized.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: access/extension default for ImportKind

  • Key: QVT13-58
  • Legacy Issue Number: 19816
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    For imported compilation units, the specification should clearly state what happens if there is no corresponding ModuleImport for any of the modules included inside the imported unit.

    The Eclipse QVTo implementation applies extends semantics by default. A very bad idea, because it leads to undesired extensions and overridings (especially in case of multiple modules per unit).

    Using access as a default is a much better idea, but maybe clutters the namespaces at AST level with needless module imports.

    Therefore applying neither access nor extends could be another good idea, but lacks a helpful default behavior.

  • Reported: MOF 1.2 — Thu, 9 Jul 2015 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Unspecified handling of imports without access/extends

    For imported compilation units, the specification should clearly state what happens if there is no corresponding ModuleImport for any of the modules included inside the imported unit.

    The Eclipse QVTo implementation applies extends semantics by default. A very bad idea, because it leads to undesired extensions and overridings (especially in case of multiple modules per unit).

    Using access as a default is a much better idea, but maybe clutters the namespaces at AST level with needless module imports.

    Therefore applying neither access nor extends could be another good idea, but lacks a helpful default behavior.

    Discussion

    Following some off-JIRA correspondence, the original issue is clearer and simpler.

    The 8.2.1.4 words say that ImportKind has only two possibilities. But the words and model omit a [1] multiplicity or defaultValue so that null is a third possibility. The grammar also permits a missing ImportKind.

    So as suggested we could introduce a third null semantics, or define one of access/extends as the default.

    I see no benefit in a third semantics.

    "extends" is a very serious mutating activity, not a default.

    "access" is harmless and non-mutating. Hardly AST clutter. If the user didn't want the names the user should not have specified an import.

    Let "access" be the default.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: List navigation operator example problems

  • Key: QVT13-56
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Clause 8.1.14 uses "mylist.add(5);" rather than "mylist->add(5);

    and "mydict.put"

  • Reported: QVT 1.2 — Mon, 13 Jul 2015 12:40 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Incorrect navigation operator for LIst operations

    Clause 8.1.14 uses "mylist.add(5);" rather than "mylist->add(5); and "mydict.put"

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Standard Library return types

  • Key: QVT13-53
  • Legacy Issue Number: 19760
  • Status: closed  
  • Source: Anonymous
  • Summary:

    The objectsOf...(T) family of operations (e.g. Element::subobjectsOfKind(T), or Element::allSubobjectsOfType(T), or Model::objectsOfType(T)) returns a set of Elements.

    It should be possible to infer the precise return type from the given T, i.e., return a Set(T) instead of Set(Element).

    BTW, why is there no Model::objectsOfKind(T) ?

  • Reported: QVT 1.2 — Tue, 19 May 2015 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Define return type for objectsOf...(T) operations more precisely

    The objectsOf...(T) family of operations (e.g. Element::subobjectsOfKind(T), or Element::allSubobjectsOfType(T), or Model::objectsOfType(T)) returns a set of Elements.

    It should be possible to infer the precise return type from the given T, i.e., return a Set(T) instead of Set(Element).

    BTW, why is there no Model::objectsOfKind(T) ?

    Discussion

    We can make the declaraions using the same approximation to a rigorous declaration as used by selectByKind in OCL 2.4.

    Omission of objectsOfKInd is an easily corrected oversight.

    The incorrect objectsOfKind usage by the current objectsOfType is a confusing error that gets worse when the correct operation is provided. Better to correct it.

    clone and deepClone from QVT13-12 can similarly exploit a T.

    The confusing wording of Model::createEmptyModel can be clarified,

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: object creation in helpers

  • Key: QVT13-120
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The prohibition on creation or update of instances in helpers has no justification. Why?

  • Reported: MOF 1.2 — Tue, 13 Oct 2015 09:58 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Allow object creation in helpers

    The prohibition on creation or update of instances in helpers has no justification. Why?

    Discussion

    This came up while clarifying wording for QVT13-33.

    The prohibition is presumably intended to ensure that all object creation has a corresponding trace record. A good idea but beyond the pragmatic integrity of QVTo. Untraced objects can be created in mappings anyway, so prohibiting their creation in helpers is just an unhelpful restriction on programming flexibility.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Calling the super implementation of an overriding operation

  • Key: QVT13-61
  • Legacy Issue Number: 19823
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    There is currently no way for an overriding operation to call its overridden super implementation. ImperativeOCL should provide something similar to the 'super' reference which is available in Java.

  • Reported: MOF 1.2 — Mon, 3 Aug 2015 04:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Calling the super implementation of an overriding operation

    There is currently no way for an overriding operation to call its overridden super implementation. ImperativeOCL should provide something similar to the 'super' reference which is available in Java.

    Discussion

    QVT13-93 clarifies the concept of a mapping identifier. An arbitrary mapping may therefore be called:

    self.map My::Tx::Your::Type::doIt(withSomething);

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: non-mutating List operation example problem

  • Key: QVT13-60
  • Legacy Issue Number: 19810
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    The following helper from the specification is a NOP, because List::append has no side effect in QVT 1.2.

    helper Package::computeCandidates(inout list:List) : List

    { if (self.nothingToAdd()) return list; list.append(self.retrieveCandidates()); return list; }

    Therefore the snippet should rather use List::add.

  • Reported: MOF 1.2 — Thu, 25 Jun 2015 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Incorrect use of side-effect free append in example

    The following helper from the specification is a NOP, because List::append has no side effect in QVT 1.2.

    helper Package::computeCandidates(inout list:List) : List

    { if (self.nothingToAdd()) return list; list.append(self.retrieveCandidates()); return list; }

    Therefore the snippet should rather use List::add.

    Discussion

    Yes

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTr: Imports

  • Key: QVT13-59
  • Legacy Issue Number: 11690
  • Status: closed  
  • Source: Anonymous
  • Summary:

    The "import" feature of Relations Language is not yet explained. And there is no example for it, too. For instance what does the "unit" in "import <unit>;" mean ?

  • Reported: QVT 1.0 — Tue, 27 Nov 2007 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Section: 7.13.5

    The "import" feature of Relations Language is not yet explained. And there is no example for it, too. For instance what does the "unit" in "import <unit>;" mean ?

  • Updated: Tue, 29 Mar 2016 15:09 GMT

allInstances()

  • Key: QVT13-48
  • Legacy Issue Number: 19621
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    OCL's allInstances() applies to the one and only immutable model extent.

    The meaning of this in QVT with multiple, some mutable, extents/domains/typedModels is unclear.

    Suggest that allInstances applies to all the input and original inout extents only.

    Obtaining instances from other domains is available through alternate library operations such as objectsOfType in QVTo.

  • Reported: QVT 1.2 — Thu, 25 Sep 2014 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    allInstances() needs clarification

    OCL's allInstances() applies to the one and only immutable model extent.

    The meaning of this in QVT with multiple, some mutable, extents/domains/typedModels is unclear.

    Suggest that allInstances applies to all the input and original inout extents only.

    Obtaining instances from other domains is available through alternate library operations such as objectsOfType in QVTo.

    Discussion - QVTo

    allInstances() could be defined to apply to the initial, prevailing or final state. Since a QVTo execution proceeds through a predictable sequence of states limiting allInstances() to the initial state is unhelpful. A limitation to the final state is almost unuseable and may require a tool to introduce another form of late processing. Therefore the prevailing state is most appropriate for a QVTo allInstances().The returned instances are the mutable instances since any form of caching would impose an unjustified overhead.

    Discussion - QVTr/QVTc

    allInstances() could be defined to apply to the initial, prevailing or final state. The initial state is easy. The prevailing state does not exist declaratively. The final state is harder but may be useful for computing derived output values based on the outputs.

    However consider a cascade of endogeneous transformations A2B, B2C, C2D in which B2C performs an allInstances(). If we now compose the trio into A2B2C2D, the functionality of the allInstances() must not change. Therefore neither initial nor final state will do, since the initial state changes from B to A and the final state from C to D. We must use a prevailing state, which we can define as the final state of the domain in which the invocation of allInstances() occurs. For our example this is one of B or C and does not change as a consequence of the cascade.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Per-transformation ModelTypes

  • Key: QVT13-47
  • Legacy Issue Number: 12370
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    a production rule seems to be missing: <module_element> ::= <modeltype> Since, a transformation file can define several transformations and libraries (modules), it is desirable having the possibility of defining modeltypes exclusively to a module. These "local" modelTypes should belong to the scope of a module, and it shouldn't be accessible to the remaining defined modules (unless the use of extension mechanisms is specified).

  • Reported: QVT 1.1 — Fri, 4 Apr 2008 04:00 GMT
  • Disposition: Closed; No Change — QVT 1.3
  • Disposition Summary:

    Section 8.7.1a production rule seems to be missing

    a production rule seems to be missing: <module_element> ::= <modeltype> Since, a transformation file can define several transformations and libraries (modules), it is desirable having the possibility of defining modeltypes exclusively to a module. These "local" modelTypes should belong to the scope of a module, and it shouldn't be accessible to the remaining defined modules (unless the use of extension mechanisms is specified).

    Discussion

    A transformation is a major programming element so multiple transformations per file seems as unusual as multiple Java classes per file.

    But we do already support

    transformation X(...) {...}
    transformation Y(...) {...}

    so perhaps we need per transformation modeltypes.

    But if we provided them as suggested: we would have

    transformation X(in q : Q) {
    modeltype Q uses ....;
    }

    allowing an outer declaration to depend on an inner.

    If a user really wants many transformations per file with many distinct conflicting modeltypes, then the user has the option to use distinctive names for each modeltype.

    Much more sensible to use multiple files in the first place.

    Similarly we don't want or support per-transformation imports.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Incorrect ModelType.additionalCondition multiplicity

  • Key: QVT13-35
  • Legacy Issue Number: 19201
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The EBNF:

    <modeltype> ::= 'modeltype' <identifier> <compliance_kind>?
    'uses' <packageref_list> <modeltype_where>? ';'
    <modeltype_where> ::= 'where' <expression_block>

    allows only a single where which may be a BlockExp, so ModelType.additionalCondition should be [0..1] rather than [*].

  • Reported: QVT 1.1 — Thu, 30 Jan 2014 05:00 GMT
  • Disposition: Closed; No Change — QVT 1.3
  • Disposition Summary:

    Incorrect ModelType.additionalCondition multiplicity

    The EBNF:

    <modeltype> ::= 'modeltype' <identifier> <compliance_kind>?
    'uses' <packageref_list> <modeltype_where>? ';'
    <modeltype_where> ::= 'where' <expression_block>

    allows only a single where which may be a BlockExp, so ModelType.additionalCondition should be [0..1] rather than [*].

    Discussion

    Yes, but

    <expression_block> ::= '{' <expression_list>? '}'

    which allows for the multiple expressions.

    The multiple expressions could be shown more clearly by flattening as:

    <modeltype> ::= 'modeltype' <identifier> <compliance_kind>?
    'uses' <packageref_list> ('where' '{' <expression_list>? '}')? ';'

    But in the absence of a CS2AS mapping, implementations are not obliged to create the inappropriate BlockExp.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc: initialized variables

  • Key: QVT13-50
  • Legacy Issue Number: 19725
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Initializing variables at the point of declaration is generally recognized as good practice. QVTc does not support it.

    Suggest extend the (Realized) Variable syntax to support an initializer.

  • Reported: QVT 1.2 — Thu, 19 Feb 2015 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Allow QVTc to use initialized variables

    Initializing variables at the point of declaration is generally recognized as good practice. QVTc does not support it.

    Suggest extend the (Realized) Variable syntax to support an initializer.

    Discussion

    Initializing RealizedVariables makes no sense, since a RealizedVariable is initialized by the new Type().

    Initializing (Unrealized)Variables is however useful and supported by the Abstract Syntax already; just need some Concrete Syntax re-using the := of an Assignment.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Redundant argument on matchIdentifier

  • Key: QVT13-39
  • Legacy Issue Number: 19252
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Issue 19146 removed most of the erroneous matchXXX arguments but omitted to do so for String:: matchIndentifier

  • Reported: QVT 1.1 — Fri, 21 Feb 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Redundant argument on matchIdentifier

    Issue 19146 removed most of the erroneous matchXXX arguments but omitted to do so for String:: matchIdentifier

    Discussion

    Yes

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: AssignExp unclear for OrderedSet

  • Key: QVT13-38
  • Legacy Issue Number: 19238
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    AssignExp to an Collection should make clear that the results is

    target->including(source)->excluding(null)

    which should exploit an OCL definition of OrderedSet::including to be add at end if necessary.

  • Reported: QVT 1.1 — Wed, 12 Feb 2014 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    AssignExp unclear for OrderedSet

    AssignExp to an Collection should make clear that the results is

    target->including(source)->excluding(null)

    which should exploit an OCL definition of OrderedSet::including to be add at end if necessary.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: deepclone on Collections

  • Key: QVT13-37
  • Legacy Issue Number: 19205
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The Issue 19146 resolution is not sufficiently clear for Collection::deepclone.

    Any nested mutables must be deepcloned, so the specification should require a recursive deepclone that the return decides between self or the clone according to whether any elements need to change

  • Reported: QVT 1.1 — Wed, 5 Feb 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Clarify deepclone on Collections

    The Issue 19146 resolution is not sufficiently clear for Collection::deepclone.

    Any nested mutables must be deepcloned, so the specification should require a recursive deepclone that the return decides between self or the clone according to whether any elements need to change

    Discussion

    Yes

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Extents, Models and Model Parameters

  • Key: QVT13-36
  • Legacy Issue Number: 19204
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    There is no mention of extent in Section 8.1 where one might hope to find an overview of the utility.

    The proposed resolution of Issue 13103 clarifies the ability of ObjectExp to (re-)define the extent residence of a pre-existing object.

    MappingParameter has some contradictory indications that an extent is bound by the callee rather than the caller.

    Is this a consequence of the need for a MappingOperation to have a 1:1 correspondence to a QVTr Relation requiring the domain to be determined solely from the declaration? How is the inability of a Relation to have more than one parameter per domain accommodated when there can be more than one parameter per extent?

  • Reported: QVT 1.1 — Wed, 5 Feb 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Specify the utility of an extent

    There is no mention of extent in Section 8.1 where one might hope to find an overview of the utility.

    The proposed resolution of Issue 13103 clarifies the ability of ObjectExp to (re-)define the extent residence of a pre-existing object.

    MappingParameter has some contradictory indications that an extent is bound by the callee rather than the caller.

    Is this a consequence of the need for a MappingOperation to have a 1:1 correspondence to a QVTr Relation requiring the domain to be determined solely from the declaration? How is the inability of a Relation to have more than one parameter per domain accommodated when there can be more than one parameter per extent?

    Discussion

    A section on Extents is sadly lacking; write it.

    The confusing fiction that there is a correspondence between QVTo Model Parameters and QVTr Domains is best eliminated.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: Variable Initialization

  • Key: QVT13-43
  • Legacy Issue Number: 19665
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    QVTr does not allow variables to be initialized at the point of declaration. This is a rather prehistoric limitation that significantly degrades readability.

    a) it requires separate declaration and assignment lines
    b) it inhibits inference of the variable type from the initializer
    c) it obfuscates the variable assignment

    The latter is a particular problem in QVTr where the assignment may a consequence of a pattern match;

    Suggest allowing an initializer on a VarDeclarationCS and allowing the type to be inferred from the initializer.

  • Reported: QVT 1.2 — Fri, 28 Nov 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    QVTr Variable Initialization

    QVTr does not allow variables to be initialized at the point of declaration. This is a rather prehistoric limitation that significantly degrades readability.

    a) it requires separate declaration and assignment lines
    b) it inhibits inference of the variable type from the initializer
    c) it obfuscates the variable assignment

    The latter is a particular problem in QVTr where the assignment may a consequence of a pattern match;

    Suggest allowing an initializer on a VarDeclarationCS and allowing the type to be inferred from the initializer.

    Discussion

    The underlying Abstract Syntax supports an initializer.

    Prototyping in Eclipse QVTr demonstrated a useful reduction in line count and increase in clarity of the RelToCore transformation.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: Exact Collection match

  • Key: QVT13-41
  • Legacy Issue Number: 19663
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The QVTr AS allows CollectionTemplateExp::rest to be null corresponding to a precisely enumerated list of collection members to be matched.

    The QVTr CS does not support this.

    Suggest changing the

    '++' (restIdentifier=[pivot::Variable|UnrestrictedName] | '_')

    sub-parsing rule to

    ('++' (restIdentifier=[pivot::Variable|UnrestrictedName] | '_'))?

  • Reported: QVT 1.2 — Fri, 28 Nov 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Exact QVTr Collection match

    The QVTr AS allows CollectionTemplateExp::rest to be null corresponding to a precisely enumerated list of collection members to be matched.

    The QVTr CS does not support this.

    Suggest changing the

    '++' (restIdentifier=[pivot::Variable|UnrestrictedName] | '_')

    sub-parsing rule to

    ('++' (restIdentifier=[pivot::Variable|UnrestrictedName] | '_'))?

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTr: abstract mappings/relations

  • Key: QVT13-40
  • Legacy Issue Number: 19275
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    When mapping/relation refinement is used, it should be possible to specify via the abstract keyword that a mapping/relation is only intended for use in a refined form.

    Thus in A.3.1, declaring classAttributes abstract could determine whether the execution needs to consider matches not covered by the classPrimitiveAttributes and classComplexAttributes refinements.

  • Reported: QVT 1.1 — Thu, 27 Feb 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Support abstract mappings/relations

    When mapping/relation refinement is used, it should be possible to specify via the abstract keyword that a mapping/relation is only intended for use in a refined form.

    Thus in A.3.1, declaring classAttributes abstract could determine whether the execution needs to consider matches not covered by the classPrimitiveAttributes and classComplexAttributes refinements.

    Discussion

    A simple enhancement

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: multi-valued initialisation from single value

  • Key: QVT13-46
  • Legacy Issue Number: 19687
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The two examples

    mymultivaluedproperty += object Node

    {…}; // additive semantics
    mymultivaluedproperty := object Node {…}

    ; // the list is reset and re-assigned

    are simple assignments from single valued RHS. These are not covered in the preceding description.

    I consider both to be errors since the RHS is unsuitable for assignment to the LHS. In both cases an asSet() or whatever should be appended.

    More generally, the library operation that exhibits the "additive semantics" should be clearly identified.

    Since addition to OCL collections is not permissible, it may be necessary to define constructors, so that

    var c : Set(String) := Set

    {"a"}

    ;

    invokes the Set(T)(Set(T)) constructor.

    This would allow initialization for a Sequence from a List and vice-versa that is otherwise magic.

  • Reported: QVT 1.2 — Mon, 15 Dec 2014 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Unclear multi-valued initialisation from single value

    The two examples

    mymultivaluedproperty += object Node

    {…}; // additive semantics
    mymultivaluedproperty := object Node {…}

    ; // the list is reset and re-assigned

    are simple assignments from single valued RHS. These are not covered in the preceding description.

    I consider both to be errors since the RHS is unsuitable for assignment to the LHS. In both cases an asSet() or whatever should be appended.

    More generally, the library operation that exhibits the "additive semantics" should be clearly identified.

    Since addition to OCL collections is not permissible, it may be necessary to define constructors, so that

    var c : Set(String) := Set

    {"a"}

    ;

    invokes the Set(T)(Set(T)) constructor.

    This would allow initialization for a Sequence from a List and vice-versa that is otherwise magic.

    Issue Links

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Introductory Examples Problems

  • Key: QVT13-16
  • Legacy Issue Number: 15376
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The second example contains

    "if result then return;"

    which has a non-boolean condition expression and a missing endif.

    In the first example, it is not clear that the revisit adds rather than overwrites.

    In the third and fourth examples it is not clear why the second pass reuses the context for the first rather than creates new objects.

  • Reported: QVT 1.1 — Sun, 18 Jul 2010 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    8.1.10 Errors in Examples

    The second example contains

    "if result then return;"

    which has a non-boolean condition expression and a missing endif.

    In the first example, it is not clear that the revisit adds rather than overwrites.

    In the third and fourth examples it is not clear why the second pass reuses the context for the first rather than creates new objects.

    Discussion

    The examples are much worse than suggested; verging on the diabolical.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: ListLiteralExp inheritance

  • Key: QVT13-14
  • Legacy Issue Number: 14620
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The resolution for Issue 12375 specifies that ListLiteralExp has
    CollectionLiteralExp
    as a superclass.

    This leaves the behaviour of the inherited kind and part attributes
    unspecified and
    rather embarrassing.

    ListLiteralExp (like DictLiteralExp) should inherit directly from
    LiteralExp.

  • Reported: QVT 1.1 — Wed, 11 Nov 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Inappropriate ListLiteralExp inheritance (Correction to issue 12375 resolution)

    The resolution for Issue 12375 specifies that ListLiteralExp has CollectionLiteralExp as a superclass.

    This leaves the behaviour of the inherited kind and part attributes unspecified and rather embarrassing.

    ListLiteralExp (like DictLiteralExp) should inherit directly from LiteralExp.

    Discussion

    The lack of specification of ListLiteralExp::kind and ListLiteralExp::part is indeed a problem.

    CollectionLiteralExp::kind is inextensible bloat that OCL could usefully eliminate, so no ListLiteralExp::kind is needed in QVTo.

    ListLiteralExp::part is needed if QVTo is truly an extension of OCL. Unfortunately the QVTo BNF omits the ".." operator and support for CollectionRanges.

    Therefore we need to introduce the missing CollectionRange parsing. ListLiteralExp can inherit LiteralExp adding CollectionLiteralExp::part but not CollectionLiteralExp::kind. ListLiteralExp::element is misguided; ListLiteralExp::part replaces it.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Typedef for Standard Library predefined types

  • Key: QVT13-13
  • Legacy Issue Number: 13252
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    As interpretated from the especification (pag 104), the way of adding new operations to OCL predefined types is creating new Typedef instances
    which must have the OCL predefined type as the base type. The new operations are added to this new typedef. However there are several problems:
    1. The specification doesn't provide any name for these typedefs.
    2. The specification doesn't specify which type (QVT typedef or OCL predefined type) should be used when referencing such OCL predefined types in a QVTo transformation.

    Solution for 1).
    Suggestion a: Name the typedef with the same name of the base type. This provokes name's clash with the predefined type's name, due to there are two different types from two standard libraries
    which have the same name. A possible solution, would be expliciting that typedefs (aliases) will never clash its name with its base type.

    Suggestion b: Name the tpyedef with a different name, such as QVToXXXXXX or XXXX_Alias.

    Solution for 2).
    Suggestion a: Taking the typedef as the referenced type in QVTo transformations.
    Suggestion b: Taking the OCL predefined type as the referenced type in QVTo transformations.
    Suggestion c: Considering resolution of issue 13168, so that only OCL predefined exists, and therefore, the only type which can be referenced.

    It's a little bit weird having 2 different types (a type, and its alias typedef) which represent just the same type, specially when they are related by a reference.
    My solution's preference in order are:
    Suggestion c: Just having one type to refer.
    Suggestion a: Since the typedef "extends" the behaviour of the predefined type (adding new operations), the former must be the referred one.
    Suggestion b: The OCL predefined type is referenced, but we must take into account that the operations added to the typedef are also available.

  • Reported: QVT 1.0 — Tue, 13 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    QVTo Standard Library and typedefs Issue. Extending OCL predefined types

    As interpretated from the especification (pag 104), the way of adding new operations to OCL predefined types is creating new Typedef instances
    which must have the OCL predefined type as the base type. The new operations are added to this new typedef. However there are several problems:
    1. The specification doesn't provide any name for these typedefs.
    2. The specification doesn't specify which type (QVT typedef or OCL predefined type) should be used when referencing such OCL predefined types in a QVTo transformation.

    Solution for 1).
    Suggestion a: Name the typedef with the same name of the base type. This provokes name's clash with the predefined type's name, due to there are two different types from two standard libraries
    which have the same name. A possible solution, would be expliciting that typedefs (aliases) will never clash its name with its base type.

    Suggestion b: Name the tpyedef with a different name, such as QVToXXXXXX or XXXX_Alias.

    Solution for 2).
    Suggestion a: Taking the typedef as the referenced type in QVTo transformations.
    Suggestion b: Taking the OCL predefined type as the referenced type in QVTo transformations.
    Suggestion c: Considering resolution of issue 13168, so that only OCL predefined exists, and therefore, the only type which can be referenced.

    It's a little bit weird having 2 different types (a type, and its alias typedef) which represent just the same type, specially when they are related by a reference.
    My solution's preference in order are:
    Suggestion c: Just having one type to refer.
    Suggestion a: Since the typedef "extends" the behaviour of the predefined type (adding new operations), the former must be the referred one.
    Suggestion b: The OCL predefined type is referenced, but we must take into account that the operations added to the typedef are also available.

    Discussion

    The offending sentence is:

    This is specifically used in the QVT standard library to attach operations to pre-defined primitive types, like String and Collections.

    This facility is not used anywhere in the specification and there is no grammar that facilitates it. No model of the QVTo library is provided that exploits it. The sentence is therefore just an observation on a particular implementation approach.

    The approach takes no account of the very similar requirement for Complete OCL to extend types. This is being resolved by work towards OCL 2.5 / 3.0 with which QVTo will almost certainly have to comply.

    Therefore, tomorrow this sentence will be embarassing and incompatible. Today it is just irrelevant and confusing.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: when and where as assertions

  • Key: QVT13-24
  • Legacy Issue Number: 18363
  • Status: closed  
  • Source: gmail.com ( Fáo Levy Siqueira)
  • Summary:

    In operational QVT, it is not clear what happens when the "when" or "where" clause of an inherited mapping does not hold.

    Suggestion:
    Considering inheritance is a type (or, maybe, a synonym) of generalization, it would be expected that the semantics of inheritance mimics the semantics of generalization in MOF. The UML, which defines generalization used by CMOF and EMOF, states: "... features specified for instances of the general classifier are implicitly specified for instances of the specific classifier. Any constraint applying to instances of the general classifier also applies to instances of the specific classifier." (UML Infrastructure 2.4.1, p.51). If the "when" and "where" clauses are considered as features of a mapping, the clauses of the inherited mapping should be implicitly specified. Similarly, if they are considered as constraints applying to a mapping, the clauses defined in the inherited mapping should apply to the inheriting mapping. Therefore, a possible solution in both situations is to consider that the "when" and "where" clauses must hold in the inheriting mapping.

    Commentary:
    An interesting discussion is if something similar to the Liskov substitution principle should be applied in this situation.

  • Reported: QVT 1.1 — Fri, 4 Jan 2013 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Undefined semantics for unsatisfied "when" and "where" in inherited mapping

    In operational QVT, it is not clear what happens when the "when" or "where" clause of an inherited mapping does not hold.

    Suggestion:
    Considering inheritance is a type (or, maybe, a synonym) of generalization, it would be expected that the semantics of inheritance mimics the semantics of generalization in MOF. The UML, which defines generalization used by CMOF and EMOF, states: "... features specified for instances of the general classifier are implicitly specified for instances of the specific classifier. Any constraint applying to instances of the general classifier also applies to instances of the specific classifier." (UML Infrastructure 2.4.1, p.51). If the "when" and "where" clauses are considered as features of a mapping, the clauses of the inherited mapping should be implicitly specified. Similarly, if they are considered as constraints applying to a mapping, the clauses defined in the inherited mapping should apply to the inheriting mapping. Therefore, a possible solution in both situations is to consider that the "when" and "where" clauses must hold in the inheriting mapping.

    Commentary:
    An interesting discussion is if something similar to the Liskov substitution principle should be applied in this situation.

    Discussion

    The suggestions regarding constraint inheritance and LSP are appropriate for a declarative language; they are not appropriate for a pragmatic imperative language such as QVTo. Each mapping can be independently specified.

    It can be made clearer that pre and post conditions are assertions that fail accordingly.

    Comparison of QVTr/QVTo when and where highlights the fallacy that a QVTo mapping is a refinement of QVTr relation. In QVTo, failure of a where post-condition is a catastrophic assertion failure, whereas a QVTr where clause is a corrollary to be attempted afterwards and ignored if it fails/fails to match. The claim in 8.1.4 that the QVTo when and where clauses are owned by QVTr is untrue; QVTo owns its own when and where clauses and works very well without any QVTr objects.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Tracing and Resolving

  • Key: QVT13-23
  • Legacy Issue Number: 18324
  • Status: closed  
  • Source: campus.upb.de ( Christopher Gerking)
  • Summary:

    Trace data creation is specified to happen "at the end of the initialization section".

    For disjuncting mappings, the initialization section is never executed, which prevents any trace data from being stored.

    As a consequence, no resolution via resolve-in-expressions is possible on the disjuncting mapping, due to the missing trace record. This is problematic, since disjunction should be transparent from a resolver's point of view, i.e. it should not make a difference for resolution whether a mapping disjuncts or not.

    Hence, some clarification is required whether trace records are deliberately avoided for disjuncting mappings (for whatever reason), or whether trace data must be created in another place than the init section in case of a disjuncting mapping.

  • Reported: QVT 1.1 — Thu, 27 Dec 2012 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    No trace data for disjuncting mapping

    Trace data creation is specified to happen "at the end of the initialization section".

    For disjuncting mappings, the initialization section is never executed, which prevents any trace data from being stored.

    As a consequence, no resolution via resolve-in-expressions is possible on the disjuncting mapping, due to the missing trace record. This is problematic, since disjunction should be transparent from a resolver's point of view, i.e. it should not make a difference for resolution whether a mapping disjuncts or not.

    Hence, some clarification is required whether trace records are deliberately avoided for disjuncting mappings (for whatever reason), or whether trace data must be created in another place than the init section in case of a disjuncting mapping.

    Discussion

    It seems the 8.1.x section on Tracing never got written. Time for a thorough review and clarification.

    Trace lookups by source objects treat context and all in/inout parameters as source objects.

    Trace lookups by target objects treat all out/inout and result parameters as target objects.

    Trace lookups by mapping allow either disjuncting mapping or candidate mapping to be used as the mapping selection.

    If re-execution is to be completely suppressed and fully re-use a previous execution, the output trace should be the final outputs, but the existing text is clear that it is the preliminary outputs at the end of the initialization section. The earlier trace gives a slightly different semantics that requires the population section to modify the created object after it is traced and allows the population section to use the trace. This is different but fine when explained clearly.

    References to 8.1.12 refer to the new text from the QVT13-99 resolution.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Trace data for an 'accessed' transformation

  • Key: QVT13-22
  • Legacy Issue Number: 18323
  • Status: closed  
  • Source: campus.upb.de ( Christopher Gerking)
  • Summary:

    The spec should clarify the interaction of
    1.) explicit instantiation + execution of 'accessed' transformations, and
    2.) trace records / resolving.

    The following questions are of interest:

    How does the initial trace for an 'accessed' transformation look like? Does it reuse the records previously created by the 'accessing' transformation, or does an 'accessed' transformation always start on an empty trace?

    How does an 'accessed' transformation affect the trace? Are the trace records post-visible that were created during execution of the 'accessed' transformation, or is the trace of the 'accessing' transformation unchanged?

    Both issues heavily affect the results of resolve-operations. Resolving object references after executing an 'accessed' transformation would be very practical.

  • Reported: QVT 1.1 — Thu, 27 Dec 2012 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Trace data for an 'accessed' transformation

    The spec should clarify the interaction of
    1.) explicit instantiation + execution of 'accessed' transformations, and
    2.) trace records / resolving.

    The following questions are of interest:

    How does the initial trace for an 'accessed' transformation look like? Does it reuse the records previously created by the 'accessing' transformation, or does an 'accessed' transformation always start on an empty trace?

    How does an 'accessed' transformation affect the trace? Are the trace records post-visible that were created during execution of the 'accessed' transformation, or is the trace of the 'accessing' transformation unchanged?

    Both issues heavily affect the results of resolve-operations. Resolving object references after executing an 'accessed' transformation would be very practical.

    Discussion

    The resolution of QVT13-23 makes clear that the trace data contains a trace record for every mapping.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTr: Imports

  • Key: QVT13-6
  • Legacy Issue Number: 12213
  • Status: closed  
  • Source: Siegfried Nolte ( Siegfried Nolte)
  • Summary:

    Concerning to Relations Language, how will the metamodels get into a transformation script ? Is there a technique similar to Operational Mappings using metamodel declaration and modeltypes ? The RL sample transformation script in annex A.1 (pp 164) doesn't declare the metamodels. The OM sample (A.2.3) does. There is some syntax for declaring and using metamodels and modeltypes in OM (pp118), there isn't for RL (pp38).

  • Reported: QVT 1.0 — Wed, 6 Feb 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Relations Language: how will metamodels get into a transformation scrip

    Concerning to Relations Language, how will the metamodels get into a transformation script ? Is there a technique similar to Operational Mappings using metamodel declaration and modeltypes ? The RL sample transformation script in annex A.1 (pp 164) doesn't declare the metamodels. The OM sample (A.2.3) does. There is some syntax for declaring and using metamodels and modeltypes in OM (pp118), there isn't for RL (pp38).

    Discussion

    We needs to support definition of e.g. UML in

    transformation umlToRdbms(uml:UML, rdbms:RDBMS)
    

    But we actually may want to reference a document URI or namespace URI

    http://www.omg.org/spec/UML/20131001/UML.xmi
    http://www.omg.org/spec/UML/20131001
    

    But the current syntax is essentially a Java import without the trailing * option.

    import my.model.package;
    

    It cannot reference URIs and it has the wrong separator.

    Something similar to QVTo's ModelType is needed:

    modeltype UML uses SimpleUml ("http://omg.qvt-examples.SimpleUml");
    

    However ModelType has many problems that we do not need to replicate:

    • it is a Class; absolutely not
    • it supports strict/effective inside rather than outside the program
    • it has undefined URI usage
      
      

      Conversely Complrete OCL has a requirement for an import too, and here ModelType's are not appropriate at all.

    Let's fix up import.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: UML to RDBMS Example Problems

  • Key: QVT13-4
  • Legacy Issue Number: 11686
  • Status: closed  
  • Source: Siegfried Nolte ( Siegfried Nolte)
  • Summary:

    top relation AssocToFKey { pKey : Key; ... when

    { ...; pKey = destTbl.key; }

    ... } In my opinion that doesn't work. pKey is of type Key, destTbl.key is of type OrderedSet key, isn't it ?

  • Reported: QVT 1.0 — Mon, 26 Nov 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Section: A1.1.1

    top relation AssocToFKey { pKey : Key; ... when

    { ...; pKey = destTbl.key; }

    ... } In my opinion that doesn't work. pKey is of type Key, destTbl.key is of type OrderedSet key, isn't it ?

    Discussion

    Yes. Well at least it's a Collection; the diagram leaves an ambiguity.

    Comparison with the QVTc solution shows that the 'primary' key should be selected, and initialized on creation.

    Loading the example in the Eclipse QVTr editor reveals many more problems.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTr: Queries and their contexts

  • Key: QVT13-20
  • Legacy Issue Number: 15523
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    QVTr already has queries but they are much less user friendly than e.g. MOFM2T's equivelent for which the first parameter is a hidden self, or indeed QVTo.

    Perhaps something closer to Complete OCL would do, allowing def'd attributes or operations.

  • Reported: QVT 1.1 — Fri, 13 Aug 2010 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    QVTr already has queries but they are much less user friendly than e.g. MOFM2T's equivelent

    QVTr already has queries but they are much less user friendly than e.g. MOFM2T's equivelent for which the first parameter is a hidden self, or indeed QVTo.

    Perhaps something closer to Complete OCL would do, allowing def'd attributes or operations.

    Discussion

    QVTo has contextual helpers.

    Syntactically it is trivial for QVTc and QVTo to have contextual queries just by allowing a scoped rather than simple name for the query.

    Semantically to avoid duuplicating QVTo AS irregularities we can use the synonym package merges for Complete OCL to make the implementation easy.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

Multiple input models

  • Key: QVT13-26
  • Legacy Issue Number: 19428
  • Status: closed  
  • Source: kustar.ac.ae ( Fatma Mohamed)
  • Summary:

    This is a suggestion:

    A developer may need to take a set of in models that may vary in size each time he runs the transformation.

    So, instead of hard-coding the input/out put models when defining the transformation like this:

    transformation Uml2Rdbms(in uml:UML,out rdbms:RDBMS)

    The developer should be able to define a dynamic set of input models. So that he will not be obligated to change the transformation definition if the number of input models change every time he runs the transformation.

    For example, I defined a transformation that takes multiple input models (conforming to the same meta-model) to merge them. Now, I got different number of in models every time I run the transformation. To make this more dynamic, I need to take an array of models as an input to my transformation without specifying their numbers in the transformation definition each time I run the transformation.

  • Reported: QVT 1.1 — Thu, 22 May 2014 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Dynamic set of input models

    This is a suggestion:

    A developer may need to take a set of in models that may vary in size each time he runs the transformation.

    So, instead of hard-coding the input/out put models when defining the transformation like this:

    transformation Uml2Rdbms(in uml:UML,out rdbms:RDBMS)

    The developer should be able to define a dynamic set of input models. So that he will not be obligated to change the transformation definition if the number of input models change every time he runs the transformation.

    For example, I defined a transformation that takes multiple input models (conforming to the same meta-model) to merge them. Now, I got different number of in models every time I run the transformation. To make this more dynamic, I need to take an array of models as an input to my transformation without specifying their numbers in the transformation definition each time I run the transformation.

    Discussion - imperative

    This is already supported by the QVTo grammar. Just define a Collection of models as input or output.

    transformation Uml2Rdbms(in uml:Sequence(UML),out rdbms:Sequence(RDBMS))

    and use collection operations to access the individual models.

    Discussion - declarative

  • Updated: Tue, 29 Mar 2016 15:09 GMT

Missing Identifier Syntax

  • Key: QVT13-2
  • Legacy Issue Number: 10935
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The syntax of identifiers is undefined.

    The syntax for mapping clearly prohibits the use of a direction named 'where'.

    Suggest: identifier is an OCL simpleName, less the new reserved words (check default enforce
    imports map realize refines transformation uses where)

    Suggest: a string-literal may be used as an identifier to support awkward identifiers such as 'where'.

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Identifiers

    The syntax of identifiers is undefined.

    The syntax for mapping clearly prohibits the use of a direction named 'where'.

    Suggest: identifier is an OCL simpleName, less the new reserved words (check default enforce
    imports map realize refines transformation uses where)

    Suggest: a string-literal may be used as an identifier to support awkward identifiers such as 'where'.

    Discussion

    OCL 2.3/2.4 clarified identifiers and strings so we can just exploit the OCL productions including it's underscore-prefixed-string identifier.

    OCL 2.3 also introduced String::_'+' so no special description is needed for a QVTr extension.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: xcollect is ambiguously flattened

  • Key: QVT13-34
  • Legacy Issue Number: 19177
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    xcolect is specified to like collect, which flattens, however the xcollect pseudocode does not flatten.

  • Reported: QVT 1.1 — Thu, 9 Jan 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    xcollect is ambiguously flattened

    xcollect is specified to like collect, which flattens, however the xcollect pseudocode does not flatten.

    Discussion

    Ditto xcollectselect, xcollectselectOne

    Once an attempt is made to put the pseudo-code through Eclipse QVTo, it is quite amazing how many different errors there are.

    • spurious source/iterator arguments
    • missing compute open {
    • increarect non-collection returns
    • incorrect accommodation of ordered collections
    • no flattening
    • no single values
    • use of mutable Sequence rather than List
  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Passing DataTypes 'by-reference'

  • Key: QVT13-33
  • Legacy Issue Number: 19019
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Intuitively List and Dict are objects, so if you pass them to a mapping/query/helper as an inout parameter, the object in the caller may be updated by the call.

    This is the behaviour of a Class Instance not a DataType Value.

    Please use the open https://bugs.eclipse.org/bugs/show_bug.cgi?id=420150 to discuss this topic.

  • Reported: QVT 1.1 — Wed, 23 Oct 2013 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    List and Dict Class/DataType confusion

    Intuitively List and Dict are objects, so if you pass them to a mapping/query/helper as an inout parameter, the object in the caller may be updated by the call.

    This is the behaviour of a Class Instance not a DataType Value.

    Discussion

    Equally intuitively List (and Dict) are values. Two distinct 'occurrences' may be equal. This is the behavior of a DataType not a Class.

    List and Dict are specified as CollectionType (DataType) derivations so we just need to fix up indications that List and Dict are Classes.

    While clarifying wording, QVT13-120 is merged to remove the prohibition on object creation/update in helpers.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Inadequate helper/query distinction

  • Key: QVT13-30
  • Legacy Issue Number: 19571
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The Helper class in the AS syntax supports both helpers and queries.

    These two concepts have important distinctions that are poorly differentiated in 8.2.1.12, where as a minimum the two italicized terms 'helper' and 'query' should be used when defining the semantics of each.

    Presumably a 'query' cannot modify anything (other than the log file) anywhere.

    Presumably a 'helper' can modify anything anywhere, except of course sets and tuples that are always immutable.

    The current wording suggests that a 'helper' can modify sets and tuples but cannot modify objects or create objects. Surely a 'helper' cannot modify sets or tuples but can create or update objects?

  • Reported: QVT 1.2 — Wed, 6 Aug 2014 04:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Inadequate helper/query distinction

    The Helper class in the AS syntax supports both helpers and queries.

    These two concepts have important distinctions that are poorly differentiated in 8.2.1.12, where as a minimum the two italicized terms 'helper' and 'query' should be used when defining the semantics of each.

    Presumably a 'query' cannot modify anything (other than the log file) anywhere.

    Presumably a 'helper' can modify anything anywhere, except of course sets and tuples that are always immutable.

    The current wording suggests that a 'helper' can modify sets and tuples but cannot modify objects or create objects. Surely a 'helper' cannot modify sets or tuples but can create or update objects?

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: invalid in ImperativeOCL

  • Key: QVT13-29
  • Legacy Issue Number: 19548
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    OCL defines invalid as the result of a failed evaluation. The QVT specification is almost totally silent on invalid, except for a few library operations that may generate it.

    Presumably an invalid not 'caught' by oclIsInvalid/oclIsUndefined in QVTo causes a to-be-specifued exception to be raised in the problem statement.

    Presumably an invalid not 'caught' by oclIsInvalid/oclIsUndefined in QVTc/QVTr inhibits the detection of matches.

  • Reported: QVT 1.2 — Mon, 28 Jul 2014 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    invalid in QVT

    OCL defines invalid as the result of a failed evaluation. The QVT specification is almost totally silent on invalid, except for a few library operations that may generate it.

    Presumably an invalid not 'caught' by oclIsInvalid/oclIsUndefined in QVTo causes a to-be-specifued exception to be raised in the problem statement.

    Presumably an invalid not 'caught' by oclIsInvalid/oclIsUndefined in QVTc/QVTr inhibits the detection of matches.

    Discussion

    But invalid may be temporarily caught by a let variable of QVTo var. It is the use that is a problem.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: 'result' for Tuple returns

  • Key: QVT13-28
  • Legacy Issue Number: 19505
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The current phrasing

    Within a contextual operation <it>result</it> represents the unique result parameter (if there is a unique declared result) or the
    tuple containing the list of declared result parameters.

    suggests that the synthetic Tuple return is accessible as result. This is not necessary and imposes considerable implementation difficulties since a new Tuple would need creation with each mutation.

    Sucggest the new wording.

    Within a contextual operation for which no name is specified for a single return parameter, <it>result</it> is the implicit name of the parameter. If the name is specified explicitly, as is necessary for multiple returns, no pre-defined <it>result</it> variable exists.

  • Reported: QVT 1.2 — Wed, 2 Jul 2014 04:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Clarify availability of 'result' for Tuple returns

    The current phrasing

    Within a contextual operation result represents the unique result parameter (if there is a unique declared result) or the
    tuple containing the list of declared result parameters.

    suggests that the synthetic Tuple return is accessible as result. This is not necessary and imposes considerable implementation difficulties since a new Tuple would need creation with each mutation.

    Suggest the new wording.

    Within a contextual operation for which no name is specified for a single return parameter, result is the implicit name of the parameter. If the name is specified explicitly, as is necessary for multiple returns, no pre-defined result variable exists.

    Discussion

    Yes

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: Multi-root match

  • Key: QVT13-42
  • Legacy Issue Number: 19664
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The QVTr AS and CS permit only a single pattern to be matched in the input (and output) domains. QVTc permits multi-matches.

    This can be worked around with nested collections as demonstrated by RDomainToMBottomPredicateForEnforcement in RelToCore

    remainingUnBoundDomainVars: Set(essentialocl::Variable);
    predicatesWithVarBindings:Set(qvtbase::Predicate);

    domain relations rdtVarsSeq:Sequence(Set(Element)) {
    rdtSet:Set(Element) {
    r:Relation{},
    rd:RelationDomain{},
    te:ObjectTemplateExp {bindsTo = v:Variable {}}
    ++ _
    }
    ++ _
    };

    rdtVarsSeq->at(2) = predicatesWithoutVarBindings;
    rdtVarsSeq->at(3) = unboundDomainVars;

    The above is hard to read and uses nested collections in ways that are claimed to be unsupported. Much simpler to just write:

    domain relations
    r:Relation{},
    rd:RelationDomain{},
    te:ObjectTemplateExp {bindsTo = v:Variable {}},
    predicatesWithVarBindings:Set(qvtbase::Predicate) {},
    remainingUnBoundDomainVars: Set(essentialocl::Variable) {}
    ;

    Suggest in the AS, RelationDomain.pattern changes to RelationDomain.patterns, RelationDomain.rootVariable moves to DomainPattern.rootVariable.

    Suggest in the DomainCS CS, "pattern=DomainPatternCS" changes to "patterns+=DomainPatternCS (',' patterns+=DomainPatternCS)*"

    As a consequence additional variables may be passed in a RelationCallExp. These can still be in rootVariable order.

  • Reported: QVT 1.2 — Fri, 28 Nov 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    QVTr Multi-root match

    The QVTr AS and CS permit only a single pattern to be matched in the input (and output) domains. QVTc permits multi-matches.

    This can be worked around with nested collections as demonstrated by RDomainToMBottomPredicateForEnforcement in RelToCore

    remainingUnBoundDomainVars: Set(essentialocl::Variable);
    predicatesWithVarBindings:Set(qvtbase::Predicate);

    domain relations rdtVarsSeq:Sequence(Set(Element)) {
    rdtSet:Set(Element) {
    r:Relation{},
    rd:RelationDomain{},
    te:ObjectTemplateExp {bindsTo = v:Variable {}}
    ++ _
    }
    ++ _
    };

    rdtVarsSeq->at(2) = predicatesWithoutVarBindings;
    rdtVarsSeq->at(3) = unboundDomainVars;

    The above is hard to read and uses nested collections in ways that are claimed to be unsupported. Much simpler to just write:

    domain relations
    r:Relation{},
    rd:RelationDomain{},
    te:ObjectTemplateExp {bindsTo = v:Variable {}},
    predicatesWithVarBindings:Set(qvtbase::Predicate) {},
    remainingUnBoundDomainVars: Set(essentialocl::Variable) {}
    ;

    Suggest in the AS, RelationDomain.pattern changes to RelationDomain.patterns, RelationDomain.rootVariable moves to DomainPattern.rootVariable.

    Suggest in the DomainCS CS, "pattern=DomainPatternCS" changes to "patterns+=DomainPatternCS (',' patterns+=DomainPatternCS)*"

    As a consequence additional variables may be passed in a RelationCallExp. These can still be in rootVariable order.

    Discussion

    This seems to be a completely unnecessary restriction that caused the author of relToCore significant difficulties.

    The only downside seems to be a slight increase in complexity of a RelationCallExp. No longer exactly one argument per domain, but linearizing the roots per domain is not exactly hard.

    (The spelling in the discussion is that of the Eclipse QVTr prototype. Changing pattern to patterns is not appropriate for QVT1.x where property names tend to be simple-singulars. Perhaps a change to owned-plurals and so ownedPatterns may be appropriate for QVT 2.0.)

    Exploiting this in relToCore should wait until an executable version has been debugged.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTo/QVTr acronyms

  • Key: QVT13-101
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The full names of the QVT languages are a bit cumbersome and so QVTc/QVTo/QVTr are often found in non-OMG usage.

    Suggest that the QVT specification at least define them and perhaps use them a little too.

  • Reported: MOF 1.2 — Wed, 7 Oct 2015 11:51 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    QVTc/QVTo/QVTr acronyms

    The full names of the QVT languages are a bit cumbersome and so QVTc/QVTo/QVTr are often found in non-OMG usage.

    Suggest that the QVT specification at least define them and perhaps use them a little too.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Relationship between QVTo Mapping and QVTr Relation

  • Key: QVT13-17
  • Legacy Issue Number: 15390
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    8.1.4 states "a mapping operation is always a refinement of an implicit relation" but 8.2.15 defines "refinedRelation: Relation [0..1] The refined relation, if any." Clearly a contradiction.

    8.1.4. provides the REL_PackageToSchema example of how an implicit relation might be defined, but no other examples or synthesis rules are supplied.

    enforce and checkonly appear in the REL_PackageToSchema example indicating that these define execution mode of a QVTo trnasformation, but there does not appear to be any description of how a transformation might be executed to for instance update an output model. Perhaps the 'output' parameter is 'inout' for create/update but 'out' for create/overwrite.

  • Reported: QVT 1.1 — Fri, 30 Jul 2010 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    8 Unclear mapping operation characteristics

    8.1.4 states "a mapping operation is always a refinement of an implicit relation" but 8.2.15 defines "refinedRelation: Relation [0..1] The refined relation, if any." Clearly a contradiction.

    8.1.4. provides the REL_PackageToSchema example of how an implicit relation might be defined, but no other examples or synthesis rules are supplied.

    enforce and checkonly appear in the REL_PackageToSchema example indicating that these define execution mode of a QVTo trnasformation, but there does not appear to be any description of how a transformation might be executed to for instance update an output model. Perhaps the 'output' parameter is 'inout' for create/update but 'out' for create/overwrite.

    Discussion

    The aspiration that every QVTo mapping has an underlying QVTr relation is fairly dubious. But there is no point respecifying until some prototyping feedback is available.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: syntax mapping (correction to Issue 10646 resolution)

  • Key: QVT13-15
  • Legacy Issue Number: 14640
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The numerous problems identified in http://www.omg.org/archives/qvt-rtf/msg00094.html need to be addressed. Apologies too for the long email. This is a very difficult area where precision is important. Provision of
    this resolution demonstrates the need for the resolution, but unfortunately the resolution has an
    erroneous precision that will make QVTr 1.1 unimplementable whereas QVTr 1.0 is just mildly
    ambiguous and conflicting.
    Please do not include the resolution in QVT 1.1 without significantrework.
    I found the definition of the "checkonly"/"enforce" to isCheckable/isEnforceable helpful, although
    different to three of my own intuitive guesses based on attempts to avoid errors in ModelMorf and
    Rel2Core examples.
    The problems identified below are the result of a local review of the resolution. In the absence of a
    coherent Environment semantics it has not been possible to perform a global review. In particular, I
    was unable to review the specification for the arguably redundant bindsTo.
    [Incidentally, the same resolution approach is needed for QVTc and QVTo].
    Disambiguating rules
    --------------------
    The resolution uses a similar approach to the OCL 2.0 specification, but neglects to provide any
    disambiguating rules although many are needed.
    Environments
    ------------
    OCL and the resolution employ environments to carry definitions specific to particular CS constructs,
    so that a CS reference may be resolved with the aid of an environment or the AST.
    In EssentialOCL, all definitions are resolvable with in the immutable AST with the exception of let and
    iterator expressions for which a nestedEnvironment() is used to carry the extra variable declaration
    with the aid of addElement(). The nestedEnvironment supports name occlusion from outer scopes.
    In CompleteOCL, further definitions may be introduced by a definition constraint. The OCL
    specification provides no precise insight into how an environment changes to accommodate the
    definition. Should the name be added to the AST or to the environment? Is the name available for
    forward reference?
    Environment::addElement is defined as a query operation thereby inhibiting side effects. Consequently
    usage such as
    XX.env = YY.env.addElement(Z.name, Z.ast, false)
    leaves the environment of YY unchanged and creates an extended environment for XX.
    A series of such usages creates a series of progressively elaborated environments that support
    backward but not forward referencing. This was not a clear requirement of the QVT 1.0 specification
    and it prevents any variable declarations being introduced in an object template tree being resolved
    through environments in other object template trees or predicate expressions.
    QVT 1.2 RTF Report Page 173 of 190
    Object Management Group
    RTF/FTF Report
    Imposition of no forward referencing seems very undesirable, particularly since the order of domains is
    imposed by the model parameter order. Imagine a Java program in which all methods had to be
    defined in a no-forward reference order.
    As noted above, CompleteOCL neglected to define how AST definitions were added to the AST. QVTr
    must solve this problem since QVTr defines a hierarchically scoped AST rather than an annotation of
    a pre-existing AST.
    I recommend a two stage approach. The inherited attributes section should first compute an
    environment from the pushed-down parent environment augmented by pull-ups from child constructs
    so that a complete immutable and consequently unambiguous environment is associated with each
    construct and then pushed-down to the children. During the pull-up the environment acquires a
    mapping from name to future-AST. During the push-down residual future-AST attributes are populated
    to give a valid AST.
    Reference resolution
    --------------------
    OCL uses lookup functions to resolve variable references. It is necessary either to overload the lookup
    functions so that the the distinct QVTr variable definition sites can be located in the AST, or to use
    some form of Environment::addElement where each definition is defined so that resolution in the
    environment is possible.
    Details
    =======
    Throughout, many disambiguating rules are needed to define illegal semantics. For instance "any" is
    often used to select a syntactically valid value. Corresponding usage in the OCL specification has a
    disambiguating rule to clarify what the consequence of not "one" is.
    My current best attempt at Disambiguating Rules is attached.
    Environment::addElement takes three arguments, the third being a mayBeImplicit argument. This has
    been omitted throughout without explanation.
    identifierCS
    ------------
    OCL defines SimpleNameCS. A degenerate mapping from identifierCS to SimplenameCS is required.
    topLevelCS
    ----------
    The 'imported transformation' environment element is later referenced as 'imported transformations'.
    Typo: TransformationListCS for transformationListCS in Synthesized attributes.
    importListCS
    ------------
    Semantics of import conflicts must be defined.
    unitCS
    ------
    Typo: ast is not a Set.
    Surely the import is of packages (enumerations or operations)or at least transformations (QVTo
    implementations) rather than necessarily relational-transformations?
    transformationCS
    ----------------
    QVT 1.2 RTF Report Page 174 of 190
    Object Management Group
    RTF/FTF Report
    ownedTag is not synthesized.
    keyDeclListCS
    -------------
    Typo: wrong font in synthesized attributes
    modelDeclCS
    -----------
    The [B] grammar:
    modelDeclCS ::= modelIdCS ':' '

    {' metaModelIdListCS '}

    '
    is missing.
    keyDeclCS
    ---------
    Synthesized attributes appear to have experienced a copy and paste error while providing distinct part
    and oppositePart left hand sides.
    keyPropertyCS
    -------------
    The synthesized attributes poke the parent.
    Suggest: it would be clearer for the parent to gather and distribute children similar to the relation/query
    allocation by transformationCS.
    relationCS
    ----------
    Transformation.extends does not appear to be transitive.
    topQualifierCS
    --------------
    Suggest: a boolean or enumerated value rather than a string.
    domainListCS
    ------------
    Typo: missing indentation.
    primitiveTypeDomainCS
    ---------------------
    isCheckable, isEnforceable not synthesized.
    objectTemplateCS
    ----------------
    Variable needs to be added to relation to provide a container.
    Variable needs to be added to relation environment to provide visibility.
    collectionTemplateCS
    --------------------
    Variable needs to be added to relation to provide a container.
    Variable needs to be added to relation environment to provide visibility.
    Suggest: last two if guards are redundant.
    QVT 1.2 RTF Report Page 175 of 190
    Object Management Group
    RTF/FTF Report
    restCS
    ------
    Variable needs to be added to relation to provide a container.
    Non-_ named variable needs to be added to relation environment to provide visibility.
    memberCS
    --------
    Variable needs to be added to relation to provide a container.
    Non-_ named variable needs to be added to relation environment to provide visibility.
    whenCS
    ------
    predicateListCS should be optional.
    whereCS
    -------
    predicateListCS should be optional.
    ExtOclExpressionCS
    ------------------
    This is not present in the QVTr or OCL grammar.
    Presumably it represents the QVTr extension to OCL's OclExpressionCS.
    However it is an extension, since at least RelationCallExpCS can be used in an ordinary
    OclExpressionCS using "not" or "and".
    [A], [B], [C] should therefore follow on from OCL's
    [A], [B], [C]..., [I].
    RelationCallExpressionCS
    ------------------------
    How is a RelationCallExpressionCS distinguished from an OperationCallExpCS?

  • Reported: QVT 1.1 — Mon, 16 Nov 2009 05:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    QVTr syntax mapping (correction to Issue 10646 resolution)

    The numerous problems identified in http://www.omg.org/archives/qvt-rtf/msg00094.html need to be addressed. Apologies too for the long email. This is a very difficult area where precision is important. Provision of
    this resolution demonstrates the need for the resolution, but unfortunately the resolution has an
    erroneous precision that will make QVTr 1.1 unimplementable whereas QVTr 1.0 is just mildly
    ambiguous and conflicting.
    Please do not include the resolution in QVT 1.1 without significantrework.
    I found the definition of the "checkonly"/"enforce" to isCheckable/isEnforceable helpful, although
    different to three of my own intuitive guesses based on attempts to avoid errors in ModelMorf and
    Rel2Core examples.
    The problems identified below are the result of a local review of the resolution. In the absence of a
    coherent Environment semantics it has not been possible to perform a global review. In particular, I
    was unable to review the specification for the arguably redundant bindsTo.
    [Incidentally, the same resolution approach is needed for QVTc and QVTo].
    Disambiguating rules
    --------------------
    The resolution uses a similar approach to the OCL 2.0 specification, but neglects to provide any
    disambiguating rules although many are needed.
    Environments
    ------------
    OCL and the resolution employ environments to carry definitions specific to particular CS constructs,
    so that a CS reference may be resolved with the aid of an environment or the AST.
    In EssentialOCL, all definitions are resolvable with in the immutable AST with the exception of let and
    iterator expressions for which a nestedEnvironment() is used to carry the extra variable declaration
    with the aid of addElement(). The nestedEnvironment supports name occlusion from outer scopes.
    In CompleteOCL, further definitions may be introduced by a definition constraint. The OCL
    specification provides no precise insight into how an environment changes to accommodate the
    definition. Should the name be added to the AST or to the environment? Is the name available for
    forward reference?
    Environment::addElement is defined as a query operation thereby inhibiting side effects. Consequently
    usage such as
    XX.env = YY.env.addElement(Z.name, Z.ast, false)
    leaves the environment of YY unchanged and creates an extended environment for XX.
    A series of such usages creates a series of progressively elaborated environments that support
    backward but not forward referencing. This was not a clear requirement of the QVT 1.0 specification
    and it prevents any variable declarations being introduced in an object template tree being resolved
    through environments in other object template trees or predicate expressions.
    QVT 1.2 RTF Report Page 173 of 190
    Object Management Group
    RTF/FTF Report
    Imposition of no forward referencing seems very undesirable, particularly since the order of domains is
    imposed by the model parameter order. Imagine a Java program in which all methods had to be
    defined in a no-forward reference order.
    As noted above, CompleteOCL neglected to define how AST definitions were added to the AST. QVTr
    must solve this problem since QVTr defines a hierarchically scoped AST rather than an annotation of
    a pre-existing AST.
    I recommend a two stage approach. The inherited attributes section should first compute an
    environment from the pushed-down parent environment augmented by pull-ups from child constructs
    so that a complete immutable and consequently unambiguous environment is associated with each
    construct and then pushed-down to the children. During the pull-up the environment acquires a
    mapping from name to future-AST. During the push-down residual future-AST attributes are populated
    to give a valid AST.
    Reference resolution
    --------------------
    OCL uses lookup functions to resolve variable references. It is necessary either to overload the lookup
    functions so that the the distinct QVTr variable definition sites can be located in the AST, or to use
    some form of Environment::addElement where each definition is defined so that resolution in the
    environment is possible.
    Details
    =======
    Throughout, many disambiguating rules are needed to define illegal semantics. For instance "any" is
    often used to select a syntactically valid value. Corresponding usage in the OCL specification has a
    disambiguating rule to clarify what the consequence of not "one" is.
    My current best attempt at Disambiguating Rules is attached.
    Environment::addElement takes three arguments, the third being a mayBeImplicit argument. This has
    been omitted throughout without explanation.
    identifierCS
    ------------
    OCL defines SimpleNameCS. A degenerate mapping from identifierCS to SimplenameCS is required.
    topLevelCS
    ----------
    The 'imported transformation' environment element is later referenced as 'imported transformations'.
    Typo: TransformationListCS for transformationListCS in Synthesized attributes.
    importListCS
    ------------
    Semantics of import conflicts must be defined.
    unitCS
    ------
    Typo: ast is not a Set.
    Surely the import is of packages (enumerations or operations)or at least transformations (QVTo
    implementations) rather than necessarily relational-transformations?
    transformationCS
    ----------------
    QVT 1.2 RTF Report Page 174 of 190
    Object Management Group
    RTF/FTF Report
    ownedTag is not synthesized.
    keyDeclListCS
    -------------
    Typo: wrong font in synthesized attributes
    modelDeclCS
    -----------
    The [B] grammar:
    modelDeclCS ::= modelIdCS ':' '

    {' metaModelIdListCS '}

    '
    is missing.
    keyDeclCS
    ---------
    Synthesized attributes appear to have experienced a copy and paste error while providing distinct part
    and oppositePart left hand sides.
    keyPropertyCS
    -------------
    The synthesized attributes poke the parent.
    Suggest: it would be clearer for the parent to gather and distribute children similar to the relation/query
    allocation by transformationCS.
    relationCS
    ----------
    Transformation.extends does not appear to be transitive.
    topQualifierCS
    --------------
    Suggest: a boolean or enumerated value rather than a string.
    domainListCS
    ------------
    Typo: missing indentation.
    primitiveTypeDomainCS
    ---------------------
    isCheckable, isEnforceable not synthesized.
    objectTemplateCS
    ----------------
    Variable needs to be added to relation to provide a container.
    Variable needs to be added to relation environment to provide visibility.
    collectionTemplateCS
    --------------------
    Variable needs to be added to relation to provide a container.
    Variable needs to be added to relation environment to provide visibility.
    Suggest: last two if guards are redundant.
    QVT 1.2 RTF Report Page 175 of 190
    Object Management Group
    RTF/FTF Report
    restCS
    ------
    Variable needs to be added to relation to provide a container.
    Non-_ named variable needs to be added to relation environment to provide visibility.
    memberCS
    --------
    Variable needs to be added to relation to provide a container.
    Non-_ named variable needs to be added to relation environment to provide visibility.
    whenCS
    ------
    predicateListCS should be optional.
    whereCS
    -------
    predicateListCS should be optional.
    ExtOclExpressionCS
    ------------------
    This is not present in the QVTr or OCL grammar.
    Presumably it represents the QVTr extension to OCL's OclExpressionCS.
    However it is an extension, since at least RelationCallExpCS can be used in an ordinary
    OclExpressionCS using "not" or "and".
    [A], [B], [C] should therefore follow on from OCL's
    [A], [B], [C]..., [I].
    RelationCallExpressionCS
    ------------------------
    How is a RelationCallExpressionCS distinguished from an OperationCallExpCS?

    Discussion

    These issues cannot be sensibly addressed until the auto-generation being pioneered for OCL can be re-used.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Standard Library return types

  • Key: QVT13-12
  • Legacy Issue Number: 13181
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:
      • QVTo Standard Library. Some operation's returned values would better return the TemplateParameterType **
        Several stdlib operations would be better changed to avoid doing unnecessary castings on the returned value of the operation.

    For AnyType::oclAsType(oclType) operation I could write:

    var aClass : Class := anotherVar.oclAsType(Class);

    However, for Model::objectsOfType(OclType) operation I can't do:

    var aClassSet : Set(Class) := aModel.objectsOfType(Class);

    I have to do the following, instead:

    var aClassSet : Set(Class) := aModel.objectsOfType(Class).oclAsType(Set(Class));

    Therefore, for end-user usability, I propose exploiting TemplateParameterType and changing some QVTo Standard Library operations

    Element::subobjectsOfType(OclType) : Set(T)
    Element::allSubobjects(OclType) : Set(T)
    Element::subobjectsOfKind(OclType) : Set(T)
    Element::allSubobjectsOfKind(OclType) : Set(T)
    Element::clone() : T
    Element::deepclone() : T
    Model::objectsOfType(OclType) : Set(T)
    Model::copy() : T
    Model::createEmptyModel(): T

    Note: this approach is made in the Object::asOrderedTuple() : OrderedTuple(T) operation.

  • Reported: QVT 1.0 — Fri, 19 Dec 2008 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    8.3.5.7 createEmptyModel static Model::createEmptyModel() : Model Creates and initializes a model of the given type. This operation is useful when creating intermediate models within a transformation.

    QVTo Standard Library. Some operation's returned values would better return the TemplateParameterType **
    Several stdlib operations would be better changed to avoid doing unnecessary castings on the returned value of the operation.

    For AnyType::oclAsType(oclType) operation I could write:

    var aClass : Class := anotherVar.oclAsType(Class);

    However, for Model::objectsOfType(OclType) operation I can't do:

    var aClassSet : Set(Class) := aModel.objectsOfType(Class);

    I have to do the following, instead:

    var aClassSet : Set(Class) := aModel.objectsOfType(Class).oclAsType(Set(Class));

    Therefore, for end-user usability, I propose exploiting TemplateParameterType and changing some QVTo Standard Library operations

    Element::subobjectsOfType(OclType) : Set(T)
    Element::allSubobjects(OclType) : Set(T)
    Element::subobjectsOfKind(OclType) : Set(T)
    Element::allSubobjectsOfKind(OclType) : Set(T)
    Element::clone() : T
    Element::deepclone() : T
    Model::objectsOfType(OclType) : Set(T)
    Model::copy() : T
    Model::createEmptyModel(): T

    Note: this approach is made in the Object::asOrderedTuple() : OrderedTuple(T) operation.

    Discussion

    subobjectsOfType etc duplicate QVT13-53

    clone/deepclone merged into QVT13-53

    Model::copy/createEmptyModel - NO. Model is the correct return type.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: synonyms

  • Key: QVT13-11
  • Legacy Issue Number: 13180
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    his section (8.3.2) is very confusing for the reader. What does synonym means ? - Is just like a shorthand of the concrete syntax ? - Is just a new operation included in the QVTo Standard Library semantically equivalent?. Ideally, just one type/operation must exist (the OCL predefined type and the operation of an OCL predefined type), so that, writing Void (a type) or asType (operation) should produce the same AST as if I write OclVoid or oclAsType. With this idea, I'm really puzzled with the third paragraph of the section. Please revise this section so that it is less confusing.

  • Reported: QVT 1.0 — Fri, 19 Dec 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    section (8.3.2) is very confusing for the reader

    This section (8.3.2) is very confusing for the reader. What does synonym means ? - Is just like a shorthand of the concrete syntax ? - Is just a new operation included in the QVTo Standard Library semantically equivalent?. Ideally, just one type/operation must exist (the OCL predefined type and the operation of an OCL predefined type), so that, writing Void (a type) or asType (operation) should produce the same AST as if I write OclVoid or oclAsType. With this idea, I'm really puzzled with the third paragraph of the section. Please revise this section so that it is less confusing.

    Discussion - Ocl type prefixes

    As an OCL user, I find the attempt and recommendation to hide the underlying OCL functionality very confusing, particularly when it introduces potential collisions whose prevention is inaccurately described.

    Since the description of the M1 types does not enumerate them, I am not clear which types are intended. If Eclipse QVTo is any guide, it would be OclAny/Any, OclVoid/Void, but not OclElement, OclInvalid, OclMessage, OclState, OclType.

    If this policy is to remain recommended, it must also apply to all of the above. I find the injection of Element and Type into the user's namespace particularly offensive.

    I recommend that the recommendation be reversed, so that we just observe that QVTo implementations offering backward compatibility may permit the seven enumerated synonyms to be used as shortforms of the full spelling.

    Discussion - ocl operation prefixes

    The references to the "Ocl" prefix are inaccurate for operations where it is "ocl".

    As an OCL user, I find the attempt and recommendation to hide the underlying OCL functionality a bit confusing, particularly since the abbreviated forms are used very little used in the editorial text and have no definition.

    I recommend eliminating their editorial usage and defining them as synonyms that a QVTo implementation offering backward compatibility may support as an alternate spelling that is mapped to the full spelling when used within the abstract syntax

    Discussion - Operation name synonyms

    This section was written for OCL 2.0 which has no String::+ operator. String::+ is available in OCL 2.4 so there is no need for QVT 1.2 to define it as a synonym.The other mathematical operators have always been part of OCL, so the purpose of enumerating them is unclear and indeed confusing. Is there actually an operation with the spelling "operator+"? I see no need for one. In the concrete syntax, "+" is fully available. In UML and OCL "+" is a permissible internal spelling for an operation name. The _'+' escape enables its use in arbitrary name contexts.

    The only question is whether a particular implementation might choose to use "plus" as a spel;ling to avoid problems in languages that do not allow arbitrary spellings. But that is an implementation language-specific choice that does not affect QVT or OCL; perhaps relevant to the Java-binding for OCL specification if written. FWIW, Eclipse QVTo has no "operator+" operation.

    Conversely, is the specification actually saying that "plus" may be used rather than "+"? This might be a way of elevating an implementation language workaround into the source, which seems rather perverse. FWIW, Eclipse QVTo provides no "divide" operation.

    The operation synonym sentences can be eliminated without any loss.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Typedef

  • Key: QVT13-10
  • Legacy Issue Number: 13168
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Creating aliases seems to be a good idea specially when dealing with complex types. However, for that purpose, it is not clear to me that we need to create a (useless) typedef just to represent an alias in the concrete syntax. In practice aliases are very useful when writing transformations (in concrete syntax), but they are useless in the abstract syntax (extra unnecessary classes in modules). One may still think that a typedef as an alias (no extra condition) may be needed to add operations to existing types, as specification suggests doing in order to include new operations for the OCL standard library predefined types. However, this still can be done by means of helpers. Suggestions: - Remove the statements related to aliases in the section 8.2.2.24 - Make Typedef.condition reference be mandatory in Figure 8.7 since, now, Typedef in the abstract syntax will be used to constrain existing types. - Add statements in the concrete syntax section, to clarify the use of aliases to rename existing types. Maybe, a new keyword (like alias) could be included to avoid confusions with the typedef one. - Change the grammar to adapt it to these suggestions. - Clarify in the Standard Library section that helpers will be used to add new operations to the OCL Std Lib predefined type.

  • Reported: QVT 1.0 — Thu, 18 Dec 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    Typedef aliases issue

    Creating aliases seems to be a good idea specially when dealing with complex types. However, for that purpose, it is not clear to me that we need to create a (useless) typedef just to represent an alias in the concrete syntax. In practice aliases are very useful when writing transformations (in concrete syntax), but they are useless in the abstract syntax (extra unnecessary classes in modules). One may still think that a typedef as an alias (no extra condition) may be needed to add operations to existing types, as specification suggests doing in order to include new operations for the OCL standard library predefined types. However, this still can be done by means of helpers. Suggestions: - Remove the statements related to aliases in the section 8.2.2.24 - Make Typedef.condition reference be mandatory in Figure 8.7 since, now, Typedef in the abstract syntax will be used to constrain existing types. - Add statements in the concrete syntax section, to clarify the use of aliases to rename existing types. Maybe, a new keyword (like alias) could be included to avoid confusions with the typedef one. - Change the grammar to adapt it to these suggestions. - Clarify in the Standard Library section that helpers will be used to add new operations to the OCL Std Lib predefined type.

    Discussion

    Ignoring the QVT Standard Library usage eliminated by the resolution of Issue 13252, http://solitaire.omg.org/browse/QVT13-13, there are two distinct usages of typedef.

    a) to create an alias
    b) to create a new constrained type

    Discussion - alias

    If an alias introduces a new type as the inheritance of Typedef from Type would suggest, we have semantic nightmares. Which type conforms to which? How do we ensure that all functionality understands the typedef equivalence? As observed, a typedef is a concrete syntax text macro that should be eliminated during conversion to the abstract syntax to avoid ambiguities. However an AS concept is needed to persist the macro. A Tag is sufficient.

    Discussion - constrained type

    The typedef syntax with a constraint introduces a new type. However all the important semantics of this type are unspecified. What are the superclasses of this type? What does it conform to? How do its operations and properties interact with the unconstrained type? Can a Constrained Integer be used as a Sequence index?

    The only example of a constrained type is:

    typedef TopLevelPackage = Package [container()=null];

    suggesting that perhaps self is to be interpreted as the type instance. If container() is the proposed oclContainer() then the example is particularly interesting. If a TopLevelPackage is assigned to a container, how does the type change? Are all assignments supposed to have a predicate evaluation to ensure that typedef constraints are not violated? Are assigned types to be changed by an assignment? Does an assignment that violates a constrained type constraint render a transformation invalid and require some form of failure?

    Look at it another way. Suppose we used bland UML. We can add an invariant to a class, which can inherit/aggregate another type to re-use it. We and general purpose tooling understand these semantics. What does a typedef constrained type offer that is new? just magic undefined semantics that cannot be used with any non-QVTo tool.

    The constrained typedef appears to be a clear case of misguided syntax sugar. If metamodeling syntax sugar is really needed, let it have a clear relationship to UML.

    Conclusion

    The alias usage is a concrete syntax synonym that has no need of a Typedef class; a Tag will do.

    The constrained type is underspecified syntax sugar. The Typedef class can be deprecated.

    FWIW: neither of these forms of typedef is implemented by Eclipse QVTo.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: element creation and element attachment/detachment to/from an extent

  • Key: QVT13-9
  • Legacy Issue Number: 13103
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    Suggestion: In the Operational Mappings language, element creation and element attachment/detachment to/from an extent should be seen and treated as two different and independent activities. Once an element is created via an ObjectExp, this element is usually attached to another element immediately afterwards, which becomes its container, so the ObjectExp semantics of assigning it to an explicit or inferred extent becomes an unnecessary overhead. And also there are other times when we need to assign to an extent some model elements that may have been created at an unrelated time. They could even exist prior to the transformation execution. A case where this is relevant is with the result of a 'Element::clone()' or 'Element::deepclone()' operation execution. Is it expected that these model elements must belong by default to the same model as the original? How to clone parts of an extent with direction kind == 'in'? How to make them become part of the Set of root elements of another, different extent?

  • Reported: QVT 1.0 — Fri, 21 Nov 2008 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    element creation and element attachment/detachment to/from an extent

    Suggestion: In the Operational Mappings language, element creation and element attachment/detachment to/from an extent should be seen and treated as two different and independent activities. Once an element is created via an ObjectExp, this element is usually attached to another element immediately afterwards, which becomes its container, so the ObjectExp semantics of assigning it to an explicit or inferred extent becomes an unnecessary overhead. And also there are other times when we need to assign to an extent some model elements that may have been created at an unrelated time. They could even exist prior to the transformation execution. A case where this is relevant is with the result of a 'Element::clone()' or 'Element::deepclone()' operation execution. Is it expected that these model elements must belong by default to the same model as the original? How to clone parts of an extent with direction kind == 'in'? How to make them become part of the Set of root elements of another, different extent?

    Discussion

    This seems to be a misunderstanding. ObjectExp does not require a created object to be attached to an inferred extent.
    This functionality seems to be present already.
    Creation without attachment requires a null or null-valued extent during creation.
    Attachment after creation can occur through an ObjectExp update to the required extent.
    Re-attachment presumably occurs through an ObjectExp update to the new extent.
    Detachment then naturally occurs through an ObjectExp update to a null-valued extent.

    This issue inspired the provision of a better desciption of extents. The resolution is therefore merged with that of QVT-36.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: ImperativeOCL conflicts with EssentialOCL semantics

  • Key: QVT13-8
  • Legacy Issue Number: 13082
  • Status: closed  
  • Source: Anonymous
  • Summary:

    Major Problem:
    (1) The current abstract syntax of ImperativeOCL introduces a couple of
    unclear situations. This may lead to incompatible QVT implementations.
    Further Problems:
    (2) Control flow constructs introduced by ImperativeOCL are redundant
    compared with existing conventional OCL constructs.
    (3) Several OCL equivalence rules break when ImperativeOCL is present.
    Detailed problem description:
    (1) The current abstract syntax of ImperativeOCL introduces a couple of
    unclear situations. This may lead to incompatible QVT implementations.
    In the abstract syntax, ImperativeOCL expressions / statements are
    inherited from OclExpression. Therefore, conventional OCL
    expressions may (and will) contain sub-expressions that are
    actually ImperativeOCL expressions.
    In conventional OCL, the interpretation of an expression under a
    given environment is a value. In ImperativeOCL, the interpretation
    of an expression is a value and a new environment
    (state,variables). This extended interpretation is not given for
    conventional OCL expressions, leading to undefined operational
    semantics of those expressions.
    Example: Given the following compute expression:
    compute(z:Boolean) {
    var x : Boolean := true
    var y : Boolean := true
    if ((x:=false) and (y:=false))

    { ... }

    z := y
    }
    What is the value of this expression: is it true or false (It
    depends on whether the 'and' operator is evaluated short-circuit
    or strict). The situation is similar for the evaluation of the
    other logical connectives, forAll, and exists when these
    expressions contain imperative sub-expressions.
    (2) Control flow constructs introduced by ImperativeOCL are redundant
    compared with existing conventional OCL constructs.
    Some of the new language features in ImperativeOCL such as forEach
    and the imperative conditional are not really necessary. Their
    effect can already be achieved using conventional OCL expressions:
    For example:
    company.employees->forEach(c)

    { c.salary := c.salary * 1.1}

    has the same effect as
    company.employees->iterate(c; r:OclAny=Undefined |
    c.salary := c.salary * 1.1
    )
    and
    if ( x < 0 )

    { x := 0 }

    else

    { x := 1 }

    endif is the same as
    if x < 0 then x := 0 else x := 1 endif
    (3) Several OCL equivalence rules break when ImperativeOCL is present.
    In conventional OCL, several equivalence rules well known from
    logic hold. Allowing OCL expression to contain imperative
    sub-expressions breaks these equivalence rules.
    Examples:
    let x=e1 in e2 equiv. e2

    { all occurences of x replaced by e1 }

    e1 and e2 equiv. e2 and e1
    These equivalences do not necessarily hold if e1 or e2 are allowed
    to have side-effects.
    Proposed solution:
    (A) - (The cheap solution.) State textually that conventional OCL
    expressions (as described in the OMG OCL spec.) are not
    allowed to have side effects unless used as part of a top
    level ImperativeOCL expression. Therefore, even in a system
    supporting ImperativeOCL, class invariants, and pre- and
    postconditions (e.g.) will not be allowed to contain
    ImperativeOCL sub-expressions.
    State explicitly that the redundant flow control statements
    have been introduced (solely) to write concise imperative
    programs and that the side-effect free forms of conditional
    evaluation ( 'if-then-else-endif' and 'iterate' ) shall not be
    used to program side-effects (instead, the ImperativeOCL forms
    shall be used).
    (B) - (Major rework.) Rework the abstract syntax to reuse OCL
    expressions by composition rather than by inheritance.
    Imperative expressions ( => rename to 'statements' ) then may
    contain sub-statements and OCL expressions; OCL expressions
    are reused unchanged from the OCL spec (no imperative
    sub-expressions, no side-effects).
    These issues have been discussed on the MoDELS 2008 OCL Workshop,
    more details can be found at
    http://www.fots.ua.ac.be/events/ocl2008/PDF/OCL2008_9.pdf

  • Reported: QVT 1.0 — Sat, 15 Nov 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.3
  • Disposition Summary:

    current abstract syntax of ImperativeOCL introduces a couple of unclear situations

    Major Problem:
    (1) The current abstract syntax of ImperativeOCL introduces a couple of unclear situations. This may lead to incompatible QVT implementations.
    Further Problems:
    (2) Control flow constructs introduced by ImperativeOCL are redundant compared with existing conventional OCL constructs.
    (3) Several OCL equivalence rules break when ImperativeOCL is present.
    Detailed problem description:
    (1) The current abstract syntax of ImperativeOCL introduces a couple of unclear situations. This may lead to incompatible QVT implementations.
    In the abstract syntax, ImperativeOCL expressions / statements are inherited from OclExpression. Therefore, conventional OCL expressions may (and will) contain sub-expressions that are actually ImperativeOCL expressions. In conventional OCL, the interpretation of an expression under a given environment is a value. In ImperativeOCL, the interpretation of an expression is a value and a new environment (state,variables). This extended interpretation is not given for conventional OCL expressions, leading to undefined operational semantics of those expressions.
    Example: Given the following compute expression:
    compute(z:Boolean) {
    var x : Boolean := true
    var y : Boolean := true
    if ((x:=false) and (y:=false))

    { ... }

    z := y
    }
    What is the value of this expression: is it true or false (It depends on whether the 'and' operator is evaluated short-circuit or strict). The situation is similar for the evaluation of the other logical connectives, forAll, and exists when these expressions contain imperative sub-expressions.

    (2) Control flow constructs introduced by ImperativeOCL are redundant compared with existing conventional OCL constructs.
    Some of the new language features in ImperativeOCL such as forEach and the imperative conditional are not really necessary. Their effect can already be achieved using conventional OCL expressions:
    For example:
    company.employees->forEach(c)

    { c.salary := c.salary * 1.1}

    has the same effect as
    company.employees->iterate(c; r:OclAny=Undefined |
    c.salary := c.salary * 1.1
    )
    and
    if ( x < 0 )

    { x := 0 }

    else

    { x := 1 }

    endif is the same as
    if x < 0 then x := 0 else x := 1 endif

    (3) Several OCL equivalence rules break when ImperativeOCL is present.
    In conventional OCL, several equivalence rules well known from logic hold. Allowing OCL expression to contain imperative sub-expressions breaks these equivalence rules.
    Examples:
    let x=e1 in e2 equiv. e2

    { all occurences of x replaced by e1 }

    e1 and e2 equiv. e2 and e1
    These equivalences do not necessarily hold if e1 or e2 are allowed to have side-effects.
    Proposed solution:
    (A) - (The cheap solution.) State textually that conventional OCL expressions (as described in the OMG OCL spec.) are not allowed to have side effects unless used as part of a top level ImperativeOCL expression. Therefore, even in a system supporting ImperativeOCL, class invariants, and pre- and postconditions (e.g.) will not be allowed to contain ImperativeOCL sub-expressions.
    State explicitly that the redundant flow control statements have been introduced (solely) to write concise imperative programs and that the side-effect free forms of conditional evaluation ( 'if-then-else-endif' and 'iterate' ) shall not be used to program side-effects (instead, the ImperativeOCL forms shall be used).
    (B) - (Major rework.) Rework the abstract syntax to reuse OCL expressions by composition rather than by inheritance.
    Imperative expressions ( => rename to 'statements' ) then may contain sub-statements and OCL expressions; OCL expressions are reused unchanged from the OCL spec (no imperative sub-expressions, no side-effects).
    These issues have been discussed on the MoDELS 2008 OCL Workshop, more details can be found at http://www.fots.ua.ac.be/events/ocl2008/PDF/OCL2008_9.pdf

    Discussion - 1 short circuit semantics

    It is possible to weasel out of this narrowly described problem by observing that OCL only supports short-circuit semantics once it is proven that no invalid lurks beyond the short-circuit. An extension to this could inhibit short-circuit semantics if any imperative expression is involved.

    Discussion - (2) redundant control flow

    The first suggestion is contradictory. The replacement for forEach is noticeably longer and uses a side effect within an iterate, which the author argues against elsewhere.

    The second suggestion incorrectly assumes that an else clause is present. The imperative if (SwitchExp) allows one-sided functionality including selective control flow adjustment.

    Discussion - (3) broken equivalence

    The example is unreadable, but the point is unarguable; imperative semantics within functional semantics subvert the functional.

    (A) - (The cheap solution.) is simple and adopted here.

    (B) - (Major rework.) is a breaking structural change and so forked off to http://solitaire.omg.org/browse/QVT13-87 for consideration by QVT 2.0.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: BlackBox operation signature difficulties

  • Key: QVT13-7
  • Legacy Issue Number: 13054
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    In 7.11.3.6 (and 7.8) the ordering of parameters is implied but not explicit. Presumably the first is the output (enforced direction) so:

    package QVTBase

    context TypedModel
    def: allUsedPackage() : Set(EMOF::Package)
    = self.dependsOn.allUsedPackage()>asSet()>union(self.usedPackage)

    endpackage

    package QVTRelation

    context RelationImplementation
    inv RootNodeIsBoundToRootVariable : self.inDirectionOf.allUsedPackage()>includes(self.impl.ownedParameter>at(1).type._package)

    endpackage

    This is not satisfied by almost the last line of RelToCore in 10.3:

    enforce domain core me:OclExpression{} implementedby CopyOclExpession(re, me);

    which seems to have output second.

    -----------------------------------------------------

    More significantly CopyOclExpession(re, me) is not meaningful as a black box signature, since it is a static function and EMOF has no way to define static functions. Perhaps it is a query, for which the declaration was omitted from the example. If this is the case, it should be made clear that black box operations must be declared internally as queries and bound externally to static operations of the transformation.

    This semantic clumsiness could be resolved, if, within a transformation,
    relation, domain or query, self is bound to a transformation instance. Queries would then be normal non-static operations of the transformation (class) and the implementedBy operation call would be a normal implicit call via self of a non-static transformation operation or query. (A RelationCallExp would also deviate less from OCL than it currently does.) This would also allow a transformation to extend a Utility class that provided the required black box operations. Since queries and relations are declarative, it is not obvious that there need be any prohibition on the content of an extended Class; if the Class has properties, these cannot mutate during a query or relation match, so the properties are ok; they might even permit useful behavioural tailoring. For instance an 'inherited' Boolean mangledNames property could influence the mapping of names between input and output.

    The RelToCore example can then be mended by declaring that:

    RelToCore(...) extends utils::CopyUtilities

    and externally binding the utils model name to a package that has a CopyUtilities class with suitable a CopyOclExpession operation.

  • Reported: QVT 1.0 — Fri, 31 Oct 2008 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    7.11.3.6 (and 7.11.1.1) BlackBox operation signature difficulties

    In 7.11.3.6 (and 7.8) the ordering of parameters is implied but not explicit. Presumably the first is the output (enforced direction) so:

    package QVTBase
    
    context TypedModel
    def: allUsedPackage() : Set(EMOF::Package)
    = self.dependsOn.allUsedPackage()>asSet()>union(self.usedPackage)
    
    endpackage
    
    package QVTRelation
    
    context RelationImplementation
    inv RootNodeIsBoundToRootVariable : self.inDirectionOf.allUsedPackage()>includes(self.impl.ownedParameter>at(1).type._package)
    
    endpackage
    

    This is not satisfied by almost the last line of RelToCore in 10.3:

    enforce domain core me:OclExpression{} implementedby CopyOclExpession(re, me);
    

    which seems to have output second.

    -----------------------------------------------------

    More significantly CopyOclExpession(re, me) is not meaningful as a black box signature, since it is a static function and EMOF has no way to define static functions. Perhaps it is a query, for which the declaration was omitted from the example. If this is the case, it should be made clear that black box operations must be declared internally as queries and bound externally to static operations of the transformation.

    This semantic clumsiness could be resolved, if, within a transformation,relation, domain or query, self is bound to a transformation instance. Queries would then be normal non-static operations of the transformation (class) and the implementedBy operation call would be a normal implicit call via self of a non-static transformation operation or query. (A RelationCallExp would also deviate less from OCL than it currently does.) This would also allow a transformation to extend a Utility class that provided the required black box operations. Since queries and relations are declarative, it is not obvious that there need be any prohibition on the content of an extended Class; if the Class has properties, these cannot mutate during a query or relation match, so the properties are ok; they might even permit useful behavioural tailoring. For instance an 'inherited' Boolean mangledNames property could influence the mapping of names between input and output.

    The RelToCore example can then be mended by declaring that:

    RelToCore(...) extends utils::CopyUtilities
    

    and externally binding the utils model name to a package that has a CopyUtilities class with suitable a CopyOclExpession operation.

    Discussion

    Binding self to a Transformation instance may conflict with self as the context in a query. Much safer to bind this; just like QVTo.

    Using this as the source of an OperationCallExp of a query eliminates an incompatibility with OCL. But there is no need bloat every RelationCallExp with an extra VariableExp for this.

    Any enhancement here needs prototyping.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: Undefined semantics

  • Key: QVT13-3
  • Legacy Issue Number: 10936
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The whole Concrete Syntax section deserves a much more substantial description.

    In particular...

    The mechanism by which a package name is located is unresolved, perhaps deliberately,
    but the omission should be explicit.

    What constraints exist on forward referencing of names?

    Transformations and mappings could be ordered so that forward references are avoided,
    but large modules benefit from an alphabetical ordering of elements, so requiring
    a parser friendly order is not user friendly.

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    9.18 Undefined semantics

    The whole Concrete Syntax section deserves a much more substantial description.

    In particular...

    The mechanism by which a package name is located is unresolved, perhaps deliberately,
    but the omission should be explicit.

    What constraints exist on forward referencing of names?

    Transformations and mappings could be ordered so that forward references are avoided,
    but large modules benefit from an alphabetical ordering of elements, so requiring
    a parser friendly order is not user friendly.

    Discussion

    This isn't going to happen until a QVT 2.0 rewrite adopts the autogeneration approaches underway for OCL.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: Deletion semantics

  • Key: QVT13-21
  • Legacy Issue Number: 15886
  • Status: closed  
  • Source: Institute for Defense Analyses ( Steven Wartik)
  • Summary:

    I’m having trouble with the semantics of DELETE on p. 189 of the QVT Specification (v1.1). It reads in part:

    FORALL OBJVAR IN MAKESET(<DOMAIN_K_VARIABLE_SET>) (
    …
    AND BELONGSTO(OBJVAR, MAKESET(<DOMAIN_K_VARIABLE_SET>))

    I guess I don’t understand MAKESET and BELONGSTO. First of all, <DOMAIN_K_VARIABLE_SET> is already a set, so what’s the MAKESET function do? Second, the FORALL iterates OBJVAR over the results of the same MAKESET that BELONGSTO tests. So how can BELONGSTO be false? That is, I would assume BELONGSTO is defined as follows:

    BELONGSTO(e, S) º e ÎS

    except that under this definition the expression above is always satisfied.

    Any and all help appreciated. Thank you very much.

  • Reported: QVT 1.1 — Tue, 12 Oct 2010 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Specification of deletion semantics

    I’m having trouble with the semantics of DELETE on p. 189 of the QVT Specification (v1.1). It reads in part:

    FORALL OBJVAR IN MAKESET(<DOMAIN_K_VARIABLE_SET>) (
    …
    AND BELONGSTO(OBJVAR, MAKESET(<DOMAIN_K_VARIABLE_SET>))

    I guess I don’t understand MAKESET and BELONGSTO. First of all, <DOMAIN_K_VARIABLE_SET> is already a set, so what’s the MAKESET function do? Second, the FORALL iterates OBJVAR over the results of the same MAKESET that BELONGSTO tests. So how can BELONGSTO be false? That is, I would assume BELONGSTO is defined as follows:

    BELONGSTO(e, S) º e ÎS

    except that under this definition the expression above is always satisfied.

    Any and all help appreciated. Thank you very much.

    Discussion

    Well this is very embarrassing. I don't understand it all either, and I certainly do not understand why it is not written using OCL.

    I'm not convinced that QVTr has any delete semantics since declaratively delete occurs as an absence of creation.

    Must await the Eclipse QVTr prototype.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: Rule Overriding semantics

  • Key: QVT13-19
  • Legacy Issue Number: 15417
  • Status: closed  
  • Source: NASA ( Dr. Maged Elaasar)
  • Summary:

    The abstract syntax of QVTr allows a rule to be an override of another rule.

    Rule::overrides: Rule [0..1]
    The rule that this rule overrides.

    The concrete syntax of QVT allows it too:

    <relation> ::= ['top'] 'relation' <identifier>
    ['overrides' <identifier>]
    '

    {' .... '}

    '

    However, the only semantics I can see for 'overrides' is in clause 7.11.1.4 that says:

    "A rule may conditionally override another rule. The overriding rule is executed in place of the overridden rule when the overriding conditions are satisfied. The exact semantics of overriding are subclass specific. "

    Questions:

    1- Whtat are the overriding conditions? are they implied or specified and if so how?

    2- I have not seen any other discussion of overrding in a subclass or Rule so not sure what is meant by "The exact semantics of overriding are subclass specific"?

    3- I have not seen any example of using 'overrides' what so ever in the spec, shouldn't there be one?

    4 - What is the semantics of overriding? is it related to inheritance in the OO sense ? I think QVTr needs a good "inheritance" model where you can relations can be called polymorphically.

  • Reported: QVT 1.1 — Fri, 13 Aug 2010 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Rule Overriding in QVTr

    The abstract syntax of QVTr allows a rule to be an override of another rule.

    Rule::overrides: Rule [0..1]
    The rule that this rule overrides.

    The concrete syntax of QVT allows it too:

    <relation> ::= ['top'] 'relation' <identifier>
    ['overrides' <identifier>]
    '

    {' .... '}

    '

    However, the only semantics I can see for 'overrides' is in clause 7.11.1.4 that says:

    "A rule may conditionally override another rule. The overriding rule is executed in place of the overridden rule when the overriding conditions are satisfied. The exact semantics of overriding are subclass specific. "

    Questions:

    1- What are the overriding conditions? are they implied or specified and if so how?

    2- I have not seen any other discussion of overriding in a subclass or Rule so not sure what is meant by "The exact semantics of overriding are subclass specific"?

    3- I have not seen any example of using 'overrides' what so ever in the spec, shouldn't there be one?

    4 - What is the semantics of overriding? is it related to inheritance in the OO sense ? I think QVTr needs a good "inheritance" model where you can relations can be called polymorphically.

    Discussion

    This now a much better understood field:

    M. Wimmer, G. Kappel, A. Kusel, W. Retschitzegger, J. Schönböck, W. Schwinger, D. Kolovos, R. Paige, M. Lauder, A. Schürr, D. Wagelaar. Surveying Rule Inheritance in Model-to-Model Transformation Languages. In Journal of Object Technology, vol. 11, no. 2, 2012, pages 3:1–46. doi:10.5381/jot.2012.11.2.a3

    QVTBase currently imposes single overriding which is unnecessary, and causes a problem for an application that needs to extend when B1 overrides A and B2 overrides A. The extending mapping needs C to override both B1 and B2 to ensure that C occludes both B1 and B2. Therefore we need multi-overrides.

    Oops. A QVTc Mapping::refines is an alternative concept that competes without comment with the inherited Rule::overrides. relToCore completely ignores the semantics of overrides translation. Relation::overrides should probably map across unchanged to Mapping::overrides. QVTc and QVTr semantics are unchanged.

    Fixing this textually without a prototype is too much of change.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTr: View/Transformation discrepancy

  • Key: QVT13-18
  • Legacy Issue Number: 15411
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    "The starting point is a major flaw in all three QVT languages at present and enabled Perdita Stevens to correctly conclude in http://www.springerlink.com/content/9x368617317l3q87/ that QVTr and QVTc are incompatible. QVT currently provides no way to distinguish whether for instance a check-mode transformation is a query of whether a transformed input pattern can be discovered in the output (e.g. a database lookup), or a validation that the transformed input exactly matches the output (e.g. an already transformed check). Both facilities are useful and so when a QVT transformation is invoked the invoker needs to specify what I call the 'rooting' condition in addition to the direction

  • Reported: QVT 1.1 — Tue, 10 Aug 2010 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Unclear transformation rooting condition

    "The starting point is a major flaw in all three QVT languages at present and enabled Perdita Stevens to correctly conclude in http://www.springerlink.com/content/9x368617317l3q87/ that QVTr and QVTc are incompatible. QVT currently provides no way to distinguish whether for instance a check-mode transformation is a query of whether a transformed input pattern can be discovered in the output (e.g. a database lookup), or a validation that the transformed input exactly matches the output (e.g. an already transformed check). Both facilities are useful and so when a QVT transformation is invoked the invoker needs to specify what I call the 'rooting' condition in addition to the direction

    Discussion

    We need a much simpler principled exposition of the intent of QVTc/QVTr. Since Perdita has correctly come to such unwelcome conclusions, we clearly have a problem. The new statement should be uncontroversial and therefore provide a reference against which subsequent text can be assessed.

    The following is perhaps what is needed, but needs more discussion with QVTr users and prototyping of its implications.

    In Section 6.3 replace

    The semantics of the Core language (and hence the Relations language) allow for the following execution scenarios:
    • Check-only transformations to verify that models are related in a specified way.
    • Single direction transformations.
    • Bi-directional transformations. (In fact more than two directions are possible, but two is the most common case.)
    • The ability to establish relationships between pre-existing models, whether developed manually, or through some other
    tool or mechanism.
    • Incremental updates (in any direction) when one related model is changed after an initial execution.
    • The ability to create as well as delete objects and values, while also being able to specify which objects and values must
    not be modified.

    by

    A Declarative QVT transformation capability establishes a correspondence between source objects in one or more source models and transformed objects in one or more transformed models. The correspondence may be used to check or enforce a view of, or a transformation to, target objects in one or more target models.

    The correspondence takes the form of trace data comprising a set of trace records. Each trace record identifies a relationship to one or more transformed objects from, one or more, source or transformed, objects or values. The production of each transformed object is traced by exactly one trace record. The trace data includes relationships for all satisfied constraints imposed by the language constructs that express the transformation program. No relationships for satisfiable constraints are omitted from the trace data.

    In practice a Core language (and hence the Relations language) transformation is executed after a form, mode and direction have been selected.

    There are two main forms of QVT execution:

    • For a Transformation execution, there is an exactly 1:1 mapping between the transformed objects and the target objects.
    • For a View execution, there is an exactly 1:1 mapping between the transformed objects and the target objects in the view. There may be further target objects outside the view that are unaffected by the execution.

    Additionally, for a Query execution, an OCL query is executed on the trace data. No actual target models are required.

    There are three modes of execution:

    • An enforced View or Transformation execution coerces the target objects to correspond to the transformed objects. (This is most simply achieved by model replacement, but may be realized by executing a series of changes so that desirable extra-model considerations such as xmi:id preservation or minimal database activity are accommodated.)
    • A check execution is a degenerate Query execution that just returns true or false according to the existence of the trace data. (An optimized execution capability may bypass the creation of the transformed objects and look for correspondence between source and target objects directly.)
    • An update Query, View or Transformation execution compares an old correspondence between source objects and transformed objects with a new correspondence between changed source objects and correspondingly changed transformed objects. The correspondence changes may be used to enforce or check for corresponding creations, deletions and updates in the target objects.

    Additionally an in-place update View or Transformation execution shares source and target models and so each source object is coerced to correspond to its transformed equivalent. (This can be naively achieved by model copy. An optimized execution may bypass the creation of the transformed objects by performing each source read before any corrupting write.)

    The declarative transformation languages do not have fixed sources and targets, rather they have multiple domains some of which may be designated sources and others as targets. The direction of the transformation is chosen by selecting the domain to be used as a target.

    • A unidirectional transformation has just a single choice of direction since only one domain is able to be used as the target
    • For a bi-directional, and more generally a multi-directional transformation, the domain used as the target may be selected

    In practice it is often difficult to satisfy the bijective requirements of bidirectional execution and so many transformations are just unidirectional.

  • Updated: Tue, 29 Mar 2016 15:09 GMT
  • Attachments:

QVTr: Missing Name and Expression syntax

  • Key: QVT13-1
  • Legacy Issue Number: 10934
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    9.18 Undefined syntax
    ---------------------

    The syntax for TransformationName, DirectionName, MappingName, PropertyName and VariableName
    is undefined. Presumably each of these is an Identifier (below) when defining, but a PathNameCS
    when referencing.

    The syntax for PackageName is undefined. Presumably it is an OCL PathNameCS.

    The syntax for ValueOCLExpr is undefined. This is presumably an OclExpressionCS.

    The syntax for BooleanOCLExpr is undefined. This could be an OclExpressionCS of Boolean type but ...

    The syntax for SlotOwnerOCLExpr is undefined. This could be an OclExpressionCS of Class type but ...

    If BooleanOCLExpr and SlotOwnerOCLExpr are parsed as OclExpressionCS the 'default' prefix
    causes a major ambiguity for 'default(...).xx' as a parenthesised slot owner or function call.
    It is necessary to make 'default' a reserved word within OCL expressions.

    Suggest: define BooleanOCLExpr and SlotOwnerOCLExpr very narrowly.

    Predicate ::= SimpleNameCS ("." SimpleNameCS)* "=" OclExpressionCS
    Assignment ::= ["default"] SimpleNameCS ("." SimpleNameCS)* ":=" OclExpressionCS

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.3
  • Disposition Summary:

    Undefined syntax

    9.18 Undefined syntax
    ---------------------

    The syntax for TransformationName, DirectionName, MappingName, PropertyName and VariableName
    is undefined. Presumably each of these is an Identifier (below) when defining, but a PathNameCS
    when referencing.

    The syntax for PackageName is undefined. Presumably it is an OCL PathNameCS.

    The syntax for ValueOCLExpr is undefined. This is presumably an OclExpressionCS.

    The syntax for BooleanOCLExpr is undefined. This could be an OclExpressionCS of Boolean type but ...

    The syntax for SlotOwnerOCLExpr is undefined. This could be an OclExpressionCS of Class type but ...

    If BooleanOCLExpr and SlotOwnerOCLExpr are parsed as OclExpressionCS the 'default' prefix
    causes a major ambiguity for 'default(...).xx' as a parenthesised slot owner or function call.
    It is necessary to make 'default' a reserved word within OCL expressions.

    Suggest: define BooleanOCLExpr and SlotOwnerOCLExpr very narrowly.

    Predicate ::= SimpleNameCS ("." SimpleNameCS)* "=" OclExpressionCS
    Assignment ::= ["default"] SimpleNameCS ("." SimpleNameCS)* ":=" OclExpressionCS

    Discussion

    Merged with the inadequate definition of identifiers.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

Inconsistent multiple inheritance

  • Key: QVT13-32
  • Legacy Issue Number: 18912
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The pragmatic decision to define Module/Transformation as inheriting both Package and Class violates UML inheritance.

    For a Package: self.nestingPackage.nestedPackages->includes(self)

    For a Class:
    self.package.ownedTypes->includes(self)

    But self cannot have two containers.

    The problem is easily resolved by extending only Package and adding those Class features that are actually required.

  • Reported: QVT 1.1 — Mon, 16 Sep 2013 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Inconsistent multiple inheritance

    The pragmatic decision to define Module/Transformation as inheriting both Package and Class violates UML inheritance.

    For a Package: self.nestingPackage.nestedPackages->includes(self)

    For a Class:
    self.package.ownedTypes->includes(self)

    But self cannot have two containers.

    The problem is easily resolved by extending only Package and adding those Class features that are actually required.

    Discussion

    Transformation is mostly a Class that may have arbitrary Package scoping. This has been successfully prototyped by the Eclipse QVT projects, but not in sufficient detail to justify this slightly breaking change.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTr: working with stereotypes:

  • Key: QVT13-31
  • Legacy Issue Number: 13158
  • Status: closed  
  • Source: Siegfried Nolte ( Siegfried Nolte)
  • Summary:

    QVT Relations and working with stereotypes: Is there something like a QVT-R standard library with methods on stereotypes in it? There is none in the specification; compare QVT-R, there are some methods. Are there some else options for accessing stereotypes with QVT-R?

  • Reported: QVT 1.0 — Mon, 15 Dec 2008 05:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    QVT Relations and working with stereotypes:

    QVT Relations and working with stereotypes: Is there something like a QVT-R standard library with methods on stereotypes in it? There is none in the specification; compare QVT-R, there are some methods. Are there some else options for accessing stereotypes with QVT-R?

    Discussion

    Good question. Recent progress on ensuring that typesafe OCL navigation works for stereotypes may render the answer trivial, but until such time as a stereotyped QVTr transformation has been executed it is too soon to respond.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTc/QVTr: Pattern.bindsTo composition

  • Key: QVT13-45
  • Legacy Issue Number: 19673
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The author of Issue 9379 misunderstood the poor description of Pattern::bindsTo and consequently removed the

    {composes} qualifier.

    Issue 10938 observed that this totally broke QVTc and introduced CorePattern::variables to compensate.

    The QVTr to QVTc transformation remains broken since it continues to assume that bindsTo {composes}

    .

    There was actually nothing wrong with bindsTo that could not have been fixed by clearer wording to the effect that bindsTo was a dustbin container for variables not contained elsewhere.

    The above kind of emphasises the benefits of an ownedPlurals naming policy. Therefore suggest that:

    a) the AST bloat from the redundant bindsTo be replaced by definition of a suitable derived property that satisfies the intent of all variables.

    b) that variables be renamed ownedVariables and used throughout the QVTr to QVTc transformation

  • Reported: QVT 1.2 — Tue, 9 Dec 2014 05:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Rewind Issues 9379, 10938

    The author of Issue 9379 misunderstood the poor description of Pattern::bindsTo and consequently removed the

    {composes} qualifier.

    Issue 10938 observed that this totally broke QVTc and introduced CorePattern::variables to compensate.

    The QVTr to QVTc transformation remains broken since it continues to assume that bindsTo {composes}

    .

    There was actually nothing wrong with bindsTo that could not have been fixed by clearer wording to the effect that bindsTo was a dustbin container for variables not contained elsewhere.

    The above kind of emphasises the benefits of an ownedPlurals naming policy. Therefore suggest that:

    a) the AST bloat from the redundant bindsTo be replaced by definition of a suitable derived property that satisfies the intent of all variables.

    b) that variables be renamed ownedVariables and used throughout the QVTr to QVTc transformation

    Discussion

    The problem is genuine, but further Eclipse QVTr prototyping reveals two distinct cases, one requiring containment, another not. Further work is needed to specify these accurately.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Standard Library mode and namespace

  • Key: QVT13-52
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The QVTo Standard Library has no model and consequently no namespace.

    This encourages a major confusion:

    The QVToLib::Model and QVToLib::Transformation types used in the QVTo Standard Library are at a different meta-level to UML::Model and QVTbase::Transformation. We have the uncomfortable situation that a QVToLib::Model is an instance of a QVTbase::TypedModel and a QVToLib::Transformation is an instance of a QVTbase::Transformation.

    As a minimum the distinct namespaces should be identified and modeled.

    Possibly QVToLib::Model and QVToLib::Transformation should be renamed. Since they have no namespace they are currently unuseable in code; their sole purpose is for specification of implementation behavior.

  • Reported: QVT 1.2 — Thu, 30 Apr 2015 08:21 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    QVTo Standard Library mode and namespace

    The QVTo Standard Library has no model and consequently no namespace.

    This encourages a major confusion:

    The QVToLib::Model and QVToLib::Transformation types used in the QVTo Standard Library are at a different meta-level to UML::Model and QVTbase::Transformation. We have the uncomfortable situation that a QVToLib::Model is an instance of a QVTbase::TypedModel and a QVToLib::Transformation is an instance of a QVTbase::Transformation.

    As a minimum the distinct namespaces should be identified and modeled.

    Possibly QVToLib::Model and QVToLib::Transformation should be renamed. Since they have no namespace they are currently unuseable in code; their sole purpose is for specification of implementation behavior.

    Discussion

    It is difficult to make sensible progress until the OCL work in progress modeling libraries provides the solution.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Inadequate definition of "late" semantics

  • Key: QVT13-27
  • Legacy Issue Number: 19429
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The specification of "late" semantics uses the "conceptually" word; a sure sign of missing semantics. It is followed by a magic null value that stores information for later use and with an unspecified trace interaction.

    The interaction of "late" and implicit collect is not handled so in

    generalizations := self.eSuperTypes->collect(t | t.late resolve(UML::Generalization))

    the direct association of "late" with asssignment is no longer direct; the "late"s must be aggregated. Potentuially this may occur in arbitrary complexd expressions including mapping calls!

    An alternate multi-pass interpretation of "late" is given.

    This seems like the correct approach; an MtoM transformation from a with-late to multi-pass without-late transformation.

  • Reported: QVT 1.2 — Thu, 22 May 2014 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Inadequate definition of "late" semantics

    The specification of "late" semantics uses the "conceptually" word; a sure sign of missing semantics. It is followed by a magic null value that stores information for later use and with an unspecified trace interaction.

    The interaction of "late" and implicit collect is not handled so in

    generalizations := self.eSuperTypes->collect(t | t.late resolve(UML::Generalization))

    the direct association of "late" with asssignment is no longer direct; the "late"s must be aggregated. Potentially this may occur in arbitrary complex expressions including mapping calls!

    An alternate multi-pass interpretation of "late" is given.

    This seems like the correct approach; an MtoM transformation from a with-late to multi-pass without-late transformation.

    Discussion

    Yes, but such an MtoM is non-trivial. Needs development and testing before it can be included as part of the specification.

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: Enhance ObjectExp to allow constructors invocation

  • Key: QVT13-25
  • Legacy Issue Number: 19023
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem:

    ObjectExp seems to be an enhancement to the InstantationExp due to the additional semantics, however it gets limited due to the fact that every time we need to use it we have to define the constructor body (in constrast to the instantiation expression usage). Although, ObjectExp was conceived to inline object instantiations, this limitation is not justified.

    However, this limitation could be removed by also allowing an ObjectExp-Constructor combination, in the same way we have for InstantiationExp. The problem relies on a flaky concrete syntax which we could enhance to exploit an ObjectExp with an already defined constructor operation:

    constructor Column::ColumnConstructor (n:String,t: String)

    { name:=n; type:=t; }

    object result1 : Column (“name”, “String”);
    object result2 : Column (“age”, “Integer”);

    Providing a constructor body (from ObjectExp) and a list of arguments (from InstantiationExp) should be prohibited in both, the concrete syntax and the abstract syntax. Regarding the abstract syntax this could be expression with a constraint.

    context ObjectExp
    inv : argument->size() > 0 implies body.oclIsUndefined()

    Discussion:
    This enhancement seems convenient with no apparent drawbacks, since the old ObjectExp usage remains valid.

    Proposed solution:

    In section 8.2.1.24 add the following subsection:

    Constraints

    If an object expression contains a constructor body, no arguments for a constructor are allowed (and vice versa):

    context ObjectExp
    inv: argument->notEmpty() > 0 implies body.oclIsUndefined() and
    not body.oclIsUndefined() implies argument->isEmpty()

    In section 8.2.1.24 add the following to the the end notation subsection:

    Similarly to InstantiationExp, an object expression could be used to invoke a constructor operation, rather than inlining a constructor body:

    object result1 : Column (“name”, “String”);
    object result2 : Column (“age”, “Integer”);

    Note that this notation allows us to use object expression to instantiate (or update) objects, while having a reusable constructor in order to initialize (or update) the properties of the object subject to be created (or updated).

    In section 8.4.7:

    Replace:

    <object_exp> ::= 'object' ('(' <iter_declarator> ')')? <object_declarator>
    <expression_block>

    By:

    <object_exp> ::= 'object' ('(' <iter_declarator> ')')? <object_declarator>
    (<expression_block> | '(' (<declarator_list>)? ')' )

  • Reported: QVT 1.1 — Wed, 23 Oct 2013 04:00 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    Enhance ObjectExp to allow constructors invocation

    Problem:

    ObjectExp seems to be an enhancement to the InstantationExp due to the additional semantics, however it gets limited due to the fact that every time we need to use it we have to define the constructor body (in constrast to the instantiation expression usage). Although, ObjectExp was conceived to inline object instantiations, this limitation is not justified.

    However, this limitation could be removed by also allowing an ObjectExp-Constructor combination, in the same way we have for InstantiationExp. The problem relies on a flaky concrete syntax which we could enhance to exploit an ObjectExp with an already defined constructor operation:

    constructor Column::ColumnConstructor (n:String,t: String)

    { name:=n; type:=t; }

    object result1 : Column (“name”, “String”);
    object result2 : Column (“age”, “Integer”);

    Providing a constructor body (from ObjectExp) and a list of arguments (from InstantiationExp) should be prohibited in both, the concrete syntax and the abstract syntax. Regarding the abstract syntax this could be expression with a constraint.

    context ObjectExp
    inv : argument->size() > 0 implies body.oclIsUndefined()

    Discussion:
    This enhancement seems convenient with no apparent drawbacks, since the old ObjectExp usage remains valid.

    Proposed solution:

    In section 8.2.1.24 add the following subsection:

    Constraints

    If an object expression contains a constructor body, no arguments for a constructor are allowed (and vice versa):

    context ObjectExp
    inv: argument->notEmpty() > 0 implies body.oclIsUndefined() and
    not body.oclIsUndefined() implies argument->isEmpty()

    In section 8.2.1.24 add the following to the the end notation subsection:

    Similarly to InstantiationExp, an object expression could be used to invoke a constructor operation, rather than inlining a constructor body:

    object result1 : Column (“name”, “String”);
    object result2 : Column (“age”, “Integer”);

    Note that this notation allows us to use object expression to instantiate (or update) objects, while having a reusable constructor in order to initialize (or update) the properties of the object subject to be created (or updated).

    In section 8.4.7:

    Replace:

    <object_exp> ::= 'object' ('(' <iter_declarator> ')')? <object_declarator>
    <expression_block>

    By:

    <object_exp> ::= 'object' ('(' <iter_declarator> ')')? <object_declarator>
    (<expression_block> | '(' (<declarator_list>)? ')' )

    Discussion

    This was extensively discussed on the Eclipse qvto-dev mailing list.

    The conclusion was that the inheritance of ObjectExp from InstantiationExp is pragmatic and causes more problems that it solves. It should be eliminated.

    Allowing objects to be constructed by a constructor expression rather field assignment is a nice syntax enhancement for significant utility classes.

    It is hoped that a resolution will be prototyped by:

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=479657

  • Updated: Tue, 29 Mar 2016 15:09 GMT

QVTo: How can an UnlinkExp.target be a Property

  • Key: QVT13-134
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The description of UnlinkExp.target specifies an OclExpression but describes a Property.

    Is this an error? Is it introducing a new PropertyLiteralExp?

  • Reported: QVT 1.2 — Wed, 21 Oct 2015 16:48 GMT
  • Disposition: Deferred — QVT 1.3
  • Disposition Summary:

    This Issue was not resolved in this Task Force and was automatically deferred to the next Task Force

  • Updated: Tue, 22 Dec 2015 15:31 GMT

Pre-ballot 2 FTF Appendix A: Erroneous memberSelection grammar

  • Key: QVT-90
  • Legacy Issue Number: 10989
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    memberSelection has missing , in list

    <memberSelection> ::= (<identifier> | <objectTemplate> | '') (',' (<identifier> | <objectTemplate> | ''))* '++' (<identifier> |
    '_')

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    closed, no change

  • Updated: Sun, 8 Mar 2015 18:08 GMT

Chapter 7 QVTrelation Standard Library

  • Key: QVT-89
  • Legacy Issue Number: 10985
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    There is a QVT Standard Library in Chapter 8, that the Pre-ballot 2 FTF report describes
    as the QVT Operational Standard Library.

    QVTrelation requires a library that at least defines:
    String::+ as a synonym for String::concat

    That part of the Chapter 8 library that is common to all QVT languages should appear in
    its own chapter along with other parts of QVT that are common e.g. QVTbase.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Add the following subsection in the concrete syntax section 7.13:

    Shorthands used to invoke pre-defined operations
    The binary operator "+" can be used as shorthand for the string concat operation.

  • Updated: Sun, 8 Mar 2015 18:08 GMT

RelationalTransformation as a subclass of Transformation

  • Key: QVT-88
  • Legacy Issue Number: 9384
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    To avoid dependency of QVTBase to QVTRelation due to the fact
    that a relational transformation contains QVTRelation::Keys
    Instances, the Transformation metaclass should be subtyped
    within the QVTRelations package.
    By the way, the association between relational transformations
    and Keys is missing in the metamodel and need to be added.

    Suggestion: Add a RelationalTransformation metaclass inheriting
    from Transformation and add the missing association:
    'RelationalTransformation::key : [*] Key

    {composes}

    '
    Correct the type of OperationalTransformation:refined so that
    it is a RelationalTransformation (instead of 'Transformation')

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    duplicate of issue 9383, close

  • Updated: Sun, 8 Mar 2015 18:08 GMT

QVTo Standard Lybrary and typedefs Issue. Extending OCL predefined types

  • Key: QVT11-113
  • Legacy Issue Number: 13331
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    As interpretation from the especification (pag 104), the way of adding new operations to OCL predefined types is creating new Typedef instances
    which must have the OCL predefined type as the base type. The new operations are added to this new typedef. However there are several problems:
    1. The specification doesn't provide any name for these typedefs.
    2. The specification doesn't specify which type (QVT typedef or OCL predefined type) should be used when referencing such OCL predefined types in a QVTo transformation.

    Solution for 1).
    Suggestion a: Name the typedef with the same name of the base type. This provokes name's clash with the predefined type's name, due to there are two different types from two standard libraries
    which have the same name. A possible solution, would be expliciting that typedefs (aliases) will never clash its name with its base type.

    Suggestion b: Name the tpyedef with a different name, such as QVToXXXXXX or XXXX_Alias.

    Solution for 2).
    Suggestion a: Taking the typedef as the referenced type in QVTo transformations.
    Suggestion b: Taking the OCL predefined type as the referenced type in QVTo transformations.
    Suggestion c: Considering resolution of issue 13168, so that only OCL predefined exists, and therefore, the only type which can be referenced.

    It's a little bit weird having 2 different types (a type, and its alias typedef) which represent just the same type, specially when they are related by a reference.
    My solution's preference in order are:
    c) Just having one type to refer.
    a) Since the typedef "extends" the behaviour of the predefined type (adding new operations), the former must be the referred one.
    b) The OCL predefined type is referenced, but we must taking into account that operations added to the typedef are available.

  • Reported: QVT 1.0 — Mon, 22 Dec 2008 05:00 GMT
  • Disposition: Duplicate or Merged — QVT 1.1
  • Disposition Summary:

    issue closed, duplicate of issue # 13252

  • Updated: Fri, 6 Mar 2015 22:56 GMT

7.13.1 Qualified query name

  • Key: QVT11-112
  • Legacy Issue Number: 10948
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The concrete syntax for a query uses a pathNameCS, yet the query is defined
    within the scope of a transformation.

    How should a scoped name be interpreted?

    ? is a scoped name only applicable for declaring externally definedc queries ?

  • Reported: QVT 1.0 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Comment:
    Concrete syntax is incorrect.

    Resolution:
    The concrete syntax of the production <query> given in Appendix A of this report is changed as follows:
    <query> ::= 'query' <identifier>
    '(' [<paramDeclaration> (',' <paramDeclaration>)*] ')' ':' <TypeCS>
    (';' | '

    {' <OclExpressionCS> '}

    ')
    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

7.13.1 Multiple transformation extension

  • Key: QVT11-111
  • Legacy Issue Number: 10947
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The concrete syntax for transformation supports multiple extension.
    The abstract syntax supports only single extension.

    Suggest: change the concrete syntax.

  • Reported: QVT 1.0 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Comment:
    Concrete syntax is incorrect.
    Resolution:
    The concrete syntax of the production <transformation> given in Appendix A of this report is changed as follows:
    <transformation> ::= 'transformation' <identifier>
    '(' <modelDecl> (';' <modelDecl>)* ')'
    ['extends' <identifier>]
    '

    {' <keyDecl>* ( <relation> | <query> )* '}

    '
    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Top-levelness in QVT relations need to be enforced by a constraint

  • Key: QVT-86
  • Legacy Issue Number: 10626
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    There should be a constraint to enforce the top-levelness when the
    'Relation::toplevel' boolean is true.
    Note: This issue is related to issue: 9385

  • Reported: QVT 1.0b1 — Thu, 25 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Add a "Constraints" subsection with the following content:

    """
    A non top-level relation should be invoked from the where clause of some other relation.
    self.isTopLevel implies not Relation.allInstances()->exists(r |
    r.where.predicate.conditionExpression->exists(ce |
    ce.oclIsTypeOf(RelationCallExp) and
    ce.oclAsType(RelationCallExp).referredRelation = self
    )
    )
    """

    NOTE:
    This issue is superseded by issue 11022. The resolution should hence not be applied.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Escape characters in string literals

  • Key: QVT-85
  • Legacy Issue Number: 10625
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The escape characters used in string literals need to be adequately defined
    or referenced.
    Note: This issue is related to issue: 9427

  • Reported: QVT 1.0b1 — Thu, 25 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In relation with resolution 9427, replace the sentence:

    "All the usual escape characters using backslash can be used including the '\n' return-line character."

    By
    """
    All the usual escape characters using backslash can be used including the '\n' return-line character. The list of available escape characters are those defined for the Java language.

    EscapeSequence:
    \ b /* \u0008: backspace BS */
    \ t /* \u0009: horizontal tab HT */
    \ n /* \u000a: linefeed LF */
    \ f /* \u000c: form feed FF */
    \ r /* \u000d: carriage return CR */
    \ " /* \u0022: double quote" */
    \ ' /* \u0027: single quote ' */
    \ \ /* \u005c: backslash \ */
    OctalEscape /* \u0000 to \u00ff: from octal value

    OctalEscape:
    \ OctalDigit
    \ OctalDigit OctalDigit
    \ ZeroToThree OctalDigit OctalDigit
    OctalDigit: one of
    0 1 2 3 4 5 6 7
    ZeroToThree: one of
    0 1 2 3
    """

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Rules for infering an extent

  • Key: QVT-87
  • Legacy Issue Number: 10627
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The rules for inferring an extent from the type are not explained or referenced.
    Note: This issue is related to issue: 9388

  • Reported: QVT 1.0b1 — Thu, 25 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In relation with resolution 9388, replace the text describing the "modelParameter" role:

    The extent of the mapping parameter. Should be explicitly provided
    when there is an ambiguity on the extent that will own a potential
    created element corresponding to this parameter.

    By:

    """
    The extent of the mapping parameter. If not provided the extent is inferred by inspecting the model types of the transformation. See the inference rules below.
    """

    In addition, after the description of the metaclass properties, add the following paragraph:
    """
    Extent inference rule for mapping parameters:
    If the mapping parameter direction is "in", inspect the input model types of the transformation to find the one that contains the type of the parameter. A model type "contains" a type if the type is directly or indirectly contained by the package defining the model type.
    If the model parameter direction is "inout" or "out", inspect the inout or output model types of the transformation to find the one that contains the type of the parameter.
    In both cases there should be a unique model type found.
    """

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Kind of expressions in collection patterns

  • Key: QVT-84
  • Legacy Issue Number: 10624
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The 'kind' property in collection template expression is not meant to specify
    Set/Bag/Sequence. It is meant to specify the kind of expression used in
    the collection pattern.
    Note: This issue is related to issue 9415.
    Suggested resolution:
    In order to avoid name clash with Ocl rename CollectionKind to CollectionPatternKind.
    IN section 7.11.2 insert the enumeration type CollectionPatternKind with the
    following definition:

    """
    CollectionPatternKind
    The enumeration type that specifies the kind of pattern expression used to specify
    the collection pattern. Possible values are: Enumeration, Comprehension and
    MemberSelection.

  • Reported: QVT 1.0b1 — Thu, 25 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    The resolution of this issue is related to the resolution of issue 10784. Please refer to the resolution of issue 10784. There is no need to specify CollectionPatternKind in the new extended collection pattern suggested in 10784.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Member selection operator

  • Key: QVT-79
  • Legacy Issue Number: 10615
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    With – as an OCL comment, ++ seems a very unfortunate choice of operator spelling.
    It also has minimal similarity to the C/Java increment operator which is unary.
    Please review. The usage seems to always be <big-clause> ++ <tiny>, so how about
    just a word.

    ?? <big-clause> 'in' <tiny>
    ?? <big-clause> 'over' <tiny>
    ?? <big-clause> 'forall' <tiny>

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution: No change

    Remark:
    Which operator to use is a matter of taste. We checked with a few users and they preferred an operator over a keyword.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Relation To Core Transformation

  • Key: QVT-83
  • Legacy Issue Number: 10619
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    After adjusting the syntax as above to match the author's apparent expectation,
    syntax checking reveals 69 problems, marked up with --** in the attached.
    (Surprisingly few for a new language that has clearly not had a machine-assisted
    check before.)

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    The relations-to-core transformation spec was out of sync with the meta models. The new updated spec is given in appendix B of this report.
    Replace the content of sections 10.3 by the new content in Appendix B of this report.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Formatting

  • Key: QVT-82
  • Legacy Issue Number: 10618
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Inconsistent font for first line of 7.13.1.

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Font to be made consistent in 7.13.1.

    NOTE:
    This issue is superseded by issue 10616 which replaces all the content of the BNF section. Hence, the resolution should not be applied.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Typos

  • Key: QVT-81
  • Legacy Issue Number: 10617
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    In <domain>
    Replace: ['implementedby' <OperationCallExpCS>]
    By: ['implementedby' <operationCallExpCS>]

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution: No change

    Remark:
    Looks like there was a mistake in entering the issue - OCL specifies OperationCallExpCS only.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Ambiguity

  • Key: QVT-80
  • Legacy Issue Number: 10616
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Replace: objectTemplate ::= [<identifier>] ':' <typeCS> '{'
    By: <objectTemplate> ::= [<identifier>] ':' (primitiveTypeCS | tupleTypeCS | pathNameCS) '{'

    excluding collectionType that is ambiguous wrt collectionTemplate syntax

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Missing paramDeclaration

  • Key: QVT-76
  • Legacy Issue Number: 10612
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Suggest: <paramDeclaration> ::= <identifier> ':' <typeCS>

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Member selection as domain body

  • Key: QVT-75
  • Legacy Issue Number: 10611
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Relations to Core uses a top of domain memberSelectionExprCS.

    In <dommain>
    Replace: '

    {' <propertyTemplate>* '}

    '
    By: '

    {' (<propertyTemplate>* | memberSelectionExprCS) '}

    '
    Or rather: '

    {' ((<propertyTemplate> (',' <propertyTemplate>)*) | memberSelectionExprCS) '}

    '

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Unsafe oclExpressionCS

  • Key: QVT-74
  • Legacy Issue Number: 10610
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The extension to oclExpressionCS affects all cases where OCL expressions are invoked. Since the "| (<oclExpressionCS> ';')*" term
    covers epsilon, this introduces near catastrophic parsing ambiguities and meaningless syntax for existing usage.

    Suggest: restrict the semi-colon separated extension to the extended syntax where it has useful semantic meaning. Permitting the
    final semi-colon to be omitted seem needlessly generous/confusing/complicated. Therefore:

    Replace: <oclExpressionCS> ::= <propertyCallExpCS>

    <variableExpCS>
    <literalExpCS>
    <letExpCS>
    <ifExpCS>
    <template>
    '(' <oclExpressionCS> ')'
    (<oclExpressionCS> ';')*
    By: <oclExpressionCS> ::= <propertyCallExpCS>
    <variableExpCS>
    <literalExpCS>
    <letExpCS>
    <ifExpCS>
    <template>
    '(' <oclExpressionCS> ')'
    <oclStatementCS> ::= (<oclExpressionCS> ';')*

    and use this new construct as:

    Replace: <when> ::= 'when' '

    {' <oclExpressionCS> '}'
    By: <when> ::= 'when' '{' <oclStatementCS> '}'


    Replace: <where> ::= 'where' '{' <oclExpressionCS> '}

    '
    By: <where> ::= 'where' '

    {' <oclStatementCS> '}'


    In <domain>
    Replace: '{' <propertyTemplate>* '}' [ '{' <oclExpressionCS> '}' ]
    By: '{' <propertyTemplate>* '}' [ '{' <oclStatementCS> '}

    ' ]

    In <query>
    Replace: ';' | '

    {' <oclExpressionCS> '}

    '
    By: ';' | '

    {' <oclStatementCS> '}

    '

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Filename

  • Key: QVT-78
  • Legacy Issue Number: 10614
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Surely this should be a URI?
    Even if it is a filename no OS can cope without dots, slashes or ...

    Replace: <filename> ::= <identifier>
    By: <filename> ::= StringLiteralExpCS

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    The <filename> element has been renamed <unit> to mean "compilation unit" and defined as a sequence of identifier separated by dots. It is now clear that arbitrary file names cannot be used in import statements.

    In order to apply the resolution: replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Missing oclExpressionCSList

  • Key: QVT-77
  • Legacy Issue Number: 10613
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Sole usage in collectionTemplate is as list of list, so presumably a typo

    Replace: <oclExpressionCSList> (',' <oclExpressionCSList>)*
    By: <oclExpressionCS> (',' <oclExpressionCS>)*

    However I cannot get past syntax ambiguities here between the '|' in a setComprehensionExpression
    and the '|' in an oclExpression. To get Relations to Core to parse I just do:

    Replace: <oclExpressionCSList> (',' <oclExpressionCSList>)*
    By: <templateCS>

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Over-enthusiastic semicolon

  • Key: QVT-73
  • Legacy Issue Number: 10609
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The Relation To Core example omits trailing semicolons following a brace-termated domain.

    In <domain>
    Replace: ['implementedby' <OperationCallExpCS>] ';'
    By: ['implementedby' <OperationCallExpCS> ';']

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Missing commas

  • Key: QVT-72
  • Legacy Issue Number: 10608
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    List of propertyTemplate are used without separators. The Relation To Core example uses a comma separator.

    In <domain>
    Replace: <propertyTemplate>*
    By: (<propertyTemplate> (',' <propertyTemplate>)*)

    In <objectTemplate>
    Replace: <propertyTemplate>*
    By: (<propertyTemplate> (',' <propertyTemplate>)*)

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Unquoted commas

  • Key: QVT-71
  • Legacy Issue Number: 10605
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    An unquoted comma is redundant in the BNF, so presumably the commas should quoted:

    Replace: <modelDecl> ::= <modelId> ':' <metaModelId> (, <metaModelId>)*
    By: <modelDecl> ::= <modelId> ':' <metaModelId> (',' <metaModelId>)*

    Replace: <keyDecl> ::= 'key' <classId> '

    {' <propertyId> (, <propertyId>)* '}

    ' ';'
    By: <keyDecl> ::= 'key' <classId> '

    {' <propertyId> (',' <propertyId>)* '}

    ' ';'

    Replace: <varDeclaration> ::= <identifier> (, <identifier>)* ':' <typeCS> ';'
    By: <varDeclaration> ::= <identifier> (',' <identifier>)* ':' <typeCS> ';'

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Comments

  • Key: QVT-70
  • Legacy Issue Number: 10604
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The Relation To Core example uses a // comment, whereas OCL uses --. If this is intended then the OCL grammar must be extended

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Specify the comment convention in section 7.13 by adding, before sub-section 7.13.1 Relation Textual Syntax Grammar, a new sub-section named "Comments" with the following text:

    """
    The syntax supports two forms of comments, a line comment, and a paragraph comment.
    The line comment starts with the string '--' and ends with the next newline. The paragraph comment starts with the string '/' and ends with the string '/.' Paragraph comments may be nested.
    """

  • Updated: Fri, 6 Mar 2015 22:55 GMT

OCL extensions

  • Key: QVT-69
  • Legacy Issue Number: 10603
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    I've started writing a QVTr parser. So far it just does syntax analysis.
    It highlights a number of significant issues in the grammar and enables
    many mistakes to be removed from the Relations to Core example.

    OCL extension
    -------------

    7.13 should enumerate the new keywords:
    checkonly
    domain
    enforce
    extends
    implementedBy
    import
    key
    overrides
    primitive
    query
    relation
    top
    transformation
    when
    where
    and stress that they are not reserved words and so may appear in identifier. At least I presume this is the intent, since 'domain'
    is used in the Relation To Core example. I'm not entirely sure that a domain called OclAny is unambiguous, and is one called self
    useful?

    The OCL and consequently the QVT syntax lack formality here.
    OCL extensions

  • Reported: QVT 1.0b1 — Sun, 21 Jan 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Insert a new sub-section named "Keywords" in 7.13 to list the keywords. This section is to be inserted before the "Relations textual Syntax Grammar" sub-section. The text of the section will be as follows:

    Keywords:
    checkonly, domain, enforce, extends, implementedby, import, key, overrides
    primitive, query, relation, top, transformation, when, where.

    All these keywords are reserved words, they cannot be used as identifiers.
    The "_" OCL prefix convention for escaping reserved words can be used to refer to conflicting properties or class names.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

QVTrelation to QVTcore transformation

  • Key: QVT-68
  • Legacy Issue Number: 10077
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    I've started looking at implementing QVTrelation->QVTcore in UMLX, but instantly hit problems.
    Since UMLX has built in type checking it identifies that:

    in RelationToTraceclass

    RelationDomain has a DomainPattern rather than an ObjectTemplateExp

    in SubTemplateToTraceClassProps

    ObjectTemplateExp has a PartTemplateItem rather than an ObjectTemplateExp

    These are easily fixed, but

    in TopLevelRelationToMappingForEnforcement

    there are too many discrepancies to resolve without major study; I'm very puzzled by the use of Sets for individual elements.

    Is there a revised draft that the FTF are working on that is any more consistent?

    FYI, I enclose the first two transformations in UMLX. I think they're a bit more intelligible, type consistent, although there a
    fair few UMLX loose ends to sort out.

  • Reported: QVT 1.0b1 — Wed, 26 Jul 2006 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    The relations-to-core transformation spec was out of sync with the meta models. The new updated spec is given in appendix B of this report.
    Replace the content of sections 10.3 by the new content in Appendix B of this report.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

variable-assignment isn't defined in Core language

  • Key: QVT-67
  • Legacy Issue Number: 9463
  • Status: closed  
  • Source: Modeling Value Group ( Wim Bast)
  • Summary:

    There exist assignments to variables in the QVT examples.

    However, variable-assignment is not defined in the abstract and concrete syntax of the Core language.

    This should be fixed.

    Impact: only changes the QVT Core language definition.

  • Reported: QVT 1.0b1 — Mon, 20 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 9.17.8 (Assignment), replace all the introductory text
    by an "An assignment sets the property of target object or sets a
    the value of a variable. See PropertyAssignment and VariableAssignment
    definitions for detailed semantic of property assignment and variable
    assignment."
    Also, remove the 'targetProperty' association description.
    (2) In Section 9.17 add a new class named "PropertyAssignment" with
    the introductory description copy pasted from the actual description
    of Assignment class.
    Add the following sub-titles after the introductory text:
    """
    Superclasses
    Assignment
    Associations
    targetProperty: Property [1]
    The property whose value is to be assigned.
    The target property should be defined on the type of the slot expression.
    """
    (3) In Section 9.17 add a new class named "VariableAssignment" with
    the following definition:
    """
    An assignment sets the value of a variable.
    Superclasses
    Assignment
    Associations
    targetVariable: Variable [1]
    The variable whose value is to be assigned.
    """
    (4) In Figure, 9.3 make the needed changes so that the diagram reflects
    (1), (2) and (3) actions.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 9/17 page 134

  • Key: QVT11-110
  • Legacy Issue Number: 9443
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association slotExpression of the Assignment class should be (see figure 9.3) slotExpression: OclExpression [1]

    {composes} Association value of the Assignment class should be (see figure 9.3) value: OclExpression [1] {composes}

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 9.17.8 (Assignment)

    • replace "slotExpression: OclExpression [1]"
      by "slotExpression: OclExpression [1] {composes}"
      - replace "value: OclExpression [1]"
      by "value: OclExpression [1] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 9/17 page 132

  • Key: QVT11-109
  • Legacy Issue Number: 9442
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association local of the Mapping class should be (see figure 9.2) local: Mapping [*]

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    (1) In figure 9.2, add the missing composition symbol for the
    association (Mapping::local : Mapping)

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 102

  • Key: QVT11-108
  • Legacy Issue Number: 9441
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association part of the AnonymousTupleLiteralExp class should be (see figure 8.7) part: AnonymousTupleLiteralPart [*]

    {composes, ordered}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.31 (AnonymousTupleLiteralExp)

    • replace "part : OclExpression [1] {composes}

      "
      by "part: AnonymousTupleLiteralPart [*]

      {composes, ordered}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 101

  • Key: QVT11-107
  • Legacy Issue Number: 9440
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association elementType of the AnonymousTupleType class should be (see figure 8.7) elementType: Type [*] Association part of the DictLiteralExp class should be (see figure 8.7) part: DicLiteralPart [*]

    {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    (1) In Figure 8.7, add the

    {ordered}

    constraint to the
    AnonymousTupleType::elementType type.
    (2) In Section 8.2.2.29 (DictLiteralExp)

    • replace "part: OclExpression [1] {composes}"
      by "part: DicLiteralPart [*] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 99

  • Key: QVT11-106
  • Legacy Issue Number: 9439
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association condition of the Typedef class should be (see figure 8.7) condition: OclExpression [1]

    {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.24 (Typedef)

    • replace "condition: OclExpression [1]"
      by "condition: OclExpression [1] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 98

  • Key: QVT11-105
  • Legacy Issue Number: 9438
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association variable of the UnpackExp class should be (see figure 8.6) variable: Variable [1..*]

    {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.22 (UnpackExp)

    • replace "variable: Variable [1..*]"
      by "variable: Variable [1..*] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 97

  • Key: QVT11-104
  • Legacy Issue Number: 9437
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association element of the TupleExp class should be (see figure 8.6) element: OclExpression [1..*]

    {composes} Association variable of the UnpackExp class should be (see figure 8.6) variable: Variable [1..*] {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.21 (TupleExp)

    • replace "element: OclExpression [1..*]"
      by "element: OclExpression [1..*] {composes} "
      - replace "variable: Variable [1..*]"
      by "variable: Variable [1..*] {composes}

      "

    Note:
    This resolution should not applied since it is superseded by issue 11061
    (which removes the TupleExp metaclass).

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2

  • Key: QVT11-103
  • Legacy Issue Number: 9436
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association assertion of the AssertExp class should be (see figure 8.6) assertion: OclExpression [1]

    {composes} Association log of the AssertExp class should be (see figure 8.6) log: LogExp [0..1] {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.19 (AssertExp)

    • replace "assertion: OclExpression [1]"
      by "assertion: OclExpression [1] {composes} "
      - replace "log: LogExp [0..1]"
      by "log: LogExp [0..1] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 95

  • Key: QVT11-102
  • Legacy Issue Number: 9435
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association value of the ReturnExp class should be (see figure 8.6) value: OclExpression [1]

    {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.15 (ReturnExp)

    • replace "value: OclExpression [1]"
      by "value: OclExpression [1] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 94

  • Key: QVT11-101
  • Legacy Issue Number: 9434
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association target of the UnlinkExp class should be (see figure 8.6) target: OclExpression [1]

    {composes} Association tryBody of the TryExp class should be (see figure 8.6) tryBody: OclExpression [1] {composes}

    Association exceptBody of the TryExp class should be (see figure 8.6) exceptBody: OclExpression [0..1]

    {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.12 (UnlinkExp)

    • replace "target: OclExpression [1]"
      by "target: OclExpression [1] {composes}"
      - replace "tryBody: OclExpression [1]"
      by "tryBody: OclExpression [1] {composes}

      "

    • replace "exceptBody: OclExpression [0..1]"
      by "exceptBody: OclExpression [0..1] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 93

  • Key: QVT11-100
  • Legacy Issue Number: 9433
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association value of the AssignExp class should be (see figure 8.6) value: OclExpression [*]

    {composes} Association left of the AssignExp class should be (see figure 8.6) left: OclExpression [1] {composes}

    Association defaultValue of the AssignExp class should be (see figure 8.6) defaultValue: OclExpression [0..1]

    {composes} Association item of the UnlinkExp class should be (see figure 8.6) item: OclExpression [1] {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.11 (UnlinkExp)

    • replace "value: OclExpression [*]"
      by "value: OclExpression [*] {composes}"
      - replace "left: OclExpression [1]"
      by "left: OclExpression [1] {composes}

      "

    • replace "defaultValue: OclExpression [0..1]"
      by "defaultValue: OclExpression [0..1] {composes} "
      - replace "item: OclExpression [1]"
      by "item: OclExpression [1] {composes}

      "

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 92

  • Key: QVT11-99
  • Legacy Issue Number: 9432
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    the attribute withReturn of the VariableInitExp class should be named withResult (see Figure 8.6) "...is notated using ':=' if withReturn property..." it should say: "...is notated using ':=' if withResult property..." (see Figure 8.6) "...uses '::=' if withReturn is true." it should say: "...uses '::=' if withResult is true." (see Figure 8.6)

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.10 5VariableInitExp), replace all occurrence of
    word 'withResult' by 'withReturn'.

    Note (Responding AB review feedback):
    There is a typo error in resolution text: we should read " replace all occurrence of
    word 'withReturn' by 'withResult'. This is consistent with Fig 8.6 (VariableInitExp::withResult defined) - which is left unchanged by the resolution - and also consistent with the summary text of the issue.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 79

  • Key: QVT11-96
  • Legacy Issue Number: 9429
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    The attribute virtual of the ImperativeCallExp should be named (see Figure 8.3) isVirtual "...depending on the value of the strict Boolean property." it should say: "...depending on the value of the isStrict Boolean property." (see Figure 8.3) "The latter keyword is used when strict is true" it should say: "The latter keyword is used when isStrict is true" (see Figure 8.3)

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.1.21, replace all occurrences of "strict" word by "isStrict".

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 70

  • Key: QVT11-95
  • Legacy Issue Number: 9428
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association result of the ImperativeOperation class should be (see figure 8.2) result: VarParameter [*]

    {composes, ordered}

    Association body of the ImperativeOperation class should be (see figure 8.2) body: OperationBody [0..1]

    {composes}
  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.1.10 (ImperativeOperation), replace
    "result: VarParameter [*]

    {composes}"
    by "result: VarParameter [*] {composes, ordered}"
    and replace "body: OperationBody [0..1] {composes, ordered}"
    by "body: OperationBody [0..1] {composes}

    "

    NOTE (FIXES after AB Review)
    Additional omissions concerning the

    {composes} and {ordered} indications in property definitions where detected (when comparing to diagrams). The following resolutions should also be applied
    - Add the missing {composes}

    indication for the following defined properties (within the class descriptions):
    ImperativeOperation::context , Constructor::/body, ResolveExp::condition, BlockExp::body, WhileExp::condition, WhileExp::body, ImperativeLoopExp::condition, ForExp::/condition, ForExp::body, ForExp::source, ImperativeIterateExp::/condition, ImperativeIterateExp::/body, ImperativeIterateExp::/iterator, ImperativeIterateExp::/source, SwitchExp::elsePart, AltExp::condition, AltExp::body, VariableInitExp::referredVariable, UnpackExp::source

    • Add the missing {ordered}

      indication for the following defined properties (within the class descriptions):
      MappingOperation::inherited, MappingOperation::merged, MappingOperation::disjunct, BlockExp::body,ImperativeIterateExp::iterator, ComputeExp::returnedElement

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: A.2.2

  • Key: QVT11-94
  • Legacy Issue Number: 9427
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Errors in the A.2.2 Encapsulation Example (page 172) - The strings "private", "get_", "set_", "public" and "in" should be 'private', 'get_', 'set_', 'public' and 'in' - The operation upperFirst() should be written firstToUpper (see page 110)

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    (1) In A.2.2, Replace 'upperFirst' by 'firstToUpper'.
    (2) In Section 8.4 (Concrete Syntax), after 8.4.2 Comments section,
    insert a new section called "Strings" with the following content.
    """
    Literal strings that fit in a single line are delimited either by
    single quotes or by double quotes.
    Literal string that fit in multiple lines can be notated as a
    list of literal strings.
    Example:
    var s:String = 'This is a long string'
    'that fits in two lines';
    All the usual escape characters using backslash can be used
    including the '\n' return-line character.
    """

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 91

  • Key: QVT11-98
  • Legacy Issue Number: 9431
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association elsePart of the SwitchExp class should be (see figure 8.5) elsePart: OclExpression [0..1]

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.8 (SwitchExp) replace
    "elsePart : Expression [0..1]"
    by "elsePart : OclExpression [0..1]"

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 86

  • Key: QVT11-97
  • Legacy Issue Number: 9430
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Association returnedElement of the ComputeExp class should be (see figure 8.5) returnedElement : Variable [1]

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.3 (ComputeExp) replace
    "returnedElement : TypedElement [1]"
    by "returnedElement : Variable [1]"

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/3 page 110 (03)

  • Key: QVT11-93
  • Legacy Issue Number: 9426
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    The definition of String::unquotify operation (page 110) is incomplete: if the string s not exists at begin or at end ?

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Adds the sentence: "if the string s does not appear at the beginning or at the end, the content of string s is returned".

    NOTE (Correction of typo after AB review):
    There is a typo error in the sentence to be added. The sentence to be added should be:
    "if the string s does not appear at the beginning or at the end, the content of source string is returned".

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/3 page 110 (02)

  • Key: QVT11-92
  • Legacy Issue Number: 9425
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    The definition of String::replace operation (page 110) is incomplete: the operation return a new string (as in OCL 2) or return the string modified ?

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Add the sentence: "The operation returns a new string."

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/3 page 110

  • Key: QVT11-91
  • Legacy Issue Number: 9424
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    The signature of String::lastToUpper (): String (page 110) is not sound with its definition. "Converts the first character in ..." it should say: "Converts the last character in ..."

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Replaces "Converts the first character in ..." as "Converts the last character in ..."

    NOTE (Correction of typo after AB review):
    Replaces "Converts the first character in the string to a lowercase
    character" by:
    "Converts the last character in the string to a uppercase character"

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 99

  • Key: QVT11-90
  • Legacy Issue Number: 9423
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    In the class InstantiationExp, the associations (page 99) are missing. It should be (see Figure 5): argument: OclExpression [*]

    {composes, ordered}

    extent: Variable [0..1] instantiatedClass: Class [1]

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.2.2.23 (InstantiationExp) add the following
    Associations definitions:
    """
    Associations
    argument: OclExpression [*]

    {composes, ordered}


    The arguments of the instantiation expression. Should correspond with
    the initialisation operation for the class (which by default is
    implicit and has no arguments).
    extent: Variable [0..1]
    The extent on which the new object is created.
    instantiatedClass: Class [1]
    The type of the object to be created.
    """

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 95

  • Key: QVT11-89
  • Legacy Issue Number: 9422
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    BreakExp (8.2.2.16) and ContinueExp (8.2.2.17) at page 95 are missing in the Figures 8.5 and 8.6

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    close, no change

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 88

  • Key: QVT11-88
  • Legacy Issue Number: 9421
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    ImperativeIterateExp should be named CollectorExp see Figures 8.4 and 8,5 (page 88)

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Duplicate of issue 9254

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/1

  • Key: QVT11-87
  • Legacy Issue Number: 9420
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Pim2Psm or PimToPsm ? At page 57: "The example below ... Pim2Psm transformation ..." "transformation PimToPsm (...)"

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Section 8.1.18, Replace all occurences of Pim2Psm as PimToPsm.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 7/13

  • Key: QVT11-86
  • Legacy Issue Number: 9419
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Figure 16 does not exists In the first line at page 42: "...of relations. Figure 16 ..." must be Figure 7.13. Also, at same page: "The textual specification ... to Figure 16 is ..." must be Figure 7.13.

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Modify the text to replace the two references to Figure 16 with references to Figure 7.13.
    More precisely, in page 42, replace "Figure 16 specifies a strange relation … " by "Figure 7.13 specifies a strange relation … " and replace "The textual specification corresponding to Figure 16 …" by "The textual specification corresponding to Figure 7.13 …".

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2 page 79

  • Key: QVT11-85
  • Legacy Issue Number: 9418
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    isScoped not defined in this document in "Unless isScoped is true...". It should be isVirtual (see Figure 8.3)

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In section 8.2.1.20, replace "Unless isScoped..." by "Unless isVirtual".
    Also, in the Attributes subtitle, replace 'virual' by 'isVirtual'.

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 7/11

  • Key: QVT11-83
  • Legacy Issue Number: 9415
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    CollectionKind not defined in this document in kind: CollectionKind

  • Reported: QVT 1.0 — Sat, 11 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    IN section 7.11.2 insert the enumeration type CollectionKind with the
    following definition:

    """
    CollectionKind (from EssentialOcl)
    The enumeration type that provides all the kind of collections.
    Possible values are: Set, Sequence, Bag and OrderedSet.,
    """

  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2

  • Key: QVT11-82
  • Legacy Issue Number: 9414
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    Typographic errors: - Character ñ appears in several pages: 13, 14, 15, 17, 18, 22, ... - Bad indented in page 15: namespace = p:Package {}, in page 16: primaryKey = k:PrimaryKey

    {...}

    in page 22: c1: Class, a1: Attribute l1: attrs (c1, a1) in page 36: <varDeclaration>* in page 37: | (<oclExpressionCS> ';')* - At page 71: "...expressions that is executed is sequence." it should say: "...expressions that is executed in sequence." - At page 71: "He self variable..." it should say: "The self variable ..." - At page 78: "An explicit usage of the population ...required is certain situations ..." it should say: "An explicit usage of the population ...required in certain situations ..." - At page 91: "Tre endif keyword ..." it should say: "The endif keyword ..." - Bad format in page 22: 7.10.3.3 (see font of 7.10.3.2) in page 23: 7.10.3.4 (see font of 7.10.3.2) - In figure 7.4 (page 26) the class Domain must be written in italic. The class Domain is abstract. - In figure 7.4 (page 26) the class Rule must be written in italic. The class Rule is abstract. - In page 49 at expression: name:=self.name;type:=getSqlType(self.type) missing a space between name and type - At page 88: "...it has four pre-defined variants named xcollect..." it should say: "...it has five pre-defined variants named xcollect..." - At page 110: "...beginning and the end of the srings and..." it should say: "...beginning and the end of the strings and..." - At page 112: "...comment delimited by "-" and the end of file" it should say: "...comment delimited by "-" and the end of line" - At page 112: "...comment delimited by "//" and the end of file" it should say: "...comment delimited by "//" and the end of line"

  • Reported: QVT 1.0 — Sat, 11 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    (1) Replace Character ñ occurrences in all pages
    (2) Correct bad indentation :
    in page 15: namespace = p:Package {},
    in page 16: primaryKey = k:PrimaryKey

    {...}


    in page 22: c1: Class, a1: Attribute l1: attrs (c1, a1)
    in page 36: *
    in page 37: | ( ';')*
    (3) Perform the following text substitutions:

    • At page 71: "...expressions that is executed is sequence." it should say: "...expressions that is executed in sequence."
    • At page 71: "He self variable..." it should say: "The self variable ..."
    • At page 78: "An explicit usage of the population ...required is certain situations ..." it should say: "An explicit usage of the population ...required in certain situations ..."
    • At page 91: "Tre endif keyword ..." it should say: "The endif keyword ..."
    • At page 88: "...it has four pre-defined variants named xcollect..." it should say: "...it has five pre-defined variants named xcollect..."
    • At page 110: "...beginning and the end of the srings and..." it should say: "...beginning and the end of the strings and..."
    • At page 112: "...comment delimited by "-" and the end of file" it should say: "...comment delimited by "-" and the end of line"
    • At page 112: "...comment delimited by "//" and the end of file" it should say: "...comment delimited by "//" and the end of line"

    (4) Perform the following formatting corrections:

    • Bad format in page 22: 7.10.3.3 (see font of 7.10.3.2) in page 23: 7.10.3.4 (see font of 7.10.3.2)
    • In figure 7.4 (page 26) the class Domain must be written in italic. The class Domain is abstract.
    • In figure 7.4 (page 26) the class Rule must be written in italic. The class Rule is abstract.
    • In page 49 at expression: name:=self.name;type:=getSqlType(self.type) missing a space between name and type.
  • Updated: Fri, 6 Mar 2015 22:55 GMT

Section: 8/2

  • Key: QVT11-84
  • Legacy Issue Number: 9417
  • Status: closed  
  • Source: Universidad Politécnica de Madrid ( Jorge Enrique Pérez-Martínez)
  • Summary:

    enforcedDirection not defined in this document enforcedDirection: ModelParameter [0..1]

  • Reported: QVT 1.0 — Tue, 14 Mar 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    In Figure 8.1 add the missing link
    'OperationalTransformation:enforcedDirection : ModelParameter [0..1]'

  • Updated: Fri, 6 Mar 2015 22:55 GMT

QVT Issue: Support for CMOF metamodels

  • Key: QVT-66
  • Legacy Issue Number: 9397
  • Status: closed  
  • Source: Adaptive ( Mr. Pete Rivett)
  • Summary:

    The QVT spec (ptc/05-11-01) is littered with references to EMOF but has not one reference to CMOF.
    Hence it's not clear whether QVT can be used to transform models that instantiate CMOF metamodels. This is a major requirement since UML2 is itself a CMOF metamodel.

    Note that it's not important here that the QVT metamodel itself is expressed only in EMOF: but that it can be applied to CMOF metamodels. This means that references such as ObjectTemplateExp::referredClass(from EMOF) (see Fig 7.6) should also support references to CMOF metaclasses. Though CMOF is a compatible extension of EMOF, it is important that the QVT specification makes it clear that references to CMOF classes must be supported and that compliant QVT engines should not lose information when they transform models for CMOF metamodels. This is also likely to requires changes to the specification logic that describes the execution of transformations - for example to fully support non-unique Associations.

  • Reported: QVT 1.0b1 — Fri, 24 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) Add a new top-level section named "QVT for CMOF" with the following content:

    For the sake of simplicity all previous chapters assume QVT used in the context of EMOF conformant metamodels. However this specification is also applicable to CMOF metamodels with a few restrictions.

    11.1 The QVT metamodel for CMOF

    The QVT metamodel for CMOF is a CMOF metamodel that is obtained by executing the following steps:

    The EMOF package is replaced by the CMOF Package.
    All other packages - including the EssentialOCL - are cloned, with the exception that all references to the original EMOF metaclasses are replaced by references to the corresponding CMOF metaclass.

    11.2 Semantic specificities

    The semantics of CMOF concerning the access and the modification of properties replaces the semantics of EMOF. For instance, in CMOF, setting a property that is specified as an association end implies that the corresponding association link instance is created and that any related sub-setted association is updated accordingly.

    There are some limitations when using QVT on CMOF metamodels which comes from the fact that we are cloning EssentialOCL - at the time being, the OCL specification does not define an "OCL for CMOF metamodels".

    • It is not possible to refer directly to an association; instead an association has to be accessed as a property from one of the owning classes. However, this does not address the case where both the ends of an association are owned by the association itself.

    (2) In the Compliance section 2, add a sub-section named "EMOF and CMOF compliance" after Section 2.3 Interoperability Dimension with the following content:

    A QVT tool may declare to be EMOF-compliant or CMOF-compliant (possibly both) depending on the kind of models that it is capable of working with. The same dimensions serving to characterize QVT-EMOF compliant implementations (in Figure 2.1) are applicable to QVT CMOF-compliant implementations. Note however that the XMI for an EMOF-compliant QVT tool is not the same as the XMI for a CMOF-compliant QVT tool since the XMI generation rules for CMOF are distinct from the corresponding generation rules for EMOF.

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Missing iterator variable in resolve expressions

  • Key: QVT-61
  • Legacy Issue Number: 9390
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    A resolution operator implies iteration over the list of objects
    transformed from a source element. However no iteration variiable
    is represented.

    Suggestion:
    Define ResolveExp as a subclass of ImperativeLoopExp.
    As a consequence, the field ResolveExp::condition can be
    removed (since already contained by ImperativeLoopExp)

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    NOTE: This resolution should not be applied since superseded by resolution 10925.

    A Resolution operator implies iteration over the list of objects
    transformed from a source element. However no iteration variiable
    is represented.

    RESOLUTION:
    (1) In Section 8.2.1.22 (ResolveExp), define ResolveExp as a subclass
    of ImperativeLoopExp by replacing "CallExp" by "ImperativeLoopExp".
    (2) In the same section 8.2.1.22, remove the association 'condition'
    (since already contained by ImperativeLoopExp)
    (3) In Figure 8.3, remove the link ResolveExp::condition and replaces
    inheritance of ResolveExp so that it inherits from "ImperativeLoopExp"

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Inconsistency of multiplicity of ImperativeIterateExp::target

  • Key: QVT-64
  • Legacy Issue Number: 9393
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    According to the class description the multiplicity of
    ImperativeIterateExp::target should be [0..1] not 1 in
    the diagram view.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Figure 8.5, replace the multiplicity of role target:Variable to '0..1' (instead of '1').

  • Updated: Fri, 6 Mar 2015 22:36 GMT

When and where clause for mapping operations

  • Key: QVT-63
  • Legacy Issue Number: 9392
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Reusing the 'when' and 'where' clauses of the refined relation
    of a mapping operation to represent the 'when' and 'where' clauses
    of the mapping operation is semantically not very accurate since
    there are some differencies. Should better have their own
    representation.

    Suggestion: add specifics MappingOperation::when and
    MappingOperation::where associations.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 8.2.1.15, add the associations
    MappingOperation::when and MappingOperation::where
    with the following descriptions:
    when : OclExpression [0..1]
    The pre-condition or the guard of the operational mapping.
    It acts as a pre-condition when the operation is called with strict
    semantics, it acts as a guard otherwise (see MappingCallExp)
    where : OclExpression [0..1]
    The post condition for the operational mapping.
    (2) In Section 8.2.1.15, in the introductory part, replaces
    "The when clause in the refined relation acts ..." by
    "The when clause acts ..."
    and "The where clause in the refined relation always acts as
    a post-condition " by "The where clause always acts as
    a post-condition "

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Missing multiplicity of AnonymousLiteralPart::value

  • Key: QVT-62
  • Legacy Issue Number: 9391
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The multiplicity of AnonymousLiteralPart::value is not indicated
    in the diagram. It should be equal to 1.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Figure 8.7, indicate the multiplicity of AnonymousLiteralPart::value
    to be equal to "1".

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Logging textual messages that depend on variables

  • Key: QVT-65
  • Legacy Issue Number: 9394
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    He current representation of LogExp does not allow output
    messages that are variable dependent. This is not realistic.
    We should use here ordinary argument representation to encode
    The text of the message and the level.

    Suggestion: LogExp defined as a subclass of OperationCallExp.
    The 'text', 'level' and 'element' fields can therefore be removed
    since encoded as positional arguments.

  • Reported: QVT 1.0b1 — Thu, 23 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    RESOLUTION
    (1) In Section 8.2.2.18 (LogExp) before "A log expression returns null"
    adds the following paragraph.
    "A log expression is a kind of operation call expression where the
    first argument contains the message to be print, the second argument
    gives the model element to be print (using an implict call to the 'who'
    operation from the QVT Standard Library) , and the third argument gives
    a level number for the log.
    Only the first argument is mandatory.
    (1) In Section 8.2.2.18 (LogExp) change the superclasses list
    by replacing 'ImperativeExpression' by 'OperationCallExp'.
    (2) In Section 8.2.2.18, remove the properties 'text', 'level'
    and 'element'
    (3) In Figure 8.6, change the inheritance of LogExp to OperationCallExp,
    remove 'text' and 'level' attributes and remove 'element' link.

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Missing variable references within inlined object expressions

  • Key: QVT-60
  • Legacy Issue Number: 9389
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Inlined ObjectExp have no explicit result variable. Nevertheless
    An implicit variable is needed so that the representation of property
    access within the body of ObjectExp is consistent.
    These variables need to exist somewhere and so a container for these
    implicit variables is needed.

    Suggestion:
    Adding the association:
    OperationBody::variable : [*] Variable

    {composes}

    And make the multiplicity of ObjectExp::referredObject equal to '1'

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 8.2.1.17 (OperationBody), add the association
    """
    variable : [*] Variable

    {composes}

    The variables defined implicitly within this operation body.
    This concerns implicit variables in object expressions (ObjectExp).
    """
    (2) In Section 8.2.1.24, replace "referredObject: Variable [0..1]"
    by "referredObject: Variable [1]"
    (3) In figure 8.2 add the "OperationBody::variable Variable" unidirectional
    link
    (4) In figure 8.3 change multiplicity of ObjectExp::referredObject to '1'.

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Missing association from MappingParameter to a ModelParameter

  • Key: QVT-59
  • Legacy Issue Number: 9388
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Non primitive MappingParameters are related to ModelParameters
    but the the association is missing in the metamodel. Also, when
    The information cannot be infered from the parameter types
    there is no way to indicate this when using the textual syntax.
    Suggestion:
    Add the association
    'MappingParameter::extent : [0..1] ModelParameter'
    For the concrete syntax, use the '@' character:
    mymappingparameter:MyType@mymodelparameter
    Usage of this notation should not be mandatory when the model
    type can be automatically infered from the parameter type.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 8.2.1.16 (MappingParameter) add the association:
    """
    extent : ModelParameter [0..1]
    The extent of the mapping parameter. Should be explicitly provided
    when there is an ambiguity on the extent that will own a potential
    created element corresponding to this parameter.
    """
    (2) In the same section 8.2.1.16, add the "Notation" subtitle
    as follows:
    """
    Notation
    The extent of a mapping parameter can be provided explicitly
    using its name as the scope prefix of its type, using the "::"
    symbol. The declarator has the form:
    mymappingparameter : myextent::MyType.
    It is not mandatory to provide the extent when it can be inferred
    from the type.
    Example:
    transformation T(in src:S, out dest1, out dest2);
    mapping X::foo(inout dest1::Y) : dest2:Y;
    // 'X' is a class of 'S' metamodel and 'Y' is a class of 'D' metamodel
    """
    Remark: No changes are needed in the grammar since the 'declarator' rule
    already supports this syntax.

    (3) In Figure 8.1, add the correspond link between MappingParameter
    and ModelParameter.

    (4) In Section 8.2.1 (ObjectExp), within the "Notation" subtitle,
    replace:
    """When provided the model parameter is notated within brackets
    after the object keyword.
    object[srcmodel] x:X

    { ... } // x is created within the 'srcmodel
    """
    by:
    """When an explicit extent is provided, the variable name
    prefixes the type of the object expression using the "::" symbol.
    object x: srcmodel::X { ... }

    // x is created within the 'srcmodel
    """
    (this change is required for consistency with mapping parameter notation).

    (5) In Section 8.2.2.23 (InstantiationExp), within the "Notation" subtitle,
    replace:
    """
    When provided the extent is notated by adding the variable name in brackets after the new keyword.
    column := new [mymodel] Column(n,t); // mymodel is the extent for the new instance.
    """

    by:
    """When an explicit extent is provided, the variable name
    prefixes the type of the instantiation expression using the "::" symbol.
    column := new mymodel::Column(n,t); // mymodel is the extent for the new instance.
    """

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Typo error ImperativeIteratorExp expected in diagram

  • Key: QVT-58
  • Legacy Issue Number: 9387
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The diagram refers to a CollectorExp undefined class. In fact
    This class is the ImperativeIteratorExp found in the class
    description

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Duplicate of issue 9254, close

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Entry operations in operational definitions

  • Key: QVT-57
  • Legacy Issue Number: 9386
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    For models that have a well identified "root" element and type,
    it makes sence to designate a mapping operation on the root
    type to be the entry of the transformation. Currently this is not
    possible.

    Suggestion:
    Replace the 'OperationalTransformation::entry : EntryOperation'
    association by a more general 'Module::entry : Operation'

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Section 8.2.1.1 (OperationalTransformation),
    remove the association "entry : EntryOperation [0..1]" and
    in Section 8.2.1.3 (Module) inserts the association "entry : Operation [0..1]".
    In Figure 8.1, make the corresponding move of the 'entry' link.

  • Updated: Fri, 6 Mar 2015 22:36 GMT

isTopLevel should not be a derived property

  • Key: QVT-56
  • Legacy Issue Number: 9385
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    For implementers discovering whether a relation is a top
    level relation may be nighmare. It would be preferible that
    this property be a "pain" property (not derived). This will
    be aligned with the concrete syntax where the 'top' keyword
    is explicitly set.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In 7.11.3.1, replace "/isTopLevel : Boolean" by "isTopLevel : Boolean".
    and remove the sentence "This is a derived attribute."
    (2) In Figure 7.7 replace "/isTopLevel" by "isTopLevel"

  • Updated: Fri, 6 Mar 2015 22:36 GMT

RelationalTransformation as a subclass of Transformation

  • Key: QVT-55
  • Legacy Issue Number: 9383
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    To avoid dependency of QVTBase to QVTRelation due to the fact
    that a relational transformation contains QVTRelation::Keys
    Instances, the Transformation metaclass should be subtyped
    within the QVTRelations package.
    By the way, the association between relational transformations
    and Keys is missing in the metamodel and need to be added.

    Suggestion: Add a RelationalTransformation metaclass inheriting
    from Transformation and add the missing association:
    'RelationalTransformation::key : [*] Key

    {composes}

    '
    Correct the type of OperationalTransformation:refined so that
    it is a RelationalTransformation (instead of 'Transformation')

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In section 7.11.3 insert the definition of the "RelationTransformation"
    class with the following description:
    """
    A RelationalTransformation is a specialization of a Transformation
    representing a transformation definition that uses the QVT-Relation
    formalism.
    Superclasses
    Transformation (from BaseQVT)
    Associations
    key : [*] Key

    {composes}

    The keys defined within this transformation.
    """
    (2) In Figure 7.7 inserts the class "RelationTransformation" inheriting
    from "Transformation" and adds the link to the "Key" class

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Typo error for properties whenOwner and whereOwner

  • Key: QVT-54
  • Legacy Issue Number: 9382
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    In the QVTBase diagram 'whenOwner' should be the opposite
    property of 'when' and 'whenOwner' the opposite property of
    when. Currently this is reverted.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In figure 7.7, replace 'whenOwner' by 'whereOwner'
    and 'whereOwner' by 'whenOwner'

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Bad navigability in cross-package links

  • Key: QVT-53
  • Legacy Issue Number: 9381
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The reverse link from Transformation to Tag should become
    not navigable. Otherwise there is a dependency between EMOF
    and QVTBase packages.
    In the QVTOperational package the same stands for navigability:
    The opposite role 'owner' of Module::ownerTag
    The opposite role 'module' of Module::configProperty
    The opposite role 'tryBodyOwner' of TryExp::tryBody
    The opposite role 'computeOwner' of ComputeExp::returnedE

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Figure 7.4 make unidirectional the link Transformation::ownedTag
    (2) In Figure 8.1
    make unidirectional the link Module::ownedTag
    make unidirectional the link Module::configProperty
    (3) In Figure 8.6
    make unidirectional the link TryExp::tryBody
    (4) In Figure 8.5
    make unidirectional the link ComputeExp::returnedElement

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Revise the encoding of primitive domains

  • Key: QVT-52
  • Legacy Issue Number: 9380
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Primitive domains are simpler than other relation domains
    since they do are not dependent on a given typed model
    (primitive types are available to all metamodels) and there
    is no need to refer to a template expression.
    In QVTBase package, the multiplicity of Domain::typedModel
    should be '0..1' instead of '1' to avoid an arbitrary assignment
    to model typed model for the primitive diomain. In addition
    the multiplicity of RelationDomain-Pattern association should
    be changed to 0..1.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 7.11.1.3, replace "typedModel: TypedModel [1]"
    by "typedModel: TypedModel [0..1]"
    In figure 7.4 change the corresponding multiplicity.

    (2) In 7.11.3.2, replace "/typedModel: TypedModel [1] (from Domain)"
    by "/typedModel: TypedModel [0..1] (from Domain)"
    and replace "pattern: DomainPattern [1]

    {composes}"
    by "pattern: DomainPattern [0..1] {composes}

    "
    Make the corresponding change in figure 7.7.

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Incorrect composition of variables in patterns

  • Key: QVT-51
  • Legacy Issue Number: 9379
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    In QVTBase package, the association 'Pattern::bindsTo'
    cannot be composition since variables in relations
    specifications are owned by Relations and because
    variables can be bound to more than one pattern.
    The same applies for 'TemplateExp::Variable' in QVTRelation
    package which should not be a composition.

    Suggested resolution:
    Change the property definitions as:
    'Pattern::bindsTo : [*] Variable opposites pattern [*]'
    'TemplateExp::bindsTo : [0..1] Variable opposites pattern [*]
    If needed add OCL well-formedness in QVT Core to restrict
    multiplicity.

  • Reported: QVT 1.0b1 — Mon, 13 Feb 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In 7.11.1.6, replaces "bindsTo: Variable [*]

    {composes}"
    by "bindsTo: Variable [*]"
    and in Figure 7.5 removes the corresponding composition symbol

    (2) In 7.11.2.1 replaces "bindsTo: Variable [0..1] {composes}

    "
    by "bindsTo: Variable [0..1]"
    and in Figure 7.6 removes the corresponding composition symbol

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Page 131

  • Key: QVT-50
  • Legacy Issue Number: 9255
  • Status: closed  
  • Source: Hewlett Packard Enterprise ( Susan Entwisle)
  • Summary:

    Section 10.2.2.24 third sentence “In the perspective of the runtime environment a typedef is never instantiated” appears to be redundant as the same intent is expressed in second sentence “A typedef is never instantiated”

  • Reported: QVT 1.0b1 — Thu, 19 Jan 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Section 8.2.2.24, remove the sentence "A Typedef is never instantiated"

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Page 117

  • Key: QVT-48
  • Legacy Issue Number: 9253
  • Status: closed  
  • Source: Hewlett Packard Enterprise ( Susan Entwisle)
  • Summary:

    Section 10.2.2.6 ForExp is missing from the class diagram in Section 10.2.2 The ImperativeOCL Package

  • Reported: QVT 1.0b1 — Thu, 19 Jan 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    closed no change

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Page 45 and 165

  • Key: QVT-47
  • Legacy Issue Number: 9252
  • Status: closed  
  • Source: Hewlett Packard Enterprise ( Susan Entwisle)
  • Summary:

    the naming and diagram conventions should be introduced before they are used in Section 9.11 and 11.7, respectively

  • Reported: QVT 1.0b1 — Thu, 19 Jan 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In the introductory text of section 7.11 and sections 9.7
    add the following paragraph (similar to paragraph found in 8.2):

    """
    The metaclasses imported from other packages are shaded and annotated with 'from <package-name>' indicating the
    original package where they are defined. The classes defined specifically by the two packages of the QVT Operational
    formalism are not shaded.
    Within the class descriptions, metaclasses and meta-properties of the metamodel are rendered in courier font. Courier font is also used to refer to identifiers used in the examples. Keywords are written
    in bold face. Italics are freely used to emphasize certain words, such as specific concepts, it helps understanding.
    However that emphasis is not systematically repeated in all occurrences of the chosen word.
    """
    NOTE (Correction of typo after AB review):
    When applying the change in section 7.11, "the two packages of the QVT Operational" should be replaced by "the packages of the QVT Relation". When applying the change in section 9.7 it should be "the packages of the QVT Core".

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Page 30

  • Key: QVT-46
  • Legacy Issue Number: 9251
  • Status: closed  
  • Source: Hewlett Packard Enterprise ( Susan Entwisle)
  • Summary:

    Chapter 9 The Relations Language contains long and complex sentences, which reduce the readability of the specification

  • Reported: QVT 1.0b1 — Thu, 19 Jan 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    closed no change

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Page 118

  • Key: QVT-49
  • Legacy Issue Number: 9254
  • Status: closed  
  • Source: Anonymous
  • Summary:

    Section 10.2.2.7 ImperativeIterateExp is missing from the class diagram in Section 10.2.2 The ImperativeOCL Package

  • Reported: QVT 1.0b1 — Thu, 19 Jan 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Figure 8.4 and Figure 8.5, rename CollectorExp as ImperativeIterateExp
    (because CollectorExp is in fact an old name for ImperativeIterateExp).

  • Updated: Fri, 6 Mar 2015 22:36 GMT

Page 28

  • Key: QVT-45
  • Legacy Issue Number: 9250
  • Status: closed  
  • Source: Hewlett Packard Enterprise ( Susan Entwisle)
  • Summary:

    states that the plugin has access to object references in models, and may do arbitrary things to those objects. The specification should state that this approach breaks encapsulation of the object.

  • Reported: QVT 1.0b1 — Thu, 19 Jan 2006 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In section 6.2, page 25, replaces the sentence
    "The plugin implementation has access to object references in models,
    and may do arbitrary things to those objects." by:

    "The plugin implementation has access to object references in models,
    and may do arbitrary things to those objects, possibly breaking
    encapsulation".

  • Updated: Fri, 6 Mar 2015 22:36 GMT

abstract/concrete syntax for try/catch in clauses 8.2.2.13 & 8.2.2.14 lacks support for retrieving the exception caught

  • Key: QVT12-8
  • Legacy Issue Number: 15977
  • Status: closed  
  • Source: NASA ( Dr. Nicolas F. Rouquette)
  • Summary:

    Current abstract/concrete syntax for try/catch in clauses 8.2.2.13 & 8.2.2.14 lacks support for retrieving the exception caught.

    That is, QVT1.1 is currently limited to the following style of try/catch logic:

    try

    { // ... } except (Exception) { // there is no syntax to bind the actual exception caught to a variable or to retrieve it in an except expression. };


    One possibility would be to introduce a variable in the catch expression (clause 8.2.2.14), e.g.:


    try { // ... }

    except (Exception e)

    { // do something with the exception caught: e }

    ;

    or:

    try

    { // ... }

    except (Exception1 e1, Exception2 e2)

    { // do something with the exception caught: e1 or e2 }

    ;

  • Reported: QVT 1.1 — Fri, 21 Jan 2011 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    Yes. Unuseable caught exceptions are clearly of limited utility.
    There can only be one exception variable name for many exception types; what is its type? Cannot be
    any of the listed types so it will have to be the common super type. Introduce a new exceptionVariable.
    Of course the lower bound on the exception type should be 1. If a catch all is required then the type
    can be Exception. If a finally is required then we need a wrapper or specification enhancement.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

bug in the uml to rdbms transformation example

  • Key: QVT12-7
  • Legacy Issue Number: 15917
  • Status: closed  
  • Source: laposte.net ( Xavier Dolques)
  • Summary:

    In the UML to rdbms transformation code given in section A.2.3 :

    – mapping to update a Table with new columns of foreign keys
    mapping Association::asso2table() : Table
    when

    {self.isPersistent();}

    {
    init

    {result := self.destination.resolveone(Table);}

    foreignKey := self.map asso2ForeignKey();
    column := result.foreignKey->column ;
    }

    The mapping asso2table is supposed to update a table by adding new columns, but with the last line of the mapping, the existing columns are all replaced by the new ones. I suggest to replace the last line with :
    column += result.foreignKey->column ;

  • Reported: QVT 1.1 — Fri, 7 Jan 2011 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Rule Overriding in QVTr

  • Key: QVT12-6
  • Legacy Issue Number: 15524
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    You have reached the edge of the specification as written.

    1: Yes
    2: Yes
    3: Yes
    4: Yes

    I gave some consideration to this for UMLX.

    I felt that an abstract 'rule' could define a 'subrule' obligation, which would require an identical match signature, since if the override was narrower it would not fulfill the obligation and if it was wider the additional width would not be permitted by the invocation of the abstract 'rule'.

    I felt that all concrete rules should always be matched to ensure that addition of extended functionality did not change previous behaviour. This complies with UMLX's all maximal matches philosophy. Keys in QVTr, Evolution Ids in UMLX can ensure that derived rules reuse inherited matches.

    I think a transformation being both a package and a class introduces some difficult compatibility issues to be studied.

    Transformation extension is also poorly defined giving additional imprecision when considering the combination of transformation extension and rule override.

    My ideas for UMLX were not complete but I think that they may be sounder than QVTr's.

  • Reported: QVT 1.1 — Fri, 13 Aug 2010 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    This issue was inadvertently raised from Issue 15417 correspondence. Close it as merged even though
    Issue 15417 needs further work.
    Disposition: See issue 15417 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Figure 7.3

  • Key: QVT12-5
  • Legacy Issue Number: 15424
  • Status: closed  
  • Source: Institute for Defense Analyses ( Steven Wartik)
  • Summary:

    I am confused by something in the MOF QVT specification (version 1.1) and am not sure if it’s an error or my own misunderstanding. Figure 7.3 (p. 24) has links from two instances of ObjectTemplateExp to a single instance of PropertyTemplateItem (the one in the middle). Figure 7.6 (p. 30) shows a composite association between ObjectTemplateExp and PropertyTemplateItem. Why then are there two links to the instance in Figure 7.3? Doesn’t a composite association mean that a PropertyTemplateItem can be owned by only one ObjectTemplateExp?

  • Reported: QVT 1.1 — Tue, 3 Aug 2010 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    The problem is that UML Object diagrams omit the decorations from instantiated relationships. Shrt of
    moving to a non-standard UMLX diagram, we can perhaps get away with some explanations.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT1.1: Add an operation Model::getURI()

  • Key: QVT12-3
  • Legacy Issue Number: 15215
  • Status: closed  
  • Source: NASA ( Dr. Nicolas F. Rouquette)
  • Summary:

    Sometimes, it is useful to get the URI corresponding to the resource of a given transformation input model parameter.

    I suggest adding an operation for this purpose in clause 8.3.5 Operations on models.

    Model::getURI() : String

    Returns the string of the URI corresponding to the model's resource. This operation produces an empty string for a model corresponding to an output parameter

    For what it's worth, below is a patch for the Eclipse M2M implementation of QVTOperational where I prototyped such an operation.

  • Reported: QVT 1.1 — Tue, 20 Apr 2010 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Please provide a non-null text in the Scope section of documents ptc/09-12-06 and ptc/09-12-05

  • Key: QVT12-2
  • Legacy Issue Number: 14835
  • Status: closed  
  • Source: Thematix Partners LLC ( Dr. Doug Tolbert)
  • Summary:

    Please provide a non-null text in the Scope section of documents ptc/09-12-06 and ptc/09-12-05

  • Reported: QVT 1.1 — Mon, 7 Dec 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT 1.1 Opposite navigation scoping operator (Correction to Issue 11341 resolution)

  • Key: QVT12-1
  • Legacy Issue Number: 14619
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The resolution for Issue 11341 uses '.' as a property scoping operator.

    This is inconsistent with OCL for which class scoping always uses '::' e.g
    enumeration is class::literal operation call is class::operation.

    Note the clarifying discussion in OCL, justifying Class.allInstances,
    explains
    that dot is only for operations on instances.

  • Reported: QVT 1.1 — Wed, 11 Nov 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    Simple correction of '.' to '::' in the grammar.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Derived properties in QVTr

  • Key: QVT12-4
  • Legacy Issue Number: 15416
  • Status: closed  
  • Source: NASA ( Dr. Maged Elaasar)
  • Summary:

    If I want to specify a uni-directional transformation using QVTr, is it ok to use "derived" properties in source domains' object templates? I guess since the transform is not meant to be run in the opposite direction, this will not create a problem?

    If that is allowed, it would be a good additional feature of QVTr to allow the definition of new derived properties right in the transform, instead of having them only in the source metamodel.

    For example

    transform A (...) {

    property Class::allSuperClass : Class

    { self->closure(self.superClass) // closure might not be standard collection op but I used it just to demonstrate the point }

    relation B {
    checkonly domain source c:Class {
    allSuperClass = super:Class

    {...}

    }
    }

    }

    does this make sense?

  • Reported: QVT 1.1 — Fri, 13 Aug 2010 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Wrong Chapter reference on Page 2 Language Dimension

  • Key: QVT11-80
  • Legacy Issue Number: 14549
  • Status: closed  
  • Source: InterComponentWare AG ( Markus von Rüden)
  • Summary:

    Original file: ptc/07-07-08.zip
    OMG Document Nmber: formal/2008-04-03
    Standard document URL http://www.omg.org/spec/QVT/1.0/PDF

    On Page 2 (Page 18 in PDF) there is a wrong reference in chapter 2.2 Language Dimension at 1. and 2.

    "Core; The Core language is described in Chapter 11.."

    "Relations: The Relations language is described in Chapter 9. ..."

    It should be 9 and 7

  • Reported: QVT 1.0 — Fri, 9 Oct 2009 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    The Chapter 10 reference is wrong too.
    Further wrong Chapter 9/11 references exist in the main text.
    The above references are manual text that do not use FrameMaker cross-reference facilities.
    Loading the QVT 1.1 FrameMaker files reveals 6 unresolved cross-references.
    OMG specifications have Clauses not Chapters.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Typos in signatures of "allSubobjectsOfType" and "allSubobjectsOfKind"

  • Key: QVT11-79
  • Legacy Issue Number: 13989
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    Sections 8.3.4.7 and 8.3.4.9, page 110:

    Operation signatures for 8.3.4.7 and 8.3.4.9 do not correspond with the title of sections.

    Please update 8.3.4.7 from "Element::subobjects(OclType) : Set(Element)" to "Element::allSubobjectsOfType(OclType) : Set(Element)".

    Please update 8.3.4.9 from "Element::subobjectsOfKind(OclType) : Set(Element)" to "Element::allSubobjectsOfKind(OclType) : Set(Element)"

  • Reported: QVT 1.0 — Sun, 14 Jun 2009 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Minor typographical error in ImperativeIterateExp notation

  • Key: QVT11-77
  • Legacy Issue Number: 13987
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    Section 8.2.2.7, page 95:

    The text "list[condition]; // same as list->xselect(i; condition)" should read "list[condition]; // same as list->xselect(i | condition)". Notation of imperative iterate expressions state that the condition section must be separated from prior artifacts (iterators or target initializations), where present, by a "|" character, not a semicolon ";".

  • Reported: QVT 1.0 — Sun, 14 Jun 2009 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Duplicates in part Issue 13282.
    Disposition: See issue 13282 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Typo in 'Model::rootObjects' signature

  • Key: QVT11-76
  • Legacy Issue Number: 13913
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    Section '8.3.5.3 rootObjects' has a typo in the signature of the operation defined: Model::rootobjects() : Set(Element). In compliance with the surrounding definitions and with the title of the section itself, it should read 'Model::rootObjects() : Set(Element), that is, the first letter of 'Objects', capitalized.

    Suggestion: Replace 'Model::rootobjects() : Set(Element)' by the new 'Model::rootObjects() : Set(Element)'

  • Reported: QVT 1.0 — Thu, 30 Apr 2009 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 103: Associations Section 8.2.2.23 InstantiationExp

  • Key: QVT11-70
  • Legacy Issue Number: 13285
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: // column := self.attribute->forEach new(a) Column(a.name,a.type.name);
    discussion: the foreach exp is not well written:
    suggestion: replace the text above by "// column := self.attribute->forEach(a)

    { new Column(a.name,a.type.name) }

    ;

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 100: Superclasses Section 8.2.2.8 LogExp

  • Key: QVT11-69
  • Legacy Issue Number: 13284
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: OperationCallExp
    discussion: From figure 8.4 and 8.6, we can guess that LogExp should inherits from both, OperationCallExp and ImperativeExpression.
    suggesition: add ImperativeExpression as a LogExp's superclass.

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 106: Associations Section 8.2.2.29 DictLiteralExp

  • Key: QVT11-74
  • Legacy Issue Number: 13289
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: part : DictLiteralPart [*]

    {composes,ordered}

    discussion: Do the parts need to be ordered ?. The diagram doesn't show it.
    suggestion: Remove ordered or update the diagram.

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes. A dictionary does not need go be ordered.
    Already correct in the QVT 1.1 models

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 105: Associations Section 8.2.2.26 DictionaryType

  • Key: QVT11-73
  • Legacy Issue Number: 13288
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: (see DictLiteralValue).
    discussion: DictLiteralValue deosn't exist. It must be DictLiteralExp.
    suggestion: Replace "DictLiteralValue" by "DictLiteralExp".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Capitalization of leading characters in multiword operation names

  • Key: QVT11-78
  • Legacy Issue Number: 13988
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    Section 8.3.4.11, page 110:

    The operaton "Element::deepclone()" should read "Element::deepClone()". I understand that "Subobjects" do not capitalize the leading 'o' for the word "objects", but in all other cases it seems consistent to use capitals for words' leading letters. Both the title and the operation signature should be updated accordingly. This issue is similar to 13913.

    The same applies to Section 8.3.7.3 (page 113), "defaultget", which would read "defaultGet", and 8.3.8.4 (page 114), "joinfields", which would read "joinFields". Again both the titles and the operation signatures should be updated accordingly.

  • Reported: QVT 1.0 — Sun, 14 Jun 2009 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 108: Section 8.3 Standard Library

  • Key: QVT11-75
  • Legacy Issue Number: 13290
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: The OCL standard library is an instance of the Library metaclass.
    discussion: It should obviously refer to the QVT Operational Mapppings standard library.
    suggestion: replace "OCL" by "QVT Operational Mappings".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 103: Figure 8.7

  • Key: QVT11-71
  • Legacy Issue Number: 13286
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem: There are two figures to represent the type extensions.
    suggestion: Remove the first figure and name the sencond one as Figure 8.7 - Imperative OCL Package - Type extensions

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    There are actually 5 sub-diagrams of which the first two are duplicated by the third and fourth;
    presumably an editing artefact when the fifth was introduced for ListLiteralExp.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 95: Associations Section 8.2.2.8 SwitchExp

  • Key: QVT11-68
  • Legacy Issue Number: 13283
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: elsePart : OclExpresion

    {composes} [0..1]
    discussion: For uniformity, the multiplicty should appear after the type of the association.
    suggestion: change positions between "{composes}

    " and "[0..1].

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes, and correct spelling of OclExpression too.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 105: Associations Section 8.2.2.24 Typedef

  • Key: QVT11-72
  • Legacy Issue Number: 13287
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: condition: OclExpression [1]

    {composes}

    discussion: the condition is optional.
    suggestion: Replace "[1]" by "[0..1]".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes.
    Already correct in the QVT 1.1 models

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 90: Notation Section 8.2.2.4 WhileExp

  • Key: QVT11-65
  • Legacy Issue Number: 13280
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: compute (x:MyClass := self.getFirstItem()) while (x<>null)

    { … }

    discussion: the compute expression's body requires the enclosing braces
    Suggestion: replace the text above by "compute (x:MyClass := self.getFirstItem()) { while (x<>null) { … }}"

    • Page 92: Semantics Section 8.2.2.4 ForExp
      Problems text:
      Collection(T)::forEach(source, iterator, condition,body) =
      do
      Unknown macro: { count }

      ;

    Collection(T)::forOne(source, iterator, condition,body) =
    forEach (i | condition)

    { body; break; }

    Discussion: It seems that ForEach and forOne expression are not correctly expressed in QVTo terms.
    Suggestion: Change the text above by:
    Collection(T)::forEach(source, iterator, condition,body) =
    do {
    count : Integer := 1;
    while (count <= source->size()) { var iterator := source->at(count); if (condition) body; count += 1; };
    };

    Collection(T)::forOne(source, iterator, condition,body) =
    forEach (iterator | condition) { body; break; }
  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes.
    Yes.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 89: Figure 8.6

  • Key: QVT11-64
  • Legacy Issue Number: 13279
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text:
    1.ReturnExp::value association my have multiplicity [0..1] in the diagram
    2.TryExp::catchClause association should be called exceptClause
    Discussion:
    1. It seems that the returned value of a return expression might be optional.
    2. Since the diagram and textual descriptioon are different, I'm not sure which was the original intention of the name of this reference. Reading the description's text
    and the opposite role name (exceptOwner), I guees that the name must be "exceptClause".
    suggestion:
    1.In ReturnExp::value association replace mutiplicity 1 by multiplicity [0..1]. In the text is well described.
    2.In TryExp class change change the "catchClause" by "exceptClause"

    • Page 90: Section 8.2.2.3 ComputeExp
      Problem's text: body : OclExpression [1] {composes, ordered}

      Discussion: Ordered doesn't make sense in a univalued reference.
      Suggestion: remove "ordered".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes.
    Yes.
    Yes.
    Already correct in the QVT 1.1 models

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 95: Notation Section 8.2.2.7 ImperativeIterateExp

  • Key: QVT11-67
  • Legacy Issue Number: 13282
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: list[condition]; // same as list->xselect(i; condition)
    discussion: From the specified notation, the xselect expression is not well written.
    suggestion: replace ';' by '|'

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 93: Associations Section 8.2.2.7 ImperativeIterateExp

  • Key: QVT11-66
  • Legacy Issue Number: 13281
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: target : Variable [0..1]
    discussion: composes is missed. In the diagram is correctly represented the association's feature.
    suggestion: add the following text to end of the line "

    {composes}
  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes.
    Already correct in the QVT 1.1 models.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 87: Notation Section 8.2.1.24 ObjectExp (03)

  • Key: QVT11-63
  • Legacy Issue Number: 13278
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: // shorthand for list->xcollect object X

    { … }
    discussion: It seems that the imperativeIteratExp has not been correctly notated.
    suggestion: replace the text above by: // shorthand for list->xcollect(x | object X{ … }

    );

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 87: Section 8.2.1.24 ObjectExp

  • Key: QVT11-62
  • Legacy Issue Number: 13277
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: "When an object expression is the body of an imperative collect expression (see xcollect in ImperativeLoopExp)"
    discussion: the text should point ImperativeIterateExp instead.
    suggestion: replace ImperativeLoopExp by ImperativeIterateExp.

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 87: Section 8.2.1.24 ObjectExp

  • Key: QVT11-61
  • Legacy Issue Number: 13276
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: /instantiatedClass: Class [0..1](from InstanciationExp)
    discussion: wrong description.
    Suggestion: replace the text above by "/instantiatedClass: Class [1](from InstantiationExp)"
    note that in /extent reference, "(from InstanciationExp)" must be also replaced by (from instantiationExp)"

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes and correct the erroneous bounds change on the spurious redefinition.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

A referenced picture is missing

  • Key: QVT11-81
  • Legacy Issue Number: 14573
  • Status: closed  
  • Source: InterComponentWare AG ( Markus von Rüden)
  • Summary:

    On Page 130 there is written:

    "The dottet arrows in the picture below sho the dependencies between the patterns, with the following interpretatoin: ..."

    But there is no picture

  • Reported: QVT 1.0 — Tue, 20 Oct 2009 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Specify List::reject and other iterations

  • Key: QVT12-18
  • Legacy Issue Number: 19146
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The current specification of List has a vague claim that all OCL Collection operations are available.

    Are iterations available?

    Are Sequence operations and iterations not available?

    Are return types adjusted to List?

    The specification needs to provide a clear model defining all the operations and iterations.

  • Reported: QVT 1.1 — Wed, 18 Dec 2013 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    Specifying the operations is straightforward, but highlights some nasty inconsistencies such as two
    versions of insertAt.
    The OCL 2.4 operations are included.
    From Issue 13223 clarify wording of insertAt:
    From Issue 13251 add remove operations.
    A model must wait till OCL 2.5 provides an extensible library model

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Inconsistent description about constructor names

  • Key: QVT12-13
  • Legacy Issue Number: 19021
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem:

    Specification first says in the Constructor concept description:

    "The name of the constructor is usually the name of the class to be
    instantiated. However this is not mandatory. Giving distinct names allows having more than one constructor."

    Later on in the Constructor notation:

    "The name of the constructor is necessarily the name of the context type"

    This is inconsistent.

    Discussion:
    Indeed, the notation section statement seems to be correct since:
    1. Looks like other programming languages, like Java.
    2. More importantly, the instantiation expression would not be so obvious when constructing new objects, and would required to be changed.

    Example:

    If we have the following constructors:

    constructor MyClass::MyClassConstructor(name : String)

    { name := name }

    constructor MyClass::MyClass(name : String)

    { name := name + "v2" }

    How can the instantiation expression refer the different constructor ?

    • new MyClass("abc")
    • new MyClassConstructor("abc")
    • new MyClass::Constructor("abc")

    The referred class in a InstantiationExp would not be enough. Changing instantiation expression to provide different name constructor doesn't seem sensible.

    Proposed solution:

    In section 8.2.1.13

    Replace:

    "A constructor does not declare result parameters. The name of the constructor is usually the name of the class to be
    instantiated. However this is not mandatory. Giving distinct names allows having more than one constructor."

    by

    "A constructor does not declare result parameters and its name must be the name of the class to be instantiated."

  • Reported: QVT 1.1 — Wed, 23 Oct 2013 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    This was discussed on https://bugs.eclipse.org/bugs/show_bug.cgi?id=421621.
    Unless we abandon constructor diversity completely, the current AS imposes a needless
    implementation difficulty by requiring dynamic resolution of a statically known constructor. This can be
    avoided by augmenting InstantiationExp.instantiatedClass with
    InstantiationExp.initializationOperation , which can refer to any statically determined constructor. We
    can therefore relax the contradictory restrictions on constructor name spelling.
    Unfortunately Constructor is not available in ImperativeOCL. Promoting Constructor to ImperativeOCL
    would appear easy, unfortunately its superclass ImperativeOperation is also not available. Promoting
    ImperativeOperation requires … too hard. So we must instead introduce InstantiationExp.
    initializationOperation and redefine it in ObjectExp.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT atomicity

  • Key: QVT12-12
  • Legacy Issue Number: 18572
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Clause 7.7 mandates fixed-point semantics for in-place transformations.

    Please ask my bank to use a repeat-until-no-change in-place transformation for my next pay cheque:

    new-balance = old-balance + deposit.

    More seriously, the repeat is at the relation level, so if there are multiple applicable relations, the in-place result is specified to experience multiple updates in an indeterminate order. If relation A and then relation B are repeated to exhaustion, is relation A repeated again to accommodate relation B's changes?

    Start again. QVTr and QVTc are declarative, therefore they express a single complex truth about the final outputs with respect to the original inputs. There are no observable intermediate steps. It is the responsibility of the transformation engine to ensure that the multiple actual output changes are observed as a single atomic transaction. In particular for in-place transformations, the engine must ensure that no input value is accessed after it is updated for output.

    In regard to fixed-point semantics, repetition can only be determinate if it is the entire tranformation that is repeated, and whether to do so would seem to be a legitimate execution option. Therefore QVT should either not specify repetition at all, leaving it to the invoking engine, or specify it as an invocation option for a RelationCallExp.

    If an in-place transformation does perform fixed-point repetition at the transformation level, it would seem that the whole repetition should still be a single atomic transaction so that outputs are never observable in an inconsistent partially transformed state between iterations. The engine must therefore iterate over candidate outputs rather than actual outputs.

  • Reported: QVT 1.1 — Thu, 21 Mar 2013 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    Fixed point semantics can be achieved by a has-it-changed loop.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Imprecise result types of resolveIn expressions

  • Key: QVT12-17
  • Legacy Issue Number: 19121
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    Section 8.2.1.22 ResolveExp states the following about the result type of a resolve expression:

    "If no target variable is provided, the type is either Object (the type representing all types, see Section 8.3.1) either a Sequence of Objects - depending on the multiplicity."

    On top of that, Section 8.2.1.23 ResolveInExp states:

    "The type of a ResolveInExp expression is computed using the same rules as for the type of a ResolveExp."

    In case of a ResolveInExp, why can't we obtain the result type from the respective mapping?

    Consider the following example

    mapping EClass :: EClass2EPackage() : EPackage

    The result of any resolveIn expression for that mapping is necessarily a subtype of EPackage. No need to cast this up to Object.

  • Reported: QVT 1.1 — Fri, 22 Nov 2013 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    OclAny rather Object is of course the top type

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Resolve expressions without source variable

  • Key: QVT12-16
  • Legacy Issue Number: 19096
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    In contrast to 8.2.1.23 ResolveInExp, the prior section 8.2.1.22 ResolveExp does not explicitly state whether the source variable is optional for resolve expressions. For Eclipse QVTo, this leads to the situation the source variable is assumed to be mandatory. Consequently, the resolve expression in following snippet is invalid in Eclipse:

    var p : EPackage = resolveone(EPackage);

    I don't think that this restriction is desirable from the specification viewpoint.

    Eclipse bugzilla: https://bugs.eclipse.org/bugs/show_bug.cgi?id=392156

  • Reported: QVT 1.1 — Tue, 19 Nov 2013 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    The resolve needs a domain in which to search for target objects. For ResolveInExp this can be the
    traces of a designated mapping. For ResolveExp it would seem that some source objects must be
    supplied. However there seems no reason to prohibit a search everywhere and this could be achieved
    by specifying Element.allInstances(). Therefore an omitted ResolveExp sources can mean search all
    traces.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Not possible to remove from a mutable List

  • Key: QVT12-15
  • Legacy Issue Number: 19095
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    A List is a mutable type. However, there is only an interface for adding to a List, not for removing from a List. Analogously to the operation

    List(T)::add(T) : Void

    there should be something like:

    List(T)::remove(T) : Void

  • Reported: QVT 1.1 — Tue, 19 Nov 2013 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    Duplicates in part Issue 13251.
    Disposition: See issue 19146 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

ObjectExp Abstract Syntax misses a ConstructorBody

  • Key: QVT12-14
  • Legacy Issue Number: 19022
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem:

    ObjectExp enhances an InstationExp with additional abstract syntax and semantics what respect to the association of the object to be created/updated to a variable.

    Likewise, the object expression provides concrete syntax to specify the set of expressions to be executed in order to intialize/update the properties of the object to be created. However this is not reflected in the abstract sytanx.

    Discussion:
    Indeed, ObjectExp should contain a containment reference to comprise the block of expressions used to initialize/update the object properties.

    The best AS candidate is ConstructorBody. Note that this is supported by the own description of the ConstructorBody (section 8.2.1.18):

    "A constructor body contains the implementation of a constructor operation or the implementation of an inline constructor
    (see ObjectExp)."

    This ConstructorBody should be optional, as a result of an enhancement I'll raise in a different issue.

    Proposed resolution:

    Add the following association to ObjectExp in section 8.2.1.24

    body: ConstructorBody [0..1]

    {composes}

    The object expression body comprising the expressions to initialize (or update) the properties of the object to be instantiated (or updated).

  • Reported: QVT 1.1 — Wed, 23 Oct 2013 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    The required association is already shown in Fig 8.3; just need to add the missing text

  • Updated: Fri, 6 Mar 2015 20:58 GMT

clause 8.3.1.4 Exception needs to document the taxonomy of Exception types in QVT1.1

  • Key: QVT12-9
  • Legacy Issue Number: 15978
  • Status: closed  
  • Source: NASA ( Dr. Nicolas F. Rouquette)
  • Summary:

    In particular, this taxonomy should explicitly include the AssertionFailed exception type that clause 8.2.2.20 refers to for an AssertExp.
    Suggest defining a String message attribute for Exception; this would facilitate retrieving the message from a raise expression (clause 8.2.2.15)
    Suggest defining AssertionFailed as a subtype of Exception.
    Suggest defining 2 attributes in AssertionFailed corresponding to the severity and log expressions of the AssertExp (clause 8.2.2.20)

  • Reported: QVT 1.1 — Fri, 21 Jan 2011 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    Yes. We need a toxonomy.
    At the root is clearly Exception and this needs no parameters.
    We need to introduce a derived StringException for the standard string-valued RaiseExp, and oops we
    need to modify the grammar to support this shorthand.
    The LogExp-valued AssertionFailed is another derivation of Exception; no severity since it is always
    fatal.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Intermediate data not allowed for libraries

  • Key: QVT12-11
  • Legacy Issue Number: 18325
  • Status: closed  
  • Source: Anonymous
  • Summary:

    The QVT spec says that "an operational transformation may use for its definition intermediate classes and intermediate properties."

    Is intermediate data actually restricted to plain transformations? In other words, is intermediate data unsupported for libraries? The eclipse QVTo implementation sticks to this interpretation and actually supports intermediate data only for plain transformations, which is a limitation I don't see a reason for.

  • Reported: QVT 1.1 — Thu, 27 Dec 2012 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Consider submitting the QVTO profile out of UML Profile for NIEM, section 9-2 to QVT 1.2

  • Key: QVT12-10
  • Legacy Issue Number: 17538
  • Status: closed  
  • Source: NASA ( Dr. Nicolas F. Rouquette)
  • Summary:

    Section 9-2 in the UML Profile for NIEM Beta2 document describes an interesting diagrammatic notation for describing the salient organization of a QVTO transformation.

    Based on the notation shown in figures 9-2, 9-3, 9-4 and others, this notation clearly involves some kind of UML profile for describing a QVTO transformation whose stereotypes
    include <<OperationalTransformation>>, <<MappingOperation>>, <<disjuncts>> and <<inherits>>. The figures in section 9 make a compelling illustration of the utility of a UML Profile for QVTO Transformation.
    I believe this UML profile for QVTO is a novel contribution of the UML Profile for NIEM FTF; unfortunately, the document does not describe it and this QVTO Transformation profile
    is not mentioned anywhere in the UML Profile for NIEM inventory or in any of the machine readable artifacts.

  • Reported: QVT 1.1 — Fri, 3 Aug 2012 04:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Issue 19178 resolution is rubbish

  • Key: QVT12-21
  • Legacy Issue Number: 19208
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The proposed resolution for Issue 19178 'clarifies' nested exceptions.

    It is wrong. The confusion arises from C++'s problem with a nested exception in a destructor not in a handler. QVTo has no destructors so there is no problem.

    Issue 19178 should be closed without change.

    Do not apply chnages from Issue 19178 resolution.

  • Reported: QVT 1.1 — Sat, 8 Feb 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    For ease of reference, the erroneous 19178 revised text was:
    In 8.2.2.13 TryExp add
    The selected exceptClause completes before the TryExp completes. Consequently if an exception is
    raised during execution of the exceptClause, the execution of the exceptClause cannot complete and so
    execution of the transformation terminates without any further changes occurring. The trace records
    may be examined to determine what actions the transformation performed prior to termination.
    We just need to make clear that the handling of nested exceptions is normal.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

What happens when an exception is thrown by an exception handler

  • Key: QVT12-20
  • Legacy Issue Number: 19178
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    QVTo provides no guidance as to how a nested exception should be handled.

    Suggest that like C++, a nested exception is ill-formed and the transformation terminates.

  • Reported: QVT 1.1 — Fri, 10 Jan 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    The QVTo exception mechanism is lightweight.
    Throwing an exception while handling another makes it very difficult to guarantee that the handler for
    the first executes correctly.
    Therefore declare nested exceptions as ill-formed.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

List does not support asList()

  • Key: QVT12-19
  • Legacy Issue Number: 19174
  • Status: closed  
  • Source: Heinz Nixdorf Institute, University of Paderborn ( Christopher Gerking)
  • Summary:

    The asList() operation is defined for all concrete collection types. Consequently, it should be defined on List itself (returning self).

    Suggestion: specify the operation for the Collection type:

    Collection(T)::asList() : List(T)

    Add another redefinition for the List type:

    List(T)::asList() : List(T)

  • Reported: QVT 1.1 — Mon, 6 Jan 2014 05:00 GMT
  • Disposition: Resolved — QVT 1.2
  • Disposition Summary:

    The additional operation is shown in the Issue 19146 resolution..
    Disposition: See issue 19146 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Missing explanations in BNF

  • Key: QVT11-1
  • Legacy Issue Number: 10646
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The OCL 2.0 spec has a 32 page section on concrete semantics.
    QVTr has 1.5 pages of BNF but no explanation.

    In particular:
    What are the semantics of 'import' which has no abstract counterpart?
    Where is the explanation of the role of [ '

    {' <oclExpressionCS> '}

    ' ] in a <domain>?
    Where is the instruction on how to treat the "_" identifier?

  • Reported: QVT 1.0 — Tue, 6 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 Top-level syntax

  • Key: QVT11-7
  • Legacy Issue Number: 10942
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The concrete syntax does not specify a parsing goal.
    If the first element (Transformation) is taken to be the goal, most of the rest
    of the grammar is orphaned.

    Suggest:

    TopLevel ::= (Transformation | Mapping)*

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 The middle direction packages

  • Key: QVT11-6
  • Legacy Issue Number: 10941
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    A Direction defines the packages used by each direction domain.

    Nothing defines the (additional) packages used by the middle area. For instance
    there is no place to specify the trace class model generated by the RelationToCore
    transformation. With many transformations and mappings in a QVTcore it does not
    seem appropriate to overload TransformationName or MappingName as a hook to
    reference the appropriate middle meta-models; different Mappings may have distinct
    middle meta-models; multiple transformations may share the same middle meta-model.
    (Core should be a first class programming language, not just one that supports
    the eccentricities of a RelationToCore conversion.)

    Suggest: a DirectionName between "where" and "(" in Mapping.

    This reads very naturally:

    map ...
    check left (...
    enforce right (...
    where middle (...

    But we also need to fix the Abstract Syntax. As a minimum a Mapping needs a
    middle-typed-model property to capture the missing information. With this addition
    a Mapping duplicates so much of a CoreDomain/Area, that it is more appropriate
    to eliminate Area altogether, merging it into CoreDomain. Area is eliminated
    from Mapping, and added as an additional CoreDomain referenced by the middleDomain
    property.

    So:

    CoreDomain extends Domain
    CoreDomain.variables : RealizedVariable [0..*] composed
    CoreDomain.bottomPattern : BottomPattern [1] composed
    CoreDomain.guardPattern : GuardPattern [1] composed

    Mapping extends Rule
    Rule.domain : Domain [0..*] composed (must be at least CoreDomain[3])
    Mapping.specification - no change
    Mapping.local - no change
    Mapping.context - no change
    Mapping.middle : CoreDomain [1] (must be in Rule.domain)

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    The suggested changes may be convenient but they are not necessary:

    • the middle model can be anonymous
    • the middle area can be merged with the overall mapping.
      What is needed is a way to bind a middle metamodel to its TypedModel. This can be achieved by an
      anonymus direction bindng
  • Updated: Fri, 6 Mar 2015 20:58 GMT

Consider renaming collectselect as xcollectselect

  • Key: QVT11-11
  • Legacy Issue Number: 11058
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    For uniformity, collectselect should be renamed xcollectselect following the distinction
    between collect and xcollect (imperative version).

  • Reported: QVT 1.0 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    This is an unpleasant but worthwhile change. Implementations may choose to provide both spellings
    for transitional compatibility.
    If collectselect changes, so too should collectselectOne, collectOne and selectOne, since their
    computation is imperative too.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 Typographics Issues

  • Key: QVT11-10
  • Legacy Issue Number: 10945
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Style. Use same font and presentation as 7.12.3, 8.4.

    Typo. Remove '(' preceding '","' in BottomPattern.

    Typo. Remove 'e' in 'Assignement'.

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Some aspects of the presentation are easily resolved, but replacing e.g. DirectionName to
    <directionName> is not worthwhile. These will all change to e.g. DirectionNameCS once OCL 2.5
    aligned grammars are provided.
    The '(' is needed as part of an 'optional' for which the prevailing BNF is [].
    Assignement is a simple typo.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 Trailing |

  • Key: QVT11-4
  • Legacy Issue Number: 10939
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    GuardPatterns and BottomPatterns with Variables but without Constraints must end with a '|'.
    This is inelegant. Better to only require '|' as prefix to constraints (or to require it always).

    Suggest:

    GuardPattern ::= Variable ("," Variable)* ["|" (Constraint ";")+]

    similarly BottomPattern

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Simple change.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.17 Variable composition

  • Key: QVT11-3
  • Legacy Issue Number: 10938
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Issue 9379 made Pattern.bindsTo a non-composition.

    This deprives Core of any parent for its non-realized variables.

    Suggest: move BottomPattern.realizedVariables to CorePattern.variables.

    CorePattern.variables then composes all variables declared for the pattern. A class-type
    check of RealizedVariable/Variable derives the 'isRealized' property.

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    It is convenient to keep realized and unrealized variables separate to avoid unnecessary isRealized
    tests.
    Just add CorePattern.variables to compose the unrealized variables.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Assignment.slotExpression

  • Key: QVT11-13
  • Legacy Issue Number: 11108
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    9.3 Assignment.slotExpression should be PropertyAssignment.slotExpression (VariableAssignments have no slot)

  • Reported: QVT 1.0 — Fri, 1 Jun 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Simple move already in QVTcore.xml

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Consider using asTuple instead of tuple keyword for TupleExp

  • Key: QVT11-12
  • Legacy Issue Number: 11061
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Consider using asTuple instead of tuple keyword for TupleExp since asX() is usually
    used for conversions.

  • Reported: QVT 1.0 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    There is no TupleExp or asTuple() in QVT 1.0 or 1.1 but there is an asOrderedTuple() with the
    resolved description. So it appears that a variant of the suggested resolution made it into QVT 1.0.
    Disposition: Closed, No Change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18: Realized

  • Key: QVT11-2
  • Legacy Issue Number: 10937
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The concrete syntax defines 'realized', but section 10 consistently uses 'realize'.

    Suggest: 'realize'

    The concrete syntax defines 'realized' for a single element of a comma-separated list.
    Section 10 appears to expect that 'realized' is a prefix to a comma-separated list.

    Suggest: 'realize' is a comma-separated list prefix.

    (semi-colon separation is available for distinct realize/not-realize.)

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Use 'realize' as a keyword in the concrete syntax.
    Use 'realized' as an adjective in editorial text, model names; e.g. RealizedVariable

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 Anonymous Maps

  • Key: QVT11-8
  • Legacy Issue Number: 10943
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Section 10 uses anonymous maps for composed mappings. The Concrete Syntax
    does not allow this. Similarly, an 'in' is not appropriate for a composed mapping.

    Suggest:

    ComposedMapping ::= "map" [MappingName] ["refines" MappingName] MappingPatterns

    where MappingPatterns is the common part of Mapping.

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 EnforcementOperation

  • Key: QVT11-9
  • Legacy Issue Number: 10944
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    There is no concrete syntax for enforcement operations.

    Suggest: a BottomPattern Constraint may also be
    'create' OperationCallExpCS
    'delete' OperationCallExpCS

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.18 GuardPattern assignments

  • Key: QVT11-5
  • Legacy Issue Number: 10940
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The concrete sysntax allows guard patterns to have assignments. The abstract syntax does not.

    Suggest: GuardPattern uses Predicate rather than Constraint

  • Reported: QVT 1.0 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVTo Standard Library. Clarification of the side-effect operations is needed.

  • Key: QVT11-44
  • Legacy Issue Number: 13183
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:
      • QVTo Standard Library. Clarification of the side-effect operations is needed. I would explicity clarify which operations may modify the object source on which the operations are called. All the stdlib operations must clarify: 1. if the operation acts on the own object or on a copy of the object. 2. which object(s) is(are) exactly returned (the own object, a (collection of) new object(s), a (collection of) referenced object(s)) For example: String::trim operation clearly says that creates a new object copy of itself which is modified and returned. However, String::firstToUpper operation may have several interpretations.
  • Reported: QVT 1.0 — Fri, 19 Dec 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Issue 19146 resolution makes the behaviour of List clear.
    Dict clarified below and a typo
    String clarified below.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVTo Standard Library: Some operation's signatures seem to be erroneous.

  • Key: QVT11-43
  • Legacy Issue Number: 13182
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:
      • QVTo Standard Library: Some operation's signatures seem to be erroneous. ** - the name in the signature of the operation allSubojectsOfType (8.3.4.7) has a typo. Rename correctly - the returned value in the signature of the operation raisedException (8.3.6.4) should better be Exception. - the asList (8.3.8.5) operation's signature is not correct for the types OrderedSet(T), Sequence(T), Bag(T). They shouldn't have any parameter. P.S: Why is this operation included in section 8.3.8 Operations List. I would recomend the creation of new sections for each collection type, instead. - OCLStdlib already defines toLower and toUpper operations. Since these operations may be considered as side-effects operations. I should clarify one of the possible situations: 1. toLower and toUpper are not intended to be side-effect operations. Remove them from the section. 2. toLower and toUpper are always intended to be side-effect operations, so that OCL Operations are discarded. This must be clarified. 3. both (side-effect and free side-effect) operations, are available in QVTtransformations. In this case I would change the name of QVTo std lib operations to distinguish. - In section (8.3.9) lastToUpper must be renamed as lastToLower. P.S: Why all the QVTo Std Lib operations have a subsection number, excepting String's operations?
  • Reported: QVT 1.0 — Fri, 19 Dec 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    allSubojectsOfType – see Issue 13989 resolution.
    raisedException – Yes. But the Status operations are misleadingly under Transformation. Add a
    missing section heading.
    asList(T) – Yes, supersedes Issue 19146 resolution.
    PS – see Issue 19146 resolution.
    toLower – Yes. Make it clear that all String operations are immutable. Redirect OCL 2.4 synonyms to
    OCL 2.4 deprecating the synonyms. We can also fix some bad typos, Boolean rather than
    Integer/Real returns, references to the non-existent Float type and spurious matchXXX arguments.
    lastToUpper – this seems to be a major bloat. Either name or description could change. Since the
    name exists with an obvious functionality, correct the description.
    PS Yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 75: Section 8.2.1.13 Constructor

  • Key: QVT11-54
  • Legacy Issue Number: 13269
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: "/body: BlockExp [0..1]

    {composes} (from ImperativeOperation)
    The expression serving to populate the object using the given parameters. This expression should necessarily be
    an ObjectExp instance.
    discussion: This is not coherent with the ImperativeOperation definition. Body is an OperationBody, specifically a ConstructorBody.
    Suggestion: Replace the text above by the following:
    "/body: OperationBody [0..1] {composes}

    (from ImperativeOperation)
    The operation body of the constructor. It should necessarily be
    a ConstructorBody instance.

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes. But we can go all the way by modeling the ConstructorBody constraint

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 73: Section 8.2.1.11 Helper

  • Key: QVT11-53
  • Legacy Issue Number: 13268
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: "the invocation of the operation returns a tuple"
    discussion: it could be understood as an OCL Tuple, which doesn't apply.
    suggestion: Replace "a tuple" by "an ordered tuple".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    The usage or OrderedTuple seems misguided since an ordinary OCL Tuple does very similar things
    without a positional hazard and without noticeable lexical overhead.
    Only the case of TupleLiteralEx/UnpackExp is plausibly defined in QVT 1.1 and neither of the QVT
    implementations (SmartQVT or Eclipse QVT) support OrderedTuple.
    Therefore eliminate TupleLiteralExp, UnpackExp and OrderedTupleType and
    OrderedTupleLiteralPart.
    Note that there are no editing instructions for the grammar. It is not clear that OrderedTuples were
    really supported at all.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

add the following operations to mutable lists

  • Key: QVT11-48
  • Legacy Issue Number: 13251
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    In the spirit of issue #13228, and in conversation with Mariano Belaunde, we think it is worth considering also adding the following operations to mutable lists. As specific usages of 'removeAt()': 'removeFirst()' and 'removeLast()'. And also: 'removeAll(Collection(T))'. Notice that this one includes the case of removing values specified inside mutable lists as long as ListType inherits CollectionType. Suggestion: Add the following text to section 8.3.8: - List(T)::removeFirst() : T Removes the first value of the mutable list. The return value is the value removed. - List(T)::removeLast() : T Removes the last value of the mutable list. The return value is the value removed. - List(T)::removeAll(Collection(T)) : Void Removes from the mutable list all the values that are also present in the specified collection.

  • Reported: QVT 1.0 — Tue, 13 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    And remove() from Issue 13228. A List is not a Collection so we need two removeAll's.
    Additional operations in Issue 19146.
    Disposition: See issue 19146 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Missing operations on Lists

  • Key: QVT11-47
  • Legacy Issue Number: 13228
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    For 'removeAt' I specify 'one' as the starting index value. Suggestion: - List(T)::remove(T) : T Removes a value from the list. - List(T)::removeAt(int) : T Removes a value from the mutable list at the given position. The index starts at one (in compliance with OCL convention). The return value is the value removed from the mutable list. - List(T)::clear() : Void Removes all values in the mutable list.

  • Reported: QVT 1.0 — Tue, 13 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes. Revised wording in 132 is explicitly one-based.
    Disposition: See issue 19146 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT 1.0 9.18 Missing transformation extension concrete syntax

  • Key: QVT11-42
  • Legacy Issue Number: 12573
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    There is no support for transformation extension in the QVT Core concrete syntax.

    Suggest: re-use the concrete syntax of QVT Relation, allowing "extends x" to follow
    a transformation declaration.

    example:

    transformation yy::umlRdbms

    { middle imports tuml2rdbms; uml imports umlMM; rdbms imports rdbmsMM; }

    extends base1, xx::base2, base3

  • Reported: QVT 1.0 — Fri, 11 Jul 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Simple change. Names are left vague pending resolution of Issue 10935.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT 1.0 7.13.5 Transformation hierarchy

  • Key: QVT11-41
  • Legacy Issue Number: 12572
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The QVT Relation Concrete Syntax makes no provision for organisation of transformations
    in a package hierarchy; all transformations are presumed to be in root packages.

    Suggest: change <identifier> to <transformationId> in both definition and reference
    of the <transformation> production, and define <transformationId> as <pathNameCS>.

  • Reported: QVT 1.0 — Fri, 11 Jul 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 72, Figure 8-2

  • Key: QVT11-51
  • Legacy Issue Number: 13266
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: in MappingParameter class: "refiningParameter" and "refinedDomain".
    discussion: while a mappingOperation refines a Relation, a mappingParamer should "refer" a RelationDomain. In the text of MappingParameter section, the concept of "refers" is used several time instead of "refines".
    suggestion: replace "refiningParameter" and "refinedDomain" by "referringParameter" and "referredDomain".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Duplicates in part Issue 12527.
    Disposition: See issue 12527 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 65, Notation Section 8.2.1.3 Module

  • Key: QVT11-50
  • Legacy Issue Number: 13265
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: "configuration property UML::Attribute::MAX_SIXE: String
    discussion: providing a context to a configuration property doesn't seem to make sense.
    suggestion remove "UML::Attribute::"

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    It's not obviously sensible, but is it actually wrong?
    If there are many configuration properties, it may be convenient to partition them hierarchically. cf.
    java.vm.specification.vendor.
    The punctuation is however confusing; add a space.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Explanation of the 'Model::removeElement' operation needs clarification

  • Key: QVT11-45
  • Legacy Issue Number: 13222
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    Suggestion: Change original explanation text: "Removes an object of the model extent. All links that the object have with other objects in the extent are deleted." by something similar to the following one: "Removes an object from the model extent. The object is considered removed from the extent if it is not a root object of the extent, and is not contained by any other object of the extent."

  • Reported: QVT 1.0 — Tue, 13 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

explanation of the operation: 'List(T)::insertAt(T,int)

  • Key: QVT11-46
  • Legacy Issue Number: 13223
  • Status: closed  
  • Source: Open Canarias, SL ( Victor Sanchez)
  • Summary:

    The explanation of the operation: 'List(T)::insertAt(T,int) : Void' in Section 8.3.8.3 has a mistake concerning the index associated with the first element for OCL collections. The index starts at one, '1', not zero, '0'. Suggestion: Substitute the word 'zero' by the word 'one', so that the text reads: "The index starts at one (in compliance with OCL convention)."

  • Reported: QVT 1.0 — Tue, 13 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes. Improved wording in Issue 19146.
    Disposition: See issue 19146 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 73, Section 8.2.1.10 OperationalTransformation

  • Key: QVT11-52
  • Legacy Issue Number: 13267
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: "overriden: Operation [0..1]"
    discussion: the overriden operation should be an ImperativeOperation. This is correctly showd in the diagram.
    suggestion: Replace "Operation" by "ImperativeOperation".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes.
    Already correct in the QVT 1.1 models

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Pag 63, Section 8.2.1.1 OperationalTransformation

  • Key: QVT11-49
  • Legacy Issue Number: 13264
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: "isubclass of Module (see: ImperativeOCL package)"
    Discussion: Module doesn't belong to ImperativeOCL package.
    Suggestion: remove "(see: ImperativeOCL package)"

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    simple change

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtoperational.ecore

  • Key: QVT11-39
  • Legacy Issue Number: 12527
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    These changes mostly affect non-normative files which were corrected when QVT 1.1 issued revised
    files based on Eclipse QVT contributions. However a few changes remain to be resolved in the main
    text.
    ContextualProperty .initExpression is Issue 13270
    ObjectExp.instantiatedClass is Issue 13276
    ObjectExp. initializationOperation is Issue 19021
    ObjectExp. body is Issue 19022

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP imperativeocl.ecore

  • Key: QVT11-38
  • Legacy Issue Number: 12526
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached.

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    These changes mostly affect non-normative files which were corrected when QVT 1.1 issued revised
    files based on Eclipse QVT contributions. However a few changes remain to be resolved in the main
    text.
    CatchExp.exceptionVariable/CatchExp.exception changes are Issue 15997
    Remove UnpackExp is Issue 13268
    Remove OrderedTupleType is Issue 13268
    Remove OrderedTupleLiteralExp is Issue 13268
    Remove OrderedTupleLiteralPart is Issue 13268
    Add InstantiationExp.initializationOperation is Issue 19021

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 8.1.14

  • Key: QVT11-29
  • Legacy Issue Number: 12375
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    QVT Operational Mappings claims in the overview section, the use of ListLiteralExpression (for instance to initialize a list), as in the section 8.1.14 (Pag 55) is shown. However, there is no way to represent this literal expression in the abstract syntax, due to: 1. There is no ListLiteralExp in the imperativeOCL package. 2. CollectionLiteralExp (from EssentialOCL) can't be used. There is a way to initialize lists, making use of the asList operator which appears in the Standard Library section (8.3.85 / Pag 112), however this should be clarified. Therefore, two possible solutions could be taken: Suggestion 1: Create a ListLiteralExp which should extend CollectionLiteralExp (From EssentialOCL). Suggestion 2: Update the overview examples, to properly ilustrate how to initialize lists. Besides, the grammar ( Pag 124) )should be consequently changed as well. (List

    { 1, 2, 3, }

    literal expressions wouldn't be supported).

  • Reported: QVT 1.0 — Tue, 8 Apr 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

MOF QVT 1.0, 8.2.2.22, Unclear specification of Unpack notation shorthand

  • Key: QVT11-28
  • Legacy Issue Number: 12374
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Section 8.2.2.22 provides no guidance on the meaning of:

    var x:X;
    var y:Y;
    var z:Z;
    ...
    var (x:X,y,z) := self.foo();

    [If one of the variables in the left hand side, does exist ...]

    Possible interpretations

    a) x:X is always a syntactical shorthand.

    Therefore the above is a shorthand for:

    var x:X;
    var y:Y;
    var z:Z;
    ...
    var x:X; var (x,y,z) := self.foo();

    and consequently there is duplicate variable definition to be
    reported as a semantic error.

    b) x:X is a convenience type check assertion

    Therefore the above is a shorthand for:

    var x:X;
    var y:Y;
    var z:Z;
    ...
    var (x,y,z) := self.foo();

    with a successful validation of type consistency.

    c) x:X is not available as a shorthand

    Therefore the above is a syntax error.

    ------------------------------------

    Interpretations b) and c) require semantic knowledge to resolve syntactic
    sugar.

    Interpretation a) is an unambiguous syntax shorthand that could be more
    clearly
    described by:

    "The following example demonstrates a shorthand in which variables are both
    declared
    and assigned.

    var (x:X,y:Y,z) := self.foo();

    Any variable name qualified by a type name is both a declaration and an
    assignment,
    with all declarations proceding the unapack assignment.
    The above example should therefore be analyzed as:

    var x:X; var y:Y; var (x,y,z) := self.foo();"

    ---------------------------------------------------------------------

    Recommend interpretation a) with the above textual clarification.

  • Reported: QVT 1.0 — Tue, 8 Apr 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP emof.ecore

  • Key: QVT11-32
  • Legacy Issue Number: 12520
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached.

    'nsURI' for 'EMOF' should be 'http://schema.omg.org/spec/MOF/2.0/emof.xml' rather than 'http:///emof.ecore'
    'name' for 'EMOF' should be 'EMOF' rather than 'emof'
    'name' for 'Property.isID' should be 'isID' rather than 'isId'
    'Factory' should be defined
    'ReflectiveCollection' should be defined
    'ReflectiveSequence' should be defined
    'Comment.body' should be defined
    'Factory.package' should be defined
    'Element.tag' should be undefined
    'eOpposite' for 'Tag.element' should be undefined
    'lowerBound' for 'Operation.class' should be '0' rather than '1'
    'lowerBound' for 'Type.package' should be '0' rather than '1'
    'lowerBound' for 'Property.class' should be '0' rather than '1'
    'ordered' for 'Class.superClass' should be 'false' rather than 'true'
    'ordered' for 'Comment.annotatedElement' should be 'false' rather than 'true'
    'ordered' for 'Element.ownedComment' should be 'false' rather than 'true'
    'ordered' for 'Operation.raisedException' should be 'false' rather than 'true'
    'ordered' for 'Package.nestedPackage' should be 'false' rather than 'true'
    'ordered' for 'Package.ownedType' should be 'false' rather than 'true'
    'ordered' for 'Tag.element' should be 'false' rather than 'true'
    'defaultValueLiteral' for 'Class.isAbstract' should be 'false' rather than undefined
    'defaultValueLiteral' for 'MultiplicityElement.isOrdered' should be 'false' rather than undefined
    'defaultValueLiteral' for 'MultiplicityElement.isUnique' should be 'true' rather than undefined
    'defaultValueLiteral' for 'MultiplicityElement.lower' should be '1' rather than undefined
    'defaultValueLiteral' for 'MultiplicityElement.upper' should be '1' rather than undefined
    'defaultValueLiteral' for 'Property.isComposite' should be 'false' rather than undefined
    'defaultValueLiteral' for 'Property.isDerived' should be 'false' rather than undefined
    'defaultValueLiteral' for 'Property.isReadOnly' should be 'false' rather than undefined
    'Element.container()' should be defined
    'Element.equals(object)' should be defined
    'Element.get(property)' should be defined
    'Element.getMetaClass()' should be defined
    'Element.isSet(property)' should be defined
    'Element.set(property,object)' should be defined
    'Element.unset(property)' should be defined
    'Extent.elements()' should be defined
    'Extent.useContainment()' should be defined
    'Factory.convertToString(dataType,object)' should be defined
    'Factory.create(metaClass)' should be defined
    'Factory.createFromString(dataType,string)' should be defined
    'ReflectiveCollection.add(object)' should be defined
    'ReflectiveCollection.addAll(objects)' should be defined
    'ReflectiveCollection.clear()' should be defined
    'ReflectiveCollection.remove(object)' should be defined
    'ReflectiveCollection.size()' should be defined
    'ReflectiveSequence.add(index,object)' should be defined
    'ReflectiveSequence.get(index)' should be defined
    'ReflectiveSequence.remove(index)' should be defined
    'ReflectiveSequence.set(index,object)' should be defined
    'Type.isInstance(object)' should be defined
    'URIExtent.contextURI()' should be defined
    'URIExtent.element(uri)' should be defined
    'URIExtent.uri(element)' should be defined
    Unnavigable 'opposite' of 'Class.superClass' should be modelled
    Unnavigable 'opposite' of 'Element.ownedComment' should be modelled
    Unnavigable 'opposite' of 'Package.nestedPackage' should be modelled
    Unnavigable 'opposite' of 'Property.opposite' should be modelled

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP qvt_metamodel.emof.xml

  • Key: QVT11-31
  • Legacy Issue Number: 12519
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in qvt_metamodel.emof.xml in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the EMOF was notionally auto-generated.

    EMOF files resolving these anomalies are attached.

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

errors and anomalies in QVT_1.0.mdl in the 07-07-08 ZIP

  • Key: QVT11-30
  • Legacy Issue Number: 12518
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in QVT_1.0.mdl in the 07-07-08 ZIP.

    Since the diagrams are printed from QVT_1.0.mdl all the QVT problems also
    occur in 08-04-03.

    Textual errors in 08-04-03 cannot be analyzed automatically. There are
    so many that a thorough proof read is required combined with a statement
    that the diagrams only are normative

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    The QVT 1.0 diagrams and models were originally from the models in the QVT_1.0.mdl file. The
    diagrams rely on proprietary tooling. Unfortunately some independent evolution occurred and so there
    were many inconsistencies.
    Consistent Ecore/EMOF files from Eclipse were endorsed as the QVT 1.1 non-normative files.
    For QVT 1.2, the primary non-normative files are UML models derived from the QVT 1.1 Ecore files.
    The diagrams are redrawn from the UML using the Open Source Papyrus tool. The diagrams are
    drawn to assist understanding rather than to squeeze as much as possible into the useable area. The
    redrawn diagrams are therefore larger/more numerous. (Unfortunately Papyrus does not support

    {ordered} so {ordered}

    text is added manually.) In all other respects diagrams and UML non-normative
    files should be consistent.
    The multiplicity of unnavigable opposites was not present in the Ecore files and so is set to 0..1 for
    compositions, and 0..* for non-compositions by the Ecore2UML conversion. This causes a few 1
    multiplicities to change to 0..1. The 1 multiplicities were needlessly restrictive prohibiting re-use of
    classes, so the 0..1 seems better. Perhaps we should have an issue to change navigable containers
    too.
    TemplateParameterType is missing from the diagrams since it is not preset in the non-normative files.
    TemplateParameterType has no practical utility implementations are required to work magic for
    templates types which may or may not involve the TemplateParameterType class.
    I find that when I consult the specification, I want to see all the diagrams, which is hard when they are
    spread thoughout the AS section. All diagrams are therefore brought to the start of their AS section.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtcore.ecore

  • Key: QVT11-37
  • Legacy Issue Number: 12525
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    These changes mostly affect non-normative files which were corrected when QVT 1.1 issued revised
    files based on Eclipse QVT contributions. However a few changes remain to be resolved in the main
    text. CorePattern.variable is Issue 10938
    Assignment.slotExpression is Issue 11108

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtrelation.ecore

  • Key: QVT11-36
  • Legacy Issue Number: 12524
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    These changes mostly affect non-normative files which were corrected when QVT 1.1 issued revised
    files based on Eclipse QVT contributions. However a few changes remain to be resolved in the main
    text.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP qvtbase.ecore

  • Key: QVT11-34
  • Legacy Issue Number: 12522
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached.

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    These changes mostly affect non-normative files which were corrected when QVT 1.1 issued revised
    files based on Eclipse QVT contributions. However a few changes remain to be resolved in the main
    text.
    No: Domain.typedModel lowerbound of 0 is correct; primitive domains have no TypedModel
    Rule.transformation lowerbound change is Issue 11825.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP essentialocl.ecore

  • Key: QVT11-33
  • Legacy Issue Number: 12521
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached.

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Errors and anomalies in QVT 1.0 07-07-08 ZIP qvttemplate.ecore

  • Key: QVT11-35
  • Legacy Issue Number: 12523
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Use of automated tooling to support comparison of the models developed
    initially as part of the Eclipse GMT/UMLX project and being transferred to the
    Eclipse QVT Declarative/QVT Operational Mappings Projects reveals the following
    errors and anomalies in emof.ecore in the 07-07-08 ZIP.

    Note that these errors and anomalies are not the same as those separately reported
    for the QVT_1.0.mdl from which the Ecore was notionally auto-generated.

    An Ecore file resolving these anomalies is attached.

  • Reported: QVT 1.0 — Fri, 6 Jun 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    These changes mostly affect non-normative files which were corrected when QVT 1.1 issued revised
    files based on Eclipse QVT contributions. However a few changes remain to be resolved in the main
    text.
    CollectionTemplateExp.rest/member lowerBound is Issue 11826.
    PropertyTemplateItem.value multiplicity is right in diagram not text

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 8.2.2.22

  • Key: QVT11-27
  • Legacy Issue Number: 12373
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    UnpackExp should not compose targetVariable There are a lot of issues in this section: 1. name of Variable association was not updated to targetVariable. 2.

    {ordered}

    is missed. 3. variable should not compose. They should refer for instance a previously defined VarInitExp::referredVariable. 4. Parenthesis are missed in the first example (notation section). 5. Remember to update the diagram in figure 8.6 (pag 86). Note: These proposed changes are needed if you want to allow unpacking OrderedTuples using previously defined variables (which makes sense). Another (worst) alternative is forcing to declare new variables . In this case, the notation section should be changed.

  • Reported: QVT 1.0 — Mon, 7 Apr 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT 1.0 9.* Missing query concrete syntax

  • Key: QVT11-40
  • Legacy Issue Number: 12571
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    There is no support for queries in the QVT Core concrete syntax.

    Suggest: re-use the concrete syntax of QVT Relation, except that the query
    is defined at global scope and so must be qualified by the name of a
    transformation defined in the same source unit.

    example:

    query txName::getStringSize (someString:String): Integer

    { someString -> size() }
  • Reported: QVT 1.0 — Fri, 11 Jul 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Simple change. Names are left vague pending resolution of Issue 10935.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 86: Notation Section 8.2.1.23 ResolveExp

  • Key: QVT11-60
  • Legacy Issue Number: 13275
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: // shorthand for mylist->forEach i.late resolve(Table)
    discussion: EBNF and forExp suggest using always braces to enclose the forExp body.
    Suggestion: Enclose the forEach's body with '

    {' and '}

    '.

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 84: Notation Section 8.2.1.22 MappingCallExp

  • Key: QVT11-59
  • Legacy Issue Number: 13274
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: ->forEach (cl) cleaningTransf.map removeDups(cl);
    discussion: EBNF and forExp suggest using always braces to enclose the forExp body.
    Suggestion: Enclose the forEach's body with '

    {' and '}

    '. Note that there are two forExps in this section

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 83: Notation Section 8.2.1.22 MappingCallExp

  • Key: QVT11-57
  • Legacy Issue Number: 13272
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: This is called the “collect” shorthand
    discussion: Since OCL provides a "collect" shorthand (f.i. doing aCollection.anOperationCall()), I would rather call "xcollect" shortand to avoid confusions.
    suggestion: Replate "collect" by "xcollect".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    OCL provides an 'implicit collect' shorthand, so 'imperative collect' is a better contrast

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 83: Section 8.2.1.22 MappingCallExp

  • Key: QVT11-56
  • Legacy Issue Number: 13271
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: Superclasses OperationCallExp
    discussion: It should extend ImperativeCallExp instead. The diagram is well showed.
    suggestion: Replate "OperationCallExp" by "ImperativeCallExp".

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Duplicates in part Issue 12527.
    Disposition: See issue 12527 for disposition

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 75: Section 8.2.1.14 ContextualProperty

  • Key: QVT11-55
  • Legacy Issue Number: 13270
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    missed text: there is a missed text related to the initExpression association.
    discussion: If we have a look to the diagram in figure 8.2, we may realize that a description of the initExpression association is missed.
    suggestion: include the following text in the association's description:
    initExpression: OclExpression [0..1]

    {composes}

    An optional OCL Expression to initialize the contextual property.

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes.
    Already correct in the QVT 1.1 models

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Page 83: Notation Section 8.2.1.22 MappingCallExp

  • Key: QVT11-58
  • Legacy Issue Number: 13273
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    Problem's text: // shorthand of self.ownedElement->xcollect i.map class2table();
    discussion: It seems that the imperativeIteratExp has not been correctly notated.
    suggestion: replace the text above by: // shorthand of self.ownedElement->xcollect(i | i.map class2table());

  • Reported: QVT 1.0 — Thu, 15 Jan 2009 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

QVT 1.0 Section 7,8,9,10 : Navigating non-navigable opposite roles

  • Key: QVT11-14
  • Legacy Issue Number: 11341
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Issue : QVT 1.0 Section 7,8,9,10 : Navigating non-navigable opposite roles

    UML models drawn with Rose allow an opposite role to be defined for a
    uni-directional role. This practice is common but haphazard in UML Infrastructure,
    EMOF, OCL and QVT specification diagrams.

    However EMOF provides only the (run-time) usage of the model and so any
    EMOF (or Ecore) model generator must strip non-navigable opposite roles.

    QVT matches models at compile-time and matching has no inherent need to
    observe navigation constraints. This is amply demonstrated by the Rel2Core
    transformation that makes extensive use of, for instance, the inverse Key to Class
    relationship.

    ----------------------------------

    Problem: some QVT transformations require names for non-navigable opposite roles,
    but those names cannot be present in layered multi-package EMOF meta-models.

    The Rel2Core transformation of Section 10.3 cannot be implemented with QVT 1.0.

    ----------------------------------

    Abandoning EMOF (or Ecore) compliance in favour of perhaps CMOF seems unacceptable.

    Changing EMOF (or Ecore) to incorporate opposite roles is not possible because
    an EMOF specification cannot be extended to include the opposite role of every
    meta-model that will ever exist.

    Even if it was, there would be a substantial delay until meta-modelling tools
    adopted the change and a problem with poor standardisation and global
    non-interference of opposite rolenames.

    QVT must therefore support definition of non-navigable role names as part of a
    transformation. ModelMorf provided a very practical concrete syntax solution,
    whereby the reserved operation opposite(qualified-role-name) could be used as
    the missing opposite role-name wherever a forward role-name could be used.

    An upward compatible abstract syntax requires an additional is-opposite qualifier
    for each referred property.

    So for

    QVTCore::PropertyAssignment add isOpposite:Boolean[0..1] default false.

    QVTTemplate::PropertyTemplateItem add isOpposite:Boolean[0..1] default false.

    QVTRelation::Key add oppositeParts:Property[0..*]

    { composed }
    and possibly relax the lower bound for
    QVTRelation::Key add parts:Property[0..*] { composed }

    with the constraint that parts.size() + oppositeParts.size() > 0

    Perhaps QVTOperational::Module needs an additional oppositeConfigProperty and
    QVTOperational::ContextualProperty needs an additional isOpposite too.

  • Reported: QVT 1.0 — Mon, 10 Sep 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section 7.11.2.3: Empty CollectionTemplateExp is useful

  • Key: QVT11-19
  • Legacy Issue Number: 11826
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    7.11.2.3 and Figure 7.6 both impose a lowerBound of 1 on CollectionTemplateExp.member and CollectionTemplateExp.rest.

    However, the concrete syntax permits an empty match. This empty match is exploited in the
    UnsharedWhenVarsToMgVars relation in Section 10.

    Suggest:

    Change CollectionTemplateExp.member to [0..*]
    Change CollectionTemplateExp.rest to [0..1]

    Add a sentence to clarify the empty match semantics.

  • Reported: QVT 1.0 — Mon, 17 Dec 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    yes

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Inconsistent Rule.transformation multiplicity/composes for Mapping

  • Key: QVT11-18
  • Legacy Issue Number: 11825
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Mapping is a Rule and Rule.transformation has unit multiplicity and is a container.
    Therefore Rule.context can never be a container.

    This could be fixed in a number of ways:

    Fix 1: Change Rule.transformation to 0..1
    --> allow hierarchical Rule containment
    --> all Transformation rules are distinctly named
    – no representation change
    – minor semantic relaxation for QVTr/QVTo
    – minor semantic surprise for QVTc - composed mapping has null Mapping.transformation.

    Fix 2: Change Rule.context to not composes
    --> require flat Rule containment
    --> Transformation can have multiple unnamed rules
    – no change for QVTc/QVTo
    – representation change for QVTc

    Fix 3: Change opposite of Transformation.rule from Rule.transformation[1] to Rule.context[1]
    Redefine Rule.transformation[1] as a derived property
    Remove mapping.context (inherited from Rule)
    – Doesn't work: context needs to be NamedElement to be either Rule or Transformation

    Fix 4: Change opposite of Transformation.rule from Rule.transformation[1] to Rule.owningTransformation[0..1]
    Redefine Rule.transformation[1] as a derived property
    Rule.transformation := owningTransformation
    Mapping.transformation := if context then context.transformation else owningTransformation endif
    – no representation change
    – minor semantic relaxation for QVTr/QVTo

    Recommend 4.

  • Reported: QVT 1.0 — Mon, 17 Dec 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Rule.transformation changed to 0..1 in QVTCore.xml for QVT 1.1.
    Fix 4 doesn't seem that wonderful, so go with the obvious Fix 1. And why prohibit all reuse of Rule
    outside a Transformation?

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Issue against QVT ptc/07-07-07 : clause 7.2.3

  • Key: QVT11-26
  • Legacy Issue Number: 12368
  • Status: closed  
  • Source: NIST ( Mr. Peter Denno)
  • Summary:

    Text of Clause 7.2.3 is unclear:

    Suggested rewrite:

    (1) Add the following as the first two sentences of the first
    paragraph.

    "In the evaluation of a Transformation, one or more domains are
    specified as target. The phrase 'executing in the direction of [some
    domain]' refers to these domains."

    Then change a few words in the paragraph as suggest by the text in []
    below:

    "Whether or not the [change "the" to "a"] relationship maybe [should
    be "is"] enforced is determined by the target domain, which may be
    marked as checkonly or enforced. When a transformation
    [change "transformation" to "relation"] is enforced
    [change "enforced" to "evaluated"] in the direction of a checkonly
    domain, it is simply checked to see if [change "if" to "whether"]
    there exists a valid match in the relevant model that satisfies the
    relationship. When a transformation executes in the direction of the
    model of an enforced domain, if checking fails, the target model is
    modified so as to satisfy the relationship, i.e. a
    check-before-enforce semantics."

    [Strike the words beginning with "i.e." "check-before-enforce" is new
    terminology that is neither defined nor helpful.]

  • Reported: QVT 1.0 — Thu, 3 Apr 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Yes, we can certainly try to be clearer.

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Issue against QVT ptc/07-07-07 : relational grammar

  • Key: QVT11-25
  • Legacy Issue Number: 12367
  • Status: closed  
  • Source: NIST ( Mr. Peter Denno)
  • Summary:

    Section 7.13.5 Relation BNF

    The grammar rule for template is incorrect (It does not allow a
    template to have embedded within it another template. The example in
    Appendix A will not compile with such a grammar.)

    It says:

    <propertyTemplate> ::= <identifier> '=' <OclExpressionCS>

    It should says:
    <propertyTemplate> ::= <identifier> '=' ( <template> |
    <oclExpressionCS

  • Reported: QVT 1.0 — Thu, 3 Apr 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 7.11.3

  • Key: QVT11-16
  • Legacy Issue Number: 11685
  • Status: closed  
  • Source: Siegfried Nolte ( Siegfried Nolte)
  • Summary:

    It is not clear when and how you choose a top-level and not-top-level relation. Primitive domains, the reason for them and the use of them, are not explained although they are used in the Relation language example A1.1.1

  • Reported: QVT 1.0 — Mon, 26 Nov 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    'top' is explained clearly in Section 7.2.2 Top-level Relations.
    'primitive' is a bit of a secret

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 7.13

  • Key: QVT11-15
  • Legacy Issue Number: 11602
  • Status: closed  
  • Source: Vienna University of Technology ( Johann Oberleitner)
  • Summary:

    have built a transformation engine based on QVT relations. The QVT relations example in Annex A contains a 'function' PrimitiveTypeToSqlType at the end of the example in textual syntax. This example is the only relations example in the whole spec. Nowhere is the semantics of 'function' defined nor contains the grammar of the concrete syntax a function keyword. However, 'query' is defined. Is 'function' another name for 'query'?

  • Reported: QVT 1.0 — Wed, 10 Oct 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    QVT Base has a Function.queryExpression.
    QVT 1.1 added the mapping from queryCS to Function.
    Not 'nowhere' but we can do better

  • Updated: Fri, 6 Mar 2015 20:58 GMT

9.17.12, EnforcementOperation.operationCallExp should be composes

  • Key: QVT11-17
  • Legacy Issue Number: 11708
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    9.17.12 EnforcementOperation, Figure 9.3
    ----------------------------------------

    The definition: "operationCallExp : OperationCallExp[1]"
    and the corresponding "*" enforcementOperation multiplicity in
    Figure 9.3 provides a consistent definition of a shared reference
    to a Call expression. There is no indication of where this
    expression might be contained. It is unlikely that such
    expressions can usefully be shared since they must refer to
    invocation-site-specific variables.

    Therefore:

    Change the definition to:

    operationCallExp : OperationCallExp[1]

    {composes}

    and draw the composition with 0..1 parent multiplicity.

  • Reported: QVT 1.0 — Mon, 3 Dec 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    Simple change already in QVTcore.xml

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 7.13.3 / 8.4.2

  • Key: QVT11-23
  • Legacy Issue Number: 12260
  • Status: closed  
  • Source: Forschungszentrum Karlsruhe ( Jens Kübler)
  • Summary:

    The specification introduces comments by concrete syntax. Comments within the abstract syntax are not considered. This is i.e. undesirable for automated analysis of software product quality to which transformations are subject. One would again need to analyze the AST instead of the transformation metamodel. So I propose to introduce comments for transformations.

  • Reported: QVT 1.0 — Tue, 4 Mar 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

There is a reference to a figure that does not exist : figure 1.

  • Key: QVT11-22
  • Legacy Issue Number: 12200
  • Status: closed  
  • Source: THALES ( Eric Maes)
  • Summary:

    There is a reference to a figure that does not exist : figure 1.

  • Reported: QVT 1.0 — Fri, 25 Jan 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 8.4.7

  • Key: QVT11-24
  • Legacy Issue Number: 12362
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    The grammar rule used to produce a forExp doesn't coincide with the notation specified in the abstract syntax section for it (Pag 89, Section 8.2.2.6). The rule production in the grammar is wrong. Suggestion: Change the production rule: <for_exp> ::= ('forEach' | 'forOne') '(' <iter_declarator_list> ('|' <expression> )? ')' <expression_block>

  • Reported: QVT 1.0 — Tue, 1 Apr 2008 04:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 8.2.1.7

  • Key: QVT11-21
  • Legacy Issue Number: 12198
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    A clarification is needed in the text because it says "A variable parameter is an abstract concept..." and it can lead to confussion. A variable parameter can not be abstract because we could not create VarParameters for Helpers or Constructors (We could just create ModelParameters or MappingParameters). Suggestion: Remove the word "abstract".

  • Reported: QVT 1.0 — Fri, 25 Jan 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Section: 8.2.1.6

  • Key: QVT11-20
  • Legacy Issue Number: 12173
  • Status: closed  
  • Source: Open Canarias, SL ( Adolfo Sanchez-Barbudo Herrera [X] (Inactive))
  • Summary:

    The extraCondition association needs revision: 1. The name does match with the diagram. 2. The cardinality is incorrect. Suggestion: Change the text with the following line: additionalCondition: OclExpression [*]

    {composes, ordered}

  • Reported: QVT 1.0 — Mon, 14 Jan 2008 05:00 GMT
  • Disposition: Resolved — QVT 1.1
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:58 GMT

Consider using the case keyword within swith expression

  • Key: QVT-43
  • Legacy Issue Number: 11063
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Consider using the 'case' keyword within swith expressions to have a similar
    notation as in other languages.

  • Reported: QVT 1.0b1 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Section8.2.2.8 SwitchExp, replace the code after "following syntax pattern" by
    switch

    { case cond1 ? exp1; case cond2 ? exp2; … else ? expN; }

    For the change in the BNF grammar, see resolution of issue 10026.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Argument list missing in raise expression

  • Key: QVT-42
  • Legacy Issue Number: 11062
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The RaiseExp does not allow the possibility to pass ramaters to the exception.
    Also, the use of strings instead of exception class references should be clarified

  • Reported: QVT 1.0b1 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 10.2.2.14 RaiseExp, add the following property:
    argument : OclExpression [0..1]

    {composes}

    - The argument accompagning the raised exception
    (2) Apply update of diagram Figure 8.6 as defined in Appendix D Updated Diagrams -2nd ballot..
    (3) Within the Notation sub-section, after "can be provided a simple strings." Add the sentence: In that case the implicit referred exception is the user Exception defined in the QVT standard library and the string is the argument of the raise expression.
    (4) Within the Section 8.3.1 Predefined Types, add, after Status definition, a new sub-section named Exception with the following definition:
    "This M1 class named Exception represents a base class for all instantiated Exceptions. It is itself an instance of the Exception metatype.

    For any impact in BNF see resolution of issue 10026.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Consider using the package keyword instead of metamodel

  • Key: QVT-44
  • Legacy Issue Number: 11064
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    In Section 8.4.5 Notation for metamodels, the keyword 'package' could be more appropriate
    to represent nested packages within a metamodel definition or even a package containing
    only tags

  • Reported: QVT 1.0b1 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In section 8.4.5, replace "A MOF Package is notated using the metamodel keyword followed by a name" by "A MOF Package is notated either using the 'package' keyword or the 'metamodel' keyword followed by a name. Both notations are equivalent when translating to the corresponding EMOF metamodel representation. The 'metamodel' keyword should preferably be used when referring to a top-level package that represents a complete metamodel.

    For the impact in BNF grammar, see issue resolution for 10026.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Missing notation to indicate the enforced direction in mapping operations

  • Key: QVT-39
  • Legacy Issue Number: 11057
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The enforced direction cannot be indicated when the 'refined' keyword is used to
    Indicate that a mapping operation refines a relation

  • Reported: QVT 1.0b1 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 8.2.1.1 OperationalTransformation, replaces the sentence starting with "When an operational transformation refines a relational transformation, …" by the following sentence: "An operational transformation may be explicitly declared as the 'refinement' of a relational transformation. In that case each model parameter in the operational transformation corresponds to a typed model in the relational transformation. The enforced direction is the one corresponding to the output parameter of the operational transformation". Also remove constraint concerning enforcedDirection.
    (2) In Section 8.2.1.1 OperationalTransformation, removes the enforcedDirection property definition.

    Note: This resolution also implies removing the first constraint in Constraints section of 8.2.1.1 section.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Some errors in BNF grammar of the operational part

  • Key: QVT-38
  • Legacy Issue Number: 11026
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The grammar defined by the resolution of issue 10923 still contains some errors.
    For instance the expression is missing in the <elif_part> definition. Also some
    uniformity could be achieved in the names of BNF rules, like using always "_header"
    suffix instead of using sometiimes "_header" and sometimes "_h".

    ---------------------------------------------------------------------------------------------------------------------------

  • Reported: QVT 1.0b1 — Fri, 18 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    This resolution replaces the resolution given by issue 10923 (2nd Ballot)
    (1) Replaces the BNF grammar with the following:

    // keywords

    Bag, Collection, Dict, OrderedSet, Sequence, Set, Tuple, abstract,
    access, and, any, assert, blackbox, break, case, class, collect,
    collectNested, collectOne, collectselect, collectselectOne,
    composes, compute, configuration, constructor, continue, datatype,
    default, derived, disjuncts, do, elif, else, end, endif,
    enum, except, exists, extends, exception, false, forAll, forEach ,
    forOne, from, helper, if, implies, import , in, inherits, init,
    inout, intermediate, invresolve, invresolveIn, invresolveone,
    invresolveoneIn , isUnique, iterate, late, let, library, literal,
    log, main, map, mapping, merges, metamodel, modeltype, new, not,
    null, object, one, or, ordered, out, package, population, primitive, property,
    query, raise, readonly, references, refines, reject, resolve, resolveIn, resolveone,
    resolveoneIn, return, select, selectOne, sortedBy, static,
    switch, tag, then, transformation, true, try, typedef, unlimited,
    uses, var, when, where, while, with, xcollect , xmap, xor, xselect

    // start rule
    <topLevel> ::= <import>* <unit_element>*

    <import> ::= 'from' <unit> 'import' (<identifier_list> | '*') ';'

    'import' <unit> ';'
    <unit> ::= <identifier> ('.' <identifier>)*

    <identifier_list> ::= <identifier> (',' <identifier>)*

    // definitions in a compilation unit
    <unit_element>
    ::= <transformation>

    <library>
    <access_decl>
    <modeltype>
    <metamodel>
    <classifier>
    <property>
    <helper>
    <constructor>
    <entry>
    <mapping>
    <tag>
    <typedef>

    // Transformation and library definitions

    <transformation> ::= <transformation_decl> | <transformation_def>
    <transformation_decl> ::= <transformation_h> ';'
    <transformation_def> ::= <transformation_h> '

    {' <module_element>* '}' ';'?

    <library> ::= <library_decl> | <library_def>
    <library_decl> ::= <library_h> ';'
    <library_def> ::= <library_h> '{' <module_element>* '}

    ' ';'?

    // Transformation header
    <transformation_h> ::= <qualifier>* 'transformation' <identifier>
    <transformation_signature> <transformation_usage_refine>?
    <transformation_usage_refine> ::= <module_usage> | <transformation_refine>
    <transformation_signature> ::= <simple_signature>
    <transformation_refine> ::= 'refines' <moduleref>

    // Library header
    <library_h> ::= 'library' <identifier> <library_signature>? <module_usage>?
    <library_signature> ::= <simple_signature>

    // import of transformation and library
    <module_usage> ::= <access_usage> | <extends_usage>
    <access_usage> ::= 'access' <module_kind>? <moduleref_list>
    <extends_usage> ::= 'extends' <module_kind>? <moduleref_list>
    <module_kind> ::= 'transformation' | 'library'
    <moduleref_list> ::= <moduleref> (',' <moduleref>)*
    <moduleref> ::= <scoped_identifier> <simple_signature>?
    <access_decl> ::= <access_usage> ';'

    // module definitions
    <module_element>
    ::= <classifier>

    <property>
    <helper>
    <constructor>
    <entry>
    <mapping>
    <tag>
    <typedef>
    <access_decl>

    // general purpose grammar rules
    <qualifier> ::= 'blackbox' | 'abstract' | 'static'
    <complete_signature> ::= <simple_signature> (':' param_list)?
    <simple_signature> ::= '(' <param_list>? ')'
    <param_list> ::= <param> (',' <param>)*
    <param> ::= <param_direction>? <declarator>
    <param_direction> ::= 'in' | 'inout' | 'out'
    <simple_declarator> ::= <typespec>

    <scoped_identifier> ':' <typespec>
    <declarator> ::= <typespec> <init_part>?
    <scoped_identifier> ':' <typespec> <init_part>?
    <simple_declarator_list> ::= <simple_declarator> (',' <simple_declarator>)*
    <declarator_list> ::= <declarator> (',' <declarator>)*
    <declarator_semi_list> ::= <declarator> (';' <declarator>)*
    <init_part> ::= <init_op> <expression>
    <init_op> ::= '='
    ':=' '::='
    <typespec> ::= <type_reference> <extent_location>?
    <type_reference> ::= <scoped_identifier>
    <complex_type>
    <extent_location> ::= '@' <identifier>
    <complex_type> ::= <complex_type_key>
    <collection_key> '(' <typespec> ')'
    'Tuple' '(' <declarator_list> ')'
    'Dict' '(' <typespec> ',' <typespec> ')'
    <complex_type_key> ::= <collection_key>
    'Dict' 'Tuple'
    <collection_key> ::= 'Collection'
    'Set' 'OrderedSet' 'Sequence' 'Bag'
    'List'
    <scoped_identifier> ::= <identifier> ('::' <identifier>)*
    <scoped_identifier_list> ::= <scoped_identifier> (',' <scoped_identifier>)*
    <expression_list> ::= <expression_semi_list> ';'?
    <expression_semi_list> ::= <expression> (';' <expression>)*
    <expression_comma_list> ::= <expression> (',' <expression>)*
    <expression_block> ::= ' {' <expression_list>? '}

    '
    <expression_statement> ::= <expression> ';'

    <expression_block> ';'?

    // model types compliance and metamodel declarations
    <modeltype> ::= 'modeltype' <identifier> <compliance_kind>?
    'uses' <packageref_list> <modeltype_where>? ';'
    <modeltype_where> ::= 'where' <expression_block>
    <packageref_list> ::= <packageref> (',' <packageref>)*
    <packageref> ::= (<scoped_identifier> ( '(' <uri> ')' )? | <uri>)
    <compliance_kind> ::= <STRING> // like: "strict" and "effective"
    <uri> ::= <STRING>

    // Syntax for defining explicitly metamodel contents
    <metamodel> ::= <metamodel_decl> | <metamodel_def>
    <metamodel_decl> ::= <metamodel_h> ';'
    <metamodel_def> ::= <metamodel_h> '

    {' <metamodel_element>* '}

    ' ';'?

    <metamodel_h> ::= ('metamodel' | 'package') scoped_identifier
    <metamodel_element> ::= <classifier> | <enumeration> | <tag>

    <classifier> ::= <classifier_decl> | <classifier_def>
    <classifier_decl> ::= <classifier_h> ';'
    <classifier_def> ::= <classifier_h> '

    {' <classifier_feature_list>? '}

    ' ';'?

    <classifier_h> ::= <classifier_info> <scoped_identifier> <classifier_extension>?
    <classifier_info> ::= 'datatype'

    'primitive' 'exception'
    'intermediate'? <qualifier>* 'class'
    <classifier_extension> ::= 'extends' <scoped_identifier_list>
    <classifier_feature_list> ::= <classifier_feature> (';' <classifier_feature>)* ';'?
    <classifier_feature> ::= <classifier_property>
    <classifier_operation> <tag>

    <classifier_property> ::= <feature_qualifier>? <declarator> <multiplicity>?
    <opposite_property>?
    <feature_qualifier> ::= <stereotype_qualifier>? <feature_key>*
    <feature_key> ::= 'composes' | 'references' | 'readonly' | 'derived' | 'static'
    <stereotype_qualifier> ::= '<<' <identifier_list> '>>'
    <multiplicity> ::= '[' multiplicity_range ']'
    <multiplicity_range> ::= <INTEGER> | '' | <INTEGER> '...' <INTEGER> | <INTEGER> '...' ''
    <classifier_operation> ::= <feature_qualifier>? <declarator> <complete_signature>

    <enumeration> ::= <enumeration_h> ';'

    <enumeration_h> ' {' <identifier_list> '}

    ' ';'?

    <enumeration_h> ::= 'enum' <identifier>
    <opposite_property> ::= 'opposites' '~' <identifier> <multiplicity>?

    <tag> ::= 'tag' <tagid> <scoped_identifier> ('=' <tagvalue>)? ';'
    <tagid> ::= <STRING>
    <tagvalue> :: <expression>

    // typedefs
    <typedef> ::= 'typedef' <identifier> '=' <typespec> (typedef_condition)? ';'
    <typedef_condition> ::= '[' <expression> ']'

    // Properties in transformation
    <property> ::= 'intermediate'? <property_key>+ <declarator> ';'
    <property_key> ::= 'derived' | 'literal' | 'configuration' | 'property'

    // Syntax for helper operations
    <helper> ::= <helper_decl> | <helper_simple_def> | <helper_compound_def>
    <helper_header> ::= <helper_info> <scoped_identifier> <complete_signature>
    <helper_info> ::= <qualifier>* <helper_kind>
    <helper_kind> ::= 'helper' | 'query'
    <helper_decl> ::= <helper_header> ';'
    <helper_simple_def> ::= <helper_header> '=' <expression> ';'
    <helper_compound_def> ::= <helper_header> <expression_block> ';'?

    // Syntax for constructors
    <constructor> ::= <constructor_decl> | <constructor_def>
    <constructor_header> ::= <qualifier>* 'constructor' <scoped_identifier>
    <simple_signature>
    <constructor_decl> ::= <constructor_header> ';'
    <constructor_def> ::= <constructor_header> <expression_block> ';'?

    // Syntax for entries
    <entry> ::= <entry_decl> | <entry_def>
    <entry_header> :: 'main' <simple_signature>
    <entry_decl> ::= <entry_header> ';'
    <entry_def> ::= <entry_header> <expression_block> ';'?

    // syntax for mapping operations
    <mapping> ::= <mapping_decl> | <mapping_def>
    <mapping_decl> ::= <mapping_full_header> ';'
    <mapping_def> ::= <mapping_full_header> '

    {' <mapping_body> '}

    ' ';'?
    <mapping_full_header> ::= <mapping_header> <when>? <where>?
    <mapping_header> ::= <qualifier>* 'mapping' <param_direction>?
    <scoped_identifier> <complete_signature> <mapping_extra>*
    <mapping_extra> ::= <mapping_extension> | <mapping_refinement>
    <mapping_extension> ::= <mapping_extension_key> <scoped_identifier_list>
    <mapping_extension_key> ::= 'inherits' | 'merges' | 'disjuncts'
    <when> ::= 'when' <expression_block>
    <where> ::= 'where' <expression_block>
    <mapping_refinement> ::= 'refines' <scoped_identifier>
    <mapping_body> ::= <init_section>? <population_section>? <end_section>?
    <init_section> ::= 'init' <expression_block>
    <population_section> ::= <expression_list>

    'population' <expression_block>
    <end_section> ::= 'end' <expression_block>

    // Expressions

    <expression> ::= <assign_exp>

    <let_exp>
    <var_init_exp>

    <assign_exp> ::= <implies_exp>

    <unary_exp> <assign_op> <expression> <default_val>?
    <unary_exp> <assign_op> <expression_block> <default_val>?

    <assign_op> := ':=' | '::=' | '+=' | '-='

    <default_val> ::= 'default' <assign_exp>

    <implies_exp> ::= <or_exp>

    <implies_exp> 'implies' <or_exp>

    <or_exp> ::= <and_exp>

    <or_exp> <or_op> <and_exp>

    <or_op> ::= 'or' | 'xor'

    <and_exp> ::= <cmp_exp>

    <and_exp> 'and' <cmp_exp>

    <cmp_exp> ::= <additive_exp>

    <cmp_exp> <cmp_op> <additive_exp>

    <cmp_op> ::= '=' | '==' | '<>' | '<' | '>' | '<=' | '>='

    <additive_exp> ::= <mult_exp>

    <additive_exp> <add_op> <mult_exp>

    <add_op> ::= '+' | '-'

    <mult_exp> ::= <unary_exp>

    <mult_exp> <mult_op> <unary_exp>

    <mult_op> ::= '*' | '/' | '%'

    <unary_exp> ::= <postfix_exp>

    <unary_op> <unary_exp>

    <unary_op> ::= '-' | 'not' | '#' | '##' | '*'

    <postfix_exp> ::= <primary_exp>

    <postfix_exp> '(' <arg_list>? ')'
    <postfix_exp> '!'? '[' <declarator_vsep>? <expression> ']'
    <postfix_exp> <access_op>
    (<scoped_identifier>
    <iterator_exp> <block_exp>
    <control_exp> <rule_call_exp>
    <resolve_exp> <resolve_in_exp>)

    <declarator_vsep> ::= <simple_declarator> '|'
    <multi_declarator_vsep> ::= <simple_declarator_list> '|'

    <resolve_exp> ::= <resolve_key> '(' <resolve_condition>? ')'
    <resolve_condition> ::= <declarator> ('|' <expression>)?
    <resolve_key> ::= 'late'? <resolve_kind>
    <resolve_kind> ::= 'resolve' | 'resolveone' | 'invresolve' | 'invresolveone'

    <resolve_in_exp> ::= <resolve_in_key> '(' <scoped_identifier>
    (',' <resolve_condition>)?')'
    <resolve_in_key> ::= 'late'? <resolve_in_kind>
    <resolve_in_kind> ::= 'resolveIn' | 'resolveoneIn' | 'invresolveIn' | 'invresolveoneIn'

    <access_op> ::= '.' | '>' | '!>'

    <primary_exp> ::= <literal>

    <scoped_identifier>
    <if_exp>
    <block_exp>
    <control_exp>
    <rule_call_exp>
    <quit_exp>
    <try_exp>
    <raise_exp>
    <assert_exp>
    <log_exp>
    '(' <expression> ')'

    <literal> ::= <literal_simple>

    <literal_complex>

    <literal_simple> ::= <INTEGER> | <FLOAT> | <STRING>

    'true' 'false' 'unlimited' 'null'

    <literal_complex> ::= <literal_collection>

    <literal_tuple>
    <literal_dict>

    <literal_collection> ::= <collection_key> '

    {' <collection_item_list>? '}

    '

    <literal_tuple> ::= 'Tuple' '

    {' <tuple_item_list>? '}

    '

    <literal_dict> ::= 'Dict' '

    {' <dict_item_list>? '}

    '

    <collection_item_list> ::= <expression_comma_list>
    <tuple_item_list> ::= <declarator_list>
    <dict_item_list> ::= <dict_item> (',' <dict_item>)*
    <dict_item> ::= <literal_simple> '=' <expression>

    <if_exp> ::= 'if' <expression> <then_part>
    <elif_part>* <else_part>? 'endif'
    <then_part> ::= 'then' <if_body>
    <elif_part> ::= 'elif' <if_body>
    <else_part> ::= 'else' <if_body>
    <if_body> ::= <expression> | <expression_block>

    <iterator_exp> ::= <simple_iterator_op> '(' <declarator_vsep>? <expression> ')'

    <multi_iterator_op> '(' <multi_declarator_vsep>? <expression> ')'
    <iterate_exp>

    <simple_iterator_op> ::= 'reject' | 'select' | 'collect' | 'exists'

    'one' 'any' 'isUnique' 'collectNested'
    'sortedBy' 'xselect' 'xcollect'
    'selectOne' 'collectOne'
    'collectselect' 'collectselectOne'

    <multi_iterator_op> ::= 'forAll'

    <iterate_exp> ::= 'iterate' '(' <declarator_list> ';'
    <declarator> '|' <expression> ')'

    <iter_declarator> ::= <declarator>
    <iter_declarator_list> ::= <declarator_list>

    <block_exp> ::= (<object_exp> | <do_exp> | <switch_exp>)

    <object_exp> ::= 'object' ('(' <iter_declarator> ')')? <object_declarator>
    <expression_block>
    <object_declarator> ::= <typespec> | <identifier> ':' <typespec>?

    <do_exp> ::= 'do' <expression_block>

    <switch_exp> ::= 'switch' ('(' <iter_declarator> ')')? <switch_body>
    <switch_body> ::= '

    {' <switch_alt>+ <switch_else>? '}

    '
    <switch_alt> ::= 'case' '(' <expression> ')' <expression_statement>
    <switch_else> ::= 'else' <expression_statement>

    <control_exp> ::= (<while_exp> | <compute_exp> | <for_exp>)

    <while_exp> ::= 'while' '(' (<declarator> ';')? <expression> ')'
    <expression_block>
    <compute_exp> ::= 'compute' '(' <declarator> ')' <expression_block>
    <for_exp> ::= ('forEach' | 'forOne') '(' <iter_declarator_list>
    (';' <declarator>)? ('|' <expression>)? ')' <expression_block>

    <rule_call_exp> ::= ('map' | 'xmap' | 'new' )
    ('(' <declarator> ')')? <scoped_identifier>

    <let_exp> ::= 'let' <declarator_list> 'in' <expression>

    <var_init_exp> ::= 'var' <declarator_list>

    'var' '(' <declarator_list> ')'

    <quit_exp> ::= 'break' | 'continue' | <return_exp>)

    <return_exp> ::= 'return' <expression>?

    <try_exp> ::= 'try' <expression_block> <except>+

    <except> ::= 'except' '(' <scoped_identifier_list> ')' <expression_block>

    <raise_exp> ::= 'raise' <scoped_identifier> ('(' <arg_list>? ')')?
    <arg_list> ::= <expression_comma_list>

    <assert_exp> ::= 'assert' <identifier>? '(' <expression> ')'
    ( 'with' <log_exp> )?

    <log_exp> ::= 'log' '(' <arg_list> ')' ('when' <expression>)?

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Consider adjusting the notation for unpack

  • Key: QVT-41
  • Legacy Issue Number: 11060
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The notation x,y, z = foo() may be difficult to parse. Consider revising it.
    For instance using parenthesis: (x,y,z) = foo().
    Also consider extending this notation to non anonymous tuples

  • Reported: QVT 1.0b1 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    1) In Section 8.2.2.22, add a property named 'source' with the following definition:
    source : OclExpression [1]

    {composes}

    The source expression to be unpacked. The type of the expression should necessarily be an ordered tuple.
    (2) In Section 8.2.2.22, rename the property 'variable' as 'targetVariable'
    (3) In Section 8.2.2.22, in the Notation section, replace all the text by the following:
    The notation is similar to an assignment expression except that the list of variables is in parenthesis and prefixed by the var keyword.
    var (x,y,z) := self.foo(); // assuming 'foo' returns a tuple of three elements
    If one of the variables in the left hand side, does not exist, the notation is a shorthand for declaring the missing variables prior to the unpack expression. In such case, the type of the variables can be given. For instance, in the example above, if 'x' and 'y' does not exist, the expression:
    var (x:X,y:Y,z) := self.foo();
    es equivalent to:
    var x:X; var y:Y; var (x,y,z) := foo();
    (3) Update the diagram 8.6 as given by appendix D

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Inconsistency in definition of TryExp with figure

  • Key: QVT-40
  • Legacy Issue Number: 11059
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The tryBody property is multivalued in the class description but monovalued in the
    Diagram. What is the correct multiplicity?

  • Reported: QVT 1.0b1 — Thu, 24 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In the class description of TryExp, in the property 'tryBody' description add the '

    {composes, ordered}' mention.
    (2) In the class description of TryExp, replaces the exceptBody property by the following:
    exceptClause : CatchExp [*] {composes, ordered}

    The exception clauses providing the code to execute in case of failure.
    (3) In the class description of TryExp, removes the 'exception : Type' property description.
    (4) Replaces the exceptBody property by the following:
    exceptClause : CatchExp [*]

    {composes, ordered}
    The exception clauses providing the code to execute in case of failure.
    (5) After the section describind the TryExp, add a new section to describe the CatchExp class with the following content.:
    """
    A catch expression represents the the code to be executed when a exception matching a given list of exception types is fired durin the execution of the containing try expression.
    Superclasses
    ImperativeExpression
    Associations
    exception : Type [*] {ordered}
    The list of exceptions being treated by this catch handler.
    body : OclExpression [*] {composes, ordered}

    The list of expressions to execute in sequence.
    Notation:
    The notation uses the 'except' keyword with the list of exception types in parenthesis and the body in braces.
    except (exception1,exception2)

    { expression1; … }

    (5) Update Figure 8.6 anf Figure 8.3 using the new version of Appendix D of this report.

    Remark: For the BNF grammar modification see resolution of 10026.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Missing text for notation for class properties in Section 8.4.6

  • Key: QVT-37
  • Legacy Issue Number: 11025
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    In 8.4.5 the text describes the notation for defining classes. However the notation
    For describing properties within classes is not indicated. Also notation for primitive
    data type is not indicated

  • Reported: QVT 1.0b1 — Fri, 18 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 8.4.5 replace the sentence:
    "The properties of a class are notated using a declarator made of: a name, a type, optional property qualifiers (derived, static, …) and a initialisation expression.
    isStatic : Boolean = 0;
    "
    By the following, text:

    "The properties of a class are notated using a declarator made of: a name, a type, optional property qualifiers and an optional initialisation expression.
    The general syntax pattern is:

    <qualifier>* <propname> ':' <typespec> ('=' <init>)? '<multiplicity>'? 'ordered'?
    (opposites <propname>)?

    For properties typed by primitive types or collection of primitive types, the valid property qualifiers are 'derived' and 'readonly' to represent respectively a derived attribute or a readonly attribute. When provided, the initialization value for a derived attribute represents the expression used to compute the value of the derived property.

    The syntax of multiplicity specification follows the regular convention from UML, where brackets sourrounds the definition (such as [0..1], [1], [*] and [0..*]). When absent the [0..1] multiplicity is assumed.

    Examples:
    isStatic : Boolean = 0;
    values : Sequence(String);
    derived size : Integer = self.ownedElement->size();

    To indicate that an attribute acts as a qualifying identifier for the class, a stereotype qualifier named 'id' is used. The syntax for stereotyped qualifiers is:
    '<<' <IDENTIFIER> (',' <IDENTIFIER>)? '>>'
    Example: <<id> uuid:String [1]; // a mandatory qualifying uuid attribute

    For properties referencing non primitive types, the same syntax is used except that the 'composes' or 'references' qualifier is used to distinguish between composite or non composite association ends. The 'opposites' keyword is used to indicate the opposite property if any.

    Example:
    composes ownedElement : Element [*] ordered opposites namespace;
    references usedElement : Element [*];

    (2) In Section 8.4.5, before "an enumeration type…" add the following sentence "A primitive type is declared using the 'primitive' keyword.
    'primitive' <primitivetypename>.
    Example: primitive Double;

    (3) In Section 8.4.5, after presenting the notation for primitive types, adds the following sentence.
    An exception is declared using the 'exception' keyword followed by the name of the exception. Inheritance between exceptions is introduced usin the 'extends' keyword.
    Example: exception VeryStrangeException extends UnexpectedException;

    Remark: For the BNF grammar modification see resolution of 10026.
    Note: Fix in resolution text: (opposites <propname>)? Should be replaced by
    (opposites '' ? <propname> <multiplicity>?) to be inline with grammar. Also, after 'the opposite property if any.' add "When present, the '' annotation indicates that the opposite property is not navigable".

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Any used instead of MOF::Object in operational type extensions

  • Key: QVT-36
  • Legacy Issue Number: 11024
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    In OCL the Any type does not includes primitive types. In ListType and DictType
    definitions the Any is used as the more general type for elements whereas Object
    should be used to allow types like dictionaries with string as keys.

  • Reported: QVT 1.0b1 — Fri, 18 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Within the text descriptions of the classes ListType, DictionaryType, AnonymousTupleType replace all occurrences of the word Any by the word Object.
    Also in Section 8.2.1.14 Type Extensions, replace 'the type Any is assumed' by 'the generic MOF type Object is assumed'.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Typos and omissions in the QVT operational Part

  • Key: QVT-35
  • Legacy Issue Number: 11023
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The QVT operational part have some typos, omissions as well as some english
    language errors that need to be corrected.
    For instance:

    (1) In Type Extensions sub-section: "to the type systems" => "to the type system".
    (2) In Typedef definition, repetition of "is never instantiated".
    (3) In AnonymousTupleLiteralExp, TupLiteralPart does not exist. Should be
    AnonymousTupleLiteralPart. The multiplicity of 'part' should be '*' and 'ordered'
    is missing.

  • Reported: QVT 1.0b1 — Fri, 18 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution:

    (1) In section 8.1.1 replace "if the source text file only defines…" by "if the source text file defines …".
    (2) In Section 8.1.2 replace "The UML and RDBMS refer to…" by "The UML and RDBMS model types refer to …".
    (3) In Section 8.1.2 replace "…the transformation writer may explicitly indicate …" by "…the transformation writer may indicate…" (this avoids repetition of explicit in the following sentence). Also replace 'to be build' by 'to be built' (English).
    (4) In Section 8.1.4, replace "is always a refinement of a relation…" by "is always a refinement of an implicit relation…"
    (5) In Section 8.1.4, replace "The packageToSchema mapping operation defined below defines …" by "The packageToSchema mapping operation below defines…" (avoid redundancy).
    (6) In Section 8.1.4, replace "rather than a creating …" "rather than creating …"
    (7) In Section 8.1.5 replace "Afterthat the list of expressions of the body of the object expressions are executed…" by "The list of expressions of the body of the object expression are then executed…"
    (8) In Section 8.1.5 replace "implicance" by "outcome"
    (9) In Section 8.1.5 replace "is described in …" by "in described in Section …"
    (10) In Section 8.1.6 replace "do not imples…" by "does not implies…"
    (11) In Section 8.1.6 replace "an object expression do not creates an instance if the target variable has a non null value." By an object expression, such as 'object x:X

    {…}', does not create an instance if the target variable - 'x' in the example - has a non-null value".
    (12) In Section 8.1.6 replace "is systematically…" by "will be systematically…"
    (13) In Section 8.1.6 replace "we are using here the "collect shorthand" by "we are using here the collect shorthand convention". Also use italics to mark 'collect shorthand'.
    (14) In Section 8.1.6 replace "that create instance" by "that creates instances"
    (15) In Section 8.1.7 replace"various mapping" by "various mappings"
    (16) In Section 8.1.7, in code '…getSqlType(a.type))}' remove the final closing brace.
    (17) In Section 8.1.7, replace "does not interleave" by "does not interleaves"
    (18) In Section 8.1.7, add blank space between "best" and "solution".
    (19) In Section 8.1.8, replace 'list += self.retrieveCandidates();' by 'list.append(self.retrieveCandidates())'.
    (20) In Section 8.1.9, replace 'Below an example' 'Below we provide an example'.
    (21) In Section 8.1.9, replace 'scope of transformation' by 'scope of the transformation'
    (22) In Section 8.1.10, replace '#Table' by 'Table' and remove "(the notation '#Table' is a shorthand for isKindOf(Table))"
    (23) In Section 8.1.10, remove 'to the invresolve operator'
    (24) In Section 8.1.10, remove the open and close parenthesis introduced after 'until the end of the transformation'. Insert a comma instead of the open parenthesis.
    (25) In Section 8.1.10, replace ', as in the' by '. The' (to create a new sentence)
    (26) In Section 8.1.10, replace '#JAVA::Interface' by 'JAVA:Interface'
    (27) In Section 8.1.10, replace 'We provide below a solution' by 'We provide below an equivalent solution'.
    (28) In Section 8.1.11, replace "real" by "and complex". Also, insert "To this end " before "The language…".
    (29) In Section 8.1.11 replace 'almost a mapping' by ''mappings'.
    (30) In Section 8.1.11 replace 'This occurs in rule 2 for Foo instance" by "This occurs in Rule 2 for the Foo instances"
    (31) In Section 8.1.13, in the code after 'Below and example' move the open brace so that it is after the closing bracket of the when clause and not after "JAVA::Constructor". Apply this for the two operations convertConstructor and convertOperation.
    (32) In Section 8.1.14, replace 'a anonymous' by 'an anonymous'
    (33) In Section 8.1.14, replace '_parentInstance' by 'container'
    (34) In Section 8.1.14, before the sentence 'A typedef can also…' inserts the sentence: "The '#Metaclass" notation - respectively '##Metaclass' - is a shorthand for isKindOf(Metaclass) - respectively isTypeOf(Metaclass).
    (35) In Section 8.1.15 replace 'confortable' by 'comfortable', 'realize' by 'realizes', remove 'some nice' and 'that we found'.
    (36) In Section 8.1.15, remove "'a block expression is not a function!).
    (37) In Section 8.1.15, replace 'the role of a for loop in Java' by 'the role of a loop instruction is Java language'.
    (38) In Section 8.1.15, replace 'that is not constrained' by 'that is less constrained'
    (39) In Section 8.1.15 replace the code starting with var x:= by the following simplified code:
    var x:= if (self.name.startsWith("_") "PROTECTED"
    elif (self.type.isPrimitive() "NORMAL"
    else "UNEXPECTED";
    (40) At the beginning of Section 8.1.16, replace 'This…' by 'The variable this …'
    (41) In Section 8.1.18 replace the quotes around 'compiling'
    (42) In Section 8.1.18 replace the sentence 'Synchronization is done … of the transformation' by "Synchronization is achieved through the invocation of the wait operation on the status variable returned by the 'transform' operation.
    (43) In Section 8.1.18 replace 'tho two pim model' by 'the two PIM models'
    (44) In Section 8.1.18 replace "is a magical requirement to psm transformation" by "is a 'Requirement to PSM' transformation.
    (45) In Section 8.2.2.1, replace '… this package grouped into…' by '… this package are grouped into …'
    (46) In Section 8.2.1.1.1 Operational Transformation, add missing comma in 'that is,' after 'may define configuration properties'.
    (47) In Section 8.2.1.1.1, Operational Transformation replace 'TransformationInstanceExp' by 'InstantiationExp'.
    (48) In Section 8.2.1.1.1 Operational Transformation, in constraints subsection, replace all occurrences of '<>OclUndefined' by '.isOclUndefined()'.
    (49) In Section 8.2.1.1.1 Operational Transformation, in semantics subsection, remove "For convenience," and replace "is described" by "is described below"
    (50) In Section 8.2.1.1.1 Operational Transformation, in notation subsection, replace 'within brackets' by 'within braces'. Also replaces "using the refined keyword" by "using the refines keyword".
    (51) In Section 8.2.1.1.2 Library, replace 'no implementation' by 'this means that no implementation'. Also in semantics sub-section, remove 'for convenience' and replace 'is described' by 'is described below'.
    (52) In Section 8.2.1.1.2 Library, replace 'For each declared model types there is conceptually a …' by 'For each declared model type there is, conceptually, a …'. Also, in notation section, adds commas before and after "in this case".
    (53) In Section 8.2.1.4 ModuleImport, replace 'non library' by 'non-library'
    (54) In Section 8.2.1.5 ModelParameter, in notation sub-section,, remove "If the direction kind is not provided the in value is assumed".
    (55) In Section 8.2.1.6 ModelType, replace the sentence "The binding between …" by the sentence "See semantics sub-section for the binding rules between actual and effective types ". Also remove sentence "In both cases …" (since already in the semantics part).
    (56) In Section 8.2.1.6 Model Type, replace "To restrict the set of valid participant models further…" by "To restrict further the set of valid participant models …".
    (57) In Section 8.2.1.6 Model Type, in "Semantics of model compliance subsection", replace "In both cases (strict or effective), model compliance implies additionally to comply with extra constraints of the model type" by "In both cases - strict of effective - model compliance implies that all the extra conditions (see extraCondition property) are satisfied as well as any pre-existing well-formedness rule that exists for the associated metamodel.
    (58) In Section 8.2.1.6 Model Type, in "Semantics of model compliance subsection", remove sentence "Effective compliance allows defining… with UML 1.3 models" (since it is a repetition).
    (59) In Section 8.2.1.6 Model Type, in Notation sub-section, add missing double quote in example "modeltype UML uses SimpleUML…".
    (60) In Section 8.2.1.6 Model Type, in Notation sub-section, replace "A modeltype symbol" by "A modeltype declaration in a transformation signature"
    (61) In Section 8.2.1.6 ImperativeOperation, within the description of the ownedParameter association, replace "The other parameters of the operation" by "The list of parameters of the operation excluding the context and result parameters".
    (62) In Section 8.2.1.11 EntryOperation, replace "which is invoked on entry" by "which is invoked when the transformation execution starts".
    (63) In Section 8.2.1.11 Helper, replace "that is executed is sequence" by "that is executed in sequence". Also replace the sentence "The notation is the notation for any imperative operation …" by "The notation uses the standard convention for notating operations in UML except that the query or helper keywords are used to prefix the declaration. The latter 'helper' prefix is used when the operation provokes side-effects. Also, replace "He self variable…" by "The self variable …".
    (64) In Section 8.2.1.13 Constructor, replace "A constructor operation is implicitly or explicitly invoked through instantiation expression." by "A constructor operation can be explicitly invoked through an instantiation expression."
    (65) In Section 8.2.1.15 MappingOperation, add 'conceptually' after 'always refines'. Also, replace "This essentially means…" by "This means…" (three occurrences). Add commas sourrounding "among the set of disjuncted mappings". Replace "the details of the semantics of the reuse facilities" by "the details of these resuse facilities". Also replace 'refinedRelation: Relation[1]' by 'refinedRelation [0..1]' (consistency with OperationalTransformation:refined multiplicity), add 'if any' after 'the refined relation' and remove sentence 'The relation defines the guard…'..
    (66) In Section 8.2.1.15 MappingOperation, semantics sub-section, replace "After passing of the parameters" by "After passing the parameters". Also, replace "of the actual object parameters and the…" by "of the actual parameters as well as…". Also replace "if the out parameter was…" "if the out parameters were…".
    (67) In Section 8.2.1.15 OperationBody, replace "which is made of an ordered list" by "which is an ordered list". Also in Notation sub-section, replace "semi colons" by "semi-colons".
    (68) In Section 8.2.1.18 ConstructorBody, replace "An constructor body" by "A constructor body". Also replace "semi colons" by "semi-colons". Add comma after 'body notation'.
    (69) In Section 8.2.1.19 MappingBody, replace
    initSection : OclExpression [0..1] {ordered} by
    initSection : OclExpression [0..*] {composes,ordered}
    (70) In Section 8.2.1.19 MappingBody, replace
    /content : OclExpression [0..*] {ordered} by
    /content : OclExpression [0..*] {composes,ordered} (from OperationBody)
    (71) In Section 8.2.1.19 MappingBody, replace
    endSection : OclExpression [0..1] {ordered} by
    endSection : OclExpression [0..*] {composes,ordered}
    (72) In Section 8.2.1.19 MappingBody, notation sub-section replaces "uses firstly braces" by "uses braces". Also replace "On the contrary," by "The" (to avoid double negation). Also replace "may be required is certain " by "may, however, be required in certain ".
    (73) In Section 8.2.1, sub-section "Concepts related with the usage of imperative operations", replace "related with" by "related to".
    (74) In Section 8.2.1.20, replace "Unless isScoped is true" by "Unless isVirtual is true". Also, in attributes sub-section, replace 'virtual : Boolean = true' by 'isVirtual : Boolean = true'.
    (75) In Section 8.2.1.20 ImperativeCallExp in notation sub-section, replace "An imperative call is notated as any other operation call where the source …" by " An imperative call is notated as any other operation call. The source …". Also, after "in terms of the execution semantics" adds "- the source is the transformation class itself, denoted by 'this' -".
    (76) In Section 8.2.1.21 MappingCallExp, replace "value of the strict" by "values of the isStrict". Also remove ", that is, provokes an exception if it evaluates to false".
    (77) In Section 8.2.1.21 MappingCallExp in Notation section, replace "is noateted as any other imperative operation call" by "is notated as any operation call". Also replace "is used when strict is true" by "is used when isStrict is true". Also replaces "Depending whether" by "If" and replaces "the call notation will require or not require a source object" by "the call requires a source object". In all the text replace "non strict" by "non-strict".
    (78) In Section 8.2.1.21 MappingCallExp in Notation section, replace "on a list" by "on a list as source". Also replace #Class by Class.
    (79) In Section 8.2.1.21 MappingCallExp in Notation section, Replace text from "We should note that …" to "as the source of the call" by "Invoking a mapping operation with a transformation instance as the source argument may be useful when a transformation make usage of other coarse-grained transformations (transformation composition)."
    (80) In Section 8.2.1.22 ResolveExp, replace "Finally, the last orthogonal variant," by "The last orthogional variant". Also replace "It is typically useful" by "It may be useful".
    (81) In Section 8.2.1.22 ResolveExp, sub-section semantics, replace "corresponding relation" by "corresponding implicit relation". Also replace parenthesis in "or, what is equivalent…", by dashes "-". Also add add comma after "In this sense" and remove comma in "see, AssignExp". Also remove "later - more precisely -"
    (82) In Section 8.2.1.24 ObjectExp, remove "specific" word. Replace "non null" by "non-null". Replace "All visible variables" by "All variables" Add comma after "When provided". Replace
    "list->object {…}

    // shorthand for list->xcollect object

    {…}
    by : "list->object X{…}

    // shorthand for list->xcollect object X

    {…}

    (83) In Section 8.2.2.3 ComputeExp, replace "defines body" by "defines a body". Replace "and return null" by "and returns null". In the definition of the body property, add the "

    {composes, ordered}" indication.
    (84) In Section 8.2.2.3 ImperativeLoopExp, replace "imperative loop constructs" by "imperative loop constructs such as".
    (85) In Section 8.2.2.6 ForExp adds commas before and after "whereas". Add the {composes, ordered}

    indication in '/iterator' property description. Replace 'Set(T)::forEach(source, iterator, condition, body) : Seq(TT)'
    by 'Collection(T)::forEach(source, iterator, condition, body)'. Also replace 'Set(T)::forOne(source, iterator, condition, body) : Seq(TT)'
    by 'Collection(T)::forOne(source, iterator, condition, body)'. Add "T represents the type of the source element". Adds the paragraph "Collection(T) is any collection type. When applying the for expression, if the source collection is not ordered it is implicitly converted into the corresponding ordered collection (Set and Bag become respectively OrderedSet and Sequence). Replace "is embedded with" by "is embedded within".
    (86) In Section 8.2.2.7 ImperativeIterateExp, in semantics sub-section, replace occurrences of Seq(T) as Collection(T) and replace occurrences of Seq(TT) as Sequence(TT). Also before "If the condition…" add the sentence: " When applying the imperative iterate expression, if the source collection is not ordered it is implicitly converted into the corresponding ordered collection (Set and Bag become respectively OrderedSet and Sequence). Replace "collectectSelect" by "collectselect". Also, add comma after "hence".
    (87) In Section 8.2.2.7 ImperativeIterateExp, remove repeated sentence "The target variable …". Replace "the target variable is implicit here" by "the iterator variable is implicit here".
    (88) In Section 8.2.2.8 SwitchExp in alternativePart property definition, replace

    {ordered}

    by

    {ordered, composes}

    . Also replace "Tre endif keyword can be skipped since it …" by "The endif keyword may be skipped. It …". Also replace "produces a grammar conflict in parsers that can can be solved through look ahead" by "may produce a grammar conflict in parsers which can, however, be solved through appropriate look-ahead.
    (89) In Section 8.2.2.10 VariableExp replaces "A variable initialization expression represents the declaration and the initialization of a variable" by "A variable initialization expression represents the declaration of a variable with an optional initialization value". Also replace "ImpertaiveExpression by ImperativeExpression". In the description of 'withReturn' property, add "The default value is false". Also remove the sentence "See the execution semantic section for the definition of scope rules". Replace "Multiple variable declaration" by "Multiple variable declarations".
    (90) In Section 8.2.2.11 AssignExp, replace "If the value filed…" by "If the provided value is made…". Also replace "by a deferred resolve expressions" by "by a deferred resolve expression". Remove sentence "See semantics details below. Replace "(but null if a fuure value is in right-hand side)" by "unless it is a future value, in which case null is returned". In 'isReset' description, add commas around "for a multivalued target". In association definitions adds the following indications:

    {composes, ordered} for value, {composes} for left and defaultValue. In Notation section, replace "'::=' object Node" by ":= objectNode".
    (91) In Section 8.2.2.11 TryExp, replace "catching of the exception occurs" by "catching of an exception occurs".
    (92) In Section 8.2.2.10 ContinueExp, replace "A continue expression is used, within an interation over a list of expressions" by "Within an interation over a list of expressions, a continue expression is used…". Also, replace "break" by "continue" and remove "- like the side-effect free OCL iterate expression."
    (93) In Section 8.2.2.19 AssertExp, replace "an qassertion holds" by "a condition holds". In Associations sub-section replace: "assertion: OclExpression [0..1]" by "assertion:OclExpression [1] {composes}. Also replace "(warning or fatal keywords)" by "- warning or fatal indentifiers - ".
    (94) In Section 8.2.2.23 InstantiationExp, replace the code after "the following shorthand can be used" by:
    column := self.attribute->new(a) Column(a.name,a.type.name);
    // equivalent code:
    // column := self.attribute->xcollect(a|new Column(a.name,a.type.name));
    (95) In Section 8.2.2 Type Extensions sub-chapter, replace "are two mutable extensions of Collection Types" by "are two mutable collection types".
    (96) In Section 8.2.2.24, replace "A typedef allows to constraint" by "A typedef allows constraining". Remove "A typedef is never instantiated" and Remove "In the perspective of the runtime environment a typedef is never instantiated. Replace "This is specifically used" by "This may be used for". Remove the paragraph starting with "When the base class is not …".
    (97) In Section 8.2.2.25 ListType, replace "It contains an ordered …" by "A value conforming to this type contains an ordered …"
    (98) In Section 8.2.2.25 DictionaryType, replace "elments" by "elements"
    (99) In Section 8.2.2.28, replace "used in defining" by "used when defining". Also replace "ithin" by "within". Also replace "provide means" by "provide a mean".
    (100) In Section 8.2.2.29 DictLiteralExp, replace "part : OclExpression [1] {composes}" by "part : OclExpression [*] {composes, ordered}

    "
    (101) In Section 8.2.2.30 AnonymousTupleLiteralExp, replace 'consist' by 'consists'. Also replace 'TupLiteralPart' by 'OrderedTupleLiteralPart'.. replaces 'part : oclxpression [1]

    {composes}

    ' by 'part : OclExpression [*]

    {composes, ordered}
  • Updated: Fri, 6 Mar 2015 20:54 GMT

Top-level constraint too restrictive

  • Key: QVT-34
  • Legacy Issue Number: 11022
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The constraint prevents a usage of non top-level relations in a when clause which includes a negation expression. For example:

    relation A

    { ... }


    relation B { ... when

    { not A() }

    }
    This issue is related to resolution of issue 10626 in 2nd ballot.

  • Reported: QVT 1.0b1 — Fri, 18 May 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    This issue resolution invalidates the instruction resolution given by issue 10626.

    Modify the description of property 'isTopLevel' in section 7.11.3.1 as follows:

    isTopLevel : Boolean
    Indicates whether the relation is a top-level relation or a non-top-level relation. The execution of a transformation requires that all its toplevel relations must hold, whereas a non-top-level relation is required to hold only when it is invoked from another relation.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

8.4.3.5 != and <>

  • Key: QVT-33
  • Legacy Issue Number: 10991
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Having two identical operators is redundant and so a bad idea and certainly contrary
    to the spirit of being an OCL extension.

    Suggest: remove != so that novices learn that <> is difference in OCL.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolved by applying the resolution of issue 10990.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

8.4.3.5 = and ==

  • Key: QVT-32
  • Legacy Issue Number: 10990
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Having two identical operators is redundant and so a bad idea.

    Introducing a new operator that looks just like a C/Java comparison operator is
    guaranteed to confuse all novices into thinking that = obviously means assignment.

    So this friendly addition is really unfriendly to novices and redundant for experts.

    Suggest: remove == so that novices learn that = is comparison very quickly.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolved

    In Section 8.4.3 "Shorthands used to invoke specific pre-defined operations", remove 'both alternative should be available' in numbers 5 and 6. In addition, at the end of this section, add the following paragraph:
    """
    The alternative '==' and '!=' notations can only be used if the source file pre-declares the intention of using them by means of a directive placed before entering the library of the transformation definitions. The syntax of this directive should be a comment having the following form:
    – directive: use-traditional-comparison-syntax or
    // directive: use-traditional-comparison-sysntax
    This declaration makes illegal the usage of the corresponding OCL-like syntax ('=' and '<>') within the compilation unit.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Pre-ballot 2 FTF Appendix A: Erroneous collectionTemplate grammar

  • Key: QVT-31
  • Legacy Issue Number: 10988
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    [ '

    {' <memberSelection> '}

    ' ] in collectionTemplate should be '

    {' [ <memberSelection> ] '}

    '

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution: No change
    This has already been fixed in the grammer given in Appendix A of the FTF report of ballot 2

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Chapter 7,8,9 EssentialOCL usage

  • Key: QVT-30
  • Legacy Issue Number: 10987
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The OCL spec identifies Essential OCL as a subset of the OCL Abstract Syntax.
    The OCL spec does not identify an Essential OCL Concrete Syntax.

    The QVT spec should define the Essential OCL Concrete Syntax as a listed subset of
    OCL Concrete Syntax clauses. Presumably all productions in OCL section 9.3 but
    perhaps excluding OclMessageExpCS, OclMessageArgumentsCS and OclMessageArgCS.

    The QVT spec should clearly define whether all OCL keywords are also keywords
    of QVT - a convenience to tool builders re-using OCL implementations, or
    alternatively enumerate only those that are appropriate:

    i.e. and, else, endif, if, implies, in, let, not, or, then, xor.

    (omitting: attr, context, def, endpackage, inv, oper, package, post, pre)

    Perhaps some counterpart to OCL Chapter 12 is required:
    'The Use of OCL Expressions in QVT Models'

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Chapter 7 Collection::=()

  • Key: QVT-29
  • Legacy Issue Number: 10986
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The QVTrelation Standard library should define additional variants of '=' to accommodate the
    permitted matching in predicates.

    e.g.

    Set(T)::=(Bag(T))
    Set(T)::=T

    which appears in the rel2core.

    This avoids the need for detailed descriptions of type conversion schemes to handle
    matching of collections and alternate-kind collections/scalars.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:54 GMT

QVTOperational examples have some errors and need to be inline with grammar

  • Key: QVT-26
  • Legacy Issue Number: 10978
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Some of the examples provided in the spec have either syntax errors either or missing
    elements

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) Replace the contents of A2.1: Operational Mapping Examples by the following:

    metamodel BOOK {
    class Book

    {title: String; composes chapters: Chapter [*];}

    class Chapter

    {title : String; nbPages : Integer;}

    }

    metamodel PUB {
    class Publication

    {title : String; nbPages : Integer;}

    }

    transformation Book2Publication(in bookModel:BOOK,out pubModel:PUB);

    main()

    { bookModel->objectsOfType(Book)->map book_to_publication(); }

    mapping Class::book_to_publication () : Publication

    { title := self.title; nbPages := self.chapters->nbPages->sum(); }

    (3) Replace the contents of 12.2 by

    – This QVT definition performs an in place transformation on
    – a UML class-diagram model by privatizing the attributes and
    – creating accessor methods

    modeltype UML uses "omg.org.uml14";

    transformation Encapsulation(inout classModel:UML);

    // Indicating that UML1.4 Name type is to be treated as a String
    tag "TypeEquivalence" UML::Name = "String";

    – entry point: selects the packages and applies the transformation
    – on each package

    main()

    { classModel.objectsOfType(Package) ->map encapsulateAttributesInPackageClasses(); }

    – Applies the transformation to each class of the package

    mapping inout Package::encapsulateAttributesInPackageClasses () {
    init

    {self.ownedElement->map encapsulateAttributesInClass();}

    }

    – Performs the encapsulation for each attribute of the class
    – The initialization section is used to retrieve the list of attributes
    – The population section is used to add the two accessor operations
    – The end section is used to privatize each attribute

    mapping inout Class::encapsulateAttributesInClass ()
    {
    init

    { var attrs := self.feature[Attribute];}

    operation := { – assignment with additive semantics
    attrs->object(a) Operation

    { name := "get_" + self.name.upperFirst(); visibility := "public"; type := a.type; }

    ;
    attrs->object(a) Operation {
    name := "set_" + self.name.upperFirst();
    visibility := "public";
    parameter := object Parameter

    { name := 'a_'+ self.name.upperFirst(); kind := "in"; type := a.type;}

    ;
    };
    };
    end

    { attrs->map privatizeAttribute();}

    }

    – in place privatization of the attribute

    mapping inout Attribute::privatizeAttribute ()

    { visibility := "private"; }

    (4) Replaces the content of A2.3 by the following

    The metamodels used here are the same metamodels used for the relational version given in Appendix A.1.1. We provide below their definition using the concrete syntax for metamodels. Note we are assuming that all multi-valued associations are ordered.

    metamodel SimpleUml {

    abstract class UMLModelElement

    { kind : String; name : String; }

    class Package extends UMLModelElement

    { composes elements : PackageElement [*] ordered opposites namespace [1]; }

    abstract class PackageElement extends UMLModelElement {
    }

    class Classifier extends PackageElement {
    }

    class Attribute extends UMLModelElement

    { references type : Classifier [1]; }

    class Class extends Classifier

    { composes attribute : Attribute [*] ordered opposites owner [1]; references general : Classifier [*] ordered; }

    class Association extends PackageElement

    { source : Class [1] opposites reverse [*]; destination : Class [1] opposites forward [*]; }

    class PrimitiveDataType extends Classifier {
    }

    }

    metamodel SimpleRdbms {

    abstract class RModelElement

    { kind : String; name : String; }

    class Schema extends RModelElement

    { composes tables : Table [*] ordered opposites schema [1]; }

    class Table extends RModelElement

    { composes column : Column [*] ordered opposites owner[1]; composes _key : Key [*] ordered opposites owner[1]; // '_key' is an automatic alias for 'key' composes foreignKey : ForeignKey [*] ordered opposites owner[1]; }

    class Column extends RModelElement

    { type : String; }

    class Key extends RModelElement

    { references column : Column [*] ordered opposites _key [*]; }

    class ForeignKey extends RModelElement

    { references refersTo : Key [1]; references column : Column [*] ordered opposites foreignKey [*]; }

    }

    Below the transformation definition.

    transformation Uml2Rdb(in srcModel:UML,out dest:RDBMS);

    – Aliases to avoid name conflicts with keywords
    tag "alias" RDBMS::Table::key_ = "key";
    – defining intermediate data to reference leaf attributes that may
    – appear when struct data types are used
    intermediate class LeafAttribute

    { name:String; kind:String; attr:UML::Attribute; }

    ;
    intermediate property UML::Class::leafAttributes : Sequence(LeafAttribute);

    – defining specific helpers

    query UML::Association::isPersistent() : Boolean

    { result = (self.source.kind='persistent' and self.destination.kind='persistent'); }

    – defining the default entry point for the module
    – first the tables are created from classes, then the tables are
    – updated with the foreign keys implied by the associations

    main()

    { srcModel.objects()[Class]->map class2table(); -- first pass srcModel.objects()[Association]->map asso2table(); -- second pass }

    – maps a class to a table, with a column per flattened leaf attribute

    mapping Class::class2table () : Table
    when

    {self.kind='persistent';}

    {
    init

    { -- performs any needed intialization self.leafAttributes := self.attribute ->map attr2LeafAttrs("",""); // ->flatten(); }

    – population section for the table
    name := 't_' + self.name;
    column := self.leafAttributes->map leafAttr2OrdinaryColumn("");
    key_ := object Key

    { -- nested population section for a 'Key' name := 'k_'+ self.name; column := result.column[kind='primary']; }

    ;
    }

    – Mapping that creates the intermediate leaf attributes data.

    mapping Attribute::attr2LeafAttrs (in prefix:String,in pkind:String)
    : Sequence(LeafAttribute) {
    init {
    var k := if pkind="" then self.kind else pkind endif;
    result :=
    if self.type.isKindOf(PrimitiveDataType)
    then – creates a sequence with a LeafAttribute instance
    Sequence {
    object LeafAttribute

    {attr:=self;name:=prefix+self.name;kind:=k;}

    }
    else self.type.asType(Class).attribute
    >map attr2LeafAttrs(self.name+"_",k)>asSequence()
    endif;
    }
    }

    – Mapping that creates an ordinary column from a leaf attribute

    mapping LeafAttribute::leafAttr2OrdinaryColumn (in prefix:String): Column

    { name := prefix+self.name; kind := self.kind; type := if self.attr.type.name='int' then 'NUMBER' else 'VARCHAR' endif; }

    – mapping to update a Table with new columns of foreign keys

    mapping Association::asso2table() : Table
    when

    {self.isPersistent();}

    {
    init

    {result := self.destination.resolveone(Table);}

    foreignKey := self.map asso2ForeignKey();
    column := result.foreignKey->column ;
    }

    – mapping to build the foreign keys

    mapping Association::asso2ForeignKey() : ForeignKey

    { name := 'f_' + self.name; refersTo := self.source.resolveone(Table).key_; column := self.source.leafAttributes[kind='primary'] ->map leafAttr2ForeignColumn(self.source.name+'_'); }

    – Mapping to create a Foreign key from a leaf attributes
    – Inheriting of leafAttr2OrdinaryColumn has the effect to call the
    – inherited rule before entering the property population section

    mapping LeafAttribute::leafAttr2ForeignColumn (in prefix:String) : Column
    inherits leafAttr2OrdinaryColumn

    { kind := "foreign"; }

    (5) Replaces the content of A2.4 by the following

    modeltype UML uses "omg.org.spem_umlprofile";
    modeltype SPEM uses "omg.org.spem_metamodel";
    transformation SpemProfile2Metamodel(in umlmodel:UML,out spemmodel:SPEM);

    query UML::isStereotypedBy(stereotypeName:String) : Boolean;
    query UML::Classifier::getOppositeAends() : Set(UML::AssociationEnd);

    main ()

    { -- first pass: create all the SPEM elements from UML elements umlmodel.rootobjects()[UML::Model]->map createDefaultPackage(); -- second pass: add the dependencies beyween SPEM elements umlmodel.objects[UML::UseCase]->map addDependenciesInWorkDefinition(); }

    mapping UML::Package::createDefaultPackage () : SPEM::Package

    { name := self.name; ownedElement := self.ownedElement->map createModelElement(); }

    mapping UML::Package::createProcessComponent () : SPEM::ProcessComponent
    inherits createDefaultPackage
    when

    {self.isStereotypedBy("ProcessComponent");}

    {}

    mapping UML::Package::createDiscipline () : SPEM::Discipline
    inherits createDefaultPackage
    when

    {self.isStereotypedBy("Discipline");}


    {}

    mapping UML::ModelElement::createModelElement () : SPEM::ModelElement
    disjuncts
    createProcessRole, createWorkDefinition,
    createProcessComponent, createDiscipline
    {}

    mapping UML::UseCase::createWorkDefinition () : SPEM::WorkDefinition
    disjuncts
    createLifeCycle, createPhase, createIteration,
    createActivity, createCompositeWorkDefinition
    {}

    mapping UML::Actor::createProcessRole () : SPEM::ProcessRole
    when

    {self.isStereotypedBy("ProcessRole");}

    {}

    – rule to create the default process performer singleton
    mapping createOrRetrieveDefaultPerformer () : SPEM::ProcessPerformer {
    init

    { result := resolveoneByRule(createOrRetrieveDefaultPerformer); if result then return endif; }

    name := "ProcessPerformer";
    }

    mapping abstract UML::UseCase::createCommonWorkDefinition ()
    : SPEM::WorkDefinition
    {
    name := self.name;
    constraint :=

    { self.constraint[isStereotypedBy("precondition")] ->map createPrecondition(); self.constraint[isStereotypedBy("goal")]->map createGoal(); }

    ;
    }

    mapping UML::UseCase::createActivity () : SPEM::WorkDefinition
    inherits createCommonWorkDefinition
    when

    {self.isStereotypedBy("Activity");}

    {}

    mapping UML::UseCase::createPhase () : SPEM::Phase
    inherits createCommonWorkDefinition
    when

    {self.isStereotypedBy("Phase");}

    {}

    mapping UML::UseCase::createIteration () : SPEM::Iteration
    inherits createCommonWorkDefinition
    when

    {self.isStereotypedBy("Iteration");}

    {}

    mapping UML::UseCase::createLifeCycle () : SPEM::LifeCycle
    inherits createCommonWorkDefinition
    when

    {self.isStereotypedBy("LifeCycle");}

    {}

    mapping UML::UseCase::createCompositeWorkDefinition () : SPEM::WorkDefinition
    inherits createCommonWorkDefinition
    when

    {self.isStereotypedBy("WorkDefinition");}

    {}

    mapping UML::Constraint::createPrecondition () : SPEM::Precondition

    { body := self.body; }

    mapping UML::Constraint::createGoal () : SPEM::Goal

    { body := self.body; }

    mapping UML::UseCase::addDependenciesInWorkDefinition ()
    : SPEM::WorkDefinition
    merging addDependenciesInActivity
    {
    init

    { result := self.resolveone(WorkDefinition); var performers := self.getOppositeAends()[i|i.association [isStereotypedBy("perform")]->notEmpty()]; assert (not performers->size()>1) with log("A unique performer is allowed",self); }

    subWork := self.clientDependency[*includes].supplier
    ->resolveone(WorkDefinition);
    performer := if performers then performers->first()
    else createOrRetrieveDefaultPerformer() endif;
    }

    mapping UseCase::addDependenciesInActivity () : WorkDefinition
    when

    {self.stereotypedBy("Activity");} { assistant := self.getOppositeAends()[i|i.association [a|a.isStereotypedBy("assist")]->notEmpty()]->resolve(); }
  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.11.3.1 Relation.operationalImpl

  • Key: QVT-28
  • Legacy Issue Number: 10984
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Relation.operationalImpl is shown in Fig 7.7, but not listed in 7.11.3.1.

    It should be a composition (in both).

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Update the description of class Relation in section 7.11.3.1 as follows:

    Insert the folloing sentence in the description part before the sentence 'Please refer to sections 7.1 - 7.9 for a detailed description of the semantics, and section 12 for a more formal description in terms of a mapping to the core model.':
    A relation may optionally have an associated black-box operational implementation to enforce a domain.

    Add the following in the 'Associations' sub-section:

    operationalImpl: RelationImplementation [*]

    {composes}

    The set of black-box operational implementations, if any, that are associated with the relation to enforce its domains.

    Also update the the diagram given in Fig 7.7 'QVT Relation Package' to show the association from Relation to RelationImplementation as a composite.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Consider renaming 'AnonymousTuple' as 'OrderedTuple'

  • Key: QVT-27
  • Legacy Issue Number: 10979
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    'Anonymous tuple' is very long. Ordered tuple is similar to 'OrderedSet' in respect
    To 'Set'. Could be a better name.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In all the document, replace all references to AnonymousTuple by OrderedTuple.
    (2) For impact in diagrams apply the diagram updates as specified in Appendix D.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Find better notation for explicit extent indication in op mapping parameter

  • Key: QVT-25
  • Legacy Issue Number: 10977
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Find better notation for explicit extent indication in operational mapping parameters.

    Though the type names prefixed with the extent work from the point of implementation, I suspect it
    might add on complexity of type resolution.
    All the folks are pretty much used to local and qualified name convention concerning the '::' separator use.
    Is 'bag::Foo' a qualified type name or unqualified one but to be created in a 'bag' extent?
    I think that including model param names into type resolution may increase the level of ambiguity as in this way, param names can impose clashes with packages, model types.

    This issue is related to resolution of 9388 in Ballot1.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace resolution of issue 9388 (Ballot 1) by the following resolution text.

    (1) In Section 8.2.1.16 (MappingParameter) add the association:
    """
    extent : ModelParameter [0..1]
    The extent of the mapping parameter. Should be explicitly provided
    when there is an ambiguity on the extent that will own a potential
    created element corresponding to this parameter.
    """
    (2) In the same section 8.2.1.16, add the "Notation" subtitle
    as follows:
    """
    Notation
    The extent of a mapping parameter can be provided explicitly
    using the '@' symbol after the type of the mapping parameter. In that case the declarator has the form:
    mymappingparameter : myextent::MyType@mymodelparameter.
    It is not mandatory to provide the extent when it can be inferred
    from the type.
    Example:
    transformation T(in src:S, out dest1, out dest2);
    mapping X::foo(inout Y@dest1) : Y@dest2;
    // 'X' is a class of 'S' metamodel and 'Y' is a class of 'D' metamodel
    """

    (3) In Figure 8.1, add the correspond link between MappingParameter
    and ModelParameter.

    (4) In Section 8.2.1 (ObjectExp), within the "Notation" subtitle,
    replace:
    """When provided the model parameter is notated within brackets
    after the object keyword.
    object[srcmodel] x:X

    { ... } // x is created within the 'srcmodel
    """
    by:
    """When an explicit extent is provided, the model parameter variable name
    postfixes the type of the object expression using the "@" separator symbol.
    object x: X@srcmodel { ... }

    // x is created within the 'srcmodel
    """
    (this change is required for consistency with mapping parameter notation).

    (5) In Section 8.2.2.23 (InstantiationExp), within the "Notation" subtitle,
    replace:
    """
    When provided the extent is notated by adding the variable name in brackets after the new keyword.
    column := new [mymodel] Column(n,t); // mymodel is the extent for the new instance.
    """

    by:
    """When an explicit extent is provided, the variable name
    postfixes the type of the instantiation expression using the "@" separator symbol.
    column := new Column@mymodel(n,t); // mymodel is the extent for the new instance.
    """
    (6) In BNF grammar (Section 8.4.6.1), define the <typespec> rule as follows:
    <typespec> ::= <type_reference> <extent_location>?
    <type_reference> ::= <scoped_identifier> | <complex_type>
    <extent_location> ::= '@' <identifier>

  • Updated: Fri, 6 Mar 2015 20:54 GMT

8.4.6.2 QVToperational is not a syntax extension of OCL

  • Key: QVT-24
  • Legacy Issue Number: 10975
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The syntax claims to extend the OCL syntax. But it doesn't, or
    at least not with the same semantics.

    For instance:

    The QVToperational grammar defines:
    'or' and 'xor' with lower precedence than 'and'
    OCL (7.4.7) defines them the same precedence .

    The QVToperational grammar defines:
    'if' as primary
    OCL (7.4.7) defines 'if' between relational and additive.

    The changed precedences may be better, but they are not OCL.

    The QVToperational type/declaration system is difficult to compare with
    OCL; it certainly doesn't look compatible.

    Suggest: Re-specify the QVToperational grammar so that the
    name, type and expression sub-grammars are
    demonstrably an extension of their Essential OCL counterparts.

    i.e. each production such as PrimitiveLiteralExpCS should be used unchanged
    or reproduced preferably containing only additional clauses, but perhaps
    replacement clauses that can be analyzed to provide equivalent/extended coverage

    Else: Remove all claims that there is any similarity
    between QVToperational and OCL.

  • Reported: QVT 1.0b1 — Mon, 30 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.13 Implicit Variable Declarations

  • Key: QVT-23
  • Legacy Issue Number: 10956
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The RelationsToCore example declares only those variables that are necessary. It is
    possible to deduce the types of variables not declared explicitly from the property
    with which the variable is associated in a property template, or from the relation
    whose invocation the variable participates in.

    Are QVTrelation tools required to deduce implicit declarations?

    If so, what are the detailed semantics for resolution of conflicting inference between
    explicit and implicit declarations and between implicit and implicit declarations.

    Do these semantics depend on collection kind, enforcement direction and relation
    invocation binding?

    Note that invocation of a relation with ridiculous types is probably but not
    necessarily an error. In some circumstances the user may not be aware that a match
    is impossible. When using third party models, the user perhaps should not be aware
    that a match is impossible. The ridiculous match may be a precautionary cover for
    a hoped for impossible case.

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Add the following sub section in section 7.13 Concrete Syntax:

    Implicit declaration of variables:

    There is no need to explicitly declare variables that are bound to object or collection templates. All other variables must be explictly declared. Consider the following template declarations:
    c:Class

    {<template-body>}
    cs:Set(Class) {<template-body>}

    Here there is no need to have explcit declaration for variables c and cs as their types are obvious from the template declarations.

    If there exists an explcit declaration for a variable that is bound to an object or a collection template, then the explicitly declared type must either be the same or more generic than the type specified by the template. If an implictly declared variable has bindings with more than one object template (resp collection template), then the types of all such templates must be the same.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.13 Comments

  • Key: QVT-22
  • Legacy Issue Number: 10955
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Is there a syntax for comments?

    Suggest: – comments to avoid confusion with OCL.

  • Reported: QVT 1.0b1 — Sun, 25 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution: No change.
    This has already been addressed by the resolution of issue 10604.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.11.2.3 CollectionTemplateExp.referredCollectionType

  • Key: QVT-21
  • Legacy Issue Number: 10954
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    CollectionTemplateExp.referredCollectionType refers to a CollectionType, but that type may not exist,
    since the reference is a parameterisation of a collection; the collection kinds exist in OCL, the
    parameter types in the user model, but the parameterised collections exist only as references.

    Suggest:
    remove: CollectionTemplateExp.referredCollectionType
    add: CollectionTemplateExp.referredElementType : Type[0..1]
    add: CollectionTemplateExp.collectionKind : CollectionKind[1]

    to capture the reference without requiring type synthesis.

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In Section 7.11.1.1, within "associations" sub-section, add the following property:

    /ownedType : Type [0..*] (from Package)

    {composes,ordered}

    All the types being defined by this transformation. Specifically this
    includes any composite type used to define the type of a variable or a parameter, for instance a 'Set(MyMetaclass)' parameterized type instance.

    (2) In Section 7.11.1.1, add a "Remark" sub-section with the following
    sentence:
    Remark:
    Instances of parameterized types defined in different transformations
    denote the same type if the base types are the same: for instance
    'Tx1::Set(Integer)' and 'Tx2::Set(Integer)' denote the same type
    'Set(Integer)'.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.11.2.3 CollectionTemplateExp

  • Key: QVT-20
  • Legacy Issue Number: 10953
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The description for match is 'specifies a variable'. This is a poor
    description for a VariableExp that references a variable.

    CollectionTemplateExp.match should compose its expression.

    CollectionTemplateExp.part should compose its expression

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    No Data Available

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.11.1.2 Meta-model Id persistence

  • Key: QVT-19
  • Legacy Issue Number: 10952
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The concrete QVTrelation syntax references meta-models by an identifier,
    which define TypedModel.usedPackages in the abstract syntax.

    The meta-model identifier is not present in the abstract syntax,
    making it difficult to unparse the abstract syntax back to concrete.

    It is possible in principle to invert the meta-model-id to package
    conversion to identify meta-model-ids that could give the required forward
    conversion, but there is no guarantee that this would be unique.

    Suggest:

    Add TypedModel.metaModelNames : String[0..*] to persist these annotations

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Comment:
    The 'metaModelId' of concrete syntax is actually a reference to the package name of a used package in the abstract syntax. There is no need to provide anything more in the abstract syntax.
    Resolution: No change

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.13.1 Scoped transformation name

  • Key: QVT-16
  • Legacy Issue Number: 10949
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    How can a transformation be defined in a nested package?

    Surely OMG should be able to define org.omg.qvt.RelationToCore?

    Suggest: introduce a Java-like package statement.

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) Within 7.13 Section, add a preliminary sub-section named "Compilation Units" with the following content.

    A relational transformation specification provided using concrete syntax in a text file may import one or more compilation units. A compilation unit corresponds to another relational transformation definition given either using the concrete syntax definition or the abstract representation.

    Within an import statement a compilation unit is referenced by means of a simple unqualified aplhanumeric identifier - with no special characters and blanks characters allowed - or is referenced by means of a qualified one. In the latter case, the qualification is given by a list of namespaces separated by the dot character. These namespaces have no representation in the metamodel. It is up to an implementation to make a correspondence between the namespace hierarchy and the hierarchy of the file system.

    (2) In section 8.4.1, replace the first paragraph by the following two paragraphs:

    An operational transformation specification provided using concrete syntax in a text file may import one or more compilation units. A compilation unit corresponds to another operational transformation or library definition given either using the concrete syntax definition or the abstract representation.

    Within an import statement a compilation unit is referenced by means of a simple unqualified aplhanumeric identifier - with no special characters and blanks characters allowed - or is referenced by means of a qualified one. In the latter case, the qualification is given by a list of namespaces separated by the dot character. These namespaces have no representation in the metamodel. It is up to an implementation to make a correspondence between the namespace hierarchy and the hierarchy of the file system.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Distinguishing pure syntactic tags from other tags in QVTOperational

  • Key: QVT-15
  • Legacy Issue Number: 10929
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Need to distinguish between tags that are owned by model elements from tags
    which are purely syntactical (like the 'alias' tag). At least the complete list of the
    syntactical tags should be provided

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    In Section 8.3.11 Predefined Tags. Add the following sentence after the sentence describing the "alias" tag.
    "This is a purely syntactic tag. Consequently the representation of this Tag can be skipped after parsing the source file".

  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.13.1 Collection conversions

  • Key: QVT-18
  • Legacy Issue Number: 10951
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Given a property template in which the property is a collection, under what
    circumstances:

    Is it permissible for the right hand side to be a non-collection?

    Is it permissible for the right hand side to be a different collection kind.

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Add the following to the description of class PropertyTemplateItem in section 7.11.2.4:

    A property template item has a valid match when the value of the referred property matches the value specified by the value expression. The following rules apply when the value is specified by a template expression:

    • If the value expression is an object template expression and the referred property is single-valued then the property value must match the object template expression.
    • If the value expression is an object template expression and the referred property is multi-valued then at least one of the property values must match the object template expression.
    • If the value expression is a collection template expression and the referred property is single-valued then the property value is treated as a singleton collection that must match the collection template expression
    • If the value expression is a collection template expression and the referred property is multi-valued then the collection of property values must match the collection template expression. The following rules apply:
      o If the property value is a set, then the collection type of the collection template expression must be a set.
      o If the property value is an ordered set, then the collection type of the collection template expression can be one of set, sequence or ordered set.
      o If the property value is a sequence, then the collection type of the collection template expression can be one of set, sequence or ordered set. When the collection type is a set or an ordered set, a valid match requires that each value of the property be unique.
  • Updated: Fri, 6 Mar 2015 20:54 GMT

7.13.1 Model class name semantics

  • Key: QVT-17
  • Legacy Issue Number: 10950
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Given a class pack::age::cls in mdlid, in what circumstances are

    cls
    age::cls
    pack::cls
    mdlid::cls
    mdlid::pack::cls

    permissible model references?

    Suggest:

    The full mdlid::pack::age::cls is always permissible.
    Omitted qualifications are permitted if a search of all possibilities for
    omitted elements yields a unique solution.

    In particular same model transformations should not need the redundant mdlid.

  • Reported: QVT 1.0b1 — Mon, 26 Mar 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Comment:
    The semantics of how named elements are identified in package namespaces comes from MOF. QVT has no special semantics of its own for this purpose.
    Resolution: No change

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Extent of intermediate classes in QVT Operational

  • Key: QVT-14
  • Legacy Issue Number: 10928
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The extent when creating instances of intermediate classes cannot be determined
    if there is no modeltype associated with the definition of intermediate classes.

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In section 8.2.1.3 Module, in the description of derived property ownedType, append the following sentence: If the module contains the declaration of intermediate classes (see OperationalTransformation::intermediateClass definition) a model type named '_INTERMEDIATE' is automatically defined and inserted in the list of owned types. The model type package is also named '_INTERMEDIATE'.
    This package is nested by the transformation (by means of the inherited Package::nestedPackage property).
    (2) In section 8.2.1.3 Module, in the description of the property usedModelType replace the description paragraph by: "The list of model types being used. This includes the implicit '_INTERMEDIATE' model type when available (see ownedType description).
    (3) In Section 8.2.1.1 Transformation, in the description of the property modelParameter, add the sentence "If the transformation defines intermediate classes this contains a parameter named '_intermediate'
    of the type '_INTERMEDIATE' (see 'Module::ownedType' property description).

  • Updated: Fri, 6 Mar 2015 20:54 GMT

The QVT Operational StdLib has various mispellings and copy-paste errors

  • Key: QVT-13
  • Legacy Issue Number: 10927
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The QVT Operational StdLib has various mispellings and copy-paste errors and lacks
    sometimes of precision. Here's a list of encountered problems:

    • List<Element> => List(Element)
    • MarkedAs has a string parameter
    • Missing a 'stereotypedKindOf'
    • Return type of Model::objects() should be a Sequence
    • Return type of Dictionary::size should be 'Integer'
    • Copy-paste error in values(), keys() and isEmpty() Dictionary
      operations: unexpected 'size' in signature
    • In List, "all aperations in OCL..." should be replaced by something
      more precise, like
      "all operations of the OCL Collection type are available"
    • List::insertAt : int => Integer. Should indicate the starting position for the index.
    • String::format Should indicate whether the type is a tuple or a dictionary,
      may be by splitting the operation in two operations.
    • Indentation problem starting from String::substringAfter
    • String::equals should better be named 'match' is different than the MOF Object::equals
    • Integer::range, the type of start and end parameters is missing
    • An M1 type named 'Property' is missing to comply with MOF reflexive API
    • The result type of Status::raisedException should be a M1 class named
      'Exception' (base type of all exceptions.
    • Methods imported from MOF::reflect should be repeated in the spec for clarity
      - Alphanumeric names for pre-defined OCL operations like '+', '-' … were missing.
    • The return type of objectsOfType should depend on the argument (like oclAsType).
  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution:

    (1) In Section 8.3 Replace all occurrences of List<Element> by List(Element)
    (2) Change the signature of markedAs: Element::markedAs(String value) : Boolean
    (3) After the operation "stereotypedBy", add the operation "stereotypedStrictlyBy" with the following definition: Element::stereotypedStrictlyBy(String) : Boolean : Same than stereotypedBy except that base stereotype are not taken into account.
    (4) Change the signature of Dictionary::size as: Dictionary(KeyT,T)::size() : Integer
    (5) Change the signature of Dictionary::values, Dictionary::keys and Dictionary:isEmpty as follows:
    Dictionary(KeyT,T)::values() : List(T)
    Dictionary(KeyT,T)::Keys() : List(KeyT)
    Dictionary(KeyT,T)::isEmpty() : Boolean,
    (6) Replace "all operations in OCL are available" by " all operations of the OCL Collection type are available"
    (7) In insertAt description, add the following sentence: "The index starts at zero (in compliance with OCL convention)"
    (8) Rename String::equals by String::match with the following signature and description.
    String::match (String matchpattern) : Boolean
    Returns true if the value of the String matches the regular expression, else return false. The syntax of regular expression is the syntax or regular expression in Java language.
    (9) Change the signature of the range operation as follows:
    Integer::range (start: Integer,end: Integer) : List(Element)
    (10) In Section 8.3.1 Predefined types, add the definition of a 'Exception' type with the following definition: This M1 class named Exception represents the base class for exceptions. The M1 Exception type is an instance of the Class metatype.
    (11) In Section 8.3.3, replace " All MOF reflective operations applying on Objects " by The reflective operations inherited from MOF that are available in QVT specification are:
    (12) In Section 8.3.2 Synonym types and synonym operations, insert the following paragraph at the end: The following synonyms are defined for the following pre-defined OCL operations:
    String : operator+ -> concat
    Integer: operator+ -> plus,
    operator- (binary) -> minus,
    operator- (unary) -> unaryminus
    operator* -> multiply
    operator/ -> divide
    Real: operator+ -> plus,
    operator- (binary) -> minus,
    operator- (unary) -> unaryminus
    operator* -> multiply
    operator/ -> divide

    (13) In the description of objectsOfType, add the following sentence:
    " The returned Element type is the type denoted by the type expression." And correct the signature as follow:
    Model::objectsOfType(OclType) : Set(Element)
    (14) Within section 8.3.8 Operation list, add the following operations:
    Set(T)::asList() : List(T)
    OrderedSet(T)::asList() : List(T)
    Sequence(T)::asList() : List(T)
    Bag(T)::asList() : List(T)

    Converts a collection into the equivalent mutable list.
    (15) In the signature of the following operations replace the result type by Set(Element): subobjects, allSubobjects, subobjectsOfType, allSubobjectsOfType, allsubobjectsOfKind. (Remark: this is in line with the result type of Model::objects()). Also in this signature replace 'TypeType' by 'OclType' (which is the M1 type).

    NOTE: Typo fixes after AB review
    In addition the following fixes need to be done in section 8.3.9 Operations on strings: the syntax for parameters should be: <paramname> : <type> instead of <type> <paramname> as found in: 'replace', 'equals', 'equalsIgnoreCase', 'find', 'rfind', 'startStrCounter', 'getStrCounter', 'incStrCounter'. Also 'void' type should be spelled 'Void' in 8.3.8 for 'add', 'prepend' and 'insertAt' signature.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Clarify the return type of xselect operator

  • Key: QVT-12
  • Legacy Issue Number: 10926
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    Various examples provided in the spec suggest that the return type of xselect operator
    (bracket notation) depends on the filter expression (implicit casting).
    However this is currently not explained in the definition of the operator.

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    (1) In section 8.2.2.7 ImperativeIterateExp add the following sentence at the end of the 2nd paragraph: "Also a specific implicit type casting rule applies depending on the condition expression that is associated with the iteration (see implicit type casting rules sub-section)."
    (2) Before the Semantics sub-section, add a sub-section named "Type re-casting" with the following text:
    """The type of the sequence or the object returned by the ImperativeIterateExp construct depends on the usage of the 'condition' expression is used: if the condition is an instance of TypeExp, the condition is firstly re-interpreted as a Boolean expression of the form 'oclIsKind(TypeExp)'. Additionally, the returned sequence (resp. the returned single object) is re-casted as a sequence of the type denoted in the type expression (resp. as an instance of the denoted type). If the 'condition' expression is not used or is not a TypeExp instance no implicit re-casting semantic applies.
    Example:
    self.mysequence[MyType]
    // the type of this expression is a Sequence of 'MyList'
    self.mysequence[oclIsKind(MyType) and name=="foo"]
    // the type is the type of the self.mysequence source expression
    """
    NOTE: There is a typo in the resolution text within item (2): the sentence
    "// the type of this expression is a Sequence of 'MyList'" should be
    "// the type of this expression is a Sequence of 'MyType'"

  • Updated: Fri, 6 Mar 2015 20:54 GMT

Incomplete specification for the resolution operation ResolveExp

  • Key: QVT-11
  • Legacy Issue Number: 10925
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The type returned by ResolveExp and ResolveInRule is not clear: a OclAny?
    The type of the filtered objects?
    The semantics of ResolveInRule when no source is passed is also unclear.
    The variant 'invresolveIn' (combining inverse and rule scope) is missing.
    Consider simplifying ResolveExp definition: instead of an arbitrary condition
    expression use a type reference representing both: the returned type and
    the filtering expression

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution:

    (1) Skip the three resolution instructions defined for issue 9390 in ballot1.
    (2) Add a new property "ResolveExp::target : Variable [0..1] composes" with the following description text: """a variable whose type indicates the primary condition for filtering the potential result objects. The extra condition (see 'condition' property) may use the variable to express a complementary filtering condition. This variable also has an influence in the type returned by the resolve expression (see type returned by the resolution expression)."""
    (3) In Section 8.2.1.22 ResolveExp, just before "semantics" sub-section add a sub-section "Type of a resolve expression" with the following content text: "The type of a ResolveExp expression depends on the type of the 'target' variable and on the multiplicity indication (the 'one' property). If 'one' is true, the returned type is the type of the 'target' variable. Otherwise, the returned type is a Sequence of the type of the 'target' variable. If no target variable is provided the type is either Object (the type representing all types, see Section 8.3.1) either a Sequence of Objects - depending on the multiplicity"
    (4) In section 8.2.1.22 ResolveInExp, just before "superclasses" sub-section add the section: "The type of a ResolveInExp expression is computed using the same rules as for the type of a ResolveExp."
    (5) In section 8.2.1.22 ResolveInExp, after the sentence " All variants described for the resolve expression are applicable to the resolve in expression" add a new paragraph with the sentence "A resolve in expression may be applied with an empty source argument. In that case it inspects all objects created or updated by the rule (instead of inspecting only the objects created or updated from the source object) ."
    (6) In section 8.1.22 ResolveExp, replace the content of Notation section by:
    The notation uses one of these three forms:
    <resolve_op> '(' (<identifier> ':' )? <typespec> ')' // no extra condition

    <resolve_op> '(' (<identifier> ':' )? <typespec> ' ' <expression> ')' // with extra condition
    <resolve_op> '(' ')' // no target, no extra condition
    where the <resolve_op> is one of the following: resolve and invresolve and invresolveone. When isDeferred is true the late keyword is used before the operation name. The resolution operator may be called on a list. This is a shorthand for invoking it in the body of a ForEachExpr expression.
    myresult := mysourceobject.resolveone(Table);
    myresult := mysourceobject.resolveone(t:Table
    t.name.startsWith("_"));
    myprop := mylist->late resolve(Table);
    // shorthand for mylist->forEach i.late resolve(Table)

    (7) In section 8.2.1.22 ResolveInExp, replace the sentence "The notation uses …" by the sentence "The notation uses the same syntax as ResolveExp except that the operation names are one of the following resolveIn, resolveoneIn, invresolveIn or invresolveoneIn".The two variants starting with "inv" prefix correspond to the "inverse" variant (ResolveExp::isInverse == true). Also, after "is the condition to evaluate?", add the sentence: "The reference to the rule is given by a qualified identifier (context class and name). As a limitation of the concrete syntax, it is not possible to provide a reference to a rule is there is an ambiguity (having the same name and context but different parameters).
    (8) In Section 8.2.2.5, replace the sentence defining the "condition" property by "An optional additional Boolean condition to be evaluated to filter the potential results."

  • Updated: Fri, 6 Mar 2015 20:54 GMT

The representation and the containment of 'this' variable is missing

  • Key: QVT-10
  • Legacy Issue Number: 10924
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    In the section defining the OperationalTransformation class a 'this' predefined variable
    is defined but its exact representation and containment in the metamodel is missing.

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution:

    (1) Add the composite property Module::ownedVariable of type Variable, with multiplicity '*' with the following definition:
    "The list of variables owned by the module."

    (2) Update the diagram Figure 8.1 with the new 'ownedVariable' association (see diagram the Appendix C ("Updated Diagrams") of this report.

    (3) In section 8.2.2.1 (Operational Transformation), after the sentence " The instantiation of the transformation is either implicit (the instance being referred though the predefined this variable) or explicit. In the latter case an InstantiationExp expression is used. " add the sentence: The implicit 'this' variable is represented by a Variable instance named "this" having the transformation as its type and owned by the transformation through the 'ownedVariable' property.

  • Updated: Fri, 6 Mar 2015 20:54 GMT

The BNF syntax of QVTOperational is not complete

  • Key: QVT-9
  • Legacy Issue Number: 10923
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    The BNF syntax of QVTOperational is not complete. Various elements are missing in the QVTOperational BNF like the 'late' keyword and the notation for enumeration and datatypes.

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    The grammar was out of sync in respect with the metamodel. The issue is resolved globally by providing by new version of the grammar. The following text should replace the actual content of section 8.4.6.1.

    // keywords

    Bag, Collection, Dict, OrderedSet, Sequence, Set, Tuple, abstract,
    access, and, any, assert, blackbox, break, class, collect,
    collectNested, collectOne, collectselect, collectselectOne,
    composes, compute, configuration, constructor, continue, datatype,
    default, derived, disjuncts, do, elif, else, end, endif, enforcing,
    enum, except, exists, extends, extends, false, forAll, forEach ,
    forOne, from, helper, if, implies, import , in, inherits, init,
    inout, intermediate, invresolve, invresolveIn, invresolveone,
    invresolveoneIn , isUnique, iterate, late, let, library, literal,
    log, main, map, mapping, merges, metamodel, modeltype, new, not,
    null, object, one, or, out, package, population, primitive, property,
    query, raise, refines, refines, reject, resolve, resolveIn, resolveone,
    resolveoneIn, return, select, selectOne, sortedBy, static, static,
    switch, tag, then, transformation, true, try, typedef, unlimited,
    uses, when, where, while, with, xcollect , xmap, xor, xselect

    // start rule
    <topLevel> ::= <import>* <unit_definition>*

    <import> ::= 'from' <unit> 'import' (<identifier_list> | '*') ';'

    'import' <unit> ';'
    <unit> ::= <identifier> ('.' <identifier>)*

    <identifier_list> ::= <identifier> (',' <identifier>)*

    // definitions in a compilation unit
    <unit_definition>
    ::= <transformation>

    <library>
    <access_usage> ';'
    <modeltype>
    <metamodel>
    <class>
    <property>
    <helper>
    <constructor>
    <entry>
    <mapping>
    <tag>
    <typedef>

    // Transformation and library definitions

    <transformation> ::= <transformation_h> (";" | '

    {' <module_definition>* '}' ';'?)
    <library> ::= <library_h> (";" | '{' <module_definition>* '}

    ' ';')

    // Transformation header
    <transformation_h> ::= <qualifier>* 'transformation' <identifier>
    <transformation_signature> <transformation_usage_refine>?
    <transformation_usage_refine> ::= <module_usage> | <transformation_refine>
    <transformation_signature> ::= <simple_signature>
    <transformation_refine> ::= 'refines' <moduleref> 'enforcing' <identifier>

    // Library header
    <library_h> ::= 'library' <identifier> <library_signature>? <module_usage>?
    <library_signature> ::= <simple_signature>

    // import of transformation and library
    <module_usage> ::= <access_usage> | <extends_usage>
    <access_usage> ::= 'access' <module_kind>? <moduleref_list>
    <extends_usage> ::= 'extends' <module_kind>? <moduleref_list>
    <module_kind> ::= 'transformation' | 'library'
    <moduleref_list> ::= <moduleref> (',' <moduleref>)*
    <moduleref> ::= <scoped_identifier> <simple_signature>?

    // module definitions
    <module_definition>
    ::= <class>

    <property>
    <helper>
    <constructor>
    <entry>
    <mapping>
    <tag>
    <typedef>

    // general purpose grammar rules
    <qualifier> ::= 'blackbox' | 'abstract' | 'static'
    <complete_signature> ::= <simple_signature> (':' param_list)?
    <simple_signature> ::= '(' <param_list>? ')'
    <param_list> ::= <param> (',' <param>)*
    <param> ::= <param_direction>? <declarator>
    <param_direction> ::= 'in' | 'inout' | 'out'
    <simple_declarator> ::= <typespec>

    <scoped_identifier> ':' <typespec>
    <declarator> ::= <typespec> <init_part>?
    <scoped_identifier> ':' <typespec> <init_part>?
    <simple_declarator_list> ::= <simple_declarator> (',' <simple_declarator>)*
    <declarator_list> ::= <declarator> (',' <declarator>)*
    <declarator_semi_list> ::= <declarator> (';' <declarator>)*
    <init_part> ::= <init_op> <expression>
    <init_op> ::= '='
    ':=' '::='
    <typespec> ::= <type_reference> <extent_location>?
    <type_reference> ::= <scoped_identifier>
    <complex_type>
    <extent_location> ::= '@' <identifier>
    <complex_type> ::= <complex_type_key>
    <collection_key> '(' <typespec> ')'
    'Tuple' '(' <declarator_list> ')'
    'Dict' '(' <typespec> ',' <typespec> ')'
    <complex_type_key> ::= <collection_key>
    'Dict' 'Tuple'
    <collection_key> ::= 'Collection'
    'Set' 'OrderedSet' 'Sequence' 'Bag'
    'List'
    <scoped_identifier> ::= <identifier> ('::' <identifier>)*
    <scoped_identifier_list> ::= <scoped_identifier> (',' <scoped_identifier>)*
    <expression_list> ::= <expression_semi_list> ';'?
    <expression_semi_list> ::= <expression> (';' <expression>)*
    <expression_comma_list> ::= <expression> (',' <expression>)*
    <expression_block> ::= ' {' <expression_list>? '}

    '

    // model types compliance and metamodel declarations
    <modeltype> ::= 'modeltype' <identifier> <compliance_kind>?
    'uses' <packageref_list> <modeltype_where>? ';'
    <modeltype_where> ::= 'where' <expression_block>
    <packageref_list> ::= <packageref> (',' <packageref>)*
    <packageref> ::= (<scoped_identifier> ( '(' <uri> ')' )? | <uri>)
    <compliance_kind> ::= <STRING> // like: "strict" and "effective"
    <uri> ::= <STRING>

    // Syntax for defining explicitly metamodel contents
    <metamodel> ::= <metamodel_h> (";" | '

    {' <metamodel_def>* '}

    ' ';')
    <metamodel_h> ::= ('metamodel' | 'package') scoped_identifier
    <metamodel_def> ::= <class> | <enumeration> | <tag>

    <class> ::= <class_h> (";" | '

    {' <class_feature_list>? '}

    ' ';')
    <class_h> ::= <class_info> <scoped_identifier> <class_extension>?
    <class_info> ::= 'datatype'

    'primitive'
    'intermediate'? <qualifier>* 'class'
    <class_extension> ::= 'extends' <scoped_identifier_list>
    <class_feature_list> ::= <class_feature> (';' <class_feature>)*
    <class_feature> ::= <class_property>
    <class_operation> <tag>

    <class_property> ::= <feature_key>? <declarator> <multiplicity>?
    <opposite_property>?
    <feature_key> ::= 'composes' | 'derived' | 'static'
    <multiplicity> ::= '[' multiplicity_range ']'
    <multiplicity_range> ::= <INTEGER> | '*' | <INTEGER> '...' <INTEGER>
    <class_operation> ::= <feature_key>? <declarator> <complete_signature>

    <enumeration> ::= <enumeration_h> ';'

    <enumeration_h> ' {' <identifier_list> '}

    ' ';'?

    <enumeration_h> ::= 'enum' <identifier>
    <opposite_property> ::= 'opposites' <identifier>

    <tag> ::= 'tag' <tagid> <scoped_identifier> ('=' <tagvalue>)? ';'
    <tagid> ::= <STRING>
    <tagvalue> :: <expression>

    // typedefs
    <typedef> ::= 'typedef' <identifier> '=' <typespec> (typedef_condition)? ';'
    <typedef_condition> ::= '[' <expression> ']'

    // Properties in transformation
    <property> ::= 'intermediate'? <property_key>+ <declarator> ';'
    <property_key> ::= 'derived' | 'literal' | 'configuration' | 'property'

    // Syntax for helper operations
    <helper> ::= <helper_decl> | <helper_simple_def> | <helper_compound_def>
    <helper_header> ::= <helper_info> <scoped_identifier> <complete_signature>
    <helper_info> ::= <qualifier>* <helper_kind>
    <helper_kind> ::= 'helper' | 'query'
    <helper_decl> ::= <helper_header> ';'
    <helper_simple_def> ::= <helper_header> '=' <expression> ';'
    <helper_compound_def> ::= <helper_header> <expression_block> ';'?

    // Syntax for constructors
    <constructor> ::= <constructor_decl> | <constructor_def>
    <constructor_header> ::= <qualifier>* 'constructor' <scoped_identifier>
    <simple_signature>
    <constructor_decl> ::= <constructor_header> ';'
    <constructor_def> ::= <constructor_header> <expression_block> ';'?

    // Syntax for entries
    <entry> ::= <entry_decl> | <entry_def>
    <entry_header> :: 'main' <simple_signature>
    <entry_decl> ::= <entry_header> ';'
    <entry_def> ::= <entry_header> <expression_block> ';'?

    // syntax for mapping operations
    <mapping> ::= <mapping_decl> | <mapping_def>
    <mapping_decl> ::= <mapping_full_header> ';'
    <mapping_def> ::= <mapping_full_header> '

    {' <mapping_body> '}

    ' ';'?
    <mapping_full_header> ::= <mapping_header> <when>? <where>?
    <mapping_header> ::= <qualifier>* 'mapping' <param_direction>?
    <scoped_identifier> <complete_signature> <mapping_extra>*
    <mapping_extra> ::= <mapping_extension> | <mapping_refinement>
    <mapping_extension> ::= <mapping_extension_key> <scoped_identifier_list>
    <mapping_extension_key> ::= 'inherits' | 'merges' | 'disjuncts'
    <when> ::= 'when' <expression_block>
    <where> ::= 'where' <expression_block>
    <mapping_refinement> ::= 'refines' <scoped_identifier_list>
    <mapping_body> ::= <init_section>? <population_section>? <end_section>?
    <init_section> ::= 'init' <expression_block>
    <population_section> ::= <expression_list>

    'population' <expression_block>
    <end_section> ::= 'end' <expression_block>

    // Expressions

    <expression> ::= <assign_exp>

    <let_exp>
    <var_init_exp>

    <assign_exp> ::= <implies_exp>

    <unary_exp> <assign_op> <expression> <default_val>?
    <unary_exp> <assign_op> <expression_block> <default_val>?

    <assign_op> := ':=' | '::=' | '+=' | '-='

    <default_val> ::= 'default' <assign_exp>

    <implies_exp> ::= <or_exp>

    <implies_exp> 'implies' <or_exp>

    <or_exp> ::= <and_exp>

    <or_exp> <or_op> <and_exp>

    <or_op> ::= 'or' | 'xor'

    <and_exp> ::= <cmp_exp>

    <and_exp> 'and' <cmp_exp>

    <cmp_exp> ::= <additive_exp>

    <cmp_exp> <cmp_op> <additive_exp>

    <cmp_op> ::= '=' | '==' | '<>' | '<' | '>' | '<=' | '>='

    <additive_exp> ::= <mult_exp>

    <additive_exp> <add_op> <mult_exp>

    <add_op> ::= '+' | '-'

    <mult_exp> ::= <unary_exp>

    <mult_exp> <mult_op> <unary_exp>

    <mult_op> ::= '*' | '/' | '%'

    <unary_exp> ::= <postfix_exp>

    <unary_op> <unary_exp>

    <unary_op> ::= '-' | 'not' | '#' | '##' | '*'

    <postfix_exp> ::= <primary_exp>

    <postfix_exp> '(' <arg_list>? ')'
    <postfix_exp> '!'? '[' <declarator_vsep>? <expression> ']'
    <postfix_exp> <access_op>
    (<scoped_identifier>
    <iterator_exp> <block_exp>
    <control_exp> <rule_call_exp>)
    <postfix_exp> <resolve_exp>
    <postfix_exp> <resolve_in_exp>

    <declarator_vsep> ::= <simple_declarator> '|'
    <multi_declarator_vsep> ::= <simple_declarator_list> '|'

    <resolve_exp> ::= <resolve_key> '(' <resolve_condition>? ')'
    <resolve_condition> ::= <declarator> ('|' <expression>)?
    <resolve_op> ::= 'late'? <resolve_kind>
    <resolve_kind> ::= 'resolve' | 'resolveone' | 'invresolve' | 'invresolveone'

    <resolve_in_exp> ::= <resolve_in_key> '(' <scoped_identifier>
    (',' <resolve_condition>)?')'
    <resolve_in_op> ::= 'late'? <resolve_in_kind>
    <resolve_in_kind> ::= 'resolveIn' | 'resolveoneIn' | 'invresolveIn' | 'invresolveoneIn'

    <access_op> ::= '.' | '>' | '!>'

    <primary_exp> ::= <literal>

    <scoped_identifier>
    <if_exp>
    <block_exp>
    <control_exp>
    <rule_call_exp>
    <quit_exp>
    <try_exp>
    <raise_exp>
    <assert_exp>
    <log_exp>
    '(' <expression> ')'

    <literal> ::= <literal_simple>

    <literal_complex>

    <literal_simple> ::= <INTEGER> | <FLOAT> | <STRING>

    'true' 'false' 'unlimited' 'null'

    <literal_complex> ::= <literal_collection>

    <literal_tuple>
    <literal_dict>

    <literal_collection> ::= <collection_key> '

    {' <collection_item_list>? '}

    '

    <literal_tuple> ::= 'Tuple' '

    {' <tuple_item_list>? '}

    '

    <literal_dict> ::= 'Dict' '

    {' <dict_item_list>? '}

    '

    <collection_item_list> ::= <expression_comma_list>
    <tuple_item_list> ::= <declarator_list>
    <dict_item_list> ::= <dict_item> (',' <dict_item>)*
    <dict_item> ::= <literal_simple> '=' <expression>

    <if_exp> ::= 'if' <expression> <then_part>
    <elif_part>* <else_part>? 'endif'
    <then_part> ::= 'then' <if_body>
    <elif_part> ::= 'elif' <if_body>
    <else_part> ::= 'else' <if_body>
    <if_body> ::= <expression> | <expression_block>

    <iterator_exp> ::= <simple_iterator_op> '(' <declarator_vsep>? <expression> ')'

    <multi_iterator_op> '(' <multi_declarator_vsep>? <expression> ')'
    <iterate_exp>

    <simple_iterator_op> ::= 'reject' | 'select' | 'collect' | 'exists'

    'one' 'any' 'isUnique' 'collectNested'
    'sortedBy' 'xselect' 'xcollect'
    'selectOne' 'collectOne'
    'collectselect' 'collectselectOne'

    <multi_iterator_op> ::= 'forAll'

    <iterate_exp> ::= 'iterate' '(' <declarator_list> ';'
    <declarator> '|' <expression> ')'

    <iter_declarator> ::= <declarator>
    <iter_declarator_list> ::= <declarator_list>

    <block_exp> ::= (<object_exp> | <do_exp> | <switch_exp>)

    <object_exp> ::= 'object' ('(' <iter_declarator> ')')? <object_declarator>
    <expression_block>
    <object_declarator> ::= <typespec> | <identifier> ':' <typespec>?

    <do_exp> ::= 'do' <expression_block>

    <switch_exp> ::= 'switch' ('(' <iter_declarator> ')')? <switch_body>
    <switch_body> ::= '

    {' <switch_alt>+ <switch_else>? '}

    '
    <switch_alt> ::= '(' <expression> ')' '?' <expression> ';'
    <switch_else> ::= 'else' '?' <expression> ';'

    <control_exp> ::= (<while_exp> | <compute_exp> | <for_exp>)

    <while_exp> ::= 'while' '(' (<declarator> ';')? <expression> ')'
    <expression_block>
    <compute_exp> ::= 'compute' '(' <declarator> ')' <expression_block>
    <for_exp> ::= ('forEach' | 'forOne') '(' <iter_declarator_list>
    (';' <declarator>)? ('|' <expression>)? ')' <expression_block>

    <rule_call_exp> ::= ('map' | 'xmap' | 'new' )
    ('(' <declarator> ')')? <scoped_identifier>

    <let_exp> ::= 'let' <declarator_list> 'in' <expression>

    <var_init_exp> ::= 'var' <declarator>

    'var' '(' <declarator_list> ')'

    <quit_exp> ::= 'break' | 'continue' | <return_exp>)

    <return_exp> ::= 'return' ('(' <expression> ')')?

    <try_exp> ::= 'try' <expression_block> <except>+

    <except> ::= 'except' '(' <scoped_identifier_list> ')' <expression_block>

    <raise_exp> ::= 'raise' <scoped_identifier> ('(' <arg_list>? ')')?
    <arg_list> ::= <expression_comma_list>

    <assert_exp> ::= 'assert' <identifier>? '(' <expression> ')'
    ( 'with' <log_exp> )?

    <log_exp> ::= 'log' '(' <arg_list> ')' ('when' <expression>)?

  • Updated: Fri, 6 Mar 2015 20:54 GMT

rules for solving type identifiers are missing in the QVTOperational syntax

  • Key: QVT-8
  • Legacy Issue Number: 10922
  • Status: closed  
  • Source: France Telecom R&D ( Mariano Belaunde)
  • Summary:

    ISSUE: The rules for solving type identifiers are missing in the QVTOperational syntax.

    The resolution rules when referencing types identifiers is missing in the
    QVTOperational syntax. For instance it is not clear weather unqualified type references
    should first be searched in the modeltype packages or in the transformation module.

  • Reported: QVT 1.0b1 — Tue, 17 Apr 2007 04:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Add a new sub-section 8.4.7 (after sub-section 8.4.6 BNF) named "Solving type identifiers" with the following content:

    When referring to a type within an operational transformation definition it is possible to either qualify the type name with a model type or a package name, or, alternatively, leave the name of the type unqualified. In the latter case, a list of rules applies to resolve the symbol into the denoted type. If the resolution rule provides more than one result the specification is erroneous.

    • Firstly a type definition existing at the level of the current module (a transformation or a library) is searched.
    • In not found, all the packages of the model types declared in the module are recursively visited to found a type with the same name.
  • Updated: Fri, 6 Mar 2015 20:54 GMT

Relations language should support "default assignments"

  • Key: QVT-7
  • Legacy Issue Number: 10785
  • Status: closed  
  • Source: TCS ( Sreedhar Reddy)
  • Summary:

    Relations language should also support the 'default assignments' feature supported by
    the core language. This feature allows default values to be specified for the variables of
    an enforced target domain. Default assignments do not play a role in checking.

  • Reported: QVT 1.0b1 — Thu, 22 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Update the relations meta model in Fig 7.7 QVT Relation Package to add class 'RelationDomainAssignment'; class Assignment to have two associations to OclExpression - 'variable' and 'value'; class RelationDomain to have the association 'defaultAssignment' with class Assignment. Add the following text description in section 7.11.3.

    Add the following to the description of class RelationDomain.
    In bidirectional relations, sometimes it is not be possible to automatically compute the values required to enforce a relation in the reverse direction. This can be addressed by allowing a domain to specify default value assignments for its variables. The default assignments are executed only during enforcement and the values they assign must be capable of satisfying the relationship condition. Default assignments do not play a role in checking.

    Associations
    defaultAssignment : RelationDomainAssignment [0..*] Composes - the assignments that set default values for the variables of the domain that are required for its enforcement.

    Class RelationDomainAssignment
    A relation domain assignment sets the value of a domain variable by evaluating the associated expression in the context of a relation.

    Associations
    variable : Variable [1] - the variable being assigned
    valueExp : OclExpression [1] Composes - the expression that provides the value of the variable.

    Concrete syntax:
    Extend the production of <domain> with ['default_values' '

    {' (<assignmentExp>)+ '}

    ']
    <assignmentExp> ::= <identifier> '=' <OclExpressionCS> ';'

    The updated grammar is given in Appendix A of this report. This should replace the grammar given in section 7.13.

    Discussion:

    To see how this feature helps, let's consider the following bi-directional relation:

    top relation AttributeToColumn
    {
    n,utyp,rtyp : String;

    enforce domain uml
    a:Attribute

    { name = n, type = utyp }

    default_values

    { utyp = SqlToUmlDataType(rtyp); }

    ;

    enforce domain rdbms
    c:Column

    { name = n, dataType = rtyp }

    ;

    where

    { rtyp = UmlToSqlDataType(utyp); }

    }

    This relation uses a function in its where clause to compute a database type from an uml type. This works fine when the relation is enforced in the direction of 'rdbms'. It also works fine in 'checkonly' mode. However it does not work when the relation is enforced in the direction of 'uml' as the function 'UmlToSqlDataType' cannot be used to compute the uml type from the database type. We can solve this problem by using the default values section where we put an assignment that computes the required value for the uml domain.

  • Updated: Fri, 6 Mar 2015 20:53 GMT

Relations language

  • Key: QVT-6
  • Legacy Issue Number: 10784
  • Status: closed  
  • Source: TCS ( Sreedhar Reddy)
  • Summary:

    Relations language: It appears redundant to have three different collection template
    expressions, viz. enumeration, comprehension and member selection. They can be unified into
    one expression. Suppose we have an extended member selection expression such as
    the following:
    <collectionTemplate> ::= [<identifier>] ':' <CollectionTypeIdentifierCS>
    '(' <TypeCS> ')'
    ['

    {' <memberSelection> '}

    ']

    <memberSelection> ::= (<identifier> | <objectTemplate> | '_')+
    '++'
    (<identifier> | '_')

    Enumeration can be specified as a collection of members to be matched:
    e.g. cs:Set(Class)

    { c1, c2, c3 ++ _ }


    Comprehension can be specified as a condition that each member of the collection
    must satisfy:
    e.g. cs:Set(Class)

    { cs->forAll(c| <condition>) }

  • Reported: QVT 1.0b1 — Thu, 22 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Suggestion accepted and reflected in the meta model and concrete syntax as follows:

    Meta model:
    Make the following changes to class CollectionTemplateExp in Figure 7.6 - QVT Template Package:
    · Rename the associations 'part' and 'match' to 'member' and 'rest'.
    · Make the 'member' association ordered and set its cardinality to '1..*'; set the cardinality of 'rest' to '1'.

    Modify the text explanation of CollectionTemplateExp in section 7.11.2.3 as follows:

    7.11.2.3 CollectionTemplateExp
    A collection template expression specifies a pattern that matches a collection of elements.
    It specifies a set of member expressions that match individual elements, and a collection-typed variable that matches the rest of the collection. The type of collection that a template matches is given by the referred collection type. If the referred collection type is a sequence then the matching member elements must be present at the head of the sequence in the order specified by the member expressions.

    Superclasses
    TemplateExp

    Associations
    referredCollectionType : CollectionType [1]
    The type of the collection that is being specified. It can be any of the EMOF
    collection types such as Set, Sequence, OrderedSet, etc.

    member : OclExpression [1..*]
    The expressions that the elements of the collection must have matches for. A
    special variable _ may be used to indicate that any arbitrary element may be
    matched and ignored.

    rest : OclExpression [1]
    The variable that the rest of the collection (i.e. excluding elements matched by
    member expressions) must match. A special variable _ may be used to indicate that
    any arbitrary collection may be matched and ignored.

    Concrete syntax:
    <collectionTemplate> ::= [<identifier>] ':' <CollectionTypeIdentifierCS>
    '(' <TypeCS> ')'
    ['

    {' <memberSelection> '}

    ']

    <memberSelection> ::= (<identifier> | <objectTemplate> | '_')+
    '++'
    (<identifier> | '_')

    The updated grammar is given in Appendix A of this report. This replaces the grammar given in section 7.13.

  • Updated: Fri, 6 Mar 2015 20:53 GMT

Identifiers syntax to avoid reserved keywords

  • Key: QVT-5
  • Legacy Issue Number: 10649
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    In order not to define new keywords as reserved:
    Define:

    <relationIdentifier> ::= 'checkonly'
    <relationIdentifier> ::= 'domain'
    <relationIdentifier> ::= 'enforce'
    <relationIdentifier> ::= 'extends'
    <relationIdentifier> ::= 'implementedBy'
    <relationIdentifier> ::= 'import'
    <relationIdentifier> ::= 'key'
    <relationIdentifier> ::= 'overrides'
    <relationIdentifier> ::= 'primitive'
    <relationIdentifier> ::= 'query'
    <relationIdentifier> ::= 'relation'
    <relationIdentifier> ::= 'top'
    <relationIdentifier> ::= 'transformation'
    <relationIdentifier> ::= 'when'
    <relationIdentifier> ::= 'where'

    <pathNameCS> ::= <relationIdentifier> – extending OCL to allowing QVTr keywords in expressions

    <simpleNameCS> ::= <relationIdentifier> – extending OCL to allowing QVTr keywords in expressions

    <identifier> ::= IDENTIFIER – all non keyword 'alphanumerics'
    <identifier> ::= <relationIdentifier>
    <identifier> ::= 'self'

  • Reported: QVT 1.0b1 — Tue, 6 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Resolution: No change

    Remark:
    This issue is related to issue 10603. Please refer to the resolution given for issue 10603.
    As per that resolution the grammar will explicitly identify and list the keywords. Keywords may be implemented in one of several ways and we do not think the standard should mandate an implementation choice.

  • Updated: Fri, 6 Mar 2015 20:53 GMT

Collection Type syntax ambiguities

  • Key: QVT-4
  • Legacy Issue Number: 10648
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    In order to avoid ambiguities on collectionTypeCS:

    In <objectTemplate >
    Replace: <typeCS>
    By: <objectTypeCS >
    objectTypeCS ::= tupleTypeCS | primitiveTypeCS | pathNameCS

    This disambiguates. I don't know whether the residual case of

    ':' <colectionTypeCS> '{' ...

    without an identifier has any meaning. If it does, it would seem like a collection
    rather than object behaviour.

  • Reported: QVT 1.0b1 — Tue, 6 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 20:53 GMT

Problem with Domain syntax

  • Key: QVT-3
  • Legacy Issue Number: 10647
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    In order to accommodate top level collection templates in domains

    In <domain>
    Replace: [ <identifier> ] ':' <typeCS>'

    {' <propertyTemplate>* '}

    '
    By: <templateCS>

    (or rather <template> if the missing CS is left omitted)

    ?? since any TemplateExp can have a where, should the [ '

    {' <oclExpressionCS> '}

    ' ]
    in <domain> be part of <template> instead ??

  • Reported: QVT 1.0b1 — Tue, 6 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 20:53 GMT

RelationalCallExp missing

  • Key: QVT-2
  • Legacy Issue Number: 10645
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    Since this is missing from the specification, it is difficult to be sure what the semantics of
    type discrepancies are between invocation and definition. One perspective is that mis-matches
    correspond to overloaded pattern matches so that the first, best or any, or any distinct matches apply
    with a total type inconsistency being a silent error/behaviour. Another perspective is that
    like function calls, all implementation should derive from some abstract interface so that
    all invocations can be type checked against the abstract interface. I think we need some words.
    I prefer complinace with an abstract interface, and invocation of all distinct matches, so that
    when someone extends the transformation exuisting behaviours are not suppressed.

  • Reported: QVT 1.0b1 — Tue, 6 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Add class RelationCallExp in Fig 7.7 QVTRelation package and the following text in section 7.11.3

    RelationCallExp
    A relation call expression specifies the invocation of a relation. A relation may be invoked from the when or where clause of another relation. The expression contains a list of argument expressions corresponding to the domains of the relation. The number and types of the arguments must match the number of domains and types of the root variables of the domains respectively.

    Superclasses
    OclExpression
    Associations
    argument : OclExpression [2..*]

    {Composes, Ordered}

    - Arguments to the relation call.
    referredRelation : Relation [1] - The relation being invoked.

  • Updated: Fri, 6 Mar 2015 20:53 GMT

Query result syntax

  • Key: QVT-1
  • Legacy Issue Number: 10644
  • Status: closed  
  • Source: Model Driven Solutions ( Dr. Edward Willink)
  • Summary:

    The grammar defines a list of named and typed input parameters and a list of named and typed output results.
    The example uses the conventional named and typed input parameters and a result type, which may be a set.
    Since the latter is what an Operation does, I presume that the QVTrelational concrete syntax is in error.

  • Reported: QVT 1.0b1 — Tue, 6 Feb 2007 05:00 GMT
  • Disposition: Resolved — QVT 1.0
  • Disposition Summary:

    Replace the content of section 7.13.1 and 7.13.2 by the new content given in Appendix A of this report. This new content is the updated grammar correcting typos and other mistakes.

  • Updated: Fri, 6 Mar 2015 20:53 GMT