Issue 4110: Semantics of firing compound transitions still appears to be circular
Issue 4932: Starting state machine
Issue 5107: Starting a state machine
Issue 5886: behaviour of the shallow history state and deep history state
Issue 5977: saying {nonunique} on one end of a binary association is meaningless
Issue 6071: Conditional Node and Loop Node notation missing
Issue 6083: More examples
Issue 6086: More explanation needed on Figure 339
Issue 6088: Parameterization of lifelines
Issue 6114: State extension
Issue 6126: Target pin notation
Issue 6137: Promote local conditions to ExecutableNode
Issue 6150: Notation for method
Issue 6200: UML 2 Super/Metamodel/redefinition and substitutability
Issue 6346: Activity OCL
Issue 6353: Deployment a dependency?
Issue 6368: Join nodes that destroy tokens
Issue 6395: UML 2 Super / State machines / Transition triggers cannot be redefined
Issue 6409: UML 2 Super/Interactions/missing OCL constraints
Issue 6430: UML2 super/ad-03-04-01/Derived attributes and associations
Issue 6441: Integration between behavioral "sublanguages": Interactions and Activities
Issue 6445: Clarification of use case semantics
Issue 6452: UML 2 Super / Missing OCL constraints
Issue 6455: instantiations of Classifiers
Issue 6462: UML 2 Issue: AssociationEnd
Issue 6464: UML 2 Issue: isUnique
Issue 6466: UML 2 Issue: Qualified pathnames
Issue 6470: Section 7.11.2 Association
Issue 6487: Conditions for parameter sets
Issue 6489: Ports in Protocol State Machines
Issue 6495: ptc-03-09-15/Separate classification and generalization in Core::Basic
Issue 6497: ptc-03-09-15/Need for examples to include instance models
Issue 6498: ptc-03-09-15/Explain the new association modeling constructs
Issue 6616: UML Superstructure FTF : isRoot property disappeared
Issue 6624: freeing namespace
Issue 6645: UML 2.0 Superstructure Kernal/Packages
Issue 6681: UML2 Super/Kernel Classes
Issue 6878: UML 2 Infrastructure / rule for redefinition of Property
Issue 6921: Inheritance of 'Enumerations' is not detailed
Issue 6922: Redefinitions of OCL constraints must be aligned with MOF2.0/UML2.0 class R
Issue 6927: UML 2 Super / Interactions / Ambiguous diagram tags
Issue 6975: missing illustrations of graphical paths for create and destroy messages
Issue 7051: StateMachine - Constraints
Issue 7223: Questions about DataTypes and generalization
Issue 7227: UML2 Super/Deployment/inheritance
Issue 7229: UML2 Super/Deployments/Manifestation
Issue 7254: completion transitions
Issue 7255: Priority of the joint transition
Issue 7329: large overlap between structural features and variables
Issue 7337: inconsistency in the action model
Issue 7338: metaattribute isReadOnly
Issue 7372: surface notation for state machines
Issue 7398: Provide exception handling for all behaviors.
Issue 7400: AssociationClass
Issue 7620: Coupling between StateMachines and Activities
Issue 7910: isComposite inconsistency in UML 2.0 and MOF 2.0
Issue 7952: Alternative entry and exit point notation is ambiguous
Issue 7969: Section: 9.14.1
Issue 7993: Use case extension inconsistencies
Issue 7997: Too much navigability from Generalizations
Issue 8012: Section: Classes, Behavior
Issue 8014: Disjointness should be independent of generalization
Issue 8016: Action for retrieving activity instance
Issue 8020: constrainedElement direction
Issue 8022: Derived union notation
Issue 8023: Association specialization semantics
Issue 8024: End objects of a link In the semantics of AssociationClass
Issue 8026: Contextualized attribute values Figures 121
Issue 8034: Notation for classifierBehavior
Issue 8071: ClassifierInState not supported in UML2.0 ?
Issue 8077: Properties on Association for end objects
Issue 8087: All sections
Issue 8101: Clarify the differences between redefining element and redefined element.
Issue 8102: Multiple typos in ptc/04-10-02
Issue 8111: Section: 9.3.4
Issue 8113: Section: 9.3.6
Issue 8114: Section: 9.3.7
Issue 8126: Section: 9.3.11
Issue 8142: Section: 10.3.11
Issue 8246: namespace
Issue 8249: Section: 12.3.33
Issue 8260: Section: 12.3.40
Issue 8274: UML2/Infra section 11.6.2/ Enumerations should not have attributes
Issue 8278: section 7.3.17 /EnumerationLiteral should not be an InstanceSpecification
Issue 8332: inconsistent description
Issue 8335: ReadStructuralFeatureAction
Issue 8342: Section: 14.3.18
Issue 8353: Section: 14
Issue 8414: Section: 14
Issue 8447: Section 15
Issue 8450: Default values for ValueSpecification are not specified properly
Issue 8464: Section: 16.3.1
Issue 8473: Activities section
Issue 8474: Section: Classes
Issue 8475: Section: Interactions
Issue 8479: Section: Activities - clarification
Issue 8480: Section: Activities : Why is exception type needed?
Issue 8489: ExpansionRegion (behavior in the shorthand notation)
Issue 8492: Section: Activities, LoopNode
Issue 8495: Add constraints on ConditionalNode
Issue 8501: SequenceNode should have way to set output pins in CompleteStructured
Issue 8594: Section: 17
Issue 8616: Section: D.4
Issue 8682: A test cannot be empty
Issue 8684: Add a Constraint
Issue 8686: reword sentence
Issue 8692: Section: 7.3.36
Issue 8693: Section: 10.3.1
Issue 8699: UML2-rtf issue: communication diagram
Issue 8700: Meaning of relationship between iteration clause and Lifeline.selector clau
Issue 8702: Section: Actions
Issue 8722: Misleading statement about multiplicity in AssociationClass
Issue 8725: Clarify multiple inputs to expansion regions
Issue 8748: Operation calls on behavior ports
Issue 8756: Section: Classes
Issue 8757: 1. Deployment
Issue 8758: Association in UseCase diagram
Issue 8761: Arguments of Message
Issue 8763: Nested Nodes
Issue 8764: Section: 14.3.3
Issue 8765: Section: 14.3.3 Page: 508+
Issue 8779: ConditionalNode inputs used by more than one test
Issue 8780: Input tokens to LoopNodes should be destroyed when the loop is done
Issue 8786: Arguments of Message
Issue 8787: Numbering
Issue 8788: Variables
Issue 8854: multiplicity should not be used/shown in an communicates association
Issue 8855: Issue 7368 - make Classifier::useCase navigable
Issue 8861: Section: 12.3.2 Action
Issue 8877: Page: 129
Issue 8880: 9.1 BehavioralFeature package
Issue 8882: Section: 10.1 Types Diagram
Issue 8883: UML 2.0 Super/Use Cases/Subject of a Use Case
Issue 8887: Section: 11.3.6 Classifiers diagram
Issue 8888: Section: 11.3.13 TypedElement (as specialized)
Issue 8889: Section: 11.5.1 DataType (as specialized)
Issue 8890: Section: 15.3.12
Issue 8893: UseCase and Actors
Issue 8897: OutputPin
Issue 8898: Syntax of Transition
Issue 8899: reply messages in interactions
Issue 8903: page 97, Chapter 10.2.2. MultiplicityElement
Issue 8904: page 134, Chapter 11.4.1
Issue 8920: Page: 62
Issue 8921: Meaning of navigability
Issue 8936: event parameters
Issue 8951: UML 2 Super / Actions / Compliance Levels of Actions
Issue 8952: UML 2 - Invalid subsetting of composition ends
Issue 8965: Section: 14.3.20
Issue 8967: UML SuperStructure - Inconsistency re State Machine terms
Issue 8974: Missing notation for association classes
Issue 8975: UML2 Super / 14.3.13 Interaction
Issue 8977: Property ownership must be consistent across association redefinitions
Issue 9002: Section: Common Behavior (02)
Issue 9008: Section: Classes
Issue 9009: Section: Activities
Issue 9011: Section: Classes
Issue 9012: Section: Classes
Issue 9013: Section: Activities
Issue 9015: Section: Classes
Issue 9017: Section: 16.3.3
Issue 9024: "ownedType" is not a valid element
Issue 9076: Page: 53-55
Issue 9101: (merged) compliance level L1
Issue 9102: (merged) compliance levels L2 and L3
Issue 9111: Page: 492-493
Issue 9120: section, 12.3.27 ExpansionRegion(from ExtarStructureActivities
Issue 9124: Need more flexible notation for activity partitions
Issue 9125: keyword, "buildcomponent", and a stereotype, "buildComponent"
Issue 9145: Page: 107
Issue 9225: No notation for associating Exceptions with Operations
Issue 9230: choice of terminolgy for TransitionKind is non-intuitive
Issue 9234: Operation should be a specialization of TypedElement and MultiplicityElemen
Issue 9236: constraints owned by these properties have no context
Issue 9237: Section: Classes
Issue 9242: /qualifiedName attribute missing on Core::Constructs::NamedElement
Issue 9244: Unclear relationship between the Basic and Abstractions packages
Issue 9245: Description of Element
Issue 9246: Element and Comment in Basic
Issue 9247: No ReadParameterAction or WriteParameterAction
Issue 9256: Optional name attribute in NamedElement is misleading and insufficient
Issue 9330: Page: 338, 339
Issue 9339: consistent ordering of Association::memberEnd and ownedEnd
Issue 9340: Section: 14.4
Issue 9351: UML 2.1/Superstructure/ call triggers vs signal triggers
Issue 9362: Page: 625
Issue 9369: Section: 7.3.9
Issue 9370: Section: Sequence diagrams
Issue 9371: All associations ends in the UML2 metamodel itself should be navigable
Issue 9372: Show an example of correct notation for the metamodel
Issue 9400: Notation for ordering action input and output pins
Issue 9401: ControlNodes in ActivityPartitions
Issue 9402: Reception has no notation for its signal
Issue 9403: No ObjectEvent corresponding to SendObjectAction
Issue 9406: UML2: No notation for indicating Operation::raisedException
Issue 9445: Link notation for instance diagrams does not cope with multiple classifiers
Issue 9556: Question on InfrastrucutreLibrary::BehavioralFeatures::Parameter
Issue 9597: Fig 7.14
Issue 9599: New issue on notation for multiple stereotypes
Issue 9605: packagedElement
Issue 9700: UML's support for null values and semantics is unclear
Issue 9701: Unnecessary restriction on aggregations being binary
Issue 9702: No way of specifying element documentation
Issue 9703: Unclear usage of LiteralExpression::type
Issue 9704: "Property::lowerValue" is not a good name
Issue 9705: ValueSpecification::isComputable()
Issue 9718: UML 2/ Super / SendSignalEvent erratum
Issue 9720: Action inputs/outputs
Issue 9751: UML/OCL spec mismatch-Constraint.context vs Constraint.constrainedElement
Issue 9752: Section: 11.1.3
Issue 9754: Section: 7.3.33
Issue 9760: Section: 9.14.2
Issue 9800: What exactly is a state list?
Issue 9803: Editorial bug in 2.1 Superstructure Convenience document
Issue 9805: Default value types
Issue 9812: Page: 64 & 112
Issue 9817: Section: 7.2
Issue 9818: discrepancies between package dependencies and XMI file for Superstructure
Issue 9819: Section: Appendix F
Issue 9822: Section: 7.3.44
Issue 9823: Section: 7
Issue 9824: Section: 15.3.14 Transition
Issue 9825: Notation (p 154, formal/05-07-04 )
Issue 9826: Section 10.2.1 "Class" (in Basic)
Issue 9827: Section 11.4.1 "Classifier" (in Constructs)
Issue 9828: Section 11.4.1 "Classifier" (in Constructs)
Issue 9833: text of specs and corresponding XMI specs should be clarified
Issue 9834: Relationships
Issue 9839: Section: 15.3.12
Issue 9840: Section: 15.3.12, p 588, 589
Issue 9841: EnumerationLiteral should constrain InstanceSpecification
Issue 9842: Guidance for Representing Enumeration Values
Issue 9878: PrimitiveTypes access by UML (M1) models
Issue 9881: Bad cross reference for InterfaceRealization Notation
Issue 9885: text-diagram out of synch in Infrastructure 11.4.1
Issue 9886: OCL Syntax in expressions
Issue 9887: Optional values and evaluation of defaults
Issue 9888: Move Property::isId from MOF to UML
Issue 9889: Unclear which Property has aggregation
Issue 9923: Section: 13 & 14
Issue 9961: navigating from link to link ends
Issue 9962: Subclasses of InstanceSpecification
Issue 9999: Association::isDerived should be derived
Issue 10001: Merged Metam.:Property::class with redefinition of non-inherited property
Issue 10003: Section: 9.12.1
Issue 10074: Invalid mandatory compositions and associations
Issue 10079: Invalid redefinitions introduced into metamodel
Issue 10086: Section: Annex C.1
Issue 10140: Section: 7.3.3
Issue 10345: Section: 7
Issue 10353: UML2: Parameter::isException overlaps with Operation::raisedException
Issue 10376: uml.xsd schema file in ptc/2006-04-05 is not correctly generated
Issue 10382: Meaning of Constraint visibility
Issue 10386: Change references in Infra- and Superstructure to UML 2.1.1- URGENT ISSUE-
Issue 10388: Activity shape
Issue 10411: Section: Chapter: 7.3.2.4 View
Issue 10413: Constraint.context vs Constraint.constrainedElement
Issue 10474: Connector contract is inflexible
Issue 10512: Section: 15
Issue 10594: Section: e. g. 12.2. page 287
Issue 10597: Behavioral port
Issue 10600: UML 2 Superstructure: Abstractions should be acyclic
Issue 10634: UML2: notation issue
Issue 10635: Presentation option for return parameter for operation type are incomplete
Issue 10637: Section: 12.3.38
Issue 10656: clarification on Behavior::specification / meaning of InterfaceRealization
Issue 10778: Mismatch between Superstructure ptc/06-04-02 and XML Schema ptc/06-04-05
Issue 10780: UML2: Actor cannot have ownedAttributes
Issue 10781: Section: 10.3.4 of formal/2007-02-03
Issue 10821: ValueSpecification that refers to some Element shall be defined
Issue 10822: Ability to define "context specific" default values for Part
Issue 10823: names and namespaces
Issue 10824: Units and types are still problematic
Issue 10827: Consistency in description of ends owned by associations
Issue 10931: State Machines
Issue 10957: UML 2.1.1 - notation for parameter sets
Issue 10974: Explanation of Observation notation
Issue 10976: Section: 15.3.11
Issue 10999: 9.3.9 Invocation Action
Issue 11055: Section: 16.3.2 Classifier (from UseCases)
Issue 11068: Section: 14 Interactions: Lifeline representing an actor
Issue 11092: Section: 14.4 Timing Diagram: Continuous time axis
Issue 11115: Section: 7.3.21
Issue 11116: Section: 7.3.21 figure 7.47
Issue 11120: Property::isAttribute() query needs no argument
Issue 11152: UML 2.2 scope statement
Issue 11154: Section: Abstractions
Issue 11155: Section: Constructs
Issue 11156: Section: Abstractions (02)
Issue 11200: Actor concept was indeed changed
Issue 11234: UML 2.1.2: Path names for CMOF files
Issue 11238: composite subsets
Issue 11272: Section: Annex A: Diagrams
Issue 11273: Section: Annex A: Diagrams
Issue 11287: Section: 7.3.3
Issue 11307: Section: 16.3.5
Issue 11323: UML2 Property collaborationRole should be removed
Issue 11342: Section: 7.3.37 Package (from Kernel)
Issue 11408: UML 2.1.1 - fig 7.14
Issue 11410: simpleTime package problems
Issue 11413: The section titled "Changes from previous UML" is not complete
Issue 11488: ElementImport
Issue 11489: In section 7.3.12 Figure 7.38
Issue 11683: UML2 Issue - 'abstract' not listed in keyword Annex
Issue 11762: Section: 8.3.2 Connector
Issue 11763: Section: 12
Issue 11807: Figure 7.48 and the accompanying discussion under 7.3.21
Issue 11815: Section: 14.4
Issue 11827: UML2 Issue: notation for Literals does not allow for name
Issue 12158: The spec needs to clarify the isConsistentWith() method for transitions
Issue 12162: pull semantics are only supported on Action inputs, not outputs
Issue 12166: should be able to show gates on communication diagrams
Issue 12167: inability to specify ordering of messages connected to gates is problematic
Issue 12168: TemplateSignature / TemplateParameter / StructuredClassifier
Issue 12193: UML 2.1.1 Issue: Invalid association end in Figure 7.20
Issue 12195: Section 14.3.19
Issue 12197: UML 2: Need an explicit listing of all semantic variation points
Issue 12203: UML 2 has lost cability to represent operations by collaborations
Issue 12204: paragraph on "deferred events" on page 552
Issue 12218: 15.3.14: This paragraph refers to signal and change events
Issue 12235: Table 8.2 must be named "Graphic paths..." instead of "Graphic nodes..."
Issue 12244: association 'ownedTemplateSignature' of a Classifier
Issue 12250: formal definitions of 'isCompatibleWith' (pages 622, 647, 649)
Issue 12251: definition of 'isCompatibleWith' for ValueSpecification
Issue 12252: term 'templatedElement' not defined
Issue 12267: Section: 7.3.41
Issue 12271: section '10.3.12 Property (from Nodes)'
Issue 12272: Section 7.3.44
Issue 12273: undefined term 'Element::redefinedElement' occurs three times in standard
Issue 12274: new constraint ?
Issue 12275: UML Super 2.1.2:Feature
Issue 12279: Section: 18.3.3
Issue 12285: UML Super 2.1.2: section 18.3.2
Issue 12354: Section: 15.3.7 Constraint [2]
Issue 12355: UML 2.1.2 Super: Execution Specification
Issue 12356: Section: 8.3.3
Issue 12357: CMOF file for UML2 does not have derived Associations marked as such
Issue 12369: qualifiers
Issue 12379: Section 11.3.25 gives the definition of MultiplicityExpression::isConsisten
Issue 12380: Section: 15.3.11/Notation
Issue 12381: Section: 13.3.3/ Changes from previous UML
Issue 12382: Section: 7.3.10/Associations
Issue 12405: Car dependency example
Issue 12406: Figure showing an AssociationClass as a ternary association
Issue 12427: interpreting InstanceSpecification
Issue 12431: Section: 15 StateMachines: doActivity and internal transitions
Issue 12434: Section: Activities
Issue 12436: first paragraph of section 7.8 UML kernel
Issue 12455: Section 14 Interaction
Issue 12511: Callout notation for many clients/suppliers
Issue 12516: Classifiers
Issue 12528: PackageMerge relationships
Issue 12530: Behavior's parameter list
Issue 12544: role bindings of a CollaborationUse
Issue 12545: Section 10.3.10
Issue 12566: 3 3.2 Behavior (CommonBehaviors/BasicBehaviors)
Issue 12567: Section: 11.3.30,12.3.23
Issue 12568: Section: 14.3.24, 14.3.20
Issue 12569: Section: 7.3.36
Issue 12570: UML2 issue regarding Redefinition
Issue 12580: UML2 issue regarding RedefinableTemplateSignature
Issue 12584: Keyword ambiguity for DataType Section
Issue 12586: Section 7.3.50 "substitution"
Issue 12749: Section: 7.4 figure 7.1 missing dependency
Issue 12750: Section: 2.2-2.4 compliance level clarifiction needed
Issue 12774: Regression in XMI from UML 2.1.2 to UML 2.2
Issue 12782: Unspecified constraint [1] on AcceptEventAction
Issue 12783: Unspecified constraint [1] on ActivityEdge
Issue 12784: Unspecified constraint [2] on ActivityEdge
Issue 12785: Unspecified constraint [1] on ActivityEdge (CompleteStructuredActivities)
Issue 12786: Unspecified constraint [1 on Activity
Issue 12787: Unspecified constraint [2] on Activity
Issue 12788: Unspecified constraint [3] on Activity
Issue 12789: constraint [4] on AcceptEventAction and unordered result:OutputPin property
Issue 12790: Unspecified constraint [1] on ActivityNode
Issue 12791: Unspecified constraint [1] on ActivityNode (StructuredActivities)
Issue 12834: On the communication diagram in Fig 6.2 (P12)
Issue 12835: On the communication diagram in Fig 6.2 (second issue)
Issue 12836: On the table 2.3, page 8
Issue 12837: Figure 7.65 and its explanation, P115
Issue 12838: Typo P205 10.3.4
Issue 12839: 7.3.11 DataType, P61
Issue 12840: 18.3.8 Stereotype
Issue 12841: 7.3.44 Property P128
Issue 12842: 7.3.44 additional operation P128
Issue 12844: Classifier has association end "attribute"
Issue 12845: Property 7.3.44 p125
Issue 12846: 7.3.33 p100
Issue 12847: Metaclass Property is denoted in Interfaces Package on p.36
Issue 12850: operation allConnections
Issue 12852: issue to address how problem 11240 was actually addressed in UML 2.2 spec
Issue 12855: specificMachine association should be changed to be type StateMachine
Issue 12860: InterfaceRealization
Issue 12912: InstanceSpecifications
Issue 12915: Inconsistency in Superstructure 2.2 p. 550
Issue 12942: Actors cannot own Operations - a contradiction
Issue 13058: 18.3.8 Generalization of stereotyped model elements
Issue 13088: MARTE/section 7.2.1/ "several labels for the same classifiers in the Metamodel" bug
Issue 13091: Super package should import NamedElement from the Visibilities package, not Namespaces
Issue 13092: Parameter isn't package (Heading 2 level)
Issue 13093: Figure 9.20
Issue 13134: Section: 14.3.20 Actors in Interactions
Issue 13136: Section: 7.3.12 Dependency (from Dependencies)
Issue 13141: UML 2.2 Section 9.3.1 nested classes paragrpah in wrong chapter
Issue 13142: UML2.2 Section 9.3.1 Presentation Options section
Issue 13148: Section: 14.3.3 CombinedFragment (from Fragments)
Issue 13163: transitionkind Constraints
Issue 13164: UML. Clarify relationship of Substitution and InterfaceRealization
Issue 13165: There is no way to specify the behavior of operations which are members of data types
Issue 13188: "description" section of the Behavior metaclass
Issue 13192: UML: Standard Techniques to disambiguate crossing lines needed
Issue 13193: Section: 12.3.14 Figure 12.29 on page 320
Issue 13250: Val(MyCar.Interaction [SVWB
Issue 13253: description of Interaction provided by the Semantic section inconsistent
Issue 13255: UML2.2 RTF: EnumerationLiteral is a DeploymentTarget
Issue 13256: Section: 14.3.13 Interaction (from BasicInteraction, Fragments)
Issue 13257: ParameterableElement as a formal template parameter
Issue 13258: inconsistency with how constraints are specified in UML and OCL
Issue 13324: Statemachine diagram in section 15.3.12 diagram 15.42 (and the text above)
Issue 13325: use of "internal" transition is used incorrectly in many places where "local" should be used.
Issue 13395: UML2: Unclear how to indicate what events a classifier might send
Issue 13425: Section: 7.3.9 Comment should be NamedElement
Issue 13449: we can create an invalid active state configuration
Issue 13452: Section 9.3.4 Collaboration Use, 2nd constraint creates unneces
Issue 13466: Lack of clarity about meaning of package shapes containing elements with fully qualified names
Issue 13478: The UML XMI fails to include an ownedRule for the Constraint specified for an OpaqueExpression
Issue 13479: Section: 9.8.3 XMI fails to include a "lower" attribute
Issue 13480: In the XMI, Ownerships::Element fails to include a superClass attribute for Elements::Element
Issue 13481: In the XMI, Ownerships::Element erroneously includes an association for ownedComment.
Issue 13482: UML 2.2 Profiles Issue: Stereotypes extending multiple metaclasses are ill-formed as metamodel equivalents
Issue 13543: UML 2.2 Beta1 Figure 12.18 is misleading about Parameter::effect : ParameterEffectKind [0..1]
Issue 13591: Section: 7.4 Diagrams text on page 144
Issue 13592: "Table 7.3 - Graphic paths included in structure diagrams" on pp.143-144
Issue 13651: UML2.2. Contradications in 14.3.10
Issue 13653: UML2 : Lifeline identity for InteractionUse
Issue 13656: UML 2 - appearance of Association Ends as members of the related classes
Issue 13657: Section: 9.3.11 Port
Issue 13662: UML 2 7.3.3 : incorrect text about aggregationKind in associations
Issue 13664: UML 2.2 InteractionOperand abstract syntax
Issue 13665: Figure 2.2 contains more than four packages, description referes to four packages
Issue 13788: Section 2.3 para 1 needs to be re-written
Issue 13789: Figure 7.1 shows no dependency
Issue 13790: Parameter is part of the BehavioralFeatures package.
Issue 13791: Paragraph 5: The text states that class Comment has no generalizations
Issue 13792: The "Generalizations" heading is missing before the "ValueSpecification" bullet.
Issue 13793: Two issues regarding Figure 10.2: 1
Issue 13794: Should the definition of Element state that it reuses the definition of Element from Abstractions::Elements?
Issue 13795: Section 13 "Core::Profiles" inconsistency
Issue 13796: Figure 13.2 shows class InfrastructureLibrary::Profiles::Element. Section 13 doesn't define a class named Element.
Issue 13797: Figure 13.2 shows an association between ProfileApplication and Profile that has role "appliedProfile
Issue 13798: In paragraph 2, the package reference to InfrastructureLibrary::Constructs::Class omits intermediate package "Core"
Issue 13799: In paragraph 4, the text should read "Class has a derived association ...". Currently, the sentence is missing "a".
Issue 13800: In the Attributes section, "integer" should be capitalized
Issue 13834: "Associations" part of the "9.10.3 Slot" chapter/section
Issue 13841: Concrete specialization of the Relationship meta-class are missing
Issue 13844: Figure 18.2 (which describes the contents of the Profiles package) is currently misleading
Issue 13846: chapter 2.2, p.3 Last paragaph, second sentence
Issue 13847: Section: Chapter 2.2 Compliance levels
Issue 13848: issue within UPDM with profile diagrams
Issue 13853: 18.3.6 Typo in Profile section
Issue 13855: Section: 18.3.2
Issue 13856: Section: 18.3.6
Issue 13857: The XMI document contains <ownedMember> elements which should be <packagedElement>
Issue 13858: Figure 18.9 shows a presentation option for an Interface which has not been introduced before (circle within box)
Issue 13859: The example in Figure 18.11 is badly designed in multiple ways and is strongly misleading
Issue 13860: Figure 18.15 does not reflect the example before
Issue 13861: Replace "extensionClock" with "extension_Clock" and "baseClass" with "base_Class"
Issue 13862: Section: 18.3.8
Issue 13863: URIs do not refer to existing resources (404 errors) Annex H
Issue 13867: Description of Level 1 diagram does not make sense with respect to figure 2.2
Issue 13868: Table 2.2 Example feature support statement references Note (4) and Note (5)
Issue 13908: there are numerous places where associations between UML elements have only one, navigable role
Issue 13909: Figures 9.17 and 9.19 and related text
Issue 13910: Missing keyword?
Issue 13911: Clarify how the provided and required interfaces of a Port are calculated
Issue 13912: The OCL for /required interfaces of Component is using ports.provided instead of ports.required
Issue 13920: current definition of a 'local' transition does not allow the case to have a local transition
Issue 13926: Template Binding Question
Issue 13927: Subsets vs. Redefines
Issue 13930: Validator issues with TestCase 2
Issue 13931: Color errors on figures in UML 2.2
Issue 13933: Clarification need on circle plus notation for containment
Issue 13936: UML2: Need clarification on circle plus notation for containment
Issue 13947: Figure 7.38 needs to be revised
Issue 13948: UML2.2 chapter 16 : Actor constraint [1] has invalid OCL
Issue 13992: lowerBound/upperBound constraints and derivations wrong
Issue 13994: Section 9.9 should classifier be added to the diagram on p 50?
Issue 13995: confusion re diagram on p. 83
Issue 14022: Visibility and Import relationships
Issue 14023: nestedClassifier
Issue 14034: type mismatch
Issue 14035: Currently is it possible for a Classifier to specialize the same classifier directly more than once
Issue 14044: Should there be a constraint for extends equivalent to 16.3.6 [4]
Issue 14045: semantics of associating a use case with another use case, or indeed anything other than an actor, are unclear
Issue 14065: UML2: Missing semantics in definition of RedefinableTemplateSignature with multiple parents
Issue 14066: Properties need not be owned
Issue 14078: UML 2: notation and concepts for unbound and un-owned template parameters are not clear
Issue 14081: Package merge is missing a rule
Issue 14083: Profile::allOwningPackages
Issue 14084: Subsets vs. Redefines
Issue 14090: authorize a reference to an operation in a realized interface.
Issue 14093: BNF of Constructs::Property
Issue 14183: Need notation option to show type stereotype on typed element
Issue 14186: The spec may require some clarification regarding figure 14.16
Issue 14192: The primitive types in the UML 2.3 infrastructure.xmi are private; they should be public
Issue 14216: Documentation of merge increments in the superstructure
Issue 14220: Language unit of Usage
Issue 14227: UML: Issue with stereotype icons in a profile
Issue 14263: Japan Superstructure PAS Ballot Comments - comment 6
Issue 14264: Japan Superstructure PAS Ballot Comments - comment 7
Issue 14283: Japan Infrastructure PAS Ballot Comments - comment 6
Issue 14356: Reconcile the algebra of collections across OCL & UML’s intentional & extensional semantics
Issue 14426: Association class notation with just class or association
Issue 14431: notation of objet flow <<selection>> and <<transformation>>
Issue 14439: errors in OCL statements of Additional Operations?
Issue 14449: PrimitiveType has missing constraints
Issue 14536: Stereotyped Constraints in UML
Issue 14544: Stereotyped Constraints in UML
Issue 14552: Ordered derived unions
Issue 14555: UML 2 TemplateParameterSubstitution inconsistency about multiplicity of Actual and OwnedActual
Issue 14560: Value of a Property
Issue 14563: Cyclick dependency
Issue 14566: CMOF missing several redefined property relationships
Issue 14580: Parameter type of MultiplicityElement::includesMultiplicity()
Issue 14588: are Create messages aynch or synch, or doesn't it matter?
Issue 14621: UML2 - derivation for DeploymentTarget.deployedElement is invalid
Issue 14626: UML2 - definition of Property.opposite is wrong
Issue 14635: Errors with types of association ends not conforming to their subsetted ends
Issue 14636: Cycles in package imports
Issue 14637: Namespace collission due to package import
Issue 14643: AcceptEventAction notation
Issue 14862: Issue on generalization
Issue 14875: wrong Actor's constraint [1]"
Issue 14889: Wrong Spelling for "development"
Issue 14927: is composite and subsets not derived composite property:
Issue 14928: Property subsets other regular property, non-derived union
Issue 14929: lowered multiplicity
Issue 14930: One association end is derived, another is not
Issue 14933: UML Issue: Refactor UML to separate SW-Specific Aspects from Foundation Language
Issue 14934: Simplify by Making UML More Consistent: Apply class and composite structure diagram rules to behavior modeling
Issue 14935: Simplify by Making UML More Consistent: Allow States to be model as classes supporting inheritance and composition
Issue 14936: UML: Need more robust value model that would enable capture of values vs time
Issue 14937: UML: Incorporate SysML Requirements Model into UML
Issue 14938: UML: Include text description field with model element
Issue 14939: UML Associate an image/icon with each model element
Issue 14940: UML: Provide unique URL/URI Reference to/from Model Elements
Issue 14941: UML: Include text description field with model element --- additional information added
Issue 14942: UML:Notational option to display inherited features in a subclass
Issue 14943: Provide notational mechanism to represent any group of model elements based on some criteria w/o stealing ownership
Issue 14944: UML: A strong ability to support reviewing packages
Issue 14945: UML: Support for maintaining what-if models in repository without massive duplication
Issue 14946: UML Support for multiple library levels
Issue 14947: UML: A strong ability to support generating Documents
Issue 14948: UML: Diagrams as Model Elements
Issue 14949: UML: Provide mathematical formalism for UML semantics to provide precise meaning to language constructs
Issue 14950: UML: Better Definition of Compliance
Issue 14951: UML: Large Scale Model Support:Federated/Distibuted Models
Issue 14952: UML: Cross model dependencies
Issue 14953: UML: Improve Sequence Diagram Semantics (3-issues)
Issue 14954: UML: Add abilities to specifiy intent of Assert, Negate, Consider, Ignore fragments
Issue 14955: UML:Access to standardized ontologies within models
Issue 14956: UML: Better Profile Capabilitiy
Issue 14957: UML: Timing semantics for activity diagram
Issue 14958: UML: Higher-level reusable frameworks
Issue 14959: UML has no way of distinguishing Notes from Comments
Issue 14962: loopVariable ownership
Issue 14978: NamedElements whose owners do not subset Namespace
Issue 14989: TestIdentityAction for datatypes
Issue 14991: Expansion nodes using all the tokens in them as a single collection
Issue 14994: The containment between Activity and StructuredActivityNode has one end redefining and the other subsetting
Issue 14995: Subsetting clauses should show the subsetted property fully qualified.
Issue 15001: Incomplete resolution to 10826
Issue 15019: Package Extension
Issue 15020: Contents of Dependencies package
Issue 15046: Poor example of Dependency notation
Issue 15047: Lack of graphical example of multi-element Dependency Notation
Issue 15050: Parameter
Issue 15056: Figure 7.15
Issue 15107: Enumeration Literal
Issue 15120: Activity vs Action completion
Issue 15123: Sequence diagram and Communication diagrams should support instances as lifelines
Issue 15144: Detailed modeling of the Standard Profiles
Issue 15145: Modeling sent messages in State Machines
Issue 15162: UML2 - Invalid constraint for Actor
Issue 15167: composite tags
Issue 15207: Timing Diagram and interchange
Issue 15216: Minor bug in Namespace::importMembers() query
Issue 15221: Bug in Core::Abstractions::Super::Classifier::hasVisibilityOf
Issue 15236: not sure it is possible to define a constraint without a context
Issue 15237: issue10087 and association-like notation
Issue 15239: Chapter 14 is ambiguous and contradictory about how to link up messages and execution specifications
Issue 15240: Owning of interaction fragments is ambiguous when InteractionOperands are present
Issue 15248: Initialization of complex fields
Issue 15251: Guard of activity edge should be optional
Issue 15259: Meaning of BodyCondition and its alignment with OCL
Issue 15268: Term "method activation" deprecated?
Issue 15274: split the addition of generalization relationships among association in 14977 in two parts
Issue 15278: Auxiliary
Issue 15279: Create
Issue 15280: It seems odd to say that Service “computes a value”.
Issue 15283: issues relating to Figure 7.14 - The Packages diagram of the Kernel package
Issue 15285: Figure 7.10 shows Feature::isStatic as abstract
Issue 15288: NamedElement::clientDependency constrained to subset DirectedRelationship::source
Issue 15290: Ports
Issue 15303: How to specify actual parameters to pass to parameterized submachine StateMachine
Issue 15312: Issue on UML 2.3 - Use of isAbstract for Interfaces
Issue 15315: Aggregation missing from Property string syntax
Issue 15356: UML 2.3 Issue: Constraint InformationFlow.sources_and_target_kinds
Issue 15371: UML 2.3 Superstructure: Non-sensible text for modelLibrary stereotype
Issue 15372: Over-general sentence about MOF and Profiles
Issue 15384: Typo: isStric => isStrict
Issue 15394: Ambiguous constraints for transitions
Issue 15399: "unique" annotation
Issue 15400: Nasty UML 2.x Issue - /qualifiedName is not unambiguous
Issue 15401: Qualified name is incorrectly claimed to be unambiguous
Issue 15413: Figure 9.2 (Abstractions subpackage dependencies) has wrong dependency
Issue 15419: The stereotype «Create» and keyword «create» are both defined in the UML 4 document
Issue 15421: UML Interactions: Misleading suggestion of relationship between Interactions and Activities modeling
Issue 15427: coveredBy : InteractionFragment [0..1] should be [*]
Issue 15440: Issue on UML 2.4 - notation for Component::provided
Issue 15449: Under-specified associations in UML2.4 & the need for clarifying the semantic directionality for all UML associations
Issue 15451: Clarifying the support for and semantics of subsetting/redefinition for a pair of properties defined in different contex
Issue 15485: UML 2 issue: connectors typed by Association Class
Issue 15499: Operation::isConsistentWith
Issue 15500: isConsistentWith
Issue 15501: bodyCondition and isQuery
Issue 15525: redefinitionContext of Property
Issue 15622: UML 2.4 - Interaction
Issue 15668: isDerived with DefaultValue
Issue 15708: DecisionNode at all guards evaluated to false
Issue 15711: UML 2.4 - ConditionalNode - Semantics
Issue 15763: No Constraint for multiple associations
Issue 15765: stereotype <<bind>> for defining parameterized classes is nowhere defined
Issue 15766: navigation only possible to generalization but not to specializations of elements
Issue 15768: Wrong constraint on Operation::bodyCondition
Issue 15769: Operation with multiple return parameter
Issue 15774: Missing relation between "Namespaces" package and "Ownerships" package in fig. 9.2 (p. 30)?
Issue 15781: Property.isReadOnly is redundant with StructuralFeature.isReadOnly
Issue 15787: Parameter semantics related to Behavior and BehavioralFeature
Issue 15788: UML 2.3 Infra 12 Incomplete conformance for infinity
Issue 15791: Deep history for orthogonal states
Issue 15804: Big UML 2.4 problem: missing defaults in XMI
Issue 15822: Part document structures in Infrastructure need to conform to ISO Standard Document Template Conventions
Issue 15823: Part document structures in Superstructure need to conform to ISO standard Document Template Conventions
Issue 15849: Creation of an expansion node under an activity is allowed by UML and SysML specifications
Issue 15850: Restrictions on decision nodes
Issue 15870: UML 2: Multiplicity of Lifeline's coveredBy is incorrectly specified
Issue 15880: Wrong Classifier Name
Issue 15881: Constraint is Wrong
Issue 15889: Retationships and composite structures
Issue 15890: New notation for attribute
Issue 15898: Statement mistake
Issue 15899: Figure 7.31 propose an “association-like” notation for attributes
Issue 15903: XMI representation of stereotype application
Issue 15930: Tags typed by classes/blocks
Issue 15991: Notation of Lifelines
Issue 15993: Can a Generalization really be in multiple GeneralizationSets?
Issue 16002: Presentation options of statemachine transitions: Figure 15.45 is ambiguous or wrong
Issue 16043: Section numbering
Issue 16110: typo on page 46
Issue 16111: Figure 15.32
Issue 16115: No Rules for Element Names
Issue 16116: Package URI Attribute Uses Obsolete RFC 2396
Issue 16117: Profile URI Attribute - Mingled URI Definition and Use in XMI
Issue 16118: Metaclass stereotype notion
Issue 16119: Metaclass stereotype notion (02)
Issue 16120: Wrong package name on several Figures
Issue 16164: Typo: "joint" should say "join"
Issue 16169: Figure 15.32
Issue 16210: Property::isID
Issue 16249: State::stateInvariant multiplicity too restrictive
Issue 16267: Missing Namespace in Dependencies package definition?
Issue 16268: Interface element - associations multiplicity not defined
Issue 16292: Use cases specifying the same subject cannot be associated: exception
Issue 16301: UML type Real specification
Issue 16307: A deferrable trigger may have a guard
Issue 16342: Ambiguous stereotype notation
Issue 16350: Navigability orthogonal to end ownership or not?
Issue 16357: UML: unification of OCL declarations
Issue 16359: Number of Compliance Levels
Issue 16360: XML Metadata Interchange (XMI)
Issue 16361: XML Metadata Interchange (XMI) - p9
Issue 16362: Core Package versus Construct Package
Issue 16363: XMI in small caps
Issue 16400: ProfileApplication::appliedProfile as "importedProfile" instead of "appliedProfile"
Issue 16412: property.opposite
Issue 16483: UML Appendix A : Figure A.3 Two Diagrams of Packages”
Issue 16484: UML Appendix A: After Figure A.4
Issue 16493: UML 2.4: NamedElement.ownedRule could be ordered
Issue 16494: Irritating occurrence of subsystem stereotype in use case example diagrams
Issue 16567: Clarification about serializing the application of SysML 1.3 to a UML2.4.1 model
Issue 16569: Relation of message arguments to signature parameters ambiguous
Issue 16570: Message arguments for a Signal signature too restrictive
Issue 16571: Message arguments should not be contained in a message
Issue 16572: OccurrenceSpecification should have at least an optional notation
Issue 16581: UML 2.3: Transitions outgoing junction vertexes should be allowed to have triggers
Issue 16582: No XML-Schema for UML-XMI
Issue 16584: EnumerationLiterals in the XMI
Issue 16590: ChangeEvent association mismatch
Issue 16595: MultiplicityElement constraint 1 inconsistent with possible [0..0] multiplicity
Issue 16596: UML Superstructure Specification
Issue 16634: Subpart I and II are missing in Bookmarks
Issue 16635: "A_realization_abstraction_component" is useless
Issue 16638: RedefinableElement (from Kernel) is preferable
Issue 16639: poor figure resolution and a misspelling: fal...( false )
Issue 16642: {ordered} is rather far from +bodyOutput
Issue 16643: OpaqueBehavior#body attributes "nonunique" truncated as "nonuni..."
Issue 16644: role "interval" appears "interva"
Issue 16645: OpaqueBehavior#body attributes "nonunique" truncated as "nonuni..."
Issue 16646: misspelling: io-oargument
Issue 16647: Figure 15.2 does not include TransitionKind
Issue 16648: Implicit parameter assignment may cause name clashes
Issue 16649: Validity duration of implicitly assigned parameters in SignalEvent/CallEvent
Issue 16650: default value of ClassifierTemplateParameter#allowSubstitutable is "..."
Issue 16651: V2.4.1 from 11-08-05 on page 14 in Figure 7.3
Issue 16656: default is wrong
Issue 16658: The included use case is always required for the including use case to execute correctly
Issue 16723: Suggestions for editorial changes
Issue 16724: Error in UML diagrams?
Issue 16725: Reference in index to item that does not exist in contents
Issue 16875: V2.4.1 from 11-08-05 on page 14 in Figure 7.3
Issue 16896: ChangeEvent::changeExpression should be of type ValueSpecification
Issue 16897: Abstraction::mapping should be of type ValueSpecification or OpaqueExpression
Issue 16946: Use of term "locus of control"
Issue 16999: UML 2.4/2.5 Aliases
Issue 17096: Concerning Transition and its owned elements
Issue 17127: incorrect upper value of coveredBy of Lifeline
Issue 17131: Core package caption wrong
Issue 17160: how to instantiate associations between stereotypes
Issue 17172: Opposite ends of derived unions should be derived unions
Issue 17202: The property “packagedElement: PackageableElement [*]” is not a derived property and should not be prefixed with "/"
Issue 17226: Message Signature in Interactions and Reception.ownedParameter
Issue 17266: color of the notation is specified
Issue 17268: Add an example for the lifeline head shape
Issue 17283: Package merge on Class metatype causes semantic issues - particularly with state machine context
Issue 17289: Behavior should be derived from Classifier, not Class
Issue 17315: Interaction.action should subset ownedMember in lieu of ownedElement
Issue 17328: LifeLine instead of Lifeline
Issue 17333: Inconsistency: CentralBufferNode (ch .12.3.16) and fig. 12.15
Issue 17366: Constraint [1] uses undefined attribute "ownedAttribute
Issue 17370: What is "top-tier packages of the UML metamodel"?
Issue 17390: Migrate UML::Component's ability to own UML::PackageableElements to UML::Class
Issue 17393: Generalization should be allowed to be cyclic and should no be restricted to be owned by the specialized classifier
Issue 17398: Question About Arrows In Communication Diagramms
Issue 17461: missing words in section 14.1
Issue 17464: Link notation for stereotype property value
Issue 17466: DurationObservation#event should be ordered
Issue 17507: Surplus classifier field serialized in Superstructure.xmi
Issue 17530: A comment is a specialization of Element
Issue 17536: Specifying the multiplicity of a part with an attribute
Issue 17547: Operation "isConsistentWith" is not overridden for any RedefinableElement
Issue 17550: Attribute is represented by Property
Issue 17564: applying and associating stereotypes and explanation of all aspects of their serialization
Issue 17565: an instance spec should be a legitimate value of a property typed by a classifier
Issue 18239: test
Issue 4110: Semantics of firing compound transitions still appears to be circular (uml2-rtf)
Click here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary: In UML 1.4 beta R1, the semantics of firing compound transitions still appears to be circular and therefore incorrect. At any rate I am confused by the text so it may be confusing to others.
As far as I can see the "Least Common Ancestor" is needed to determine the "main source", but actions following exit from the "main source" must be performed before the targets following a choice point are known, so without known targets there is no known LCA and therefore no specified "main source".
On page 2-173 of 2.12:
*** The least common ancestor (LCA) state of a transition is the lowest composite state that contains all the explicit source states and explicit target states of the compound transition. In case of junction segments, only the states related to the dynamically selected path are considered explicit targets (bypassed branches are not considered).
If the LCA is not a concurrent state, the main source is a direct substate of the least common ancestor that contains the explicit source states, and the main target is a substate of the least common ancestor that contains the explicit target states. In case where the LCA is a concurrent state, the main source and main target are the concurrent state itself. The reason is that if a concurrent region is exited, it forces exit of the entire concurrent state.
[...]
Once a transition is enabled and is selected to fire, the following steps are carried out in order:
• The main source state is properly exited.
• Actions are executed in sequence following their linear order along the segments of the transition: The closer the action to the source state, the earlier it is executed.
• If a choice point is encountered, the guards following that choice point are evaluated dynamically and a path whose guards are true is selected.
• The main target state is properly entered. ***
This is certainly much better than 1.3. But I still find it difficult to follow:
Since guards following a choice point are evaluated dynamically, the targets are still unknown when the "main source" is exited. Therefore the LCA is still unknown. How then does one determine the "main source" as a "direct substate" of the (unknown) LCA?
The (target) "states related to the dynamically selected path" referred to above for determining the LCA cannot be determined in the case of choice points, without having first determined which branches will be taken from the choice points. That requires performing exit actions for the "main source", then additional actions along the path to the choice point, in order to determine which branch will be taken. So the "main source" must be already known in order to determine the targets.
If one defined the "initial source" as the LCA of the source states then the "main source" might be any superstate of that "initial source".
With different targets, there might be additional actions to "properly exit" from enclosing superstates of the "initial source" before actions along the transition to a choice point. These could affect which branch is taken and therefore which enclosing superstate of the "initial source" must be "properly exited", which would affect which actions are performed before reaching the choice, and therefore affect the branch taken from the choice.
Resolution: Disposition: Deferred to UML 2.4 RTF
Revised Text:
Actions taken:
December 7, 2000: received issue
Discussion: Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Issue 4932: Starting state machine (uml2-rtf)
Click here for this issue's archive.
Source: Mentor Graphics Corporation (Mr. Stephen J. Mellor, StephenMellor(at)StephenMellor.com)
Nature: Uncategorized Issue
Severity:
Summary:
[Steve Mellor] The action semantics has an action that starts a state machine. The state machine starts in some known initial (pseudo-)state. There are many cases where one wants to initialize a state machine so that starts in a specified (non-initial) state. Therefore the StartStateMachineAction needs to accept a state (possibly multi-leveled) as an input. The state machine will not execute any procedures or actions until after the state machine is in the target state and then detects an event.
Application: restoring state. Requires static specification of state, so complexity will be the same as having transitions to each state, and sending an event. Would make a dependence of actions on state machines. Similar problems with restoring attribute values, etc, of objects. Requires tracking and restoring execution execution. Too much for FTF to do consistently [Action Semantics FTF]: Application: restoring state. Requires static specification of state, so complexity will be the same as having transitions to each state, and sending an event. Would make a dependence of actions on state machines. Similar problems with restoring attribute values, etc, of objects. Requires tracking and restoring execution execution. Too much for FTF to do consistently [UML 2 FTF] There is too much debate around this for the FTF to resolve. The use case is to bring up a software system that is embedded in a larger physical system. The embedded system has objects reflecting the state of the physical objects. The filer would like to start the software system by instantiating classes, with the new instance reflecting the state of the physical objects. Using triggers/guards on constructor inputs makes too cumbersome a model. There was some concern about referring to states from actions outside the object. However, states are not always internal. There was also concern that the details of restarting an application are not properly part of modeling. However, modeling is not limited to a particular level of implementation. There was debate on whether entry points could be used for the applications, but in any case, the action would need to refer to a state.
Description: The State Machines chapter (Section 2.12) does not provide a clear description of what it means to "start" a state machine. Syntactically, we have the following: o Well-formedness rule [1] for Pseudostate (p. 2-157) says "An initial vertex [i.e., a initial pseudostate] can have at most one outgoing transition and no incoming transitions". Presumably, it is the single transition from the initial pseudostate at the top level that is taken when the state machine starts. o Well-formedness rule [6] for Transition (p. 2-160) says "An initial transition at the topmost level either has no trigger [i.e., event] or it has a trigger with the stereotype 'create'." Thus, the ONLY kind of event allowed on an initial transition is a "creation event". o The definition of the stereotype <<create>> is (p. 2-149): "Create is a stereotyped call event denoting that the instance receiving that event has just been created. For state machines, it triggers the initial transition at the topmost level of the state machine (and is the only kind of trigger that may be applied to an initial transition)." Thus, a "creation event" MUST be a call event. o However, well-formedness rule [5] for Transition (p. 2-160) states without qualification, that "Transitions outgoing pseudostates may not have a trigger"! This prohibits all together the "creation events" allowed by rule [6]. Semantically, there is no specific discussion of how a state machine "starts". Section 2.12.4.3 describes "Entering a non-concurrent composite state" on p. 2-162 and "Entering a concurrent composite state" on p. 2-163. Since the top state of a state machine must be a composite state, one could assume that "starting" a state machine has the semantics of entering the composite top state. However, this does not provide an explanation of the "creation events" allowed (or at least seem intended to be allowed) in the special case of the initial transition at the top level. Now, well-formedness rule [5] of StateMachine says "If a StateMachine describes a behavioral feature, it contains no triggers of type CallEvent, apart from the trigger on the initial transition (see OCL for Transition [8])" (this is probably intended to refer to Transition rule [6]). Presumably, then, the call event on the initial transition is suppose to be the call event for the behavioral feature described by the state machine, at least in this case, but this is not described in the semantics (and it doesn't make sense for this event to be a "creation" event, anyway). This issue came out during the finalization of the Action Semantics. In the Action Semantics, when an object is created, any state machine associated with the object (via its classifiers) are NOT started automatically. Instead, there is an explicit "StartStateMachineAction" which is supposed to "start the execution of the state machines." However, it is not clear from the current state machine semantics what it really means to do this. Recommendation: 1. Describe the "start" of the execution of a state machine as an RTC step from an implicit "not started" state (that is, not explicitly modeled in the state machine) to the target of the initial transition of the state machine (that is, the single transition with the top-level initial pseudo-state as its source). This RTC step includes the execution of any relevant transition actions and entry actions, per the usual state machine semantics. 2. Define that, if no other explicit specification is given in a model, a state machine associated with a classifier is assumed to start when an instance of the classifier is created and a state machine associated with a behavioral feature is assumed to start when that feature is invoked. (When the action semantics is included, a formal specification of the start of a state machine can be given with the StartStateMachineAction.) 3. Change well-formedness rule [5] to exclude the top initial pseudo-state. 4. Change well-formedness rule [6] to allow, if the state machine describes a behavioral feature, a trigger (call event or signal event) on the initial transition that corresponds to that behavioral feature. 5. If the state machine describes a classifier, then, in the absence of the action semantics, it is unclear whether a "creation event" is really useful at all (particularly since it would only allow for a single creation operation). With the action semantics, such an event is probably unnecessary, since the procedure for a creation operation will then be able to explicitly create an instance (using CreateObjectAction), start the state machine of that instance (using a StartStateMachineAction), which will get the state machine into a "real" state, and then send the instance a message (using an ExplicitInvocationAction), which can be handled by an event on the state machine, with any additional data required for initialization.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
In the UML specification the behaviour of the shallow history state and deep history state are described (added below). The final state is seen as a real state in UML which can have entry actions and in which can be stayed. When a child composite state is in its final state and at a higher level a transition is taken to an other state and then to the deep history state we expect that the final state is set active again, instead that then default history state is made active. For example we have a composite state that does the setup of a piece of hardware and it is in the final state, but it doesn't leave the composite state because another condition is not true yet. When now the composite state is left at a higher level (for example emergency), then we go back according to the spec to the default history state, so we do the complete setup again, but we expect to return in the final state. Shallow history entry: If the transition terminates on a shallow history pseudostate, the active substate becomes the most recently active substate prior to this entry, unless the most recently active substate is the final state or if this is the first entry into this state. In the latter two cases, the default history state is entered. This is the substate that is target of the transition originating from the history pseudostate. (If no such transition is specified, the situation is illegal and its handling is not defined.) If the active substate determined by history is a composite state, then it proceeds with its default entry. • Deep history entry: The rule here is the same as for shallow history except that the rule is applied recursively to all levels in the active state configuration below this one.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Also, saying {nonunique} on one end of a binary association is
meaningless by the current rules, because the other end remains {unique} by
default, so no duplicate links would be allowedDue to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
In 03-07-06 there was notation for conditional nodes and loop nodes for activities. These are missing in 03-08-02. Makes taking the certification difficult
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
The Interaction chapter contains a number of examples, but there have been requests for even more examples especially on the different kinds of combined fragments (Section 14.3.1)
This is indeed a reasonable request and additional examples would indeed be helpful. However, since it is not a critical issue or an inconsistency in the spec itself, the issue is deferred to an RTF.
The Figure 339 on page 425 needs more explanation. The use of lifelines to represent return value, and the notation for interaction occurrences with return value should be explained in greater length. Furthermore it should be made clear how the operations put and get are used to set and read values from lifelines representing attributes and parameters.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
In general there is a need to have lifelines as formal parameters such that Interactions can be used in slightly different contexts. This may now be partly achieved through templates, but more notation etc. is needed for this to be really practical.
This is a feature enhancement and, therefore, outside of the scope of an FTF, whose purpose is to fix inconsistencies and add clarifications. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
State should be an extension of type rather than object node.
This requires more discussion on what should be specifiable as a type, and layering the state machine model (issue 7555). Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
On CallOperationAction, etc, how do you tell graphically which pin is the target?
This is does not affect usage or implementability enough for the FTF to address. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Promote local precondition to ExecutableNode. There might be other associations on Action that should be at ExecutableNode
It may be that local preconditions should apply to object nodes also. Postpone for discussion in RTF. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Provide a notation for a behavior used as a method of an operation
OMG Issue No: 6150 NIST (Mr. Conrad Bock, conrad.bock@nist.gov conradb@cme.nist.gov) It is probably worthwhile to define a graphical syntax representing BehavioralFeature.method. This could take the form of either • showing the name of the instance of Behavior which is the method along in the compartment where the behavioral feature is exhibited • having a graphical link between the behavioral feature and a symbol representing the behavior instance (similar to how it is shown that a CollaborationOccurrence represents a Classifier (see Figure 106). The downside of either is that users typically don’t think of the behavioral feature and the behavior as separate things and usually would not dream of naming the behavior (of course, this is not required). In particular, if the behavior is described by a body string a convenient way of showing that body string with the behavioral feature would be desired. Today tools typically use the property sheet for the behavioral feature to show the associated behavior. There are already different vendor specific solutions for some behaviors as methods. We need to gain better experience before standardizing as solution. Disposition: Deferred It is probably worthwhile to define a graphical syntax representing BehavioralFeature.method. This could take the form of either . showing the name of the instance of Behavior which is the method along in the compartment where the behavioral feature is exhibited . having a graphical link between the behavioral feature and a symbol representing the behavior instance (similar to how it is shown that a CollaborationOccurrence represents a Classifier (see Figure 106). The downside of either is that users typically don.t think of the behavioral feature and the behavior as separate things and usually would not dream of naming the behavior (of course, this is not required). In particular, if the behavior is described by a body string a convenient way of showing that body string with the behavioral feature would be desired. Today tools typically use the property sheet for the behavioral feature to show the associated behavior. There are already different vendor specific solutions for some behaviors as methods. We need to gain better experience before standardizing as solution. The situation has not changed from the discussion in 2003. There have been no new developments in tool specific notations for method, nor have there been further requests for such notation. However, the issue seems still relevant. Therefore, the suggestion is to defer further. Revised Text: N/A Disposition: Deferred
Redefinition, as used in UML2, sometimes violates superclass substituitability rules. For example, redefining multiplicity from many to 1 breaks some OCL constraints. For example, Statemachines changed a multiplicity from many to 1. Statemachines redefines association to OwnedBehaviors to OwnedStateMachines which does not allow other types of owned behaviors.
Indeed. However, this is a serious and contentious theoretical issue and it’s resolution is beyond the scope of the FTF. Fortunately, the specific issue with state machines has been eliminated by the resolution to issue 6185. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Not all the constraints in the Activities section have corresponding OCL specifications. These should be added
This is does not affect usage or implementability enough for the FTF to address, and is a very large and time-consuming change. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
If Artifact and Node are classifiers, why is deployment a dependency? Then runtime artifacts cannot be deployed to runtime nodes.
Run-time artifacts can be deployed to runtime models, but the type consistency is not formally guaranteed (that is, if Artifact A is deployed to Node B, then instances of A are deployed to instances of B, but there is no ‘instantiation’ of the deployment relationship). In order to formalize the instantiation aspect, Deployment would need to be modeled as a subtype of Association. This solution has been touched on in the submission process as a simplification and tightening of the model but requires some time to work out and bed down, as it would be a non-trivial change. Hence, it would be best tackled in an RTF process. Note (if this solution direction is accepted) that the notation would need to be changed to not use a dependency, but rather an association (possibly with keyword <<deploy>>).
Would be useful if join nodes optionally destroyed tokens not accepted, especially when using join expressions.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Transition triggers do not appear to be redefinable in the current metamodel. There does not seem to be any reason for this restriction and it should be removed
Disposition: Deferred to UML 2.4 RTF
Not all the constraints in the Interactions section (14.3). They should be added
These constraints should definitely be added. This should be done in an RTF. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Issue: There are many places where the specification indicates that an attribute or association is derived, but does not state how it is derived; that is, the specification does not state, in English or in OCL, how to compute the derivation. Recommendation: Specify, in English and OCL, how to compute the derivations of all derived attributes and associations.
These specifications should definitely be added. This should be done in an RTF. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Although both Sequence Diagrams and Activity Diagrams have added many advanced features in UML 2, these features appear to have been added independently, so that they appear as two separate behavioral languages. Consider improving the integration between them by supporting the following: a) Allow for an activity in an activity diagram to represent an invoked operation in a message on a sequence diagram. b) Allow for interaction diagram notations to be applied to activity diagrams, such as the use of references, alternates, and gates. c) Clarify that time and other constraints can be applied to an activity diagram in a manner similar to how they are applied to sequence diagrams.
This issue is part of a much larger discussion that cannot be handled by one working group alone. In fact this issue has to be covered in face-to-face meetings resulting in a commitment to unify the language even further. It is still an important topic and an obvious desire for many of us for the future. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Use cases and associated sequence and activity diagrams are widely used by systems engineers to specify the functionality of the system, and describe the interaction between the system and the actors. However, there is much confusion regarding use case semantics. Consider the following recommendations to clarify use case semantics: a) Establish an explicit representation to depict the relationship between a use case and its realization as a sequence diagram, activity diagram, etc. In addition, allow for a similar representation to show the relationship between an included/extended use case, and the interaction fragments which realize the included/extended use case. b) Clarify the relationship between a use case (solid oval) and a collaboration (dashed oval), and determine whether they can represent the same or a similar concept.
UML already supports this capability since it allows a classifier (in this case a use case) to have associated a number of behaviors that are in some ways related to the classifier (e.g., they may represent realizations of the classifier in some way, or illustrations of specific executions related to the classifier, etc.) However, the proposed resolutions are asking for a specialization of these general (meta)associations that would have special realization semantics. Such semantics might prove to be tricky to define in the case of use cases, and require some study (i.e., what does it mean for a behavior to “realize” a use case? Is it just an illustration of one possible realization or is it more general?) These are, in effect, requirements for new modeling features and, therefore, fall outside the scope of an FTF or RTF. This should be the subject of a separate RFP.
In the final adopted spec, there are numerous constraints associated with the various metaclasses that do not have corresponding OCL written. This should be fixed.
These constraints should definitely be added. This should be done in an RTF. defer Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
7 and 14: "An instance specification is a model element that represents an instance in a modeled system." [7.7.1] There are no objects in a UML 2 model, but only models of objects, that is, instance specifications. The instantiation of a UML class is not in the model, but in the modeled system. At the same time, "an ExecutionOccurrence is an instantiation of a unit of behavior ..." [14.3.4] Suggested resolution: Abandon the idea that there are no objects in a model. Specify that an instanceSpecification with a class is an object in the model, the instiantiation of a class is an object in the model. Likewise for an association and its links, and so on. This brings the theory of classifiers and their instances and instantiations into alignment with the theory of behaviors and their occurrences. It is consistent with the existence of power types in the language. It is consistent with the MOF specification of meta-layers. It removes the conflation of the type conformance and instatiation relationships with the representation relationship. It reduces the meanings conflated into 'instance of' by one. Thus, the UML places instantiations of Classifiers in the modeled system (not in the UML model) and, at the same time, places instantiations of Behaviors in the UML model (not in the modeled system).
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
PROBLEM STATEMENT In UML 1 the navigability of an association end was specified by the meta-attribute AssociationEnd.isNavigable. In UML 2 apparently this meta-attribute dissapears, and AssociationEnd is substituted by Property. We know whether an association end is navigable by the following rule: if the property is owned by a class, it represents a navigable end; if the property is owned by an association, it represents a non-navigable end (see Superstructure, p. 89). However, references to old metaclass AssociationEnd and old meta-attribute isNavigable still appear in the Spec in several places and OCL expressions (AssociationEnd appears in: Infrastructure, p. 33; Superstructure, pp. 119, 245; isNavigable appears in: Superstructure, p. 245). PROPOSED SOLUTION Add derived meta-attribute /isNavigable to metaclass Property. Eliminate references to AssociationEnd.
Disposition: Deferred to UML 2.4 RTF
PROBLEM STATEMENT
"When one or more ends of the association have isUnique=false, it is
possible to have several links associating the same set of instances."
(Superstructure, p. 81)
As Pierre-Alain Muller demonstrated in an informal conversation with Bran
Selic during a lunch in San Francisco in the last UML Conference (I also was
taking part in that conversation), isUnique must have the same value for all
ends in an association.
This has implications, for example, for the property strings that can be
placed near the association ends ({ordered}, {bag}, {seq}). According to the
table in Superstructure, p. 92, if one end is a Set or an OrderedSet, then
the opposite end must be a Set or an OrderedSet, too; and if one end is a
Bag or a Sequence, then the opposite end must be a Bag or a Sequence, too.
PROPOSED SOLUTION
Explain this in the Spec.
Disposition: Deferred to UML 2.4 RTF
PROBLEM STATEMENT
The notation for qualified names is double-colon ('::'). However, the Spec
always and everywhere uses a different notation: instead of
"Kernel::Comment", "Comment (from Kernel)".
PROPOSED SOLUTION
Use the standard notation for qualified names.
Disposition: Deferred to UML 2.4 RTF
What is the sematics of an association with neither end navigable? Provide an example of when this might be used. (C to D page 85).
Disposition: Deferred to UML 2.4 RTF
Selection behavior on object nodes should be changed to allow execution at insertion time, keeping the queue
This issue should be titled “Selection behavior”.. Requires more discussio n on how to express sorting procedures in the model. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Protocol machines should not have ports in them. It should be an extension in the ports package. Otherwise there is a backwards dependency onto composite structure.
Statemachines already depend on ports via triggers, so the proposed change will not remove the dependency. Furthermore, creating a dependency from composite structures to statemachines would create a more serious layering problem. Therefore, resolving this dependency requires a non-trivial restructuring that shall be done by an RTF at this point.
Issue: One of the main requirements for a core that can be reused by CWM hinges on whether it is possible to reuse the abstract syntax that supports classification and supports having properties (or features), without pulling in generalization constructs. U2P’s Core::Basic package, upon which EMOF is based, does not appear to adequately separate these concerns. The most abstract level of Core::Basic's inheritance hierarchy at which the ability to have properties appears is in the Class metaclass. But Class also carries the “baggage” of a definition of superclass. The Core::Abstractions package does appear to adequately separate these concerns. It does so by defining a simple Classifier in the Core::Abstractions::Classifiers package that supports features but not generalization. The Core::Abstractions::Super package defines another Classifier metaclass that subclasses Core::Abstractions::Classifiers::Classifier and adds support for generalization. Presumably, then, the intent is that CWM metamodels that support classification and properties but not generalization can reuse Core::Abstractions::Classifiers::Classifier. However, Core::Basic does not reuse either of these basic definitions of Classifier from Core::Abstractions, and EMOF is based on Core::Basic. Thus, if a CWM metamodel reuses Core::Abstractions::Classifiers::Classifier, it will not share a common definition of Classifier with EMOF. That could mean that a metamodel expressed solely via EMOF will not be able to be the source or target in a unified approach to transformations. This is not a problem for CMOF, though, because CMOF is based on Core::Constructs, whose Classifiers are based on Core::Abstractions. Recommendation: Solving the problem for EMOF would require some refactoring of Core::Basic to separate concerns between classification and generalization.
Disposition: Deferred to UML 2.4 RTF
Issue and Recommendation: In general the specification of the Core would benefit from instance diagrams accompanying example models, especially in cases where there is significant change from UML 1.x. An instance diagram accompanying an example model would show how the model instantiates the elements of metamodel. This will contribute to a greater level of common understanding among readers of the specification and thus will help ensure interoperability. For example, consider Figure 3-23 from the submission document and which defines the abstract syntax for the elements of the Core::Constructs::Constraints package. Despite the existence of accompanying explanatory text, the distinction between the Namespace that owns a Constraint and the Namespace that provides the context for a Constraint may be difficult for the reader to grasp completely. Figures 3-24, 3-25, and 3-26 from the submission document, respectively, provide example models. An instance diagram for at least one of the examples that shows how the elements of the example model instantiate elements of Core::Constructs::Constraints would go a long way toward preventing misunderstandings. Such misunderstandings would compromise interoperability, since there is a high probability (in my opinion) that different implementers would render models to XMI differently. This example is only one of many that I could cite from the submission where examples *plus* associated instance diagrams would be beneficial.
Disposition: Deferred to UML 2.4 RTF
Issue: The Core’s abstract syntax makes heavy use of new association modeling constructs. Two of them in particular may be unfamiliar to many who read the submission: · Subsets · Derived unions The submission provides only a brief explanation of these two new constructs, which I quote below: "A navigable property may be marked as a subset of another, as long as the owner of the subsetting property is the same as or a specialization of the owner of the subsetted property. In this case, the collection associated with an instance of the subsetting property must be included in (or the same as) the collection associated with the corresponding instance of the subsetted property. A property may be marked as being a derived union. This means that the collection of values denoted by the property in some context is derived by being the strict union of all of the values denoted, in the same context, by properties defined to subset it. If the property has a multiplicity upper bound of 1, then this means that the values of all the subsets must be null or the same." Recommendation: Since these constructs are so heavily used to define the Core itself, it would be useful for the submission to provide some overall guidance on how to use them. Providing rationale for why specific ones are chosen in specific places in the definition of the Core would be an effective way of disseminating understanding of these constructs and understanding of the Core as well.
Disposition: Deferred to UML 2.4 RTF
The property isRoot has disappeared from Classifier. INtention was to move it to RedefinableElement but it seems to have dropped through the cracks. On page 399 FAS: section 13.3.4 The metaattributes isLeaf and isRoot have been replaced by properties inherited from RedefinableElement. On page 86 FAS section 7.8.3 RedefinableElement: isLeaf: Boolean Indicates whether it is possible to further specialize a RedefinableElement. If the value is true, then it is not possible to further specialize the RedefinableElement. Default value is false. But no mention of isRoot....
Disposition: Deferred to UML 2.4 RTF
I know ODP is <adjective>, so i'd like to add mention of a couple of other places where we will find name space standing on its own, and not conflated with package or other container.
An IETF namespace is exactly "a set of terms usable as names."
As Karl reminded me, a C++ name space is also "a set of terms usable as names," declared with the keyword 'namespace' and used with the keywords 'using namespace' (providing a naming context) or with the scope operator, '::' (converting a simple name to a name that is an identifier).
[Unlike most Java tools, there is no requirement that the things in a C++ namespace all be in any particular container. Karl tells me that C++ programmers he works with don't like the way Java tools insist that a package-cum-namespace be identified with a directory that contains all elements of that package. (Of course, tools that do that are following "the extremely simple example" in The Java Language Specification. Sometimes the effect of simple examples on the future of the world.) It can be fine to have such simplifications in a programming language, but it's good to have more flexibility in models.]
C++ also provides a form for aliases:
namespace new_name = current_name ;
Still more flexible is that other approach, which in addition to distinguishing name space from naming context, also allows the same item to have fully qualified names from different namespaces. If that's in MOF, let's use it. (Is that accomplished the relaxing, which MOF 2 package import provides? (If i import C from Pa into Pb, can i identify it with 'Pb::C'?))
If not, let's put it there.
Seems to me to be easy to accomplish, if Namespace is first class.
This is a significant change at the core of the metamodel and requires further study. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
The Property ownedMember of the Class Package is redefined to specialize the EndType from NamedElement to PackageableElement. But is incorrectly changed from a derived union to NON Derived. If it is intended to be non derived the property string subsets on all the other members are in error. ownedMember for a Package should be a derived union subset by the following Properties: ownedType nestedPackage ownedRule An OCL equivalent would be as follows: ownedMember=ownedType->union(nestedPackage)->union(ownedRule)
Disposition: Deferred to UML 2.4 RTF
section 7.11 Does Property.aggregation have meaning for properties typed by value types, (Data Type and subtypes)?
Disposition: Deferred to UML 2.4 RTF
The isConsistentWith() query defined on Property implies that in order for a property redefinition to be logically consistent, the redefining property must be derived if the redefined property is derived. Are these the correct semantics for redefinition? There are cases in the metamodel where this constraint is violated (e.g. Package::ownedMember is not derived, but it redefines derived property Namespace::ownedMember). If there is to be a constraint on redefinition, perhaps it makes more sense the other way around, i.e. a redefining property must be non-derived if the redefined property is non-derived.
Disposition: Deferred to UML 2.4 RTF
Inheritance of 'Enumerations' is not detailed with repsect to their (ordered) owned 'EnumerationLiteral's. Proposed resolution: Add a constraint to restrict Enumerations to be unable to inherit from each other (at least favored in MOF) or specify how Literals are ordered.
Disposition: Deferred to UML 2.4 RTF
Redefinitions of OCL constraints must be aligned with MOF2.0/UML2.0 class Redefinition. I could not find any detailed information with respect to redefinition of (especially OCL class OclExpression) constraints in the docs ptc/03-09-15, ptc/03-10-04. A more precise semantic would help for the QVT redefinitions w.r.t patterns and technology mappings interoperability (JMI <> MOF2IDL alignment). Proposed resolution: It would be useful to add more precise abstract semantic for redefinition contexts of constraints (e.g. class 'Constraint' should specify that redefinition context must also be inheritance)
Disposition: Deferred to UML 2.4 RTF
Diagrams have a frame and a tag that describes the kind of diagram. Most diagrams correspond to a portion of the metamodel, and in most cases there is a one-to-one correspondence between metamodel chapters and diagram types, although variants are allowed for special cases (such as 'package'). There are four kinds of diagrams showing interactions, each with its own unique contents and syntax: sequence diagrams, communications diagrams, interaction overview diagrams, and timing diagrams. Unlike the difference between class diagrams and package diagrams, for example, each of these is very different in appearance and content from the others, even though they allegedly all map to the same interaction model (which might be dubious in practice, given the very different content, but that's another matter). However, the examples all use the same tag, 'sd', for all of the kinds of interaction diagram. Clearly 'sd' is an abreviation for 'sequence diagram' and it is inappropriate for the other types. (The fact that it is an English-language abreviation is another problem that we will let pass for now.) It would seem that each kind of diagram should have its own tag, given that they have different syntax and usage. For example, we could use 'sd', 'cd', 'iod', and 'td' if we wish to keep the same abbreviated format. But in any case the tags should be different and they should be descriptive of the diagram, not the underlying modeling chapter. (The official tag for interaction diagrams as a group is 'interaction', not 'sd' (page 589), so 'sd' is already descriptive of just one variant.) If the argument is that you can tell apart the different variants of interaction diagram by looking at them, that argument would apply with even more force to the diagrams for different kinds of models, such as class diagrams, state machine diagrams, etc., so we wouldn't need tags at all. (Which may be true, and users will probably not bother most of the time, but let's at least get it right in the standard.)
While this is possibly a reasonable suggestion, it does not represent either a consistency fix or a clarification and is more appropriately resolved in some future revision. This is an overall discussion and not only for Interactions. The question is about two different aspects: 1. What should the tab keyword indicate? a. the type of diagram b. the object defined by the diagram c. irrelevant, the tab is only for naming
Table 15 does not include illustrations for - create message (a graphical path flowing into a Lifeline head). - create message to lost - create message from found More illustrations need to be added to Table 15 as the new sorts of messages are added, for example: - synch and async create - synch and async destroy
Disposition: Deferred to UML 2.4 RTF
"[1] The classifier context of a state machine cannot be an interface" should be: [1] The context classifier of a state machine cannot be an interface. not redefinitionContext.oclIsKindOf(Interface) "[2] The context classifier of the method state machine of a behavioral feature must be the classifier that owns the behavioral feature." should be: [2] The context classifier of the method state machine of a behavioral feature must be one of the classifier that features the behavioral feature -- note that a behavorial feature can be associated with 1..* -- classifiers if self.specification->notEmpty() then self.specification.featuringClassifier->includes(redefinitionContext) endif "[3] The connection points of a state machine are pseudostates of kind entry point or exit point." should be: [3] The connection points of a state machine are pseudostates of kind entry point or exit point. connectionPoint->forAll(cp | cp.kind = #entryPoint or cp.kind = #exitPoint ) "[4] A state machine as the method for a behavioral feature cannot have entry/exit connection points." should be: [4] A state machine as the method for a behavioral feature cannot have entry/exit connection points. self.specification->notEmpty() implies ( self.connectionPoint->forAll(cp | not (cp.kind = #entryPoint or cp.kind = #exitPoint) ) )
The OCL was left out of the final adopted specification and needs to be inserted. However, the OCL constraints recommended above are mostly incorrect. Instead, the following OCL expressions need to be inserted for constraints [1] through [4] of StateMachine on page 490 respectively: ?? context->notEmpty() implies not context.oclIsKindOf(Interface) ?? specification->notEmpty() implies (context->notEmpty() and specification->featuringClassifier-> exists (c | c = context)) ?? connectionPoint->forAll (c | c.kind = #entryPoint or c.kind = #exitPoint) ?? specification->notEmpty() implies connectionPoint->isEmpty()
I have a few questions regarding section 7.12 entitled "Kernel - the
DataTypes Diagram" in the final adopted Superstructure spec (03-08-02).
DataType specializes Classifier, and as such it also inherits the ability to
have generalization relationships with other Classifiers. Classifier has an
additional operation 'maySpecializeType(Classifier):boolean' that is
described/defined as follows:
"The query maySpecializeType() determines whether this classifier may have a
generalization relationship to classifiers of
the specified type. By default a classifier may specialize classifiers of
the same or a more general type. It is intended to be
redefined by classifiers that have different specialization constraints."
(p. 63)
with the OCL:
Classifier::maySpecializeType(c : Classifier) : Boolean;
maySpecializeType = self.oclIsKindOf(c.oclType)
DataType, nor its subtypes PrimitiveType and Enumeration, defines no
additional constraints or additional operations. These additional
constraints are executed/applied in the UML2 metamodel (rather than in a
UML2 model), correct? If so, then this implies that a DataType may
specialize another DataType, Classifier, Namespace, Type, etc., but that
DataType may not specialize PrimitiveType or Enumeration. Please correct me
if I'm interpreting this incorrectly.
Consider an example with:
* a PrimitiveType named "string"
* a PrimitiveType named "float"
* a DataType named "InternationalPrice" that specializes "float" and
adds a new attribute/property called "currency" of type "string"
The "InternationalPrice" DataType is conceptually a qualified type, meaning
it is a float plus a qualifier of the value. Examples of instances would be
{426.36, "US Dollars"}, {401.23, "Euros"}, {749.42, "Yen"}.
If my interpretations of the Superstructure spec are correct, then this
example cannot be modeled using UML2. And, in fact, the specification would
actually allow me to create a new PrimitiveType named "double" that actually
specializes my "InternationalPrice" DataType (since DataType is a supertype
of PrimitiveType). My thought is that this is either a issue with the
'maySpecializeType' operation or it is an issue with DataType, PrimitiveType
and Enumeration not being properly constrained.
Disposition: Deferred to UML 2.4 RTF
Deployment should not be a Dependency Section 10.3.4, figure 126 show the Deployment subclass of Dependency with location subsetting client and deployedArtifact subsetting supplier. This means in effect that a Node is deemed dependent on the Artifacts that are deployed to it which seems to me the wrong way round if anything. Since it is not really true either that an Artifact is dependent on the Node it is deployed to, it does not seem sensible for Deployment to inherit from Dependency at all: it should inherit directly from DirectedRelationship. [Aside: Figure 126 shows 'subsets source' and 'subsets target' which is not reflected in section 10.3.4. I had assumed that Dependency would itself specify client and supplier to subset/redefine source and target but this oddly appears not to be the case]
Disposition: Deferred to UML 2.4 RTF
Manifestation should inherit from Realization In Section 10.3.10 and Figure 124 it would make more sense for Manifestation to inherit from Realization rather than directly from Abstraction. The semantics of Realization are described as "A Realization signifies that the client set of elements are an implementation of the supplier set,.." which surely includes manifestation. The spec also states that Realization may be used to model transformations, which fits with the example given in Manifestation: "<<tool generated>> and <<custom code>> might be two manifestations for different classes". BTW There is a missing word in the description of Manifestation "A manifestation is the concrete physical of one or more model elements by an artifact."
Disposition: Deferred to UML 2.4 RTF
Suppose that we have two composite states, nested within to two concurrent regions, which both become "complete" as part of the same "run-to-completion" step, and each of the composite states is the source for a completion transition. I.e. within this "run-to-completion" step two completion events are generated. How should these two completion events be dispatched? - Sequentially, in the same sequential order in which they have been generated. - Sequentially, but any ordering is allowed, - Concurrently. I.e. both completion transitions are considered enabled. - other ??? or any of the above Notice that completion transition may have guards, and activity, hence the firing of one of them may cause the other to become no more "enabled". Hence the above three cases may really cause different system behaviors.
Disposition: Deferred to UML 2.4 RTF
The specification says that: "The priority of joined transitions is based on the priority of the transition with the most transitively nested source state". Suppose that a join transition is has two transitions with source states at the same depth, but in two different regions. How is is established which of the two transition defines the priority of the join transition?. Notice that, depending on which transition is choosen, different other transitions might be allowed or disallowed to be fired. Some possible anwers are: - Any of the two transitions can be chosen statically. (i.e. the priority of the join transition always remains the same). - Any of the two transitions can be chosen, and the choice truly, completely nondeterministic (hence possibly dynamic) I.e. the priority of the join transitions can change each time the join transition is fired.
Disposition: Deferred to UML 2.4 RTF
There is large overlap between structural features and variables. For example, examine the structural features actions and compare them to variable action. Upon study, one will discover that structural features and variables have much more in common. In fact, the following equation seems to hold: StructuralFeature = Variable + Feature That is: a variable denotes a location able to hold an instance. A structural feature is a feature of an object and denotes a location ale to hold an instance. Therefore, I suggest that StructuralFeature be made a subtype of Variable. In the infrastructure, variable would have no interpretation, other than being an abstract metaclass indicating the ability to hold a value. In the superstructure, variable is concrete as described in Activities. Not only would this allow to eliminate the duplication of actions related to accessing variables, but also, other duplications (as, e.g., with respect to their being connectable elements and the related explanations) could be avoided.
This is indeed the case but the issue needs to be addressed in greater depth since it is at the core of the semantics of UML, and is out of scope of an FTF. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
There is an inconsistency in the action model between actions for StructuralFeatures in general, and actions operating on links. The family of structural feature action, such as WriteStructuralFeatureAction, are defined for any kind of structural feature. Consequentially, these actions can manipulate values that are not due to attributes or assication ends (both special cases of Property) but of any kind of StructuralFeature. However, actions defined for links can only operate on links that are due to associations in the model. This because LinkEnd is identified through the association to a Property (named "end"). However, there are other links in the model, such as those due to Connectors. To make these consistent, one either should limit the structural feature actions to apply to Properties (rather than StructuralFeatures), or one should generalize the link actions to apply to liks identified by any StructuralFeature, not just to links identified by Properties. This difference in generality does, of course, not matter for the UML as defined, but it could hamper the deployment of actions to profiles that define other kinds of links. (This is, luckily, not a problem for links due to Connectors, as we can argue that for links due to connectors that are not explicitly typed, these are identified by the ends of the derived associations.)
Two comments on the issue text: "there are other links in the model, such as those due to Connectors". The links established due to connectors are just links any other (link = an instance of an association). "or one should generalize the link actions to apply to liks identified by any StructuralFeature". Links cannot be identified by structural features that are not association ends, because there are no links in that case. In separate discussion with the filer, there was concern that structural feature were not well enough defined to have actions defined on them. Structural feature inherits from TypedElement, which provides a way to map to instances of a type, as explained in the entry for Kernel::TypedElement. The structural feature actions provide the results of this mapping, as explained in the semantics of StructuralFeature. The filer would like this issue held for further discussion.
The metaattribute isReadOnly is defined both for StructuralFeature and its subclass Property. Clearly, one or the other is incorrect. This, I believe, points to an unclarity in what StructuralFeatures are, as opposed to Property. By definition, StructuralFeatures denote values that are held in slots of an object. I believe that the intuition behind Property is that a property denotes a value that might be added, modified, or deleted during the course of the lifetime of a system. This is exemplified in the two variants of property: attribute and association end. As "isReadOnly" has to do with limiting the modification of the value, it is best placed on Property, assuming this intuition is correct. This intuition is substantiated by that Port is not a property but a structural feature, and ports cannot be modified, changed, or assigned to. (Note that if this intuition is not correct, the difference between Property and StructuralFeature needs to be clarified.) A consequence of this is also that one needs to clarify the set of actions that apply to StructuralFeatures (e.g., WriteStructuralFeatureAction). If it is Properties that are modified, etc., then these actions should really apply to properties, not structural features in general. Again, this change is consistent, as none of these actions makes sense for Ports. Further, for links the actions are already limited to properties (see LinkEndData). An issue regarding the inconsistency between actions applying to structural features and actions applying to links has been submitted and should be dealt with consistently.
Disposition: Deferred to UML 2.4 RTF
The surface notation for state machines allows to show, on the line representing a transition, certain key actions that will be performed by the behavior associated with the transition. This is straightforward, when the behavior is an activity (as those actions can be referenced). However, for any other behavior, e.g., an opaque behavior, we need a method of (in the metamodel) show that this behavior does contain certain actions. Note that this should not give an alternative way of defining sequences of actions; rather, this should merely state that this behavior will contain the exhibited actions but it may contain many more. Those actions would merely give a means of representing the graphical constructs in the metamodel
Disposition: Deferred to UML 2.4 RTF
UML2 has added the capability of dealing with exceptional behavior. Exception handling can occur at various levels of the model. Unfortunately, the exception handling mechanism has not been systematically developed. Any kind of behavior should support the mechanism of catching and handling an exception that was raised somewhere within that behavior. Unfortunately, currently only activities allow for this. Similar capabilities should be available for interactions and statemachines, and even for use cases. Recommendation: Provide exception handling for all behaviors.
Disposition: Deferred to UML 2.4 RTF
The text says that a non-navigable end of an association class is an attribute of that association class. "When a property is owned by a class it represents an attribute." [7.11.4] "AssociationClass is both an Association and a Class." [7.16.1] "When a property is owned by an association it represents a non-navigable end of the association." [7.11.2] This is good, is as expected, and is consistent with both the object and the relational theories of modelling. It is said that the drawings tell a different story. If so, they should be corrected. There is no practical advantage to requiring that the non-navigable ends of an association class are not attributes of that class. On the contrary, such a requirement is unexpected and will be confusing.
Disposition: Deferred to UML 2.4 RTF
As I was reading through the text of issue 6114 it dawned on me that there is a needless and problematic coupling between state machines and activities. Namely, in figure 187, there is an association from ObjectNode to State, presumably to deal with the old "object in state" idea. This is similar to the coupling that was attempted but rejected in the Interactions chapter. While it may look attractive to have a formal link to the idea of State from state machines, there are two serious problems that make this much more trouble than it's worth: (1) The notion of "object state" -- as seen by users/manipulators of that object -- could be completely different from the implementation state of that object. This is the old principle of hiding implementation. Viewed from the outside, an invoice object may be in the "Paid" state, but this does not necessarily mean that the object has such a state in its implementation. In fact, there is no guarantee that the implementation will be based on state machines at all. Of course, you can say that this is a reference to some kind of external state machine view of an object -- which sounds reasonable, but here is where the second problem comes in: (2) State in the UML 2.0 spec comes with a sh..load of baggage: in effect, the whole state machine kit and caboodle. It's not very modular, and, unless you use profiles to shear away all the stuff that you don't want (which is about 99% of state machines machinery), you will force vendors who innocently just want to support the simple idea of "object in state" to implement all of state machines. Like I say, the feature doesn't look worth it. Let your State concept be a simple name. My guess is that most users who want to use this feature don't even want to know what a state machine is (the concept of states is not necessarily linked to state machines!). So, my suggestion is that in figure 187, you simply provide a subclass of ObjectNode called ObjectInState and give it a "stateName" attribute and you will get what 95% of your users want. Tying state machines to activities for that one little feature seems overkill.
This is deferred for the same reasons as 6114. Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
The usage of isComposite varies in these two specs as detailed below. Hope this proves useful. Rob ------- UML 2.0 ------- The UML 2.0 Infrastructure spec (03-09-15) section 10.2.4 defines Basic::Property::isComposite as follows: -- isComposite : Boolean If isComposite is true, the object containing the attribute is a container for the object or value contained in the attribute. The default value is false. i.e. an attribute marked "isComposite" is the container for the value. -- However, Constructs::Property (which inherits Basic::Property) has the following constraint: [3] A multiplicity of a composite aggregation must not have an upper bound greater than 1. isComposite implies (upperBound()->isEmpty() or upperBound() <= 1) This is surely intended to mean that an object can have [0..1] containers, rather than (as defined by the two definitions above) that a container can store [0..1] instances in each composite property. The difficulty seems to be one of terminology - from the perspective of a property, being composite implies the property is composite, ie. contains zero or more objects, while from the perspective of an object, the composite of an object could be viewed as a container. The problem can be fixed by redefining the constraint something like: [3] If a property has isComposite==true, than if the property has an opposite, that opposite property must have an upper bound greater than 1. isComposite implies (opposite == null) or (opposite.upperBound()->isEmpty() or opposite.upperBound() <= 1). In 11.3.1 - Association, "Composition is represented by the isComposite attribute on the part end of the association being set to true." - again this is the opposite sense. This is also indicates that there is a degree of complexity implementing MOF::Reflection::Object::container() - there is actually no property for which this is a simple test. Instead, it is necessary to find a property of the object such that the opposite property is marked isComposite, there is no guarantee such a property is accessible, hence an implementation must, in some cases, store a separate (hidden) reference to the object's container. This is an implementation property however. The other alternative I can see would be to replace isComposite on the container object with isContainer on the contained object, or even to have both (with an appropriate constraint to guarantee that the two properties are consistent). --------- MOF 2.0 --------- The same problem manifests in the definition of CMOF abstract semantics. In section 15.2, ClassInstance includes the following definition: 2. At most one Slot for an isComposite property may have a value. (this needs more work if the owner reference is not navigable) Using the current definition of isComposite, this needs to be restated to the effect that at most one slot for a property that is the opposite of an isComposite property may have a value. And again, in the specification of DataType... For all properties, isReadOnly is true, isComposite is false, isDerivedUnion is false Surely this is not correct - a data type may contain other datatypes, which by definition are stored by value, implying strong ownership, and hence a composition relationship. Indeed, any classifier containing a property whose value is a data type should always have isComposite set to true. In 15.4, Object::delete() seems to use isComposite correctly given the definition. Later, however, Object::owningProperty() uses the other approach - using isComposite() to identify the container of the current object.
Disposition: Deferred to UML 2.4 RTF
Alternative entry and exit point notation is ambiguous. It is not clear if it relates to an entry point or to an exit point.
Disposition: Deferred to UML 2.4 RTF
The allOwnedElements query (defined in Core::Abstractions::Ownerships) operates by recursing downward through the ownership hierarchy. Its OCL implementation looks like this: Element::allOwnedElements(): Set(Element); allOwnedElements = ownedElement->union(ownedElement->collect(e | e.allOwnedElements())) In the absence of sophisticated optimization, this query is only guaranteed to terminate if the ownership hierarchy is non-circular. The ownership hierarchy is guaranteed to be circular by constraint [1] (An element may not directly or indirectly own itself). But the OCL description of constraint [1] is written in terms of the allOwnedElements() query: not self.allOwnedElements()->includes(self) If a modeling tool were to be written based on these rules in a straightforward way, it would never be able to detect a violation of constraint [1]. Instead it would go into infinite recursion while trying to check the constraint. Proposed solution: Add the following operation to 9.14.1: [3] The query isCircularlyOwned walks the chain of direct and indirect owners of an element, checking whether the chain contains any circularities, or any of the elements in the set prohibitedElements. Element::isCircularlyOwned(prohibitedElements: Set(Element)): Boolean; isCircularlyOwned = if owner->isEmpty() then false else if prohibitedElements->including(self)->includes(owner) then true else owner.isCircularlyOwned(prohibitedElements->including(self)) And change constraint [1] to: [1] An element may not be directly or indirectly owned by itself. not self.isCircularlyOwned(Set{})
According to Figure 401, an Extend object references at least one ExtensionPoint which itself must be owned by exactly one UseCase.
Therefore it seems that the Extend.extendedCase property is redundant and should be derived.
Also the section for ExtensionPoint does not include the useCase property shown in Figure 401, which itself does not show the {subset}.
Proposed resolution
-----------------------------
1) Update Figure 401 to replace +extendedCase by +/extendedCase
2) Update Figure 401 to replace +useCase by +useCase {subsets owner}.
3) Section 16.3.3 Extend: update the Associations section to replace:
extendedCase : UseCase [1] References the use case that is being extended. (Specializes DirectedRelationship.target.)
by
/extendedCase : UseCase [1] References the use case that is being extended: this is derived as the Use case that owns the ExtensionPoint(s). (Specializes DirectedRelationship.target.) in OCL: extendedCase = self.extensionLocation->useCase
4) Section 16.3.4 ExtensionPoint update the Associations section to replace:
No additional associations
by
useCase: UseCase [1] References the use case that owns the ExtensionPoint. (subsets owner.)
Disposition: Deferred to UML 2.4 RTF
This is a significant issue with the Superstructure, Classes chapter, PowerTypes package, impacting implementability and consistency between products at different levels of conformance to UML 2. I propose to simplify the abstract syntax to specify a one way arrow navigating a one-many metassociation from GeneralizationSet to Generalizations that belong to that set. The problem here is very much the same as the problem with dependency, but in a different part of the metamodel. Figure 18, The contents of PowerTypes package shows a many-many navigable association between GeneralizationSet.generalization and Generalization.generalizationSet. Problems with this: 1. only 1-way navigation is desired. As toolvendor I don't want to update the Generalization to have any info wrt what if any GeneralizationSets it belongs to. As a user, I do not want the generalization relationship itself, which is very simple in a UML Level 1 product, to be muddied with extra info in a UML product that goes beyond Level 1 by adding support for PowerSets. 2. only 1-many cardinality is desired. Although not navigable, a mapping from generalization to the generalization set is still provided in the metamodel, in a conceptual sense. Point 2 is consistent with thinking of the specialization classifier in the generalization as being an instance of more than one powertype, because this classifier is just a participant in the generalization, it is the generalization that we want to have a mapping to at most one powertype. The scope of the required change is limited to the text and diagram specifying this metasssociation of GeneralizationSet.
Disposition: Deferred to UML 2.4 RTF
There doe snot appear to be a way to model parameters to operations that are multi-dimensional arrays. In general, such arrays can be modeled based on qualifiers. However, this assumes that there is an association between two Classifiers. This doesn't apply to parameters. Note that Parameters are MultiplicityElements, but that only allows the modeling of single dimensions.
Disposition: Deferred to UML 2.4 RTF
Disjointness should be independent of generalization. Two classes can be disjoint, but have no common supertype. This facilitates the mapping to OWL
Disposition: Deferred to UML 2.4 RTF
Action for retrieving activity instance: There should be an action for getting the instance of the activity class currently executing, for reflective applications.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
constrainedElement direction The association between Constraint and Element named "constrainedElement" is unidirectional from Constraint to Element. This means implementations are not required to provide efficient navigation from an element to the constraints on it. Since the constraints of a model element are part of the definition of that element, the required navigation should at least be from the element to the constraint.
Disposition: Deferred to UML 2.4 RTF
Derived union notation Why is the semantics and notation for subsetting/redefinition in Association, while derived union is in Property?
Disposition: Deferred to UML 2.4 RTF
Association specialization semantics The semantics of Association addresses specialization. Some of this paragraph is applicable to Generalization and should be moved there. The discussion specific to association could be clearer, for example, what does "correlates positively" mean?
Disposition: Deferred to UML 2.4 RTF
End objects of a link In the semantics of AssociationClass, it says: It should be noted that in an instance of an association class, there is only one instance of the associated classifiers at each end , i.e. from the instance point of view, the multiplicity of the associations ends are "1". Two comments: - This is applicable to Association generally. - The portion after "i.e" is misleding. Instances have no multiplicity.
Disposition: Deferred to UML 2.4 RTF
Contextualized attribute values Figures 121 is an unworkable solution to defining contextualized attribute values. It requires restating all the parts and connectors in the composite class, otherwise the constructor would be incomplete. The class-based solution requires separate properties for each contextualized value with connectors to them from the contextualized property. The metamodel should be extended to include contextualized datatype properties, or at least a presentation option for the current cumbersome model (see Figure 12 and discussion in http://www.jot.fm/issues/issue_2004_11/column5
Disposition: Deferred to UML 2.4 RTF
Need a notation for instances of the classifierBehavior metaassociation (Figure 311).
Disposition: Deferred to UML 2.4 RTF
In the UML 1.x, we have the notion of ClassifierInState. We used them for representing associations and methods of classes that are valid when instances of these classes are in the corresponding states. Could you let me know how to do that using UML 2 ? If class-in-states are not supported in UML 2.0, I am afraid, we cannot represent these valuable information particularly for reifying business processes. For example Order[Delivery] , Order[Billing], etc.. with their operations and session attributes !
Disposition: Deferred to UML 2.4 RTF
The memberEnd/ownedEnd/NavigableOwnedEnd properties of Association represent the navigations from one end object to other end objects along the association. There are no properties available for navigating from an instance of an association (link) to the end objects. This has a number of negative effects: - The model cannot represent structured associations properly, because association classes that are also structured classifiers cannot have connectors to end objects, because the end objects cannot be reached with StructuredClassifier.role (see constraint 3 on Connector). - An InstanceSpecification for link can use memberEnd properties of association as properties of the link, even though these properties are ownedAttribute of the end classes, rather than the association. This is due to the loose definition of Classifier.allFeatures. - A special action is needed to retrieve (the end objects of links (ReadLinkObjectEndAction), rather than (using the action for attribute values ReadStructuralFeatureAction. The metamodel should have an association for properties that have the end objects of link objects as values.
Disposition: Deferred to UML 2.4 RTF
With the new format of putting all of the diagrams at the beginning of the chapters, I am finding it very difficult to determine which diagram goes with what sub-section. Add references in the text to the diagram most applicable to the descriptions/definitions
Disposition: Deferred to UML 2.4 RTF
Clarify the differences between redefining element and redefined element.
Disposition: Deferred to UML 2.4 RTF
Multiple typos (If you don't want them submitted this way, I'll complete an issue for each.) section 6.34 page 11 Delete word “to” in “The read/write actions can also be used to by one…” section 7.3.3 page 38 Delete word “If’ in the Note “If the lower multiplicity for an end of…” Section 7.3.5 page 46 Correct typo “pr” to “or” in ownedParameter:Parameter[*] Section 7.3.11 page 60 Change “has” to “have” in 2nd para 2nd sentence “Instances of a data type that “has”…” Instances is the subject of the sentence Section 7.3.11 page 61 Add word “to” to Notation sentence 6 “In this case, cone or more arrows with their tails on the clients are connected “to” the tails…” Section 7.3.20 page 71 Change “is” to are in generalizationSet “Designates a set in which instances of Generalization “are” considered members.” The verb refers to the subject of the which clause (instances). Section 7.3.21 page 83 Change “is” to “if” in last sentence of section “Or, “if” a new subclass…” Section 7.3.32 page 97 Change “These constraint” to “These constraints” Section 7.3.32 page 98 Delete word “is” in 2nd sentence of Notation “In general, the notation will include a multiplicity specification shown as…” Section 7.3.37 page 111 Change “is” to “are” in 4th paragraph of Semantics “The public contents of a package are…” Subject of the sentence is contents not package. Section 7.3.49 page 135 and page 136 (Description) Change verb “specify” to “specifies” in “A structureal feature is a typed feature of a classifier that specifies the structure…” Section 7.3.49 page 137 Change verb from “signifies” to signifying” in 1st sentence of Decsription Section 7.3.53 page 139 Delete word “of” in 1st sentence of Semantics
Disposition: Deferred to UML 2.4 RTF
OCL notation is missing from Constraints. Please add or add note that OCL notation is not able to express constraints
Disposition: Deferred to UML 2.4 RTF
Need OCL notation for Constraints. Correct page reference number for StructuredClassifier
Disposition: Deferred to UML 2.4 RTF
Correct multiplicity of role:ConnectableElement[1] so that fig. 96 agrees with that defined in Associations. Add OCL notation for Constraints. Ports under Notation also reads to me like it could be expressed in OCL notation somewhere--like a constraint which would need to be added.
Disposition: Deferred to UML 2.4 RTF
According to fig. 97, Associations need multiplicities added to all and derived symbol to required:Interface and provided:Interface. Add OCL notation to Constraints
Disposition: Deferred to UML 2.4 RTF
Need to write the info for the Changes from previous UML section or remove it
Disposition: Deferred to UML 2.4 RTF
The namespace is xmlns:Model="omg.org.mof.Model" Surely it should be xmlns:Model="org.omg.mof.Model" " The official/latest version of this file: omg.org/models/MOF1.4/XMI1.1/Model1.4/Model.xml" does not exist on the OMG web site.
Disposition: Deferred to UML 2.4 RTF
Add OCL notation to constraint. Correct multiplicity of association interrutingEdge:ActivityEdge[0..*] so that fig. 194 and text agree. Typos - Change 2nd sent. of 2nd para in sub-section Semantics to "...and the token arrives at the target even is an interruption occurs... . " - Under sub-section Presentation Option, spell zigzag as one word, not two.
Disposition: Deferred to UML 2.4 RTF
Add package names "(CompleteStructuredActivities, StructuredActivities)" Add OCL notation
Disposition: Deferred to UML 2.4 RTF
11.6.2 of Infra and 7.3.16 of Super refer to the possibility of Enumerations having attributes: "A compartment listing the attributes for the enumeration is placed below the name compartment." This concept does not make sense to me: an enumeration inherently represents a single value-set modeled through owned EnumerationLiterals. The only type of attribute that might ever make sense is a derived attribute (e.g. Color.isPrimary). Proposed resolution: Add constraint to above sections on Enumeration to state that only attributes permitted are derived ones. Also that any Operation must have isQuery=true.
Disposition: Deferred to UML 2.4 RTF
In Super (but not Infra) EnumerationLiteral inherits from InstanceSpecification. This allows a single Enumeration value e.g. 'private' or 'red' to have many slots (InstanceSpecification.slot). Moreover it allows the value to have many classifiers (InstanceSpecification.classifier) independently of the Enumeration that owns the EnumerationLiteral - it does not make any sense to have this redundant property. All that is needed surely is a value: so if anything EnumerationLiteral should inherit from ValueSpecification. However this still inherits too much: for example an EnumerationLiteral should be owned only by its Enumeration and so should not inherit from PackageableElement as does ValueSpecification. Furthermore inheriting from TypedElement seems to introduce capability that is not catered for in the notation etc: if anything the underlying type for an Enumeration should be specified at the Enumeration not the EnumerationLiteral level (which would allow the different alternatives for an Enumeration to have different types). The only useful capability on EnumerationLiteral is that it should have a name (which is all that Infrastructure allows), and optionally a value. The latter should be specified in the same way as the default value of a Property. Proposed resolution: EnumerationLiteral should inherit only from NamedElement. It should have an optional property: value:ValueSpecification [0..1] The Notation section should describe how to indicate the value, which should be the same as for the default value of a Property
Disposition: Deferred to UML 2.4 RTF
There is an inconsistent description about determining conflicting transitions of a internal transition. According to sector Conflicting transitions, p.492: "Two transitions are said to conflict if they both exit the same state", two internal transitions in the same configration won't be conflict, However, P.492 says "Each orthogonal region in the active state configuration that is not decomposed into orthogonal regions can fire at most one transition as a result of the current event" There are two possible explanation: 1.Internal transition is treated orthogonal to the container region: thus, any two internal transitions in different state won't be confilict. 2.Internal transition is treated as self-transition without entry/exit action: thus, internal transition will be conflict with transitions which are conflict with corresponding self-transition. And a orthogonal region fires at most one transition(either internal or non-internal) an example: A and B are two states of top state. A is superState of AA AA is superState of AAA and AAB t1 is an internal transition of A t2 is an internal transition of AA t3 is an external transition from AAA to AAB t4 is an external transition from AA to B does t1 and t2 conflict? t2 and t3? which should be chosen for firing?
Disposition: Deferred to UML 2.4 RTF
This issue concerns the ReadStructuralFeatureAction. This action reads the values of a structural feature, in order if the structural feature is ordered. According to the sepcification, the multiplicity of the structural feature must be compatible with the multiplicity of the output pin, so the output pin will contain all the values of the structural feature. There is no way to read the value of a single element from a multi-valued structural feature without reading all its values. Adding an input pin (readAt) to ReadStructuralFeatureAction would allow this. This input pin would represent the index of the value we want to read in the structural feature. This issue stands for ReadVariableAction as well.
Disposition: Deferred to UML 2.4 RTF
Second sentence in sub-section Description is missing a word. "...the contents of the referred Interaction xxx [from?? to??] where the InteractionUse is." Change the class name of the association argument:InputPin[*] either on fig 333 to InputPin or to Action in the text. Class name in fig. 333 is Action. This association is also shown in the figure as ordered. Association actualGate:Gate[*] subsets ownedElement. Mention specialization in definition of the association. I'm confused between the BNF use of io-argument and your use of argument. If the name of the association is "io-argument" as indicated by BNF and Issue 1751, should the name on the diagram and in the sub-section Associations be changed to io-argument? Also, para 2 on og 534 italizes argument instead of io-argument. Typo - Second sent. on pg. 534 needs a space between "explained" and "in."
Disposition: Deferred to UML 2.4 RTF
Add Ocl notation to constraints where possible or note that OCL notation is not possible. Page numbers of odd numbered pages are not in the same place as the are for other chapters. Move them to the lower right corner. Delete sub-section headings where the sub-section contains no information or state "None." If a concept is not "(as specialized)" and there are no atttributes, associations, etc. write "None" instead of "No additional xxx." Not all of the figures contain package names for the generalized parents. Add as many of these as possible or use the ellipses as appropriate.
Disposition: Deferred to UML 2.4 RTF
How to show class operation calls in interaction diagrams? A discussion in the umlforum list came to the conclusion that the name in the lifeline header should be the class name. In that case it is not possible to differentiate between "ClassName" only and "RoleName" only. Besides the notational problem I can't see how a class operation call could fit into the interaction meta-model. However it is necessary to show such a call. It's a typical part of an interaction.
The issue here is to be able to describe calls on static methods. Sequence diagrams in UML 2 do not cover this. It is possible to suggest that the lifeline header text be augmented by the possibility to write class as a keyword before the class name. This would indicate that the lifeline represents the imaginary object performing static methods of that class. There will, however, be cascading effects on static requirements since this lifeline does not have any counterpart in the composite structure of the enclosing classifier. For reasons of time pressure, we suggest to defer.
General comments - Delete sub-sections tat are empty or state "None." If class is not "as specialized' do not say "No additional xxxx" but rather "None" or delete the sub-section. Add OCL notation or a note that OCL notation is not available for constraints and/or additional operations and/or derived attributes where appropriate.
Disposition: Deferred to UML 2.4 RTF
There are a few cases when the default is documented as a ValueExpression, as follows:
- JoinNode.joinSpec = {default value is" and"}
- ActivityEdge.guard= {default value is "true"}
These defaults are currently just plain text in the Rose Model displayed under the ValueSpecification as shown in figure 185 in the superstructure specification.
They should be included formally in the model. However it is not clear that the UML2 notation text allows defaults for association ends, and that those defaults can include expressions that construct instances of classes such as ValueSpecification. For example, the notation for ActivityEdge::guard in figure 185 could be:
+guard = LiteralBoolean(true)
The default value for guard is set to a newly constructed LiteralBoolean (a ValueSpecification) with value true.
Recommendation:
Ensure the text notation for default values includes the ability to construct InstanceSpecifications, and that the notation supports defaults for properties on association ends.
Disposition: Deferred to UML 2.4 RTF
Delete sub-sections Attributes and Rationale as there are none. I question, in light of Constraint [1] and the second paragraph in sub-section Semantics, that there are no associations for an actor. Both constraint [1] and Semantics clearly indicate that there are associations and the Semantics paragraph even indicates multiplicity possibilities greater than one. Figure 401 shows no navigability and association between UseCase and Actor although both Constraint [1] and Semantics indicate that there should be some. Typo - There are eleven "(" but only ten ")" in constraint [1]. Personal preference - Restate Changes from previous UML to "The additon of the constraint that requires that all actors must have names has been added."
Disposition: Deferred to UML 2.4 RTF
Add presentation option for multiple object flows between two actions, shown as one line.
Disposition: Deferred to UML 2.4 RTF
Enumeration should have a constraint that the classifier of its literals is the enumeration
Disposition: Deferred to UML 2.4 RTF
Interactions: What object receives SendEvent, etc? Affects how AcceptEventAction is used
Disposition: Deferred to UML 2.4 RTF
Clarify the constraints on ExceptionHandler, that results must be output pins introduced on structured nodes in CompleteStructuredActivities.
Disposition: Deferred to UML 2.4 RTF
Add constraint in ExceptionHandler that exception type must be compatible with the exception handler input. Why is exception type needed?
Disposition: Deferred to UML 2.4 RTF
In ExpansionRegion, clarify that the behavior in the shorthand notation must have exactly one return parameter
Disposition: Deferred to UML 2.4 RTF
In LoopNode, setup, test, and body parts should be owned by the loop node (they were owned by clauses of loop node, which were owned by the loop node).
Disposition: Deferred to UML 2.4 RTF
Add constraints on ConditionalNode to ensure the test and body are owned by the conditional node (or have them owned by the clause with body outputs being referred to by a single clause. This would prevent sharing bodies across clauses It is unclear if this is much of a benefit, since changing the body of one clause will change another, which may not be the intention.).
Disposition: Deferred to UML 2.4 RTF
SequenceNode should have way to set output pins in CompleteStructured, like ConditionalNode and LoopNode do.
Disposition: Deferred to UML 2.4 RTF
Add OCL notation to constraints or a note that OCL notation is not available for this constraint. In the figures show all sub-package names or ellipses associated with the direct generalizations. Use of the words subclass and subclasses is often confusing and inappropriate as these are not shown in associated figures or mentioned in text. Whenever subclasses are mentioned, please clarify by giving examples as was done on page 690. Orgainzation of this Part is confusing after becomming accustomed to the organization used in parts I and II. Placement of all abstract syntax figures in one place helps clarify relationships of figures to each other and makes it easier to see/verify consistency. Names of classifiers and packages in the text often don't agree with the names shown on associated figure.
Disposition: Deferred to UML 2.4 RTF
In Description for CCMService, either add the ending or remove the opening quotation mark for the last word. The stereotype name for CCMProcess is not the same as that within the guillemets. Complete the Tag cell in CCMHome. Complete the Tag cell in CCMManages. Capitalize and correct spelling of "Always in the Constraints cell of CCMManages. The Description for CCMFactory really doesn't make a lot of sense to me but I'm not at all familiar with CCM Components. However the stereotype name doesn't relate to a create function for me.
Disposition: Deferred to UML 2.4 RTF
A test cannot be empty since it has at least a decider: 0..* should be changed to 1..*.
Disposition: Deferred to UML 2.4 RTF
No consistency condition is put between predecessor clauses, for instance two clauses can be the predecessor of each other. Add a Constraint: The transitive closure of predecessorClause must be a strict partial order.
Disposition: Deferred to UML 2.4 RTF
" Any test section with a predecessorClause " Should be: " Any test section whose parent clause has a predecessorClause "
Disposition: Deferred to UML 2.4 RTF
According to fig. 13 an operation is associated with a Datatype. That's not shown in the association section of the class description.
Disposition: Deferred to UML 2.4 RTF
Bidirectional association between artifact and operation required Fig. 124 on page 205 show an unidirectional association from artifact to operation. In the context of the Actions it is necessary to access the owner of an operation. Therefore the association must be bidirectional.
Disposition: Deferred to UML 2.4 RTF
UML2-rtf issue related to communication diagrams: Section 14.4 describes the sequence expression tied to messages on a communications diagram. However, the abstract syntax does not (as far as I can trace the diagram) model the sequence expression. This leaves the sequence expression semantics wide open. Some tools implement the sequence express but the concept of threads and nesting implicit in the expression syntax are undefined in the meta model. Recommendation: Add a SequenceExpresion element into the model associate it with message, and define it explicitly. Describe the semantics of nesting messages.
Disposition: Deferred to UML 2.4 RTF
UML2-rtf issue: Meaning of the relationship between the iteration clause and the Lifeline.selector clause. Interactions often involve the invocation of multiple instances of the same class. For example I may want and instance of my Portfolio class to invoke the currentValue method on instances of associated Asset classes that belong to an asset category (Asset.assetCategory = Stock). This way a portfolio may assess its own value by summing up the current value of all its stock assets. To model this I want to show the same message - currentValue() being sent to the selection of assets that have the assetCategory equal to "Stock." Does the current UML2 communications diagram notation support the following: A portfolio Lifeline labeled theFund : Portfolio An asset Lifeline labeled myAssets [assetCategory = Stock] : Asset This would have to represent not one but all the asset instances that had an assetCategory of Stock A line connecting the two Lifelines A message with a sequence expression that looks like: 1 *[holding := 1..n] : assetValue = currentValue() Lifelines are defined to represent only one interacting entity in an interaction. However the interaction syntax for communication diagrams would indicate that the lifeline can be "multivalued." The need for a Lifeline to represent multiple instances for the purpose of sending a single message to all of them at some nesting level is very common. Suggestion: Allow the Lifeline to have a multiplicity shown within brackets as with parts. Constrain the lifeline to have multiplicity one or greater. Constrain the lifeline with a multiplicity greater than one to have a selector that can, upon applying the selector, result in a single particpant.
Disposition: Deferred to UML 2.4 RTF
Add OCL to constraints in Actions chapter
Disposition: Deferred to UML 2.4 RTF
Misleading statement about multiplicity in AssociationClass. In the semantics of AssociationClass, the following is misleading: " Note: It should be noted that in an instance of an association class, there is only one instance of the associated classifiers at each end, i.e. from the instance point of view, the multiplicity of the associations ends are 1." The part after "i,e." is confusing, since it refers to multiplicity of association ends, which has a different meaning that intended above. I'd say just delete it.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Clarify multiple inputs to expansion regions. Clarify whether expansion regions with multiple input expansion nodes require all values to be present to start execution. If not, how is it indicated which are optional? ExpansionNodes do not have multiplicity.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Operation calls on behavior ports. Per FTF discussion, clarify that an operation call can arrive at a behavior port and be handled by a method on the owning object, without going to the classifier behavior
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Multiple default values. In Figures 10 and 12, the max multiplicity for defaultValue is 1. What if the property or parameter is multivalued? There is no value specification for collections.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
1. Deployment > What is client and what is supplier for this relationship? > Why DeploymentTARGET has word "target" in name but subsets "source" > for Dependency? The meaning of "client" and "supplier" in Dependency is pretty arbitrary and depends on one's point of view. I don't recall the reasoning behind this particular choice, but it may have to do with the direction of the arrow more than anything else. Guus probably wanted the arrow to go from the artifact to the node because it looked more natural to him. Perhaps Guus can explain -- I've copied him on this reply. However, there is definitely a bug here since "client" and "supplier" are not derived unions, hence, they cannot be subset as shown in figure 126. This may have already been raised as an issue. I'll have to check. I suggest that you raise a formal issue in any case. > And why notation examples are from Artifact to Node (arrow near > Node, but Node is "client" in model). Ostensibly, this is explained by what I wrote above. However, there seems to be a deeper problem here: note that Dependency::supplier and Dependency::client are not specializations of DirectedRelationship::target and DirectedRelationship::source respectively, as I would have expected (otherwise it does not seem to make sense to subclass DirectedRelationship at all). I do not understand why this is so, it does not seem to make sense. It may have to do with the constraints that Dependency did not want to impose on supplier and client, but I am not sure. This needs further study and, likely, an issue to be raised. > "Location" attribute of Deployment should be DeploymentTarget, not Node. You are correct. Please raise an official issue on this through issues@omg.org
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Actor and UseCase can't own Properties, this means that associations > in UseCase diagram are always non-navigable at both ends. > Is this correct? ??? I don't have the time at the moment to check whether such a constraint exists, but, if it does, it is certainly an error. For example, in the case of Actors there is an explicit constraint that assumes that actors have properties. Can you tell me where your assumption that Actors and UseCases cannot own Properties comes from?
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
arguments of call actions or arguments of message (for example > setName(name) where "name" is variable defined in Interaction), but > now arguments are simple ValueSpecification, so can't have > refference to "real" argument (variable, member, parameter of behavior etc.) > Maybe Argument should be in metamodel as in UML 1.4, or at least > ValueSpecification should be subclassed in Interactions package and > introduce reference to Element that value it represents?
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Node has nestedNodes collection that redefines "nestedClassifier", > but Node have Generalizations to Class from StructuredClasses that > has no Generalization to Class from Core package, so Nodes don't > inherits "nestedClassifier".
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
In sequence diagrams, the neg operator is used to describe invalid behaviours. However, people tend to interpret neg slightly differently depending on the context in which it appears, thus making it difficult to define a precise semantics for it. Two examples: A sequence diagram with a neg fragment is usually taken to describe also positive (valid) behaviours, i.e. the behaviours of the diagram with the neg fragment simply omitted. This implies that the empty trace should be positive for the neg fragment in this context. Another common use of neg is to state that one of the alternatives (operands) of an alt construct describes the invalid behaviour. In this case, the neg fragment has no positive behaviours (not even the empty trace). Recommendation: Consider introducing another operator in addition, due to the different uses of the neg operator.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Sequence diagrams are often used for early specification of requirements. The distinction between potential and mandatory behavior is not adequately described in UML 2.0 Interactions. To improve this we suggest an additional operator "xalt" that describes alternative operands that are mandatory meaning that any refinement should keep at least some of the behavior of each operand. See paper at <<UML2003>>: Haugen, Stølen: STAIRS - Steps to Analyze Interactions with Refinement Semantics
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
ConditionalNode inputs used by more than one test. In ConditionalNode, the tokens in input pins might be consumed by one test body execution and not available to another. They need a similar mechanism to LoopNode that copies the inputs to test body in puts and destroys the original inputs when the loop node is done
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Input tokens to LoopNodes should be destroyed when the loop is done
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
3. Arguments of Message Variables, members and other "value holders" can be used as arguments of call actions or arguments of message (for example setName(name) where "name" is variable defined in Interaction), but now arguments are simple ValueSpecification, so can't have reference to "real" argument (variable, member, parameter of behavior etc.) Maybe Argument should be in metamodel as in UML 1.4, or at least ValueSpecification should be subclassed in Interactions package and introduce reference to Element that value it represents?
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Messages in UML 2.0 can't have numbers in the model, but all examples of sequence and communication diagrams are with numbers. How numbers should be mapped into model? How to migrate with old activator, successors, predecessors?
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
What namespace should be owner of variables used in sequence diagram? If variables are added into Interaction, they conflict, because every execution (method for example, or even loop) can introduce variables with some names, that should be not accessible outside. Maybe ExecutionSpecification or InteractionFragment should be NameSpaces and declare collection for storing variables?
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Figure 404 - Example of the use cases and actors for an ATM system (The ATM example is repeated in Figure 410.) If you think multiplicity gives value to this diagram, please add additional text and explain the usage of multiplicity (1, 0..1, 0..*) in this diagram.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
To indicate _which actor_ initiates the interaction a communicates association may optionally be adorned with an _arrow head_ to represent navigability. (No arrowhead indicates either actor can initiate the interaction.) Constraints: [1] Only one arrowhead can point towards the use case. [2] All other communicates associations have arrow heads pointing towards the other actors. Figure 409, page 660 could be modified and used as an example.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
Object token flow semantics with input pins seems to be incompletely defined. In section Semantics on page 337 you write: "... an action can only begin execution when all incoming control edges have tokens, and all input pins have object tokens." You didn't explain how and when the object tokens come to the input pins. Further, for step [2], you write: "An action consumes the input control and object tokens and removes them from the sources of control edges and from input pins." Again, you didn't explain how and when the object tokens came to the input pins, from source object nodes.
Due to lack of time, the RTF/FTF agrees that the following are problems that need fixing, but decided to defer their resolution to a future RTF working on this specification.
BNF for property notation states that the name of the property is mandatory. There is no appropriate constraint for that. If it is mandatory there are some wrong diagrams in the specification, e.g. Fig 334.
The element "Parameter" is shown to generalize both, TypedElement and NamedElement. However, TypedElement is already a generalization of NamedElement (see chapter 9.19). Thus, the second generalization is redundant and can be removed.
The Elements Type, NamedElement and TypedElement of the package Core::Basic are (ambiguous and redundant) redefinitions of the types Type, TypedElement (Core::Abstractions::TypedElements), and NamedElement (Core::Abstractions::Namespaces). Why is that?
Section 16.3.2 allows "classifiers in general to own use cases". Section 16.3.6 however states that the "subject of a use case could be (...) any other element that may have behavior". These elements are called "BehavioredClassifier" by Section 13 and are a specialization of Classifier. Please clarify the consequences of these statements: - may all Classifiers be owners of UseCases, but only BehavioredClassifiers be the subject of a UseCase? - what is the semantics of Non-BehavioredClassifiers, e.g. an Interaction or OpaqueBehavior, owning a UseCase or being a subject of it? A UseCase "represents a declaration of an offered behavior" (16.3.6), so how can Non-BehavioredClassifiers ever offer a behavior?
Issue for: UML 2.0 Infrastructure Specification Section: 11.3.6 Classifiers diagram Document: ptc/03-09-15 URL: http://www.omg.org/cgi-bin/doc?ptc/2003-09-15 Pages: 90,91,95,96,127,130 With this submission I report an serious error in your specification. On Page 127, Section 11.3.6 Classifiers diagram, you show that the type InfrastructureLibrary::Core::Constructs::TypedElement is a generalization of both, InfrastructureLibrary::Core::Abstractions::TypedElements::TypedElement (section 9.19.2, page 91) and InfrastructureLibrary::Core::Basic::TypedElement (section 10.1.3, page 96). This leads to a collission of properties, since both of these defined a property called "type", where the one is of the sort InfrastructureLibrary::Core::Abstractions::TypedElements::Type (section 9.19.1, page 90) and the other is of the sort InfrastructureLibrary::Core::Basic::Type (section 10.1.1, page 95). Both Type-types are incompatible, since none is a generalization of the other. Please help and clarify, because I want to implement your standard for a project and cannot proceed correctly. Thanks, Thomas Weise. tweise@gmx.de University of Kassel Germany
In section 11.3.13 TypedElement (as specialized) you write: Attributes • type: Classifier[1] Redefines the corresponding attributes in both Basic and Abstractions. Neither has InfrastructureLibrary::Core::Abstractions::TypedElements::TypedElement such a property, nor does InfrastructureLibrary::Core::Basic::Type::TypedElement, even through inheritance.
In section 11.5.1 DataType (as specialized) you write "• ownedAttribute: Attribute[*] The Attributes owned by the DataType. Subsets Classifier::attribute and Element::ownedMember." The type "Attribute" does not exist. You mean Property, which is also shown correctly in the diagramm at page 133
The UML 2.0 Specification states at 15.1 that "The state machine formalism described in this section is an object-based variant of Harel statecharts." However, there is a big semantical discrepancy between the Harel statecharts as described in D. Harel and M. Politi, Modeling Reactive Systems with Statecharts: The STATEMATE Approach, (with M. Politi), McGraw-Hill, 1998 and the UML 2.0 specification. The major difference is in the priority of transitions when multiple transitions are enabled in case of a nested (hierarchical) state machine. Harel states (6.3.1 (pages 99-100)): "The criterion for priority of transitions prefers the transition whose source and target have a higher common ancestor state, if possible. If the common ancestors of both transitions are identical, then non-determinism indeed occurs." (i.e. it prefers global, higher-level transitions over local ones) UML 2.0 (15.3.12 page 618) imposes almost a reveres-ed order on the priority of the transitions, by looking up from the current nested leaf state and taking the first enabled transition. The impact of the UML definition is that the author can not only "refine" a high-level state in its descendants, he/she can override the global transitions thus violating the global (high-level) contract of the state machine. This becomes even more dangerous when using submachine state, i.e. the nested state is actually drawn in a separate diagram. Example: imagine an electrical device, which can be in one of 2 top-level states: ON, OFF and having two transitions power_on, power_off. The ON state can have multiple sub-states describing a particular state of the operation. Using the UML 2.0 semantics, one can effectively override the global power_off transition locally in on of the ON's children, forcing the electrical device to keep working, even if the power has been shut down - ignoring the signal using e.g. a self-transition.
UseCase can be connected with Actors using Association, but neither UseCase nor Actor can't own Properties (there are no subsets), so Association is always non-navigable, properties are owned by Association.
OutputPin should hold output value, but there is no way to store it. Should be introduced similar metaclass like ValuePin for InputPin
Syntax of Transition is described as: " <transition> ::= <trigger> [‘,’ <trigger>]* [‘[‘ <guard-constraint>’]’] [‘/’ <activity-expression>] The behavior expression may be an action sequence comprising a number of distinct actions including actions that explicitly generate events, such as sending signals or invoking operations." Information from this expression (operation call for example) can't be mapped and saved into model.
Similar situation with reply messages in interactions. <messageident> ::= ([<attribute> ‘=’] <signal-or-operation-name> [‘(‘ [<argument> [‘,’<argument>]* ‘)’] [‘:’ <return-value>]) | ‘*’ Message can display return values and variable assignments, but there is no way to store this information in the model, because Message has no attributes for these properties.
On page 97, Chapter 10.2.2. MultiplicityElement, you write "Constructs::Relationship reuses the definition of Relationship from Abstractions::Relationships. It adds a specialization to Constructs::Element." which seems to be a little mislead copy-paste-action.
on page 134, Chapter 11.4.1, you write: "Constructs::Classifier merges the definitions of Classifier from Basic and Abstractions. It adds specializations from Constructs::Namespace and Constructs::Type." In Basic there is no definition for "Classifier".
Description Figure 36 was not changed to conform to example description. Here, the example indicates that “the dependency is an instantiate dependency, where the Car class is an instance of the Vehicle Type class. However, Fig. 36 illustrates that Car class is an instance of the CarFactory class The page indicates issue 6159 addressed this same problem, but apparently it went unchanged.
The resolution to issue 6460 in the InfrastructureLibrary specification indicates "Implementation can support traversal across non-navigable ends, but it is not required. Once an object is found by traversal, messages can be sent to it like any other object." This statement may lead to interoperability problems between implementations, is not included in the adopted Superstructure specification, and contradicts constraint [4] for ReadLinkAction which states the end must be navigable. Infrastructure also does not define what it means to send messages to an object so it is not clear what these statements actually mean. It is possible that the resolution to issue 6243 traded coupling between navigability and property ownership for coupling between navigability and tool implementations. Navigability no longer has any well-defined semantics and becomes simply a hint to tool implementors that the traversal should be efficient. I believe this is quite unfortunate and can be avoided by decoupling tool implementations that manipulate models from the meaning of the models themselves. Navigability should continue to mean semantically traversable as specified by ReadLinkAction. This will establish an interoperable meaning across all tools and preserve an important and commonly used semantic. If tools wish to support efficient traversal to non-navigable ends for their purposes, they should feel free to do so. This can be done by maintaining additional information in associations for the non-navigable ends for the tools purpose, or by using crawlers that examine the model and cache information for specific tool purposes. This is manipulating the model for very different purposes than the meaning of the model itself. If it is desired to have some standard means of indicating to tool vendors where non-navigable association ends should be efficiently traversable, this should be done by a separate property perhaps available through the standard profile. It should not be coupled with the semantic meaning of navigability.
Event was able to own set of parameters in UML 1.4 .
"Any parameter values associated with the current event are available to all actions directly caused by that event
(transition actions, entry actions, etc.)."
In UML 2.0 Parameters are removed from Event metaclass, but in chapter "Changes from UML 1.x" there is no comment about that ("None").
Could you please comment how Parameters from UML 1.4 Event should be mapped into UML 2.0 model?
I see a big problem, because some MDA tools (like AndroMDA) are based on information stored in Event parameters, hundreds of users have lot of projects, they can't be lost on migration.
Actions for sending events and for calling operations and behavior are part of the "BasicActions" package which is part of Compliance Level 1. Their 'partner' actions for accepting a call or an event, however, are part of the "CompleteActions" package which is part of Compliance Level 3. Since there is not much sense in creating events without ever accepting them later, I recommend one of the following: a) Accept the first item of Issue 8459 from Mr. Amsden and move "AcceptEventAction" and "AcceptCallAction", too, to a package of L1, preferrably "BasicActions" b) Otherwise (if "Communications" remains an L2 package) move these two Actions together with all "InvocationAction" specializations, too, to a package of L2. In this case, maybe a new L2 package like "CommunicationActions" could be created.
In figure 3, the association end Element::owner is shown as navigable and as a union of all its subsets. According to the following convention defined in section 6.5.2, this end is owned by the class and not the composition association:
" • An association with neither end marked by navigability arrows means that:
• the association is navigable in both directions
• each association end is owned by the classifier at the opposite end (i.e., neither end is owned by the association)"
Throughout the spec, there are many places where this association end is specialized into a non-navigable association end (e.g., figures 4, 5, ...). But, according to the following additional rule in 6.5.2:
" • An association with one end marked by a navigability arrow means that:
• the association is navigable in the direction of that end,
• the marked association end is owned by the classifier, and
• the opposite (unmarked) association end is owned by the association"
this means that such non-navigable association ends are owned by the association and not by the class.
Consequently, such ends cannot be valid specializations of Element::owner (as stated in the spec) since they are owned by a classifier (the association) that is not related by generalization to the classifier (i.e., metaclass) that owns the original attribute.
Recommendation:
(1) Define Element::owner such that it is owned by the composition association and not by the Element class. This will make all the currently invalid subsettings of this type valid.
(2) Do this for all other cases of invalid subsets of this type in the spec, if they exist.
(3) Make it explicit in the spec that these are exceptions to the convention described in 6.5.2
In the UML 1.5 you could specifiy on messages in the collaboration diagram the predesessor. This was very convenient for modeling threads. this has been removed from the UML 2.0. It should be added to the communication diagram message specification.
think there is some inconsistency in your usage of terms in chapter 15 State Machines. It isn't really clear (I think) what you mean sometimes when you use the terms "state machine" "behavioral state machines" and "protocol state machines". In my (humble) opinion you should never use only the term "state machine" when you do not mean both "behavioral state machine" and "protocol state machine". 15.3.12 is a perfect example where I think there is confusion, or at least lack of clarity, since you talk about "state machines" executing "activities". Clearly(?), not all state machines do-- more precisely--protocol state machines don't.
The notation for Associations allows them to be depicted as a diamond (even binary associations). However the Notation for AssociationClasses assumes the Association is depicted as a line only, and does not describe an option for attaching an AssociationClass to an Association shown as a diamond. This should be fairly obvious - just have the dotted line attached to the diamond instead of the Association's line.
Chapter 14.3.13 states on p. 526 that "Interactions are units of behavior of an enclosing Classifier. Interactions focus on the passing of information with Messages between the ConnectableElements of the Classifier." From chapter 9.3.13, it is obvious that only StructuredClassifiers can have such ConnectableElements. Additionally, chapter 13.3.2 states that the context of a Behavior is a BehavioredClassifier. When looking at the Classifier Hierarchy in Appendix F of the Spec, you will find a single Element which is a BehavioredClassifier, but not a StructuredClassifier: the UseCase. This is where the problems start. A UseCase is not allowed to have properties at all, but may be the owner of an Interaction. Consequently, with the current version of the Spec, an Interaction owned by a UseCase may never have any Lifeline at all! Proposed Resolution: Redefine the Association Behavior::context: BehavioredClassifier[0..1] to Interaction::context: StructuredClassifier, replace all occurrences of 'BehavioredClassifier' in the description by 'StructuredClassifier' It should still be possible that a UseCase is the owner of the Interation, but the determination of the Interaction's context would be much clearer.
When an association generalizes another association and redefines its ends, the redefined end must be accessible through the generalization. This means redefining and redefined properties must be ownedEnds of the association or ownedAttributes of the participating classes. Redefining ownership (either directly or indirectly by changing navigability with default ownership) resulting in the redefined property no longer being a member of the general class should not be allowed. UML2 needs to include a constraint capturing this rule
The semantics of TimeEvent uses undefined term "active". State machines uses the term for states, not triggers. Need definition independent of state machines in any case.
The semantics of TimeEvent is not really given in terms of state machines, but either way, the semantics for relative time events is completely unclear. I am not even sure as of the intuition here: Apparently the intention is that a trigger is caused (the wording of section “Trigger”), but delayed from that point until the relative time interval expires. However, there is nothing in the semantics of Trigger which would allow for a trigger just to happen without an event. So maybe the intuition is that there are two events associated with such a trigger: a spontaneous event occurring when the behavior that is triggered is enabled and that would normally cause the trigger, and the delay asserted by the time event. Moreover, the notation section uses the term “time trigger” where this should be specifying time events. I propose to defer this until somebody can explain the intuition and semantics of a relative time event. Disposition: Deferred
In Classes, Association, Semantics says: "Subsetting represents the familiar set-theoretic concept. It is applicable to the collections represented by association ends, not the association itself." and "Specialization is, in contrast to subsetting, a relationship in the domain of intensional semantics, which is to say it characterized the criteria whereby membership in the collection is defined, not by the membership. One classifier may specialize another by adding or redefining features; a set cannot specialize another set. A naive but popular and useful view has it that as the classifier becomes more specialized, the extent of the collection(s) of classified objects narrows. In the case of associations, subsetting ends, according to this view, correlates positively with specializing the association. This view falls down because it ignores the case of classifiers which, for whatever reason, denote the empty set. Adding new criteria for membership does not narrow the extent if the classifier already has a null denotation." ISSUE: It is the semantics of Generalization in UML is that all the instances of the subtype are instances of the supertype, so subtyping in UML implies subsetting. It is not necessarily proper subsetting, however, as the example above shows. Subsetting in UML can be achieved by subtyping (adding attributes, etc), but can only be done by adding constraints to the subtype. Also, for association classes, the user should be able to specialize an association class with another association class with the same semantics as subsetting ends.
In LoopNode, the frontend, backend node description is redundant with the semantics of StructuredActivityNode
Figure 13, what is the classifier of EnumerationLiteral (inherited from InstanceSpecification)? Presumably it should be the enumeration, with the enumeration end of the association to Enumeration redefining the classifier end from InstanceSpecification in Figure 8. Programs accessing classifiers in the repository should find the enumeration literals as instances of their enumerations.
Associations can have static ends, but this violates the semantics of static (that they are properties of the class or subclasses, not instances). If we are following programming languages, the semantics of isStatic should be that it is properties of instances, but is the same on all instances. The current semantics would be the right one if isStatic identifies "metaproperties".
What is the effect of unique association ends the actions for creating and deleting links? For example, what if one end is unique and the other not?
Classes should be able to support interfaces without being a BehavioredClassier (see figure 16). This introduces an unnecessary dependency of Classes on CommonBehavior
Fig 16.3. uses note symbol notation of the Hruby Vision template. That's not conform to UML 2.0 at this point. The end of the note anchor line doesn't have a circle in UML 2.0.
Having implemented a UML 2 L0 addin for Rational Rose, I exported a sample model to XMI. When this XMI file was imported into another UML2 tool, the tool failed, indicating that "ownedType" is not a valid element. Examination of the Infrastructure Library reveals why this is so. In the InfrastructureLibrary's Basic package (the basis for UML2 L0), the sole means by which a Package owns items is the "ownedType" reference. However, in The Constructs package (the basis for UML 2 L1 and beyond), this reference is now indicated as derived, meaning that it will not be handled by most UML 2 tools. It has been replaced by the "ownedMember" reference, which is unknown to UML 2 L0. This is a showstopper issue with respect to UML2 XMI interoperability, since it means that a UML2 tool operating at Level 0 cannot interchange models with UML2 tools operating at any other level.
In UML v. 2.0, formal/05-07-04: IF 7.3.9 Comment -> Semantics -> "A Comment adds no semantics to the annotated elements,..." AND 7.3.10 Constraint -> "A constraint is a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of an element." AND 7.3.10 Constraint -> Semantics -> "A Constraint represents additional semantic information attached to the constrained elements." AND 7.3.10 Constraint -> Presentation Options -> "The constraint string may be placed in a note symbol and attached to each of the symbols for the constrained elements by a dashed line." THEN Either the constrained element is the "note symbol", the "note symbol" represents a Comment and so a Comment adds semantics to another element or I missed something.
In (merged) compliance level L1, derived union properties ActivityNode::inGroup, ActivityEdge::inGroup, ActivityGroup::subgroup, ActivityGroup::superGroup and have no subsets. Note that ActivityGroup, an abstract metaclass, has no concrete subclasses. -> Should ActivityGroup not be originally defined in BasicActivities (nor in Fundamental Activities), but perhaps in IntermediateActivities?
In (merged) compliance levels L2 and L3, derived union property ActivityGroup::subgroup has no subsets.
-> Rename ActivityPartition::subgroup to subpartition, replace {redefines subgroup} with {subsets subgroup}. Also add properties to StructuredActivityNode and InterruptibleActivityRegion that subset ActivityGroup::subgroup?
Hello, it is not clear to me whether it is still possible in UML2.0 to specify in interaction diagram (either sequence or communication) broadcast actions and lifeline representing multi-object. Figures Fig.14.22 and 14.23 (Superstructure 05-07-04), actually show the possibility of representing instances of the same type (class B) each one represented by a different lifeline: the selectors in that case are used to identify one specific instance and not a set of instances. Regards, Simona Bernardi
Under the section, "12.3.27 ExpansionRegion(from ExtarStructureActivities)", it states as Attributes • mode : ExpansionKind - The way in which the executions interact: parallel - all interactions are independent. iterative - the interactions occur in order of the elements. stream - a stream of values flows into a single execution. Notation An expansion region is shown as a dashed rounded box with one of the keywords parallel, iterative, or streaming in the upper left corner. However, in "Figure 12.87 Expansion region" the keyword used is <<concurrent>>. Could you please verify this and let me know. Thank you.
Activity diagrams currently support two notation styles for denoting membership in a partition: horizontal or vertical, and possibly nested "swimlanes" and a parenthesized list of partition names displayed above an activity node. These notation styles are adequate in many cases, but can result in diagrams that are either difficult to layout or don't sufficiently display relationships between nodes that are in the same partition. In addition, control nodes often shouldn't belong to any partition at all, but may need to be displayed in a partition with adjoining nodes for diagram layout purposes. In this case, apparent inclusion in the partition on the diagram should not necessarily imply membership in the partition. One way to address these issues would be to include additional notation styles for partitions. For example, a partitions could be displayed as in concentric, overlapping circles, ovals, or rounded rectangles with activity nodes in the partitions displayed inside the partition shape. The same partition could be displayed many times on the same diagram allowing separation of members in the partition for diagram layout purposes. Control nodes often connect activity nodes across partitions and can have a strong influence on diagram layout. Having control nodes treated like other activity nodes in partitions can result in overly restrictive layout constraints, or accidental modification of the activity model for diagram layout purposes. For control nodes, perhaps the default should be that they are not placed in partitions unless explicitly stated by some tool action, and they could have a more restricted notation, such as requiring the parenthesized list only. This would allow control nodes to be freely interspersed between elements in a partition without necessarily belonging to that partition and keep diagram layout concerns from accidentally modifying the underlying activity model.
A keyword, "buildcomponent", and a stereotype, "buildComponent", are listed in Annex B, "UML Keywords" and Annex C, "Standard Stereotypes", but not consistent. The letters, 'c' of the "buildcomponent" keyword and 'C' of the "buildComponent." Also, there are stereotypes mentioned throughout the document such as: o decisionInput o multireceive o parallel o iterative o stream but not listed in the Annex C, Standard Stereotypes. The stereotypes mentioned above may not reflect the entire document.
I'm attempting to implement a JMI repository for the UML2 superstructure. This is made more difficult by the use of package merge in the model. The following issues should be clarified in the definition of package merge: 1. Do classifiers in the resulting package extend classifiers in the merged package? If they do: The meta-model must contain all infrastructure packages and extension packages defined in the superstructure spec e.g. 'ProtocolStateMachines', 'PackagingComponents' etc., in order to facilitate reflective access to instances of types defined in these packages. However, these packages are not collected in one or more sensible enclosing namespaces (e.g. root 'infrastructure' and 'superstructure' packages), so the root namespace will be cluttered. Root packages for these elements should therefore be introduced in the infrastructure and superstructure specifications. If they do not: Some infrastructure packages will still be needed in the resulting meta-model, because the infrastructure specification uses import + generalisation rather than merge to establish the relationships between packages, e.g. in core::abstractions. For conformance level 0, instances of types in package UML would therefore not be instances of types in core::basic, because this package is merged into UML. However, they would be instances of types in other infrastructure packages, e.g. core::abstractions::elements::Element, because core::basic imports this type, rather than merging it. This seems illogical. Why should core::abstractions::elements have instances in this case, but not core::basic? This could be corrected by using merge in the infrastructure spec, hence avoiding dragging imports into the UML package. However, using merge in this way means redefining the semantics for each copy of the same type, which is why there is so much unnecessary duplication in the infrastructure and superstructure specs. In both interpretations of merge, infrastructure classes and packages penetrate the UML meta-model, leading to a lack of good namespace organisation. This has an impact on the ease with which reflection can be used in the repository. 2. On page 107 the specification states that the use of explicit merges and pre-applied merges in a meta-model is equivalent with regards to the semantics of the meta-model. This is false when reflection is considered, as the meta-model retreived by reflective methods will be different depending on the approach taken. This is significant: To retrieve all features of a classifier where merge has been used in the meta-model, you need not only to recurse the generalisation hierarchy, but also the package containment hierarchy to determine if any containing package is the recipient of a merge that could modify the features of the classifier. This is highly inconvenient. My recommendation to address these problems is that classifiers in a package that is the recipient of a merge should be defined to generalise matching types in the merged package. The package structure of the infrastructure and superstructure specifications should be revised to reflect the fact that most packages and types defined in the specification will therefore be retained in any UML2 specification. Alternatively, use merge rather than import in the infrastructure specification, with the prescription that meta-models accessed by reflection must have the merges rolled out. Also therefore provide explicit documentation of the rolled out meta-models for the various conformance levels for the superstructure.
In UML2, exceptions are represented as Types associated with an Operation via the multivalued raisedException property. The types have names and possibly structure (e.g. holding details of an error) and may use inheritance. However there is no notation defined for actually modeling Types associated with Operations as raisedExceptions.
The choice of terminolgy for TransitionKind is non-intuitive for many of us, and therefore leads to misuse. Specifically, one would expect the antonym pair "Internal" and "External" be applied to a conceptual pair such as "Exits the composite state" and "Does not exit the composite state". Instead the terms "External" and "Local" refer to these behaviors, respectively. Further, the term "Internal" is then used to describe a concept that has nothing to do with state transitions, but rather, is a reaction to a trigger. It appears to us that the transition and reaction concepts were generalized based on their members (trigger, guard, effect) and not on their behavior. We have found this approach to be a bad practice. Behavioral generalization is more intuitive, and therefore more appropriate. We suggest the following changes: "Internal implies that the transition, if triggered, will not exit the composite (source) state, but it will apply to any state within the composite state, and these will be exited and entered." "External implies that the transition, if triggered, will exit the composite (source) state." Move what is currently described as an "Internal Transition" to a separate concept named "Reaction".
Operation should be a specialization of TypedElement and MultiplicityElement. Currently it is in InfrastructureLibrary::Core::Basic (L0), but isn't in other packages (LM - L3).
A similar issue exists with ParameterSet::condition, State::stateInvariant, Extend::condition, Action::localPrecondition, Action::localPostcondition, StateInvariant::invariant, i.e. constraints owned by these properties have no context. This raises the question of whether a constraint must always have a context (note that some of these owners are not namespaces)...
Can an instance specification for a classifier specify instances of subtypes of the classifier? For example, if Fido is an instance specification for Class Dog, can the runtime object it specifies be an instance of Terrier?
In the Infrastructure.cmof file distributed as part of ballot 12, the Core::Constructs::NamedElement class is missing the qualifiedName derived property. The operation qualifiedName() exists, but the corresponding derived attribute is missing. Core::Abstractions::Namespaces::NamedElement does correctly include the qualifiedName derived property and all of the OCL constraints in Constructs correctly references a qualifiedName attribute (rather than the operation). Presumably this is an error in the metamodel.
1) According to the infrastructure specification [1] the Basic package is using metaclasses from the Abstractions package, as indicated by the following text. “Basic also contains metaclasses derived from shared metaclasses defined in packages contained in Abstractions. These shared metaclasses are included in Basic by copy.”[1 page 91] First, the mentioned copy construction is not defined in the infrastructure. Second, in contrary to the copy definition, the Rose Model [2] of the infrastructure defines the deriving of metaclasses as import on the package Abstractions::Elements and Abstractions::Multiplicity. (see Figure 1) 2) Furthermore, the infrastructure specification described the reuse of the package Abstractions::Comments as followes. “Basic::Comment reuses the definition of Comment from Abstractions::Comments.” [1 page 92] The Rose Model [2] does not contain this import. Abstractions Elements Comments Ownerships <<import>> <<import>> Multiplicities <<import>> Basic <<import>> <<import>> Figure 1 3) The infrastructure specification described the Basic::MultiplicityElement as the reuse of Abstractions::MultiplicityElement: “Basic::MultiplicityElement reuses the definition from Abstractions::MultiplicityElement”[1 page 97] The Abstractions package does not contain an Abstractions::MultiplicityElement. Instead of, the Abstractions package does contain an Abstractions::Multiplicities::MultiplicityElement and an Abstractions::MultiplicityExpressions::MultiplicityElement. Owing to the import of Abstractions::Multiplicities the Abstractions::MultiplicityElement
The infrastructure specification [1] described the metaclass Element as followes: “Element is an abstract metaclass with no superclass. It is used as the common superclass for all metaclasses in the infrastructure library.” [1, page 45 and page 93] Both packages, Abstraction and Basic, are using the same definition for Element. Therefore, it is logical to assume that both packages will contain their own class Element, as shown in Figure 2. InfrastructureLibrary Abstractions Basic Element Element Figure 2 The Rose Model [2] specifies one single class Element, a metaclass that is part of Abstractions. The exact name is Abstractions::Elements::Element. The Basic package imports this metaclass. (see Figure 3). We assume this is the correct interpretation, therefore the text on page 93 should be changed accordingly. InfrastructureLibrary Basic Abstractions Element (from Elements) <<import>> Figure 3
The definition of the classes Element and Comment in the Basic package is ambiguous. The Basic package
imports Abstractions::Elements::Element and Abstractions::Comments::Comment. An inheritance
relationship and an Association called ownedComment is introduced between Element and Comment in the
package Basic. However, these relationships were already defined for these classes in the package
Abstractions (see the top two diagrams in Figure 4). Therefore, the complete model of Element and
Comment in the Basic package is the model shown in Figure 4, clearly showing a redundant association
called ownedComment, and a redundant inheritance relationship between Abstractions::Elements::Element
and Comment.
Abstractions
Element
(from Elements)
Element
(from Comments)
Comment
(from Comments)
Element
(from Ownerships)
+owningElement
0..1
{subsets owner}
ownedComment
*
{subsets ownedElement}
annotatedElement
*
Basic (after import abstractions)
Element
(from Comments)
Element
(from Ownerships)
Element
(from Elements)
Comment
(from Comments)
+owningElement
0..1
{subsets owner}
annotatedElement
*
0..1
ownedComment
*
{subsets ownedElement}
+ownedComment
0..n
Basic
Comment
(from Comments)
Element
(from Elements)
+ownedComment
0..n
0..1
<<import>>
<<import>>
Figure 4One difference between UML activity and BPEL process is that all data flows in UML must be explicit through connections between activity parameter nodes, pins, central buffer nodes, and/or data store nodes. UML activities can also have structural features and variables which allow data to be passed between actions without object flows, corresponding more like BPEL variable references. However, input and output parameters have no such indirect access. All actions that need information from parameters have to be connected through object flows. This is inconsistent and can lead to complex activity models because of the need for a large number of ForkNodes and ObjectFlows in order to access Activity parameters. UML2 should support actions to read and write parameters similar to reading and writing variables. The ActinInputPins can be used to simplify parameters in activities.
find it very unintuitive that the name attribute of a NamedElement is optional and If specified may be any valid string, including the empty string. A more accurate name for an element that has the capacity to have a name but does not necessarily have one would be, NameableElement instead of the misleading NamedElement. However, elements that do not have a name (or that have a name comprising solely of the empty string or white space characters) have no means through which a human can precisely reference them other than through their physical location on a diagram. This leaves open an opportunity for ambiguity in referencing elements and possible mis-communication. For this reason, the name attribute of NamedElement should be required, should not be allowed to contain just the empty string or just white space characters and should be unique within the element's package. In practise, even an artificially generated name for an element is preferable to no name at all. The question of whether the name of an element should be displayed on a particular diagram is a completely different subject and should, in general, be a decision made on a case-by-case basis by the modeller. However, even when the name is not displayed on a diagram, requiring elements to have a readable name provides tool-makers with opportunities to show the name of the element in tool tips, status bars, model navigation panes, etc so that the element can still be readily identified and precisely distinguished from others by human users of the model. It is very common in many organizations to have both a short name for an element and a longer more descriptive name for an element. For example, a use case may have the short name UC-OP0001 and a longer name 'Place Order'. The current NamedElement has no provision for such a scheme. In practise, it would be frequently very useful NamedElements had an optional longer name as well as a required short name attribute. Whether the short or long name (when provided) are used on a particular diagram or in any other context is again a matter for the modeller and tool-makers.
The fork node does not provide tokens to outgoing edges with a guard that evaluates to false. Actions with more than one outgoing edge have a implicit fork semantic. It is unclear if a token is provided to edges with false-guards. The specification defines on page 339: "The guard must evaluate to true for every token that is offered to pass along the edge." Does the token exist if the guard evaluates to false? Does the token wait until it evaluates to true? The evaluation is done at runtime. At which time exactly? While offering tokens or all the time during activity runtime?
Given that these are both {ordered}, indicating that ordering is important, then it seems only sensible that the ordering should be consistent, i.e. if Property p appears before Property q in memberEnd then that should also be the case for ownedEnd.
There should therefore be a constraint added to this effect.
There should probably also be a review of other cases where an ordered Property subsets another ordered property.
Or should there be a more general constraint defined at the meta-level?
The comment in figure 14.2 in the top right cell identifies the last message as a reply, but it is in fact a creation message. See 14.3.20 Message, Notation, pg. 478: Synchronous Messages typically represent method calls and are shown with a filled arrow head. The reply message from a method has a dashed line. Object creation Message has a dashed line with an open arrow.
P. 603 makes reference to "CallTriggers" and "SignalTriggers". I believe the wording on that whole paragraph under "Example" should be changed slightly. P. 246 makes reference to "SignalTrigger" P. 453 makes reference to "call trigger" ( I believe the wording should be modified slightly. )
Extend (with condition) entry in diagram table: The comment anchor line has a small circle at the end. That's not UML notation, but Pavel Hruby notation
I propose an optional enhancement of the comment symbol: It is possible to draw a small circle at the end of the anchor line. That way it is easier to read a diagram if the anchor line crosses other dependency lines. The small circle is already used in several diagrams. It is part of the famous Visio stencil of Pavel Hruby.
A "par"-like operator with two concurrent regions where one region is interrupted when the other is completed. According to me, the only way to express the same semantics today is to use many nested "opt" operators, which is not practical. I am under the impression that this should be quite a common need.
A) All associations ends in the UML2 metamodel itself should be navigable The top of section 6.5.2 states that "An association with one end marked by a navigability arrow means that: • the association is navigable in the direction of that end," This does not make sense now that navigability has nothing to do with property ownership and is used in effect to indicate a requirement for efficient access. However there is no justification for non-navigability in the context of the UML metamodel itself (which is in effect an application model/specification of a UML tool). Given that most users of UML tools would reasonably expect to do 'where used' navigations/queries with reasonable efficiency then there seems to be no reason for having ends owned by Associations being non-navigable. Furthermore OCL and QVT engines would also expect efficient traversal. An important case in point is that currently the association end from an Element to its applied Stereotypes is marked 'non-navigable' using the old notation. While there is an argument for not having a property on the Element itself, navigating the association from Element to its applied Stereotypes is an important access that any tool would require to be very efficient (e.g. to allow the tool to display the stereotype name/icon on diagrams where the element appears). When UML2 was designed, the arrows were used to mean property ownership only. We should honor that design intent. Proposed resolution: At top of section 6.5.2 replace: "An association with one end marked by a navigability arrow means that: • the association is navigable in the direction of that end, • the marked association end is owned by the classifier, and • the opposite (unmarked) association end is owned by the association. With: "An association with one end marked by a navigability arrow means that: • the marked association end is owned by the classifier, and • the opposite (unmarked) association end is an owned navigable end of the association. Alternative resolution: Redraw all diagrams to not show the deprecated notation of using navigability arrows to indicate ownership.
Though section 6.5.2 explains and justifies the convention (in the UML2 spec only) for use of navigability arrows to represent property ownership, it would be worth showing a non-normative example of one of the metamodel diagrams with the correct 'dot at line end' notation used. This depends on the resolution to issue A) above. C) Use the new 'dot' notation in examples Currently there is only one example of its use. However most of the examples have taken an unadorned line to indicate that both ends are owned by the respective classes: now the same diagram indicates both ends are owned by the association. Though tools may be at liberty to hid the adornments the spec itself should be extremely precise in the examples and show the adornments explicitly since otherwise the diagrams are ambiguous. Note that the conventions in 6.5.2 explicitly apply only to the diagrams for the metamodel itself (see line 1 of 6.5.2).
Input and output pins of an action in an activity are ordered, and their order corresponds to the order of the parameters of actions such as CallOperationAction or CallBehaviorAction. This is the only way pins correlate with their corresponding parameters. A Pin has no direct ownedAttribute that refers to its corresponding Parameter. Ordering is sufficient for correlating pins with parameters, but it is difficult to visualize on a diagram. An action may have many input and output pins oriented around the action, and there is no way to visually determine which pin is associated with which parameter. In many cases, the pin name may correspond directly to the parameter name providing a visual connection. However, this is not possible for ActionInputPins or ValuePins where the pin name refers to some structural feature or value specification. UML2 should consider a presentation option that shows pins ordered starting from the bottom right corner of the action and following clockwise around the action ending at the right bottom side. The first pin is always the target input pin for a CallOperationAction. The last pin corresponds to the return parameter if any. This makes pin ordering visible in the diagrams, and establishes an unambiguous correlation between pins and parameters in call actions. However, it may result in some layout restrictions and extra object flow crossings in diagrams. This should not be much of an issue in practice because the pins can be moved around the edge of the action, just not reordered. And ActionInputPins allow reference to inputs without requiring explicit object flows.
ControlNodes, like any other ActivityNode or ActivityEdge can be contained in an ActivityPartition. Containment in a partition can be designated either using swimlanes or by denoting the partition names in parenthesis above the ActivityNode name. This is generally fine, but can result in significant layout problems when swimlanes are used to designate activity partitions. UML2 does not define any semantics for ControlNodes or ActivityEdges belonging to an ActivityPartition, so they generally do not belong to any partition. When swimlanes are used, the nodes that do not belong in any partition have to be displayed someplace. One convention is to create a default swimlane for these nodes that for example could appear as a partition with the same name as the activity. This results in extreme layout issues as all the control nodes end up being in the same partition resulting in very ugly diagrams with flow lines crossing partitions everywhere. If a user attempts to layout the diagram by moving the control nodes, this results in edits to the underlying model, something that the user may not have intended, or many not have permission to do. Some tools allow editing diagrams on read only models as long as the edits don't result in any changes to the model. This is especially common for diagrams that include views of other models in order to establish a context and show referenced elements. Another problem is activity edges which cross many swimlanes while connecting their source and target. It is unclear from the notation in which of these partitions the edge should be included: none of them, all of them, or only the partitions at their connection points. UML2 should consider a presentation option or notation convention that ControlNodes and ActivityEdges do not belong to ActivityPartitions unless explicitly shown using the partition name in parenthesis above the node or edge name. Putting a control node or edge in a swimlane should not imply that the node or edge is in the corresponding partitions. The notation should require that these element explicitly state the partitions they belong to.
There doesn't appear to be any notation of indicating the signal of a Reception. Reception may also be missing a constaint similar to SendSignalAction where the parameters of the BehavioralFeature have to match the ownedAttributes of the Signal in number, order, and type.
SendObjectAction sends the object on its request InputPin the object at its target InputPin. AcceptEventAction can have a trigger that is a SignalEvent or CallEvent, but there is no Event type for ObjectEvent to represent the receipt of an object from a SendObjectAction. SignalEvent cannot be the trigger because it is not a Class and is not general enough.
Section 7.3.36 specifies the notation for Operation, but there is no notation for denoting raisedExceptions. Section 12.3.41 introduces Parameter::isException and suggests exception parameters are indicated out parameters with {exception} after the parameter type to indicate Parameter::isException=true.
However, Operation::raisedException is not a Parameter, it is a reference to a Type. So a raisedException is not a TypedElement like parameter, has no multiplicity or ordering, etc. Raised exceptions are quite different than parameters and even in activities, RaiseExceptionAction and ExceptionHandlers do not exchange exception data through parameters.
Consider adding <oper-property> ::= 'throws' '('<type-list>')' in section 7.3.36 for denoting exceptions that could be raised by an operation. This is a significant part of the specification of an operation indicating information clients must know in order to use the operation and should be clearly visible in the operation's signature.
Figure 7.54 of ptc/06-01-02 shows an Instance Diagram notation for a Link. With the accompanying text: "An instance specification whose classifier is an association represents a link and is shown using the same notation as for an association, but the solid path or paths connect instance specifications rather than classifiers. It is not necessary to show an underlined name where it is clear from its connection to instance specifications that it represents a link and not an association. End names can adorn the ends. Navigation arrows can be shown, but if shown, they must agree with the navigation of the association ends." However this does not cater for the fact that the metamodel allows an InstanceSpecification to be associated with many Classifiers. Proposed resolution: Extend the metamodel for Instances to explicitly model Links. For a good start see the instances model in the MOF2 Core Abstract Semantics chapter (it is not part of MOF - it is only there to explain the semantics of MOF in terms of metamodel instances).
In Infrastructures, since TypedElements::TypedElement is subclassed from Namespaces::NamedElement, is it necessary that BehavioralFeatures::Parameter be subclassed from both TypedElements::TypedElement and Namespaces::NamedElement?
In 06-01-02, I note that in Fig 7.14, packagedElement is not marked as derived but in section 7.3.37 it is – can you clarify which it is?
Description of Problem Section 18.3.8 has the following paragraph: “ Presentation Options If multiple stereotypes are applied to an element, it is possible to show this by enclosing each stereotype name within a pair of guillemets and listing them after each other. A tool can choose whether it will display stereotypes or not. In particular, some tools can choose not to display “required stereotypes,” but to display only their attributes (tagged values) if any. “ Annex B has the following paragraph: “ If multiple keywords and/or stereotype names apply to the same model element, they all appear between the same pair of guillemets, separated by commas: “«” <label> [“,” <label>]* “»” “ These two paragraphs seem to contradict each other, since the annex B does not allow multiple guillemet pairs for the same element, while 18.3.8 does. Proposed Solution: Add clarification that Both presentation options should be allowed.
In 06-01-02, I note that in Fig 7.14, packagedElement is not marked as derived but in section 7.3.37 it is – can you clarify which it is?
UML's support for null values and semantics is unclear. For example if a Property is defined [1..1] then is a value of null (represented by LiteralNull) permitted? (LiteralNull is defined as "LiteralNull is intended to be used to explicitly model the lack of a value.") Can null values be used to create a sparse array? If not how is a fixed length sparse array to be modeled? Can a unique multivalued property contain multiple nulls? How do the StructuralFeatureActions react in the presence of null? [Note that the issue is NOT related to the "null token"]
There seems to be no reason why n-ary Associations are required to have aggregation=none: there should be a restriction that this is allowed for at most one End but it could reasonably be allowed
There is no equivalent in UML 2.x of the 'documentation' tag at UML 1.x: a standard way of distinguishing the description of an element. Comment is generic and has no property to distinguish the 'inherent' description of an element from annotations on specific diagrams, and there is no standard stereotype which could be applied (though use of a stereotype is arguably heavyweight for what is a fairly pervasive requirement).
LiteralExpression inherits a type property but its use, semantics and notation are not documented. There should at least be appropriate constraints e.g. that LiteralString.type is a subtype of PrimitiveTypes::String.
It could easily be taken to mean a constraint on the value not the multiplicity, e.g. for an 'temperature' property, that its value is not allowed to be below -273. Would be better named "lowerBoundValue" or similar.
ValueSpecification::isComputable() introduces conformance requirements not captured in compliance points. Section 7.3.54, Additional Operations states : "A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals."
A minor issue I stumbled over in UML Superstructure ptc/06-04-02. SendSignalEvent [14.3.28] specialises MessageEvent [13.3.18], which "specifies the RECEIPT ..." Perhaps that should be reworded?
Seeing as Action::input and Action::output are derived compositions that subset Element::ownedElement, all subsets of them should be compositions (I thought Karl had added a constraint to this effect?). In particular, OpaqueAction::inputValue, OpaqueAction::outputValue, AcceptEventAction::result, AcceptCallAction::returnInformation, UnmarshallAction::result should be composite
There is an clash/mismatch between the UML2.0 and OCL2.0 specs on constraint semantics.
The UML superstructure doc 05-07-04, chapter 7.3.10 states,
that Constraint has context and constrainedElement associations(properties).
The Semantic section of the paragraph states, that the context property of
the constraint is used in OCL constraint evaluation as a "self".
However the OCL2.0 specification doc 05-06-06, chapter 12 specifies different
rules, how OCL expressions are evaluated in the UML models. In most cases it is mandated that
the self (a.k.a. contextual classifier) should be derived from the constrainedElement property.
In particular, for most common case - invariant constraints, 12.6, 12.6.1 paragraphs state, that
the contextual classifier should be the classifier, specified by the constrainedElement property:
contextualClassifier = self.constraint.constrainedElement->any(true).oclAsType(Classifier)
The other conditions are irrelevant for the issue at hand:
constraint should have <<invariant>> stereotype (self.constraint.stereotype.name = ?invariant?)
constraint.constrainedElement should have a single element (self.constraint.constrainedElement->size() = 1)
constraint.constrainedElement should be classifier (self.constraint.constrainedElement.any(true).oclIsKindOf(Classifier))
expression result should be boolean (self.bodyExpression.type.name = ?Boolean?)
So we have a conflicting specs here. Which one of these is correct?
I am inclined to believe, that the OCL spec, being more concrete, is correct -
UML spec mentions the usage of "self" only casually, in one sentence.
However if this true, what is the meaning of the context property of the constraint in the UML?
It seams that this property is then unnecessary and not used (at least for OCL constraints) anywhere...
Note that the upcoming UML2.1 superstructure spec, 06-04-02, introduces small changes to the context
property of the constraint. Context is now changed to subset namespace.
However the issue, described above, is not mitigated and is still present in 2.1.
Element reads "Constructs::Element reuses the definition of Element from Abstractions::Comments." Since this element has been removed should this read "Constructs::Element reuses the definition of Element from Abstractions::Ownerships." as reflected in the merge?
I believe it would be interesting formodelling to be abble to add a feature to the coenpt of NamedElement in order to be abble to define a short name (e.g. an acronym). I propose to add the property: - shortName: String [0..1] the abreviation or acronym assocatied to the NamedElement
The definition of Namespace lists as a generalization, Namespace. This appears to be an error: it appears this is intented to refer to NamedElement.
The UML2.1 specification defines a state list: The special case of the transition from the junction having a history as target may optionally be presented as the target being the state list state symbol. See Figure 15.27 and Figure 15.28 for examples. I couldn't map that definition to the example. There is no junction and no history state. Can someone provide fig. 15.27 in another notation without state list? I'm not the first one who's asking this. Probably we should provide such an example in the spec.
The Convenience document is inconsistent with the resolution with 9087 and itself: the spec shows Package::packagedElement as derived in the Associations section of 7.3.37 whereas it's clearly not in the resolution. Figure 7.14 is actually OK as is the metamodel.
The type of a default value should conform to the type of the property/parameter that owns it. Constraints to that effect should be added to the UML specification.
The section 7 contains two concepts, ElementImport and PackageImport, that seems to quite redundant. I believe that the semantics of ElementImport covers the semantics of PackageImport. SO, either clarify the difference (if there are?), or delete the PackageImport or make PackageImport a specialization of ElementImport.
In paragraph 7.2 it says: "Figure 7.2 shows the package dependencies of the Kernel packages". However, this should read "...dependencies of the Classes packages." The caption of figure 7.2 is correct.
I verified the alignment between the package dependencies (packageImport and packageMerge) in the XMI file Superstructure.cmof (contained in ptc-06-01-04) and the package dependency diagrams in the convenience document, and noticed some discrepancies. Assuming the XMI file is correct, these discrepancies are: - Part I, Figure 1 (p.19): the packageImports from Classes to CommonBehaviors and AuxiliaryConstructs are missing. - Figure 7.2 (p.22): the packageImport from Dependencies to Kernel is missing. - Figure 9.1 (p.168): the packageImports from Ports to Kernel and Interfaces are missing. - Figure 10.1 (p.202): the packageImport from Nodes to Kernel is missing. - Part II, Figure 1 (p.225): the packageImports from StatesMachines, Activities and Interactions to CompositeStructures are missing. - Part II, Figure 1 (p.225): the packageImport from Activities to StateMachines is missing. - Part II, Figure 1 (p.225): the packageImport from CommonBehaviors to Actions is missing. - Part II, Figure 1 (p.225): the packageImport from UseCases to CommonBehaviors is not correct: it is not present in the XMI file. There only exists a packageMerge relation from UseCases to BasicBehaviors. - Figure 11.1 (p.230): the packageImports from CompleteActions to Kernel and BasicBehaviors are missing. - Figure 11.1 (p.230): the packageImport from IntermediateActions to Kernel is missing. - Figure 11.1 (p.230): the packageMerge from IntermediateActions to BasicBehaviors is missing. - Figure 12.1 (p.309): the packageImports from CompleteActivities to Kernel and BasicBehaviors are missing. - Figure 12.1 (p.309): the packageImports from IntermediateActivities to Kernel and BasicBehaviors are missing. - Figure 12.1 (p.309): the packageMerge from BasicActivities to BasicBehaviors is missing. - Figure 15.1 (p.546): the packageMerge from BehaviorStateMachines to Communications is missing. - Part III, Figure 1 (p.631): the packageImport from AuxiliaryConstructs to Classes is missing.
The Classifier taxonomy in Appendix F shows a Generalization from Collaborations::Collaboration (child) to Collaborations::Classifier (parent). This Generalization is not present in the metamodel in Figure 9.6 (p. 172), and I therefore believe it to be in error.
In the defintion of the Property concept, the type of the default attribute is a String. I believe it would be more powerful to type default with ValueSpecification
In UML2, it is possible to describe user defined datatypes and propertis may typed by this typed. But, nothing has been defined in the UML2 specifcation to be abble to describe values (of slots for example) which has to be conform to a datatype. One could add a new metaclass (for example, DataTypeValueSpecification inheriting from ValueSpecification) in the Expression package to be abble to denote datatype values. And to define the underlying notation.
In section 15.3.14, Transition, subsection Constraints you will find the following constraint: [6] An initial transition at the topmost level (region of a statemachine) either has no trigger or it has a trigger with the stereotype “create”. ... OCL body for constraint ... The element to be stereotyped in this constraint is a Trigger. If you look in Appendix C: Standard Stereotypes you will not find this stereotype. It appears that this constraint is left over from UML1.4/1.5. In UML 1.4 the corresponding stereotyped element in this constraint was an Event. In particular it was a CallEvent. The corresponding <<create>> stereotype is listed in Appendix C as a retired stereotype. So, either the constraint should be deleted or the stereotype must be brought out of retirement.
I observed some minor errors on Document formal/05-07-04 while reading it, but there is an aparent inconsistence that must be checked. I will explain it below. On page 154 we can read: "Notation A component realization is notated in the same way as the realization dependency (i.e., as a general dashed line with an open arrow-head)." But on page 125 we can read: "A Realization dependency is shown as a dashed line with a triangular arrowhead at the end that corresponds to the realized element." It's clear that the error is on page 154 definition
"ownedAttribute", "ownedOperation" and "superClass" are listed as attributes, but they probably should be listed as associations
The association "feature" is not marked as a derived element, but probably should be.
The description says: "Constructs::Classifier merges the definitions of Classifier from Basic and Abstractions." a) The "Abstractions"package is not supposed to be merged by Constructs. b) There is no Basic::Classifier, so this reference is probably in error. There is Basic::Class, though.
The relationship between the text of the specs and the corresponding XMI specifications should be clarified to explicitly state that, in cases of disagreement between the text and the XMI, the latter takes precedence.
Why Transition, ActivityEdge, Message, Connector are not Relationships? At least Transition and ActivityEdge should be DirectedRelationships in my opinion. If this is done intentionally, please explain, otherwise please register an issue.
If there are multiple enabled internal transitions within the active state, should they all be fired? The standard suggests that they should all be fired, but is this done in practice? For example, consider the case of two internal transitions within the same state, triggered by the same event, with no guard condition. If that event occurs, will both transitions fire?
There are 3 kinds (TransitionKind) of transitions: internal, external and local. Are there firing priorities between these? For example, consider the case of an internal transition within a state and an external transition with same state as its source state, triggered by the same event, with no guard conditions. If that event occurs, which transition(s) will fire? The standard states, "An internal transition in a state conflicts only with transitions that cause an exit from that state," but neither the firing priorities nor the transition selection algorithm define how such a conflict should be resolved.
EnumerationLiteral currently inherits from InstanceSpecification.
However it does not make sense for it to have all the capabilities of
the latter, for example Slots.
Therefore a constraint should be added to EnumerationLiteral as follows:
slot.isEmpty
Furthermore it does not make sense for EnumerationLiteral to have a
separate classifier than its Enumeration. So the following redefinition
should be added:
enumeration {redefines classifier}
(alternatively if this is felt too complex there should be a constraint
{classifier.isEmpty)
Another option would be for EnumerationLiteral to inherit from
ValueSpecification - as suggested by the name of the class (other
Literal classes are subtypes of ValueSpecification). However this would
probably be too major a change to justify the benefit.
Guidance should be given as to how to use the properties of EnumerationLiteral to represent the typical scenario of an EnumerationLiteral having a distinct value and meaning e.g. the color Blue is represented as the code B or the number 5. In this case I would expect the name of the EnumerationLiteral to be "Blue" with an associated LiteralString (via inherited property InstanceSpecification::specification) of "B" or LiteralInteger of 5. The notation for this could be that for default values e.g. Blue = "B" in the 'attribute' compartment. Or alternatively the InstanceSpecification syntax could be used as per Figure 7.52.
UML allows M1-level models to reuse the primitive types defined in the PrimitiveTypes package in the UML Infrastructure (e.g., Integer, String, etc.). Currently, this package is merged into L0 and is not separately accessible and should have its own URI so that it can be imported by M1 models without having to import the UML metamodel. This may also mean that instead of merging the package PrimitiveTypes into L0, the package should be imported
The notation part of Section 7.3.25 says "See Interface(from Interfaces)". However this has nothing to do with Realization. The cross-reference should in fact be to Realization - section 7.3.45 - which does have the notation needed.
Bran at the Boston meeting remarked on the practical difficulty of keeping the Infrastructure doc up to date and in synch, text to diagrams and diagrams to underlying xmi. This is a report of a place where the text is out of synch with metamodel diagrams in doc. reference is to 06-04-03 Infrastructrue v2.1 doc. 11.4.1 Classifier Associations • feature : Feature [*] Redefines the corresponding association in Abstractions. Subsets Namespace::member and is a derived union. Note that there may be members of the Classifier that are of the type Feature but are not included in this association (e.g., inherited features). Constraints No additional constraints Semantics No additional semantics Problem here is that Figure 11.16, the Constructs classifier diagram, shows the important general association, Classifier to Classifier, which is not mentioned in the text, needs to be documented under 11.4.1 Associations and probably also Semantics
When OCL is used in body of OpaqueExpressions it's unclear what syntax should be used - in particular whether keywords like "context:", "inv:", "pre:" should be used or not. Section 7.3.35 should, for OCL, reference the correct concrete syntax element in the OCL spec. Additional material for this issue: At the moment in 7.3.35 there is just a 'style guideline' for how OCL constraints/expressions should be expressed using an OpaqueExpression For interoperability there should be a stronger statement that OCL constraints *must* have language = "OCL". Also it should be made clearer that such OpaqueExpressions should have type=Boolean
7.3.44 says that the defaultValue is "A ValueSpecification that is evaluated to give a default value for the Property when an object of the owning Classifier is instantiated." This makes it a bit pointless to have such as property as optional since it will always be set to its default value (though in theory the property could be explicitly unset - in which case it will not use the default value either. There is a need for dynamic evaluation of an expression associated with a Property if no value has been explicitly set. Proposed resolution: - if lower = 1 then defaultValue is assigned to the property when object is instantiated (and when the class is attached to an object using reclassify) - if lower = 0 then no assignment is made but the defaultValue (if present) is evaluated each time the property value is read: in effect it is acting as a derived property until a value is explicitly assigned. This behavior must also be included in the description of ReadStructurualFeatureAction (11.3.37) which does not mention default values at all.
It is a general requirement to be able to indicate candidate keys in UML models. This should be in Infrastructure (s still usable by MOF) and merged into Superstructure.
Where a diagram has a diamond it is not clear which end has the aggregation metaproperty. This can be discovered but only with a lot of detecetive work. For example 7.3.3 states "An association with aggregationKind = shared differs in notation from binary associations in adding a hollow diamond as a terminal adornment at the aggregate end of the association line. ". Nothing makes sufficiently clear that, for an aggregate property, that the diamond is depicted at the opposite end to the multiplicity and other annotations for that property.
Some of the concepts defined in the Interaction chapter (n 14), as for example BehaviorExecutionSpecification, are more general than Interaction and shoul dbe part of the chpater 13 which concern is behavior in general. I suggest to review the chapter 14 in order to extract from this section all the concept that are generic w.r.t. behavior and to put them in the chapter 13.
It is not possible to navigate from link to connected instances if slots are not created or Association is not assigned as type. Is it possible to create slots in instance of Association even if properties are owned in connected Classes? Are they required? Are they for navigating?
Now, when link is not Link and is not Relationship, tool >> developers must use >> a lot of hacks for handling this "special kind of instance" >> as path, to >> create special algorithms for "relatedElements" calculation, >> to prevent >> type changes to regular classifier and for many other situations. >> Why Link metaclass was removed? Why all subclasses of >> Instance were removed? >I don't know. I personally would like to see an explicit Link class in >the Instances metamodel - see the MOF Core specification (abstract >semantics chapter - which is purely descriptive and does not add these >Instance extensions to MOF or UML) for what I have in mind. I would >support adding this all into UML since it would be a non-disruptive >(forward compatible) extension. >> Node instance and Component instance "different handling" and >> notation >> creates a lot problems also, because it is not possible to >> recognize them in >> the model (classifier could be unspecified).
In the L3 metamodel there are only 5 Associations with isDerived=true.
These are:
A_context_action
A_deployedElement_deploymentTarget
A_state_redefinitionContext
A_extension_metaclass
A_containedEdge_inGroup
However there are clearly many more Associations which are in practice derived - for example anything with an end which is a derivedUnion.
It seems that an Association should automatically be derived if one or both of its ends are derived.
Proposed resolution:
Make Association::isDerived itself a derived property (so it becomes Association::/isDerived)
The OCL for the derivation would be:
context Association isDerived = self.memberEnd->exists(isDerived)
Merged metamodel has Property::class with redefinition of a non-inherited property
----------------------------------------------------------------------------------------------------------------------
In UML 2.1 we have the following:
Kernel defines Class which inherits from Classifier, and has Class::ownedAttribute of type Kernel::Property.
Composite Structures also defines Class which inherits from EncapsulatedClassifier which inherits from StructuredClassifier which inherits from Kernel::Classifier (curiously not Collaborations::Classifier in the same section).
Now StructuredClassifier also defines property StructuredClassifier::ownedAttribute of type InternalStructures::Property
So in the Merge, we have:
L3::Class with property L3::Class::ownedAttribute of type L3::Property
this will inherit from:
L3::Classifier and L3::EncapsulatedClassifier, with the latter inheriting from L3::StructuredClassifier.
And L3::StructuredClassifier will continue to have a property L3::StructuredClassifier::ownedAttribute.
This would be inherited by L3::Class which has its own ownedAttribute.
Hence there must be a redefinition L3::Class::ownedAttribute redefines L3::StructuredClassifier::ownedAttribute (there is).
Likewise there must also be a generalization between the 2 associations (there is).
However there is a change of the property ownership: at the subclass Property::class is owned by Property, and L3::A_ownedAttribute_structuredClassifier::structuredClassifier is owned by the Association.
And there is no redefinition (or subsetting) between the two.
Note that Figure 9.2 of ptc/06-04-02 does show a redefinition - but of "_structuredClassifier" with an underscore (not sure what that is supposed to mean).
Proposed resolution:
The Property::class property should be owned by the association (but still be navigable), and a redefinition needs to be added in section 9.3.12 {redefines structuredClassifier}.
Add Property::classifier as a derived union and have all opposites of ?::ownedAttribute subset it.
This way, access to a property's (owning) classifier can be obtained uniformly - note that a number of the OCL expressions are currently written (incorrectly) with this assumption.
In UML Infrastructure version 2.0 formal/05-07-05 p.67 I've found that nonterminal <upper> has the alternative '*', but <unlimited_natural> nonterminal range already contains '*' as a possible deducible terminal sequence. <multiplicity> ::= <multiplicity-range> <multiplicity-range> ::= [ <lower> ‘..’ ] <upper> <lower> ::= <integer> <upper> ::= ‘*’ | <unlimited_natural>
I initially thought this just affected chapter 11 and compositions, but the more I looked the wider the impact: this seems quite a systemic problem.
There are several significant metamodel errors that would prevent population of models in repositories that enforce association semantics. These affect both the diagrams and the metamodel (though I have not checked every association in the metamodel XMI).
The common problem is metaclasses being shown with multiple mandatory composite owners (i.e. a multiplicity of 1 as opposed to 0..1) next to the black diamond. In some cases this is implicit (the default multiplicity being 1..1, in others explicitly '1'). Since any instance can have at most one composite owner, to have more than one such owner mandatory makes for an 'impossible' (to be valid) metamodel.
There are non-composition cases where it also does not make sense to have associations mandatory. Often the mandatory nature is implicit (there is not explicit multiplicity shown on the diagrams).
Here is the list of diagrams and the problematic classes:
Figure 7.7 Element (not every Element will be constrained)
Figure 7.8 StructuralFeature (not every StructuralFeature will have a Slot defined for it in some instance model) and Classifier (again not every Classifier will have at least one InstanceSpecification)
Figure 7.9 NamedElement, Classifier (for redefinedElement, general), RedefinableElement (for redefinedElement, redefinitionContext)
Figure 7.10 Type
Figure 7.12 Type (via endType), Class(via superClass), and Property (via opposite, redefinedProperty, subsettedProperty)
Figure 8.2 Classifier (not every Classifier will realize a Component) and Interface (not every Interface will be both provided and required by at least one Component)
Figure 10.2 Artifact (inverse of nestedArtifact is mandatory - not every Artifact will be nested in another)
Figure 10.3 Node (ditto for nestedNode)
Figure 11.3 InputPin and OutputPin
Figure 11.4 InputPin and OutputPin
Figure 11.5 InputPin
Figure 11.8 InputPin
Figure 11.13 InputPin
Figure 11.17 InputPin and OutputPin.
Figure 11.2 does not have mandatory composition but requires each InputPin (and OutputPin) to be the inputValue of an OpaqueAction which seems quite wrong.
Figure 12.10 ValueSpecification
Figure 12.11 ValueSpecification
Figure 12.13 Constraint
Figure 12.14 ValueSpecification
Figure 12.19 ValueSpecification
Figure 13.12 ValueSpecification
Figure 13.13 ValueSpecification and Observation (the latter is not a composition error but it seems wrong)
Figure 14.3 Constraint
Figure 14.5 NamedElement (again not composition but not every NamedElement should be the signature of a Message)
Figure 14.7 ValueSpecification
Figure 15.2 Trigger (there is only one mandatory composition but it makes the optional composition useless since the latter could never be set)
Figure 17.16 ParameterableElement (not a composition but each ParameterableElement will not be the default of a TemplateParameter)
Proposed Resolution: mark all the above association ends as 0..1 and update the metamodel accordinglyThere seem to be cases where redefinitions have appeared in the metamodel that were not in the spec. I think something is needed but overall I think subsetting is probably more appropriate for these cases.
It appears that these redefinitions between non-navigable properties (owned by associations) may have been inadvertently introduced by the tool processing the metamodel before the ends were assigned names. In the first example I suspect that the opposites of DirectedRelationship::target and Generalization::general were detected as being involved in an implicit redefinition because their names were empty (the same). The tool can probably be tweaked to produce a complete list of such redefinitions which we can then itemize and remove to resolve this issue..
The cause of the second example is the same, but was likely introduced before Package::ownedMember was renamed to Package::packagedElement and never cleaned up.
For example, in Fig 7.9, the Classifiers diagram, the end opposite to Generalization::general is completely unlabeled. But in the metamodel we have
<ownedEnd xmi:type="cmof:Property" xmi:id="A_general_generalization-generalization" name="generalization" type="Generalization" association="A_general_generalization" redefinedProperty="A_target_directedRelationship-directedRelationship"/>
I'm not sure I see the need for a redefinition here - especially when its sibling (Classifier-generalization) is as follows and has no such redefinition:
<ownedAttribute xmi:type="cmof:Property" xmi:id="Classifier-generalization" name="generalization" lower="0" upper="*" type="Generalization" association="A_generalization_specific" subsettedProperty="Element-ownedElement" isComposite="true">
This has no reference at all to the general Association A_source_directedRelationship - to be consistent I would have expected redefinedProperty="A_source_directedRelationship-directedRelationship. As I mentioned at the start though a subsets seems more appropriate - since the other ends use {subsets source} etc.
One that has an additional problem is the following:
<ownedMember xmi:type="cmof:Association" xmi:id="A_ownedStereotype_profile" name="A_ownedStereotype_profile" general="A_packagedElement_owningPackage" memberEnd="Profile-ownedStereotype A_ownedStereotype_profile-profile">
<ownedEnd xmi:type="cmof:Property" xmi:id="A_ownedStereotype_profile-profile" name="profile" type="Profile" association="A_ownedStereotype_profile" redefinedProperty="A_member_namespace-namespace"/>
Here the Association inherits from A_packagedElement_owningPackage but the End redefines A_member_namespace-namespace which is not even a direct member of the specialized Association - and furthermore is a derivedUnion - so we have no real Slot to base the end on. If anything I would have expected a redefine of A_packagedElement_owningPackage-owningPackage
Language unit for stereotype create should be named Classes::Dependencies instead of just Dependencies
Use of only the link name as the default for the association name limits the use of both namespace::membersAreDistinguishable() and nameElement::isDistinguishableFrom() operations. The full association name for creating the signature of the element should be at least the concatenation of "memberEndA name - link name - memberEndB name".
There is no way to indicate that an Operation is an abstract Operation, perhaps the Operation class should have an isAbstract attribute?( similar to the way the Classifer class has an isAbstract attribute to indicate that its abstract)
Section 12.3.41 in CompleteActivites extends Parameter with an isException property. Operation also has property raisedException. The relationship between parameters with isException true and the operation's raisedExceptions is unclear. Is it the intention that Parameter::isException is a notation for indicating the exceptions raised by an operation. If so, then it should be in Basic where raisedException is introduced and constraints need to be added to ensure these parameters are not included in the operation's ownedParameters, and are include in the operation's raisedException. See also Issue 9406: UML2: No notation for indicating Operation::raisedException. Hopefully this is not the case because it mixes parameter and exceptions together and results in redundancy in the metamodel. It is possible isException was added so Activities could have an ActivityParameterNode to output exceptions. But this did not get completely integrated with the rest of UML2. I will raise an issue for this too. Perhaps there should be ActivityExceptionNodes that correspond to an operation's raisedExceptions instead of mixing parameters with exceptions.
New ISSUE on UML 2.1 Schema File Source: Tom Rutt (Fujitsu) Criticality: URGENT Problem Description: The UML 2.1 RTF Final report cites the following supporting documents: ptc/2006-04-02 Unified Modeling Language: Superstructure ptc/2006-04-03 Unified Modeling Language: Infrastructure ptc/2006-04-04 Unified Modeling Language: XMI specifications ptc/2006-04-05 Unified Modeling Language: XSD specifications The uml.xsd schema file in ptc/2006-04-05 (which is an informative document) is not correctly generated. In particular, several of the enum values specified in this schema have prefixes attached, which are not specified in the Meta Model. For example, the visibilityKind enumeration has its values improperly prefixed by the string “vis_” ( vis_public, vis_private …). This has caused interoperability problems with existing tools, since some of them have used the incorrectly generated xsd file for uml There is a need to post a corrected uml 2.1 schema on the document server. Also, the OMG document references for the supporting xmi and schema files are not up to date in the superstructure specification. Proposed Solution: Post properly generated schemas in a new UML 2.1 XSD Specification file on the server. Post an updated version of the UML 2.1 RTF report which refers to the correctly generated UML XSD specification file. The Document references cited in Annex G of the UML 2.1 superstructure spec should be corrected to point at the most up to date and correct specifications.
Constraint inherits visibility from PackageableElement but there is no description of what it might mean for a Constraint to be more or less visible. One option would be to constrain Constraint::visibility to be a specific value
Change all references to UML 2.1 in the Infrastructure and Superstructure documents to UML 2.1.1
would like to shed some light on Activity notation (symbol) as such (Figure 12.33 in ptc/2006-04-02). Is it just alternative notation of Activity Diagram Frame or this symbol is intended to use in Activity diagrams as sub parts of other Activity?
Although it is mentioned in the text it isn't 100% clear that a view has only one conforming viewpoint. Define a constraint for a view that only one conform relationship to a viewpoint is allowed.
The situation is now more-or-less clear.
We will use a variant specified OCL spec for evaluating OCL constraints.
However in my humble opinion, UML spec could also benefit if the descriptions
of context and constrainedElement were clarrified a bit on how one should use them.
As Karl correctly notes, when 2 properties can be used to specify the same thing,
this introduces ambiguities in the model.
Even if "nothing prevents the context and constrainedElement from beeing the same object",
on the other hand nothing prevents these 2 from beeing different objects.
Hence if author produces some UML model with constraints where constrainedElement!=context,
the readers of this model cannot interpret it unambiguously.
And I can imagine many cases, where constrainedElement will not be equal to context.
For example if constraints are placed in a separate package from their constrained elements
(perhaps constrained elements are in a separate, read-only library and constraints can not
be added there; or for other packaging reasons). In this case context of these constraints
will be their owner package (per UML2.1 rules) and constrainedElement will be completely
unrelated to it.
PS
And this applies not only in the narrow case of constraints, specified in OCL.
Almost all other languages need contextual information.
For the sake of argument, lets say the constraint is specified in English language.
Well, it so happens, that English language also needs some context to interpret sentences.
The pronouns, such as "this", "these" or "such", can play the same role in English as the "self" variable in OCL.
E.g. Imagine the constraint with specification=OpaqueExpression{language=English; body="these must be yellow"}
placed into the class Box, having property contents:Apple[*] and constrainedElement pointing to this property.
Now there is an ambiguity.
If the constraint.context field is used for interpretting the phrase "these must be yellow" then the boxes must be yellow.
If the constraint.constrainedElement is used, then apples in the box must be yellow.
> Karl Frank wrote:
>
> Agreed. But imo it is a defect for the same thing to be specified in two equivalent ways. EVen if the context is by definition the constrained element, in the case of a
> constraint, it remains an opening for confusion and doubt to specify it using different terms even when equivalent.
>
> But context means something different in regard to a behavior, so I believe constrainedElement is the right term, which is the one used in the OCL spec.
>
> - Karl
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> From: Branislav Selic [mailto:bselic@ca.ibm.com]
> Sent: Thursday, May 18, 2006 5:21 PM
> To: Karl Frank
> Cc: Juergen Boldt; ocl2-rtf@omg.org; Tomas Juknevicius; uml2-rtf@omg.org
> Subject: RE: UML/OCL scpec mismatch - Constraint.context vs Constraint.constrainedElement
>
> I was indeed raising a separate OCL issue (a major one, I believe), but I was also saying that there is no real issue with the UML 2 spec. In fact, if you think about it,
> there is nothing to prevent constrainedElement and context from being the same object. There is no real contradiction here.
>
> Bran
Connector contract is inflexible and cannot bind connector ends to parts in the contract behavior. A Connector can have a contract which is a Behavior which specifies the valid interaction pattern across the connector. The Behavior could be an Interaction, Activity, StateMachine, ProtocolStateMachine, or OpaqueBehavior. However, the parts in the Behavior (lifeliines. activity partitions, target input pins, variables, etc.) cannot be bound to the ports at the end of the connector. So it is difficult to understand what part participating ports play in the contract beahvior. Another problem is that the may be more than one interaction between the parts at the connector ends representing different conversations between the same parties over the same connector. This would require more than one behavior for the contract in order to describe each interaction. Instead, the contract for a connector should be a CollaborationUse. The connectorEnds would then be bound to the roles they play in that contract. The Collaboration of the CollaborationUse can contain multiple ownedBehaviors which represent the interaction protocols between the roles. Parts playing these roles (as indicated by a CollaborationUse) would have to interact in a manner consistent with the corresponding Collaboration ownedBehavior. (These can match by name, but we may want to consider an extension that allowed bindings between operations of the parts and behavior of the collaboration to allow more flexible contracts). The interactions between connected consumers and providers instances are initiated by one party or the other (may not be the same for all such interactions). The provider will typically define the protocol consumers must follow in order to use the provided capabilities. One way to model these protocols is to set the type of the Port providing the capability to the Collaboration defining the protocol. Then the type of the CollaborationUse for any Connector connected to that port would be the type of the Port.
state machines: --------------- I can find a BNF for an behavioral transition but not for a protocol transition. Theres is no explanation why a protocol transition needs the "/" following the trigger. What for is the "/" ? The figure 15.15 on page 521 just shows a protocol trigger but there is no explanation. Wouldn't it be sufficient to write: [pre condition] trigger [post condition] Because of this everyone uses different notations...
Some elements are black outlined with a white background, some are red outlined with yellow background. Some edges are black, some are red, some are purple. What does the diffrent colors in the diagramms mean? I cannot find any explanation within the document.
Title: Non-behavior ports cannot forward requests to behavioral features of the owning classifier Specification: Unified Modeling Language Superstructure v2.1 (ptc/06-04-02) Section: 9.3.11 Port Description: Currently, the semantics of ports may be summarized as follows: 1. If the port not a behavior port, but it has a connector to an internal part of the owning classifier, then a request directed to the port via a provided interface is forwarded along that connector. If it is not connected to an internal part, "any requests that arrive at this port will terminate at this port." 2. If the port is a behavior port, then a request directed to the port via a provided interface is forwarded to the classifier behavior for the owning classifier. (This is what it means to be a behavior port -- requests are forwarded to the classifier behavior.) If the owning classifier does not have a classifier behavior, then "any communication arriving at a behavior port is lost." Since the intent of a port is to "provide a means through which requests can be made to invoke behavioral features of a classifier", it would seem natural to have a way for a request through port to be directly forwarded to a behavioral feature of the owning classifier. Currently, however, this can only be done via a behavior port and an explicit classifier behavior that dispatches requests appropriately. A request to a non-behavior port that does not have an internal connection is not handled by the instance of the owning classifier, but rather "terminates" at the port. Note also that the text currently states that "the owning classifier must offer the features owned by the provided interfaces" of a port, but there is no formal constraint to this effect. Suggested resolution: 1. Add a constraint that an encapsulated classifier must realize all the provided interfaces of all its ports. 2. Keep the semantics of a behavior port to be that requests are forwarded to the classifier behavior. 3. For a non-behavior port with connectors no connectors to any internal parts, any request arriving at the port is forwarded to the method of the corresponding behavioral feature of the owning classifier (if there is such a method). 4. In other cases, specify that the semantics is not defined, rather than that requests are "terminated" or "lost". Such cases include behavior ports when there is no classifier behavior and non-behavior ports for behavioral features with no corresponding method.
The UML Abstractions concept should include a constraint that a graph involving Abstraction relationships should be acyclic; i.e. an <element type> cannot be both a transitively higher level of abstraction and transitively lower level of abstraction of the same <element type>. not self.getHigherLevelAbstractions()->includes(self)
In the spec, some elements have a notation which contain a keyword put in quote like for Abstraction or for Interface. But this keywork does not match the stereotype notation. So if I applied a stereotype on such elemen, what is the right notation (see both following examples): EX1: Ex2:
Section 7.3.36 Operation, under Presentation Options explains notation options for expressing the return value of an Operation. The example is: toString(): String means the same thing as toString(return: String) This should also be the same as: toString(return result: String) That is, the default name of the return parameter is "result". This is to be consistent with OCL's reference to the result of an operation in a post condition, and to allow a behavior to be able to refer to a return parameter by name.
Is "Set of <name>" a keyword? Or is it allowed to write for example "<name>List" or "<name>Container"?
In 7.3.25 InterfaceRealization Semantics the UML2 spec says "For behavioral features, the implementing classifier will have an operation or reception for every operation or reception, respectively, defined by the interface. For properties, the realizing classifier will provide functionality that maintains the state represented by the property." While section 7.3.45 Realization Semantics says "A Realization signifies that the client set of elements are an implementation of the supplier set, which serves as the specification. The meaning of ‘implementation’ is not strictly defined, but rather implies a more refined or elaborate form in respect to a certain modeling context. It is possible to specify a mapping between the specification and implementation elements, although it is not necessarily computable." If you interpret this as a literal constraint, then the realizing Classifier would need to copy all of the BehavioralFeatures it realizes. However, it seems unnecessarily redundant to realize an interface and to have to copy all the operations into the realizing classifier too. This means that for an Activity, the "signature" content of an operation could have to be specified up to 6 times: 1. An Operation in a provided Interface 2. The same Operation copied into a realizing Class used as the type of a Port 3. An Operation of a Component containing the Port 4. The method Behavior whose specification is the Operation owned by the Class 5. If the Behavior is an Activity, the ActivityParameterNodes 6. The InputPins and OutputPins of a CallOperationAction that invokes the operation In addition, there would be no way for an ownedBehavior's specification to refer to an Operation of an Interface provided through a Port since different ports can realize the same interface but have different implementations. There is no explicit constraint that the Classifier has to have a matching Operation, so you could read the above semantics to mean that adding the InterfaceRealization effectively means the Realizing Classifier has the Interface's behavioral features. This seems to be common practice, you don't often see all the realized operations cloned into the realizing classifier as this is redundant and somewhat tedious to do and maintain. Consider changing the description of property Behavior::specification in section 13.3.2 from: Designates a behavioral feature that the behavior implements. The behavioral feature must be owned by the classifier that owns the behavior or be inherited by it. The parameters of the behavioral feature and the implementing behavior must match. If a behavior does not have a specification, it is directly associated with a classifier (i.e., it is the behavior of the classifier as a whole). to: Designates a behavioral feature that the behavior implements. The behavioral feature must be owned by the classifier that owns the behavior or be realized or inherited by it. The parameters of the behavioral feature and the implementing behavior must match. If a behavior does not have a specification, it is directly associated with a classifier (i.e., it is the behavior of the classifier as a whole). The possible problems with this change are: 1 Subclasses cannot redefine realized operations of their superclasses unless the operation is duplicated in the superclass. This is because there would be no redefined element to reference in the superclass. This can be solved by cloning the operations that need to be redefined, or (more likely) redefining an ownedBehavior of the Superclass, not an Operation. So there is no change here. 2. Setting the specification of an ownedBehavior would result in an update of the realized interface since the opposite of the specification property is the Interface's method property. This is unfortunate coupling between an interface and its method implementations, but there are many other such cases in UML2, and the method property is multi-valued. So this isn't really that much of a problem. Some advantages are: 1. It matches the common understanding or realization 2. It reduces redundancy in the model 3. It allows an ownedBehavior's specification to be an Operation of an Interface provided through a Port in an EncapsulatedClassifer. This allows a EncapsulatedClassifier to provide different implementations for the same operation provided through different ports. This would not be possible if the specification operation had to be owned by the containing classifier as there would be no way to distinguish which operation the different behaviors corresponded to.
Possible Mismatch between Superstructure ptc/06-04-02 and XML Schema ptc/06-04-05 Please clarify the effects of the merge increments of 'Class' on its descendants, esp. on the 'Behavior' subtypes. IMHO the fact that 'behavior' inherits from 'Class (from Kernel)' implies that in turn it does NOT inherit features from 'BehavioredClassifier' or 'EncapsulatedClassifier' even on Compliance level L1. This would mean that e.g. an interaction may not have ownedPorts or ownedBehaviors, but nestedClassifier. If this is not the case, please clarify the precedence between the merge and inheritance constructs. Example: L1 (as seen in Fig. 2.2) merges Kernel, BasicBehaviors and InternalStructures and thus provides the 'Class', 'BehavioredClassifier' and 'EncapsulatedClassifier' constructs simultanously. - If inheritance comes before merging (which is what the diagrams suggest), 'Behavior' will have neither ownedPorts nor ownedBehaviors. - If merging comes before inheritance (which is what the XSD suggests), 'Behavior' will both have ownedPorts and ownedBehaviors. In the second case, the question arises that if even in L1 the three constructs mentioned above are provided, why does 'Behavior' not simply inherit from 'Class (from StructuredClasses)', directly being an EncapsulatedClassifier?
Constraint [1] in section 16.3.1 is incorrect.
[1] An actor can only have associations to use cases, components, and classes. Furthermore these associations must be binary.
self.ownedAttribute->forAll ( a |
(a.association->notEmpty()) implies
((a.association.memberEnd.size() = 2) and
(a.opposite.class.oclIsKindOf(UseCase) or
(a.opposite.class.oclIsKindOf(Class) and not a.opposite.class.oclIsKindOf(Behavior))))
An Actor is a BehavioredClassifier and therefore cannot have ownedAttributes. The constraint above would have to iterate over all the associations in the model and insure that if one ownedEnd is an Actor or UseCase, the other ownedEnd must be a UseCase or Actor respectively.
The direction of deployment dependency is wrong in all figures that use this kind of dependency, e.g. figure 10.9 on page 216 (direction is opposite to the one stated in metamodel). The deployment dependency in these figures is being drawn from artifact (client) to target (suplier), though figure 10.4 on page 210 defines Deployment as being dependency with DeploymentTarget as client and DeployedArtifact as supplier, so direction should be opposite - from target to artifact. As an alternative, the metamodel could be adjusted.
ValueSpecification that refers to some Element shall be defined. It could be named ElementValue. We need that for tagged values that references to model elements. It could be used for Argument value also
Ability to define "context specific" default values for Part. It is widely used for system modeling (SysML), but it is not possible to map that to UML
Namespace defines derived "member" collection for NamedElements identifiable by name. However not all Namespaces subset this collection, so NamedElements are added just to ownedElements. Example: Activity and ActivityNodes. Actions and ObjectNodes could have identical names because they are not added into "ownedMember" collection and are not identified by name. Is this correct or bug in metamodel? I believe we could find more such Namespaces.
Units and types are still problematic. UML notation is not able to show tags of some referenced elements - in case of attributes, they should show tags of type, in case of slots, they should show tags of type of defining feature (secondary reference).
In the Superstructure spec 2.1.1, association ends owned by
associations between UML metaclasses are not currently described in
the descriptions of the metaclasses. Only ends owned by the
associated classes are. In the abstract syntax diagrams, in a few
cases, ends owned by the associations have labels and/or other
specifications.
It is quite confusing to not mention those association ends in some
places, but to mention them in others. If the end is important enough
to be described, this should be done consistently. If the end is
irrelevant enough not to be described, it should consistently not be
described (and thus be subject to the default naming rules).
I suggest to establish consistency by determining for each such end,
whether it is relevant or not to describe it. If it is relevant to
describe it, then the end should be labeled in the diagrams, and it
should be described in the metaclass descriptions. Otherwise, the end
should be unlabeled and have no specifications in the diagrams and
should not be described in the metaclass descriptions.
Here is the set of ends owned by associations that is labeled in
diagrams:
Figure 7.5: "ValueSpecification::owningUpper"
Figure 7.5: "ValueSpecification::owningLower"
Figure 7.6: "ValueSpecification::expression"
Figure 7.7: "ValueSpecification::owningConstraint"
Figure 7.8: "ValueSpecification::owningSlot"
Figure 7.8: "ValueSpecification::owningInstanceSpec"
Figure 7.10: "ValueSpecification::owningParameter"
Figure 7.10: "Parameter::ownerFormalParam"
Figure 7.11: "Constraint::preContext"
Figure 7.11: "Constraint::postContext"
Figure 7.11: "Constraint::bodyContext"
Figure 7.12: "ValueSpecification::owningProperty"
Figure 7.12: "Classifier::class"
Figure 7.14: "PackageableElement::owningPackage"
Figure 7.15: "NamedElement::supplierDependency"
Here is the set of ends owned by associations that is unlabeled but
has specifications in diagrams:
Figure 7.16: The right end of the aggregation between "Property"
and "Interface" has a "{subsets ...}" specification.
Execution semantics of deferrable triggers. The execution semantics of deferrable triggers in the notation section of Transition, under Figure 15.44, conflicts with the semantics given in State. The description of deferrable trigger in the State attribute and semantics sections say a deferred event remains deferred until the machine reaches a state where it is consumed. The notation section of Trigger says the deferred event is lost when the machine reaches a state where the event is not consumed and not deferred
I note that the notation for parameters sets shown is for invocations of activities, not for activity definitions. Is it intended that there is a similar notation for grouping activity parameter nodes that represent parameter sets?
UML2 Superstructure 2.1.1:Interactions In Fig 14.26 there are various time annotations shown which relate to the Simple Time package. The notation sections for TimeObservation and DurationObservation read thus: TimeObservation: “A time observation is often denoted by a straight line attached to a model element. The observation is given a name that is shown close to the unattached end of the line.” DurationObservation: “A duration observation is often denoted by a straight line attached to a model element. The observation is given a name that is shown close to the unattached end of the line.” However the notations in Figure 14.26 look like this: TimeObservation: “t=now” DurationObservation: “d=duration” I don’t see how the example notation is consistent with the notation descriptions
State.stateInvariant should subset ownedRule The stateInvariant property of State currently subsets Element.ownedElement. Given that a State is a Namespace and a stateInvariant is a Constraint, the stateInvariant property of State should subset ownedRule. Likewise, the opposite end of this association should subset Constraint.context instead of Element.owner. This change is needed so that a state invariant has a context and, thus, can be specified using OCL.
In the semantics, the spec needs to state what happens if there are multiple instances corresponding to the port (which might happen if the multiplicity upper bound of the port is greater than 1)
The notation section of the classifier refers to the standard notation for nested classifiers. 1. I can't find that standard notation in the spec. 2. Nested classifiers are a feature of classes and not of classifiers. It seems that nesting and owning of classifiers is mixed up here
It is common usage to model a lifeline in a interaction that represents an actor. I can't see how that could be done formally correct. A lifeline represents a connectable element, e.g. a property. It is not allowed to define a property that is typed by an actor.
Table 14.6., State or condition timeline: It is unclear how the time information is stored in the interaction model. Especially if it is a continuous timeline. Please clarify the repository model for timing diagrams
Inconsistancy between background fill colouring. Default colour preferences are normally white background, black text, and this issue is then not visible. Changing to a custom colouring to green backgrond, black text, one sees that that some boxes are filled white, whereas others are the same as the selected background colour. Is this intentional? Does this have any semantic meaning? Example in Figure 7.47 (b) Power type notation. The PowerType classifiers use the page background
Figure 7.47 - Power type notation Specific classifier-2 has powertype 'classifier-1' but inherits from PowerType Classifier-2. Should the inheritance lines not point to the 'General Classifier'?
The Property::isAttribute() OCL query (see p. 133 of 07-02-03) is currently defined to take an argument:
[4] The query isAttribute() is true if the Property is defined as an
attribute of some classifier
context Property::isAttribute(p : Property) : Boolean
post: result = Classifier.allInstances->exists(c|
c.attribute->includes(p))
This argument (p) is not necessary, as the query should be based on the context property. Note that the OCL body for this query does not appear to be correct either.
Current Scope section in UML 2.1.1 Infrastructure ================================================= This UML 2.1.1: Infrastructure is the first of two complementary specifications that represent a major revision to the Object Management Group's Unified Modeling Language (UML), for which the previous current version was UML v1.5. The second specification, which uses the architectural foundation provided by this specification, is the UML 2.1.1: Superstructure. The UML 2.1.1: Infrastructure defines the foundational language constructs required for UML 2.1.1. It is complemented by UML 2.1.1: Superstructure, which defines the user level constructs required for UML 2.1.1. Current Scope section in UML 2.1.1 Superstructure ================================================= This Unified Modeling Language: Superstructure is the second of two complementary specifications that represent a major revision to the Object Management Group's Unified Modeling Language (UML), for which the most current version is UML v2.0. The first specification, which serves as the architectural foundation for this specification, is the Unified Modeling Language: Infrastructure. This Unified Modeling Language: Superstructure defines the user level constructs required for UML 2. It is complemented by Unified Modeling Language: Infrastructure which defines the foundational language constructs required for UML 2. The two complementary specifications constitute a complete specification for the UML 2 modeling language. Proposed Scope section ====================== This specification defines the Unified Modeling Language (UML), revision 2. The objective of UML is to provide system architects, software engineers, and software developers with tools for analysis, design, and implementation of software-based systems as well as for modelling business and similar processes. The initial versions of UML (UML 1) originated with three leading object-oriented methods (Booch, OMT, and OOSE), and incorporated a number of best practices from modelling language design, object-oriented programming and architectural description languages. Relative to UML 1, this revision of UML has been enhanced with significantly more precise definitions of its abstract syntax rules and semantics, a more modular language structure, and a greatly improved capability for modelling large-scale systems. One of the primary goals of UML is to advance the state of the industry by enabling object visual modeling tool interoperability. However, to enable meaningful exchange of model information between tools, agreement on semantics and notation is required. UML meets the following requirements: * A formal definition of a common MOF-based metamodel that specifies the abstract syntax of the UML. The abstract syntax defines the set of UML modelling concepts, their attributes and their relationships, as well as the rules for combining these concepts to construct partial or complete UML models. * A detailed explanation of the semantics of each UML modelling concept. The semantics define, in a technology-independent manner, how the UML concepts are to be realised by computers. * A specification of the human-readable notation elements for representing the individual UML modelling concepts as well as rules for combining them into a variety of different diagram types corresponding to different aspects of modelled systems. * A detailed definition of ways in which UML tools can be made compliant with this specification. This is supported (in a separate specification) with an XML-based specification of corresponding model interchange formats (XMI) that must be realised by compliant tools.
Abstractions should support serialization by itself and interoperably with serialization of Constructs. In particular: - Package and Property should be available in Abstractions, to enable Abstractions to be used for serialization of typical models by itself. - There should be no circular dependencies between packages in Abstractions. - Constructs should only use imports from Abstractions, to enable models using Constructs to interoperate with models using only Abstractions. Package merge produces noninteroperable XSDs
Package import is defined in the context of Namespace. This has two consequences: 1. Namespaces such as Classe, Node, and UseCase can import Packages. This does not seem to be a good design goal. 2. There is a circular definition between Package and Namespace: Package is a sub-type of Namespace and Namespace requires the definition of Package and PackagedElement.
Generalization of Parameter to NamedElement in redundant in Abstractions. Would be easier on serialization to remove the multiple inheritance.
The constraints on associations include a condition that an Actor not be associated with a Behavior, which blocks the owned behavior and classifier behavior, but in that case, it is a mystery to me why Actors were made to be BehavioredClassifiers. This is not an issue with the consistency or clarity of the spec. It is an issue with understanding the use of UML 2 as contrasted with UML 1.n The 2.1.1 spec, section 16.3.1, says: Changes from previous UML There are no changes to the Actor concept except for the addition of a constraint that requires that all actors must have names. But a very important change was introducing BehavioredClassifier (there was no BehavioredClassifier in UML 1) , and then making it the generalization of Actor, which gives Actors 1. ability to own behaviors 2. ability to have a unique classifier behavior 3. and own triggers. some remarks on the intended pragmatics of this change would make UML spec better. Merely citing the change in the "Changes.." section provide accuracy without value, but explaining what use is foreseen for this change, would provide value.
The (new) path names for the CMOF files, based on the naming proposal that was presented in Brussels, need to be listed next to the bullet points in Appendix H of the UML specification. This change should be made as part of the urgent ballot for UML 2.1.2.
There are several places in metamodel where non-derived composite property is subset of other non-derived composite property. In this case element is owned in two collections, so how it should be reflected in XMI where element could appear just once? We can leave element just in subset, and merge collections after load, but is this correct? Below are these occurrences: classes::mdKernel::Operation::bodyCondition subsets ownedRule statemachines::mdBehaviorStateMachines::Transition::guard subsets ownedRule classes::mdKernel::Operation::postcondition subsets ownedRule statemachines::mdProtocolStateMachines::ProtocolTransition::postCondition subsets ownedRule classes::mdKernel::Operation::precondition subsets ownedRule statemachines::mdProtocolStateMachines::ProtocolTransition::preCondition subsets ownedRule Profile::metaclassReference subsets elementImport uml2.1.1::mdProfiles::Profile::metaclassReference subsets packageImport
There are less diagram kinds defined than UML diagrams. In particular I miss a diagram kind for object, deployment and composite structure diagrams
The abbreviation sd for interaction diagrams should be renamed to id. sd stands for sequence diagram, but there three more interaction diagrams. It is confusing to have a diagram kind sd for a timing diagram.
There is actually two closely related issues I would like to report. One is an (as I understand it) error related to figure 7.20 and the other is a humble request to enhance the documentation by more explicitly clarifying the semantics of association ends that are owned by an end class. Starting with the (possible) error. According to the specification (page 39) "An end property of an association that is owned by an end class or [...] is navigable from the opposite ends; [...]" Somewhat further down in the text there is a statement saying (page 43) "Aggregation type, navigability, and end ownership are orthogonal concepts [...]" Although this may be true in terms of notation, it is clear from the first citation (and common sense) that navigability and end ownership cannot be conceptually orthogonal. Moving on to figure 7.20, the first relation demonstrates this supposed orthogonality by showing a relation where the end connected to B is owned by A, but not navigable from A. I understand that this part might have been written with notation in mind; to demonstrate the orthogonality of the notational elements. It might, however, be considered bad practice to show notational examples that are inconsistent with the rest of the specification. The second "issue" is related to the concept of a property that is an association end owned by an end class. It took me quite some time and a lot of re-reading to understand that the "end class" was a of a different type than the type of the property. The only real hint about this was the last statement on a paragraph in on page 42 (in the notation section) stating that "This property is owned by the classifier at the other end." Since the whole concept of ownership seems a little vague, it might be a good idea to include a paragraph detailing this fact in the description of the semantics of associations. I hope this might be of some use.
The Description section states: "Note that the included use case is not optional, and is always required for the including use case to execute correctly." This is often understood as stating that the behavior of an included use case has to be executed during every execution of the behavior of the including use case. Example: The following informal use case fragment contains a conditional call of an included use case: Step x: If the user choses to print the reports, <<include>> the use case "Print reports". With the understanding given above, this use case fragment would be invalid (at least if the included use case is not included elsewhere in the including use case). In a similar vein, the Semantics section states: "All of the behavior of the included use case is executed at a single location in the included use case before execution of the including use case is resumed." Besides the obvious error (the sentence should say: "... is executed at a single location in the including use case ..."), this is sometimes understood as stating that the behavior of the included use case must be executed exactly once during the execution of the including use case. Another (equally wrong) interpretation would be that the included use case must be included exactly once in the use case specification (implying, for example, that there must not be two lines in the same textual use case specification containing an <<include>> directive for a certain use case). Both sections should be clarified, clearly stating that: - The behavior specification of the including use case may include an included use case multiply (although this is represented by a single include relationship in the use case diagram). Analogy: A routine that contains multiple calls to a subroutine in its source code. - The including use case is responsible for calling the included use case. It may choose to call it once, repeatedly, or not at all. Analogy: A routine with conditional execution paths or iterative behavior, performing subroutine calls conditionally or iteratively. Proposal for changing the sentence in the Description section: "Note that the included use case is not optional, and is always required for the including use case to be fully specified. The behavior specification of the including use case may include an included use case multiply (although this is represented by a single include relationship in the use case diagram)." Proposal for a change and an addition in the Semantics section: "All of the behavior of the included use case is executed in the including use case before execution of the including use case is resumed. Depending on behavior of the including use case, the included use case may be called once, multiple times or not at all." I would be very pleased to receive a first, quick reply by mail.
The collaborationRole property of Collaboration does not appear to be needed and could be removed. A Collaboration's ownedAttributes subsets inherited derived union role, and therefore represent the roles in a Collaboration. Since Property is extended to be a ConnectableElement, collaborationRole is redundant with ownedAttributes. In addition, the description does not seem to make sense. A collaborationRole can't reference connectable elements (possibly contained in another classifier) because the roles of a Collaboration must be parts or ownedAttributes of that Collaboration. The roleBindings of a CollaborationUse bind the roles of its Collaboration type to parts of some other classifier. However, there could be another interpretation of collaborationRole. If Collaborations are used to represent patterns, then a Collaboration's ownedAttributes may represent the common part of the pattern while the collaborationRoles represent the variable part. Instantiating the pattern with a CollaborationUse may then mean that the Classifier owning the CollaborationUse would need to directly contain the common parts (copies of them from the collaboration), and require roleBindings to the variable parts. In this case, collaborationRole parts would require bindings (and therefore subclass role) while ownedAttributes don't (and wouldn't subclass role)? In any case, the purpose of property collaborationRole is unclear and should be amplified in the specification to distinguish it from ownedAttributes and how it should be used.
The type of association 'packageMerge' is shown as 'Package'. In contradiction to this is the describing text of this association and the Figure 7.14 on p. 34 showing that the association 'packageMerge' is from 'Package' to 'PackageMerge'. Correct in chapter '7.3.37 Package (from Kernel)' the type of association 'packageMerge' from 'Package' to 'PackageMerge'.
This seems odd to me. The ‘owningPackage’ role of PackageableElement is non-navigable, whereas I would expect it to be navigable so that it is possible from a Packageable Element to find its owner. Interestingly Type, which is a PackageableElement does have a navigable role to its parent, but InstanceSpecification, for example doesn’t.
We are experiencing problems with elements of simpleTime Package. TimeExpression, Duration, TimeEvent and Observation owners are not defined. The only possible owner becomes Package. If TimeConststraints or DurationConstraints are used in SequenceDiagram, these multiple small elements could be added just into nearest Package (second level owner of Interaction). In real world packages could contain hundreds of Classes with defined behaviors, so hundreds of TimeExpression, Duration, TimeEvent and Observation elements appears in the root of such package (together with thousands of events from MessageEnds).
The section titled "Changes from previous UML" is not complete "The following changes from UML 1.x have been made: to be written."
Element is restricted to be imported only once (not possible to import the same element into different namespaces). I think this is clear bug in Figure 7.4 - Namespaces diagram of the Kernel package ElementImport multiplicity (on association between ElementImport and PackageableElement) shall be changed from [1] to [*] (as multiplicity of PackageImport).
As described above the Figure 7.38 I think the arrow should point from Car to CarFactory.
I just noticed that in formal/07-02-05 section 7.3.8, Classifier, includes:
An abstract Classifier can be shown using the keyword {abstract} after or below the name of the Classifier.
However this is not listed in Annex B of keywords.
In fig. 8.12 on page 153 the delegate connector points directly to an interface or from an interface on the right side. According to the connector definition in 9.3.6 and 8.3.2 it is not allowed to do that. In addition such a notational variant is nowhere described.
The constraint [2] in section 12.3.5 on page 325 ("Activity edges may be owned only by activities or groups") of class ActivityEdge seems to be contrary to the fact that inGroup - the only reference between edge and group - is a simple association but no composition or aggregation. According to figures 12.5 and 12.6 I would think, that edges are always owned by activities (composition) and referenced by groups. There is no composition or aggregation that specifies, that edges can be owned by groups. (http://groups.google.de/group/UMLforum/browse_thread/thread/bdd07d113676a41f/20b33a18f90db3d9?#20b33a18f90db3d9
Figure 7.48 and the accompanying discussion under 7.3.21 GeneralizationSet>Examples on pp 78-79 uses the example of a generalization set consisting of a single class to explain the proper use of the isCovering and isDisjoint attributes. I believe this example is infelicitous in the context of this exposition because generalization sets consisting of a single class present a special case, and this detracts from the exposition. In what way are they a special case? IF (a generalization set consists of a single class AND it is {incomplete}) THEN it can *only* be {disjoint}. This is because if the complement of an {incomplete} generalization set is non-empty, and consists of all instances that are NOT members of the solitary class in the generalization set. In other words, for a generalization set consisting of a single class, the combination {incomplete, overlapping} is self-contradictory. IF (a generalization set consists of a single class AND it is {complete}) THEN it can *only* be {overlapping}. This is because the complement of a {complete} generalization set is the null set, and the null set is a member of every set. In other words, the combination {complete, disjoint} is self-contradictory. I would recommend pointing out that generalization sets consisting of a single class represent a special case, and I would treat them separately (?footnote). For purposes of the exposition, I would modify Figure 7.48 to include at least two classes (perhaps Employee, Manager) instead of just Employee in the right-hand generalization set.
Our company uses UML 2.1 for model driven architecture. We are now at the point, where we need interaction overview diagrams (like the example on figure 14.28 on page 530). So, we searched the UML elements that are used in this diagram: ControlFlow, InteractionUse, InitialNode, ActivityFinalNode, ... Then, we tried to combine them via the metamodel to have a little class diagram which shows us the connections of the elements (for example ControlFlow has source and target to ActivityNode). But there is one problem: We can't find a way to add the InteractionUse in this diagram. It seems, that a ControlFlow isn't able to have an InteractionUse on one of its ends. Can you tell us, how the InteractionUse can be used correctly (so we can use it for XMI-export)? Thank you in advance. We look forward to hearing from you.
Literals e.g. LiteralString are NamedElements but the notation does not allow for specifying the name.
In the 2.1.1 specification (070203) states on page 583/732 (or pg.569), it states: [1] The query isConsistentWith() specifies that a redefining transition is consistent with a redefined transition provided that the redefining transition has the following relation to the redefined transition: A redefining transition redefines all properties of the corresponding redefined transition, except the source state and the trigger. This restriction seems a little harsh. Consider the use case: 1) a user has a state machine, in a top level abstract class, and there exists a transition between two states with no triggers. 2) the users expect to add triggers to the transition in the concrete sub class state machines. (i.e. redefine in the sub class context and add a trigger) The way the above constraint is written does not allow new triggers to be added to redefined transitions. I am requesting a clarification point that will state that new triggers can be added to the redefined transition.
pull semantics are only supported on Action inputs, not outputs. There is currently no ActionOutput having a toAction: Action Property allowing action output pins to refer and write to parameters, variables or structural features. Either UML2 should include ActionOutputPin, or remove ActionInputPin and allow a Pin to have an optional action: Action [0..1].
In the 2.1.1 specification (070205): Although the superstructure specification does not mention it, I believe that we should be able to show gates on communication diagrams. Gates are not connectable elements so we cannot attach connectors to them. How then would we show message pathways (connectors) to the represented lifeline on the communication diagram? Gates don't "represent" connectable elements as lifelines do. I would like to request clarification on this point.
In the 2.1.1 specification (070205):
Gates are simply MessageEnds and not some form of OccurrenceSpecification. This makes relative ordering of messages between gates on different InteractionUse within an interaction impossible.
In addition to gates on InteractionUse, gates on Interaction that have outgoing messages cannot specify any relative ordering.
The inability to specify ordering of messages connected to gates is problematic.
__________________________________
Version 2.1.1 2007-02-05 of the spec.
TemplateSignature p. 625
parameter : TemplateParameter[] Should mention that it is a derived union of TemplateSignature::ownedParameter ( or show ‘/’ )
ownedParameter: TemplateParameter[] Should mention that it subsets TemplateSignature::parameter.
TemplateParameter p. 623
default : ParameterableElement should mention that it is a derived union of TemplateParameter::ownedDefault ( or show ‘/’ )
parameteredElement::ParameterableElement[] should mention it is a derived union of TemplateParameter::ownedParameteredElement
StructuredClassifier p. 186
There seems to be some discrepency in the spec in regards to Role : ConnectableElement[]. The spec mentions that it is a derived union (it uses the term Abstract union which is inconsistent ) that subsets Classifier::feature. I believe we should have StructuredClassifier::ownedAttribute subsetting StructuredClassifier::role.
The non-navigable (as indicated by the X) association end typed by classifier ‘B’ in figure 7.20 of 07-02-05 is invalid, since the classifier – not the association – owns that end (as indicated by the dot notation as described on page 42)… recall that an association end owned by a classifier (and not the association) is implicitly navigable.
In the description of Lifeline the coveredBy association has a multiplicity of [0..1]. However, in Figure 14.4 the multiplicity is *, in the XMI it has also * as upper bound, and the text talks also about multiple InteractionFragments ("References the InteractionFragments in which this Lifeline takes part").
A readily accessible list of all semantic variation points in the UML superstructure. It should probably be a separate appendix for easy reference and maintenance.
It appears that UML 2 has lost the ability to represent operations by collaborations. (There the collaboration related the parameters of the operation as roles.) Now a collaboration use can only be owned by a classifier. A behavior could still be explained by an operation, but not an operation. If this is desired, the references to operations owning collaboration uses need to be purged. Otherwise it has to be fixed that operations can own collaboration uses.
Towards the bottom of the page there is a paragraph on "deferred events". This appears to be a holdover from UML 1.x, as the current specification speaks of "deferred triggers" (see p.550). Adjust this paragraph to match the current abstract syntax. Similar changes must be made to the corresponding paragraph on p.554.
This paragraph refers to signal and change events, but should refer to signal and call events: >>However, relative to its use for signal events (see “SignalEvent (from Communications)” on page 449) and change events (see “ChangeEvent (from Communications)” on page 435), the <assignment-specification> ... Instead it should read: >>However, relative to its use for signal events (see “SignalEvent (from Communications)” on page 449) and call events (see “CallEvent (from Communications)” on page 434), the <assignment-specification> ... ChangeEvents don't even have an assignment specification, but signal an call events do.
Table 8.2 must be named "Graphic paths..." instead of "Graphic nodes..."
For the association 'ownedTemplateSignature' of a Classifier, 'Subsets Element::ownedElement' is specified. This should be replaced by 'Redefines TemplateableElement::ownedTemplateSignature' (because a Classifier inherits 'ownedTemplateSignature' from its superclass TemplateableElement). Correspondingly, in figure 17.18 '{subsets ownedElement}' should be replaced by '{redefines ownedTemplateSignature}'.
The three formal definitions of 'isCompatibleWith' start with: 'isCompatibleWith = p->oclIsKindOf(self.oclType) and [...]'. This is wrong, p and self have to be swapped, that is: 'isCompatibleWith = self.oclIsKindOf(p.oclType) and [...]'. Rationale: As defined in the OCL-specification formal/06-05-01, the function 'oclIsKindOf(t)' determines if t is either the direct type or one of the supertypes of the object, on which this function is called. That is, if the function returns true, the type t is a generalization or equal to the type of the current object. The corresponding has to be valid for 'isCompatibleWith(p)': If the function returns true, the type of p has to be the same or a generalization of the type of the object, on which this function is called (otherwise, the constraints [1] of 17.5.4 and 17.5.5 would make no sense).
The definition of 'isCompatibleWith' for ValueSpecification starts with 'Property::isCompatibleWith[...]', instead it has to start with 'ValueSpecification::isCompatibleWith[...]'.
There are two occurrences of the term 'templatedElement' in the Standard (both in an OCL-expression), but this term is nowhere defined. I propose to replace 'templatedElement' by 'template' on page 629 respectively 'Template::templatedElement' by 'TemplateSignature::template' on page 636.
The last sentence of the Semantics definition for Parameter is: "If the behavioral feature is an operation, then the type and multiplicity of this parameter is the same as the type and multiplicity of the operation itself.". The multiplicity of an operation is not defined in the standard: Operation does neither inherit from MultiplicityElement, nor has it an element called 'multiplicity'. Proposed resolution: Replace this sentence by: "If the behavioral feature is an operation, then the type of this parameter is the same as the type of the operation itself
In section '10.3.12 Property (from Nodes)', the Description states "In the metamodel, Property is a specialization of DeploymentTarget", but a corresponding generalization is not defined under 'Generalization'. Proposed resolution: Add '"DeploymentTarget (From Nodes)" on page 205' to the Generalization section of 10.3.12.
The metaclasses 'Attribute' and 'AssociationEnd' (defined in UML 1.x) are merged in the metaclass 'Property' in UML 2.x. But the terms 'attribute' and 'association end' are still used in the standard, based one the two possible Property-containments (Property owned by a 'Class' respectively by an 'Association'). In addition, a semantic for the different values of the meta-property 'aggregation' is only defined for a 'Property' of style 'association end'. I propose to re-introduce the metaclasses 'Attribute' and 'AssociationEnd' as specializations of 'Property', making 'Property' an abstract class (the meta-property 'aggregation' should be then moved to AssociationEnd).
The undefined term 'Element::redefinedElement' occurs three times in the standard where 'RedefinableElement::redefinedElement' is expected.
Should there be a constraint ensuring that named elements with private visibility cannot be accessed outside their owning namespace? For example, the type of a property should not be a private member of a namespace outside of its namespace hierarchy…
The Semantics section for Feature says: “A feature represents some characteristic for its featuring classifiers; this characteristic may be of the classifier’s instances considered individually (not static), or of the classifier itself (static). A Feature can be a feature of multiple classifiers. The same feature cannot be static in one context but not another.” It seems to me that the second sentence is simply a reiteration of the description of property “/ featuringClassifier: Classifier [0..*]” The third sentence could be expressed more usefully as a constraint. I’m also puzzled by the 0..* multiplicity on featuringClassifier. It would be useful if the description of Feature explained when a feature can have more than one featuring classifier.
Section 18.3.3 states, that "An ExtensionEnd is never navigable. If it was navigable, it would be a property of the extended classifier". Whereas in section 7.3.3 (Association) on page 43, it is stated that: "Navigability notation was often used in the past according to an informal convention, whereby non-navigable ends were assumed to be owned by the association whereas navigable ends were assumed to be owned by the classifier at the opposite end. This convention is now deprecated. Aggregation type, navigability, and end ownership are orthogonal concepts [...]" The mentioned description in ExtensionEnd seems to contradict the definition of an Association. For the UML Profile Extension Mechanism two issues are essential to be clarified: 1) Is it possible, that an ExtensionEnd (which is owned by the Extension instead of the extended Class) is navigable? 2) Is it possible in a UML-Profile to define an Association which relates a Stereotype with a metaclass and which is navigable on *both* association ends (if the association end which refers to the stereotype is owned by the association itself instead of by the extended class)? [unidirectional Associations navigable from a stereotype to the extended metaclass seem to be allowed, as exemplified in the SysML 1.0 Standard at page 164]
In the semantics section the spec says “When the extension is required, then the cardinality on the extension stereotype is “1.” The role names are provided using the following rule: The name of the role of the extended metaclass is: ‘base_’ extendedMetaclassName The name of the role of the extension stereotype is: ‘extension$_’ stereotypeName.” I have two issues with this. This first is that in all example that follows – the extension role names don’t have a dollar in them and so are inconsistent with the spec. Secondly, I think this should say that these are the default names if the modeller doesn’t provide any. In fact later on in the Presentation Options section of 18.3.8, the spec says: “If the extension end is given a name, this name can be used in lieu of the stereotype name within the pair of guillemets when the stereotype is applied to a model element.”
Constraint [2] says: A protocol transition never has associated actions. My problem is that this constraint makes it impossible to specify a consistent pair of a server protocol state machine (PSM) and a client PSM. The server PSM has call events as triggers. It also has internal events causing autonomous state transitions. However, the latter transitions must be notified to the client PSM. This can only be done by actions in which signal events are generated to the client FSM. Such signals are the triggers in the client FSM; and in fact the same problem happens here. Since the call events to the server PSM are caused by internal events at the client PSM, that force call events to the server PSM in the actions. I hope this issue can be solved or at least clarified. Thanks.
The description for Execution Specification says: “An ExecutionSpecification is a specification of the execution of a unit of behavior or action within the Lifeline. The duration of an ExecutionSpecification is represented by two ExecutionOccurrenceSpecifications, the start ExecutionOccurrenceSpecification and the finish ExecutionOccurrenceSpecification.” This sounds right to me. However, the association ends ‘start’ and ‘finish’ are to the more general OccurrenceSpecification, thus: “Associations • start : OccurrenceSpecification[1] References the OccurrenceSpecification that designates the start of the Action or Behavior. • finish: OccurrenceSpecification[1] References the OccurrenceSpecification that designates the finish of the Action or Behavior.” The semantics also refer to OccurrenceSpecification. “Semantics The trace semantics of Interactions merely see an Execution as the trace <start, finish>. There may be occurrences between these. Typically the start occurrence and the finish occurrence will represent OccurrenceSpecifications such as a receive OccurrenceSpecification (of a Message) and the send OccurrenceSpecification (of a reply Message).” The spec should make the description, association and semantics sections consistent.
On Page 23 of the UML Infrastructure Spec. it is stated, that "The multiplicity of an association end is suppressed if it is ‘*’ (default in UML).". This implies that omitting to define the multipl. of an association end A means that the multiplicity of A is * (between zero and infinity). However this contradicts most books I know and some examples in the specification itself.
The reporter does not give sufficient details on what are the errors. Would need some detailed examination and hence, for timing reasons, it is better to defer. Disposition: Deferred
For example A_ownedMember_namespace Has both its ends marked with isDerived=”true” but not the Association itself.
Are qualifiers displayed at opposite end of association than role name (or multiplicity) or near the role name (or multiplicity)? E.g. composition diamond is displayed at opposite end, multiplicity value – at the same end. How about qualifiers? UML 2.1.2 page 124: qualifier : Property [*] An optional list of ordered qualifier attributes for the end. Notation (page 128): The qualifier is attached to the source end of the association. What is the “source of the association” ??? Look at figure from UML spec (first sample): Are these qualifiers owned in association end typed by Bank or Person?
Section 11.3.25 gives the definition of MultiplicityElement::compatibleWith as: compatibleWith(other) = Integer.allInstances()-> forAll(i : Integer | self.includesCardinality(i) implies other.includesCardinality(i)) While technically correct, this may be a little impractical for any OCL interpreting tool. I think an alternative, that simply uses the upper and lower bounds, would be: compatibleWith(other) = other.includesMultiplicity(self)
definition of MultiplicityElement::compatibleWith
In chapter 15.3.12 (p. 568) the keyword "final" is informally introduced for states: "the states VerifyCard, OutOfService, and VerifyTransaction in the ATM state machine in Figure 15.42 have been specified as {final}" This should be mentioned in capter 15.3.11 (State (from BehaviorStateMachines, ProtocolStateMachines)) in section "Notation". Suggestion: "A state that is a leaf (i.e. isLeaf=TURE) can be shown using the keyword {final} after or below the name of the State."
Chapter 13.3.3, section “Changes from previous UML“: “The metaattributes isLeaf and isRoot have been replaced by properties inherited from RedefinableElement.” RedefinableElement does not have the property isRoot.
Please explain constrainedElement has to be an ordered set and not a set.
The car dependency example on page 63 of the UML Super Structure Specification appears wrong to me. The description indicates to me that the arrow should be going from the car to the carfactory not the other way around as depicted.
Please insert a figure showing an AssociationClass that is a ternary association to make clear whether the dashed line is to be connected to a line or the diamond. (Use can re-use figure 7.21 on page 44).
Various readers are interpreting InstanceSpecification differently. One interpretation is that a particular InstanceSpecification specifies a particular instance. A second interpretation is that a particular InstanceSpecification may be used to specify more than one instance. I prefer the second interpretation. This is supported by the Note at the bottom of page 83 that refers to "... such structures."
What happens with the do activity if a internal transition fires? It is not mentioned in the specification.
Activity regions and their contents should be redefinable
The first paragraph of section 7.8 suggests that the UML kernel is the merge of Core::Abstractions packages. To obtain Classifier in the UML kernel, we would have to merge Classifiers, Super and Generalizations from Core::Abstractions. How is this possible given that: a) there are no generalization relationships among Classifier metaclasses in these Abstractions packages b) there are two matching operations: {Super,Generalizations}::Classifier::parents (a) means that Generalizations::Classifier::parents cannot redefine Super::Classifier::parents. Even if there were a generalization, the resulting merged model would be ill-formed because it would include a generalization self-loop. (b) means that the merge is ill-formed because it violates constraint #4 defined in the general package merge rules in 11.9.3 (p. 164) POSSIBLE WORKAROUND: - split Core::Abstractions::Super in two packages: Super and SuperParents which only defines Classifier::parents - ditto for Core::Abstractions::Generalizations - if Super is to be merged but Generalizations isn't, then merge SuperParents as well. - if both Super and Generalizations are to be merged, then merge GeneralizationsParent but not SuperParents This is a kludge but that's the only short-term workaround I can find for this bug at this time.As it is intended by the current specification, an Interaction may be modeled independent of any BehavioredClassifier, which owns it. This would e.g. allow to use Interactions to model communication between analysis objects at a very early analysis stage, where no classes have been designed yet. The intention is manifested in the specification by allowing that a Lifeline or Messages does not have to specify a Property (Multiplicity of 0..1 of Lifelines->represents) or a Connector (Multiplicity of 0..1 of Message->connector) respectively (and that an Interaction does not have to be owned by a BehavioredClassifier). However, the restriction that every OccurrenceSpecification, and as such also every MessageOccurenceSpecification has to be associated with an event (compare Figure 14.5 on page 462) prevents that an Interaction may be used in above described manner. The reason for this is is as follows: 1) As the absense of a MessageEnd has another semantics (the MessageKind is inferred from it), in above described scenario, MessageEnds should indeed be specified (a complete message would be the only appropriate kind to model communication between objects as in above described scenario) 2) Because of above described multiplicity constraint, the MessageOccurenceSpecifications serving as sendEvent and receiveEvent of the message have to refer to some SendSignalEvent/ReceiveSignalEvent or SendOperationEvent/ReceiveOperationEvent respectively. 3) Those events in turn require to specify a Signal or Operation (see Figure 14.2 on page 459). 4) The Signal or Operation would have to be owned by some Classifier. There is however no Classifier in above described scenario, with exception of the Interaction itself (adding the Signals or Operations to the Interaction itself, would however require that all Signals and Operations are named unique, which is inappropriate). I would thus propose to change the specification, so that MessageOccurenceSpecifications (or OccurenceSpecifications) may, but do not have to specify an event (i.e. change multiplicity from 1 to 0..1).
It is allowed that for example a trace relationship has more than one client or supplier. It is unclear how the callout notation looks like for such a relationship.
Discussion: This is a UML2 issue, since SysML does not modify Trace in the least. UML has no convention for callouts on n-ary relations. Defer to UML2 RTF. Disposition: Deferred
Classifiers are specialized to hold useCase properties in the UseCases package but this package is not merged/imported by any other ones. Does it formally mean that - for instance - no version of the metaclass "Class" should be able to hold use cases?
The way the PackageMerge relatrionships are used in the specification doesn't seem to be rigorous or, at least, are not clear. For instance: * §7.3.7 indicates that the "Class" from Kernel metaclass is a specialization of “Classifier (from Kernel, Dependencies, PowerTypes)”. That is not correct if you refere to the corresponding package diagram: "Class" from Kernel doesn't inherit from Dependencies and PowerType merge increment of "Classifier" * §7.3.6 "BehavioredClassifier" from Interfaces) is a merge increment of "BehavioredClassifier" from BasicBehavior) but not for "BehavioredClassifier" from Communications (it's the opposite). * etc... Then, i suggest to define PackageMerge relationships of the metamodele in a more formal way than simple diagrams and to validate that metaclass definition are consistent with these relationships.
We are concerned with the UML specification forcing an Behavior's parameter list to be in sync with its behavioral feature. >From the UML 2.1.1 07-02-03, page 431 (or 445/732) it states in the 13.3.2 Behaviors section the following constraint: [1] The parameters of the behavior must match the parameters of the implemented behavioral feature We feel that this constraint is unnecessary. The parameter list of a Behavior element can be derived from its behavioral feature. Forcing the Behavior to have its own list of parameters has practical implementation problems such as needlessly increasing the size of the UML model, and worse, forcing one to preform the tedious task (or the tool to preform the extra overhead) of keeping the parameter lists of the Behavior and its behavioral feature in sync. We would like to request that this constraint is removed from the specification.
Using a simple Dependency to define the role bindings of a CollaborationUse seems too "light". I suggest to change for a Realization relationship which has a stronger - and i think more convenient - semantic.
Shouldn't be a constraint or a redefinition in order to specify that the client of a manisfestation is its owning artefact?
Problem 3 3.2 Behavior (CommonBehaviors/BasicBehaviors) is having relationship redefinedBehavior, that should be derived
Problem 4 4.1. Exceptions raising is provided on L2 compliance level (RaiseExceptionAction from Actions/StructuredActions) while handling is provided on L3 (ExceptionHandler from Activities/ExtraStructerdActivities). That functionality is an integrated part and raising and handling exceptions should be provided on the same compliance level. ++++++++++++++++++++++++++++++++++++++++++++ from Bran Selic <bran.selic@gmail.com> hide details Jun 9 to Andrzej Zielinski <072404@gmail.com> date Jun 9, 2008 7:46 PM subject Re: UML 2.x issues mailed-by gmail.com Bran Selic: Agreed. We did not focus too much on the modeling of exceptions -- it was not a priority item at the time. It should probably be so now. Your work is definitely timely. Andrzej Zielinski: That is about my Ph.D thesis
Problem 5 5.1 Interactions diagrams shows messages that are type of MessageSort (from Interactions/BasicInteractions, level L1). There is no way to express that a message is an exception. Only signals and calls are expressed. Exception is none of them ++++++++++++++++++++++++++++++++++++++++++ from Bran Selic <bran.selic@gmail.com> hide details Jun 9 to Andrzej Zielinski <072404@gmail.com> date Jun 9, 2008 7:46 PM subject Re: UML 2.x issues mailed-by gmail.com Bran Selic: Agreed
Problem 6. 6.1 Operation is having very wide type (Type) as an exception instance (raisedException). Theoretically it is possible that Association may be thrown as an exception. ++++++++++++++++++++++++++++++++++++++++++ from Bran Selic <bran.selic@gmail.com> hide details Jun 9 to Andrzej Zielinski <072404@gmail.com> date Jun 9, 2008 7:46 PM subject Re: UML 2.x issues mailed-by gmail.com Bran Selic: Agreed. I wish that this was the only place where the metamodel suffers from overgeneralization. Unfortunately, this is almost endemic in how things are done in UML.
For practical reasons, we would like to consider certain properties of redefinable elements to be inheritable (or possibly derived from the redefined element). For example, if one were to redefine a property, then if the type of a redefining property were not explicitly set, it could inherit (or derive) the type from the redefined property. This would save on space in the serialized model and also help keep the model in a consistent state at all times, if for example the type of the redefined property were to change. Currently, there are constraints mentioning that the Type of the redefining property must be 'consistent' with that of the redefined property, any resolution would have to consider modifying such constraints to take redefinition into account. Other properties that could be considered inherited would be do/entry/exit actions of a state and, target of a transition amongst others. I believe this might be a similar argument to issue 12530.
UML Superstructure V2.2, Section 17.5.9 RedefinableTemplateSignature. The paragraph in the "Semantics" section RedefinableTemplateSignature mentions the following: All the formal template parameters of the extended signatures are included as formal template parameters of the extending signature, along with any parameters locally specified for the extending signature. I beleive this would imply that the "parameter" feature would need to be derived which it is currently not.
Keyword ambiguity for DataType Section 7.3.11 Describes the use of the 'dataType' keyword (along with Figure 7.36). Whereas, the example depicted in Figure 7.39 shows a DataType with the 'datatype' keyword.
As describe, a "Substitution" looks more like a derived property than like a relationship, except if it must be interpreted as an explicit inheritence restricted to the external contracts (with possible redefinition). The point is that is not clear with the current description
The first sentence of 7.4 states: As was depicted in Figure 7.1, the Profiles package depends on the Core package, .... Figure 7.1 does not shown any dependency between the Profiles package and the Core package
Section 2.2 introduces two compliance levels: L0 and LM. Section 2.3 states: "Compliance to a given level entails full realization of all language units that are defined for that compliance level. This also implies full realization of all language units in all the levels below that level. “Full realization” for a language unit at a given level means supporting the complete set of modeling concepts defined for that language unit at that level. Thus, it is not meaningful to claim compliance to, say, Level 2 without also being compliant with the Level 0 and Level 1." This is confusing as there is no such thing as Level 1 or Level 2 defined. This concept is repeated in section 2.4: "(as a rule, Level (N) includes all the packages supported by Level (N-1))" It may be worth mentioning that the superstructure document will introduce further levels on top of the infrastructure level L0. Also, if I understand it correctly: LM builds on L0, and so does L1. So we have two parallel paths of compliance: L0 <- LM and L0 <- L1 <- L2 <- L3 So how does LM fit in with the L(N) compliant is also L(N-1) compliant scheme? Do you need to specify L2 and LM compliance?
At 03:12 PM 8/13/2008, Pete Rivett wrote: Well-spotted Nicolas: though from your example fragments you’re wrong to say that at 2.2 the ends are given a generic name – they are given a generic xmi:id and no name at all! Both the change of name and (to a lesser extent) xmi:id, without being mandated by an issue resolution are IMHO serious bugs. The xmi:id case is more controversial, since xmi:ids do not in general have to be stable. However, since they are frequently used for referencing the elements from outside the file (e.g. using XMI hrefs) then for standard metamodels I think we should keep them stable. In fact I’d say that we should probably treat this as an urgent issue and produce a new XMI file ASAP. >From the difference between the 2 fragments I spotted another discrepancy/bug in UML 2.2 – there is an incorrect owningAssociation attribute on the Property. This must not be serialized since it’s the opposite of the composite owner of the Property (Association.ownedEnd) and so redundant. Clearly we should do more to perform diffs between the different versions of XMI files in order to catch inadvertent changes such as this. Pete From: Nicolas Rouquette [ mailto:nicolas.rouquette@jpl.nasa.gov] Sent: 13 August 2008 19:15 To: uml2-rtf@omg.org; executableUMLFoundation@omg.org; Conrad Bock; Bran Selic; Ed Seidewitz; Stephen Mellor Subject: unalabelled association-owned memberEnd property names affect the name of an association I noticed strange differences between the XMI serialization of the UML superstructure in: UML 2.1.2, i.e: http://www.omg.org/spec/UML/20061001/Superstructure.cmof UML 2.2 beta1, i.e: http://www.omg.org/cgi-bin/doc?ptc/08-05-12 For example, in UML 2.1.2, we have: <ownedMember xmi:type="cmof:Association" xmi:id="Actions-CompleteActions-A_result_readExtentAction" name="A_result_readExtentAction" memberEnd="Actions-CompleteActions-ReadExtentAction-result Actions-CompleteActions-A_result_readExtentAction-readExtentAction"> <ownedEnd xmi:type="cmof:Property" xmi:id="Actions-CompleteActions-A_result_readExtentAction-readExtentAction" name="readExtentAction" lower="0" type="Actions-CompleteActions-ReadExtentAction" association="Actions-CompleteActions-A_result_readExtentAction"/> </ownedMember> whereas in UML 2.2beta1, we have: <ownedMember xmi:type="cmof:Association" xmi:id="Actions-CompleteActions-A_result_readExtentAction" name="A_result_readExtentAction" memberEnd="Actions-CompleteActions-ReadExtentAction-result Actions-CompleteActions-A_result_readExtentAction-_ownedEnd.0"> <ownedEnd xmi:type="cmof:Property" xmi:id="Actions-CompleteActions-A_result_readExtentAction-_ownedEnd.0" type="Actions-CompleteActions-ReadExtentAction" lower="0" owningAssociation="Actions-CompleteActions-A_result_readExtentAction" association="Actions-CompleteActions-A_result_readExtentAction"/> </ownedMember> In both cases, this association is described in Fig. 11.13 Object Actions (CompleteActions) in a way where the name of an association-owned memberEnd property isn't shown whereas the name of a class-owned memberEnd property is shown according to the conventions specified in clause 6.4.2 of the UML superstructure spec. http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/spec/UML/2.1.2/Superstructure/PDF/ The problem here is that the unlabelled association-owned memberEnd properties have been given generic names such as ownedEnd.0 instead of the convention defined in clause 6.4.2 -- i.e., the name of the class with a lowercase initial. Is it OK for association names to change in this manner from one rev to another or is this a bug? Regardless of whether it is a bug or not w.r.t. current OMG specs, there is certainly a very undesirable consequence in name-level changes between revisions for a given concept when these revisions have not changed the semantics of that concept. Such incidental name-level changes create a lot of problems w.r.t. a stable notion of identity across revisions for detecting semantically-relevant changes from semantically irrelevant changes.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on AcceptEventAction (11.3.2) is unspecified: [1] AcceptEventActions may have no input pins. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [1] AcceptEventActions may have no input pins. self.input->isEmpty()
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on ActivityEdge (12.3.5) is unspecified: [1] The source and target of an edge must be in the same activity as the edge. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [1] The source and target of an edge must be in the same activity as the edge. self.source.activity = self.activity and self.target.activity = self.activity Change the Superstructure XMI accordingly
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on ActivityEdge (12.3.5) is unspecified: [2] Activity edges may be owned only by activities or groups. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [2] Activity edges may be owned only by activities or groups. self.source.activity = self.activity and self.target.activity = self.activity Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on ActivityEdge (12.3.5) is unspecified: Package CompleteStructuredActivities [1] Activity edges may be owned by at most one structured node. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: Package CompleteStructuredActivities [1] Activity edges may be owned by at most one structured node. self.inStructuredNode->notEmpty() implies (self.inStructuredNode.oclAsType(ActivityGroup)->includesAll(self.inGroup) and self.inStructuredNode.oclAsType(Element)->includes(self.owner)) Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on Activity (12.3.4) is unspecified: [1] The nodes of the activity must include one ActivityParameterNode for each parameter. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [1] The nodes of the activity must include one ActivityParameterNode for each parameter. self.node->select(oclIsKindOf(ActivityParameterNode)).oclAsType(ActivityParameterNode).parameter->asSet()->symmetricDifference(self.ownedParameter->asSet())->isEmpty() Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on Activity (12.3.4) is unspecified: [2] An activity cannot be autonomous and have a classifier or behavioral feature context at the same time. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [2] An activity cannot be autonomous and have a classifier or behavioral feature context at the same time. self.isActive implies (self.getContext()->isEmpty() and self.classifierBehavior->isEmpty()) Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on Activity (12.3.4) is unspecified: [3] The groups of an activity have no supergroups. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [3] The groups of an activity have no supergroups. self.group->forAll(superGroup->isEmpty()) Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI
http://www.omg.org/cgi-bin/doc?ptc/08-05-05
http://www.omg.org/cgi-bin/doc?ptc/08-05-12
Nature: Unspecified OCL constraint
Summary:
The following constraint on AcceptEventAction (11.3.2) is unspecified:
[4] If isUnmarshalled is true, there must be exactly one trigger for events of type SignalEvent. The number of result output
pins must be the same as the number of attributes of the signal. The type and ordering of each result output pin must be the
same as the corresponding attribute of the signal. The multiplicity of each result output pin must be compatible with the
multiplicity of the corresponding attribute.
This constraint implicitly requires that the AcceptEventAction.result property should be ordered to enable order-sensitive comparison with corresponding properties in Signal.ownedAttribute.
• result: OutputPin [0..*]
Pins holding the received event objects or their attributes. Event objects may be copied in transmission, so identity
might not be preserved. {Subsets Action::output}
The
-- [4a] If isUnmarshalled is true, there must be exactly one trigger for events of type SignalEvent.
-- [4b] The number of result output pins must be the same as the number of attributes of the signal.
-- [4c] The type and ordering of each result output pin must be the same as the corresponding attribute of the signal.
-- [4d] The multiplicity of each result output pin must be compatible with the multiplicity of the corresponding attribute.
self.isUnmarshall implies
(self.trigger->size() = 1 and let e:Event = self.trigger.event->asSequence()->first() in
e.oclIsKindOf(SignalEvent) and
let s:Signal = e.oclAsType(SignalEvent).signal in
Set{1..s.ownedAttribute->size()}->forAll(i|
let ai:Property=s.ownedAttribute->at(i) in
let ri:OutputPin= self.result->asOrderedSet()->at(i) in
ai.type = ri.type and ri.lower <= ai.lower and ri.upper >= ri.upper))
Discussion:
OCL 101.
Revised Text:
Change the specification of the result property to the following:
• result: OutputPin [0..*]
Pins holding the received event objects or their attributes. Event objects may be copied in transmission, so identity
might not be preserved. This association end is ordered. {Subsets Action::output}
Change the specification of the constraint to the following:
[4] If isUnmarshalled is true, there must be exactly one trigger for events of type SignalEvent. The number of result output
pins must be the same as the number of attributes of the signal. The type and ordering of each result output pin must be the
same as the corresponding attribute of the signal. The multiplicity of each result output pin must be compatible with the
multiplicity of the corresponding attribute.
(self.trigger->size() = 1 and let e:Event = self.trigger.event->asSequence()->first() in
e.oclIsKindOf(SignalEvent) and
let s:Signal = e.oclAsType(SignalEvent).signal in
Set{1..s.ownedAttribute->size()}->forAll(i|
let ai:Property=s.ownedAttribute->at(i) in
let ri:OutputPin= self.result->at(i) in
ai.type = ri.type and ri.lower <= ai.lower and ri.upper >= ri.upper))
Note: if the result property is not ordered, this constraint can be approximated in the following manner:
(self.trigger->size() = 1 and let e:Event = self.trigger.event->asSequence()->first() in
e.oclIsKindOf(SignalEvent) and
let s:Signal = e.oclAsType(SignalEvent).signal in
Set{1..s.ownedAttribute->size()}->forAll(i|
let ai:Property=s.ownedAttribute->at(i) in
let ri:OutputPin= self.result->asOrderedSet()->at(i) in
ai.type = ri.type and ri.lower <= ai.lower and ri.upper >= ri.upper))
Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on ActivityNode (12.3.8) is unspecified: [1] Activity nodes can only be owned by activities or groups. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [1] Activity nodes can only be owned by activities or groups. self.activity=self.owner xor self.inGroup->includes(self.owner.oclAsType(ActivityGroup)) Change the Superstructure XMI accordingly.
Source: UML 2.2 Superstructure document and XMI http://www.omg.org/cgi-bin/doc?ptc/08-05-05 http://www.omg.org/cgi-bin/doc?ptc/08-05-12 Nature: Unspecified OCL constraint Summary: The following constraint on Activity (12.3.8) is unspecified: [1] Activity nodes may be owned by at most one structured node. Discussion: OCL 101. Revised Text: Change the specification of the constraint to the following: [1] Activity nodes may be owned by at most one structured node. self.inStructuredNode->notEmpty() implies (self.inStructuredNode.oclAsType(ActivityGroup)->includesAll(self.inGroup) and self.inStructuredNode.oclAsType(Element)->includes(self.owner)) Change the Superstructure XMI accordingly.
There are underlined lifeline. According to UML 2.2 specfication (chapter 14), lifeline label refrains from underlined notation. It seems these are not appropriate
The sequence expression is denoted as "A1", "B1", "A3". According to the specification, those messages means asynchronous messages. If so, the diagram doesn't show original intention.
Sturcute CompositeStructure::InternalStructure. Is it correct? It seems typo. "CompositeStructures"
there is a following description: "A in package P3(P3::A) represents the result of the merge of P1::A into P2::A and not just the incremnetP2::A." According to definition of Package import, If the name of an imported element is the same as the name of an element owned by the importing namespace, that element is not added to the importing namespace. Therefore, if there is same name A on the Pacakge"P3", P2::A is invisible from P3?
Attribute -> Attributes
"The Attributes owned by the Data Type. This is an ordered collection.
~~~~~~~~~~
Subsets Classifier::attribute and Element::ownedMember."
Attributes->attributes
For example in UML, States, Transitions, Activities,
Use cases, Components, Attributes, Dependencies, etc.
~~~~~~~~~~
In UML2.2, Attribute isn't model element.
This seems incorrect.
This explanation is example, then, it seems term "Attributes" should be suppressed.[3] The query isNavigable() indicates whether it is possible to navigate across the property. Propery::isNavigable():Boolean isNavigable = not classifier->isEmpty() or association.owningAssociation.navigableOwnedEnd->includes(self) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "association", and "owningAssociation" are also associationend on Property. Then, expression "association.owningAssociation" is not appropriate. It seems "association" in the expression should be suppressed.
[4]The query isAttribute() is true if the Property is defined as an attribute of some classifier. context Property::isAttribute(p : Property) : Boolean post : result = Classifier.allInstances->exists(C|c.attribute->includes(p)) This OCL means there is at least one element of Property. Then, it is better to represent as "not classifier->isEmpty, not "Classifer.allinstances" like opertation [3]. It is better to represent similar style in a same block. This issue relates to aleady mentioned issue(Issue 11120). However, it is not exactly same.
Classifier has association end "attribute". The association should have the opposite side of "attribute". Such association end should be "Classifier::attribute". In the case of "Class", "Datatype", "StructuredClassider" (however, there is a typo), "Signal", such element have "Classifier::attribute" association end. However, Interface and Artifact don't have such association end.
"A property related to a classifier by ownedAttribute represents an attribute..." and in its semantics "When a property is owned by a classifier other than an association via ownedAttribute, then it represents an attribute of the class or data type." However, in the case of "StructuredClassifier", "Signal", "Artifact", "Interface". "attribute" is not necessary The specification should modified as followings. p125 L7: "A property related to a classifier by attribute represents an attribute," and p128 L17 "When a property is owned by a classifier other than an association, then it represents an attribute of the classifier."
"clientDependency: Dependency[*] Indicates the dependencies that reference the client." This explanations is described in "Attribute" clause, not Associations" of NemedElment. It seems to be in incorrect clause.
However, according to the class description for Property, Property is "from Kernel and AssociationClass". Property is defined in Interfaces Package. Therefore, it seems Property is "from Kernel, Interfaces and AssociationClass".
1)>[1] The operation allConnections results in the set of all AssociationEnds of the Association. "AssociationEnds" is "Properties", isn't it?
believe we need to raise a new issue to address how problem 11240 was actually addressed in the UML 2.2 spec. If I'm not mistaken, the fix for issue 11240 should involve redefining TemplateParameter::default and constraining the type to Classifier. However, all that was actually done to address the problem was to remove the offending (redundant) "defaultClassifier" property. The original issue: http://www.omg.org/issues/uml2-rtf.html#Issue11240 , makes mention of the redefinition.
The specificMachine association of metaclass ProtocolConformance is of type ProtocolStateMachine, which would seem to prohibit the specificMachine from being a BehaviorStateMachines::StateMachine. However, the text sections of section 15.3.5, including the Description and Semantics sections, are very clear that the conforming StateMachine may be a BehavioralStateMachine::StateMachine, which make sense. So the specificMachine association should be changed to be type StateMachine. Also, Figure 15.5 should be similarly changed.
InterfaceRealization.contract and InterfaceRealization.implementingClassifier currently subset Dependency.supplier and Dependency.client respectively. It seems to be that redefinition is a more appropriate relationship between these attributes, because InterfaceRealization.supplier and InterfaceRealization.client (as inherited) are restricted to the multiplicities of, and will always have the exactly the same values as, InterfaceRealization.contract and InterfaceRealization.implementingClassifier.
To better express links with InstanceSpecifications, InstanceSpecification should be able to reference Slots owned by other InstanceSpecifications similar to an Association's memberEnd. Currently, when modelling an object diagram with a link like the one in fig. 7.54 on p.85, the specification is unclear on which of the involved InstanceSpecifications (Don, Josh, assoc) should own which Slots (father, son). Assuming that the involved association ends are ownedAttributes of the respective classes (Person), one would expect the object specifications (Don, Josh) to have Slots for these ends. Similarly one would expect the link InstanceSpecification to somehow reference its ends. Since a Slot can only belong to one InstanceSpecification, this is currently only possible by duplicating Slots and InstanceValues between object and link InstanceSpecifications (at least that is how e.g. Rational does it). This leads to two problems. First there is of course a lot of redundancy and chances for inconsistency. Second, and more importantly, there is no easy way to navigate from an object InstanceSpecification to the "connected" link InstanceSpecifications. On type level, an association can reference member ends that are owned by other classifiers. For the sake of consistency and simplicity, we would suggest something similar on the instance level for the InstanceSpecification-Slot relationship, i.e. a memberSlot referencing Slots owned by other InstanceSpecifications (maybe in a specialized LinkSpecification). I have created some diagrams to better illustrate the problem, albeit for a different example: - The example: http://www.reckord.de/uml/example.png - What it currently looks like on the meta level: http://www.reckord.de/uml/example-metaobjects.png - What it could look like: http://www.reckord.de/uml/example-meta-fixed.png
There seems to be an inconsistency in the spec. Supersturcture v2.2 ptc/2008-05-xx p 550 The spec mentions: A state with isSimple=true is said to be a simple state. A simple state does not have any regions ***and it does not refer to any submachine state machine.*** It also says in the constraints section ( constraint [4] ) : A simple state is a state without any regions. isSimple = region.isEmpty() The constraint seems to be missing the part about not refering to any submachine state machine.
The ability for an Actor to implement an Interface was added as a result of this issue against the UML2 specification: http://www.omg.org/issues/uml2-rtf.html#Issue8078 Because an Actor is now a BehavioredClassifier it can implement interfaces, but according to the UML superstructure specification, Actors cannot own Operations. This situation seems to contradict the semantics for InterfaceRealization (UML Superstructure v2.1.2 section 7.3.25): "An interface realization relationship between a classifier and an interface implies that the classifier supports the set of features owned by the interface, and any of its parent interfaces. For behavioral features, the implementing classifier will have an operation or reception for every operation or reception, respectively, defined by the interface."
It is not clear whether it is allowed to have a generalization relationship between two model elements that have different stereotypes. Please clarify in the uml specification
Using the profile, an element can have several stereotypes. However, in the metamodel, an element can not have several labels traducing these stereotypes. A traduction in the metamodel of this kind of element (stereotyped several times) can not be made.
Figure 9.48 - The elements defined in the Super package As Classifier is associated to NamedElement's property of visibility, Super package should import NamedElement from the Visibilities package, not Namespaces
Parameter isn't package (Heading 2 level), but class (need to be Heading 3 level under Heading 2 "9.1. BehavioralFeatures package")
Figure 9.20 - The elements defined in the Expressions package Associations • operand: ValueSpecification[*] Specifies a sequence of operands. Subsets Element::ownedElement. {non-unique; ordered}
It is common to model interactions with actors, e.g. to show scenarios how actors interact with the system. For example in the context of a collaboration it is possible to model lifelines that represent system actors. However it is not possible that they receive messages in an interaction. According to constraint [2] in chapter 14.3.20 each message must correspond to an operation or signal. But it is not allowed to have actors with operations or receptions.
Explanation to Figure 7.38 - An example of an instantiate dependency - states: "In the example below, the Car class has a dependency on the CarFactory class. In this case, the dependency is an instantiate dependency, where the Car class is an instance of the CarFactory class." (1) Logically and from the diagram itself, it should be opposite: CarFactory class has a dependency on the Car class. (2) Instantiate dependency does not mean that "Car class is an instance of the CarFactory class". That sentence most likely should read simply as "Car class is instantiated by the CarFactory class".
In Section 9.3.1 the second paragraph starts “A class acts as the namespace ...”. This semantic about nested classes is part of normal classes and should be moved to 7.3.7.
The Presentation Options section of 9.3.1 seems both inappropriately named and in entirely the wrong place. It is about usage dependencies, constructors and instance specifications and should appear somewhere in chapter 7.
Explanation for: "Presentation Options for “coregion area” ... This means that in a given “coregion” area of a Lifeline all the directly contained fragments are considered separate operands of a parallel combined fragment. See example in Figure 14.12." The "Figure 14.12 - Continuation" - seems to have no example of coregion as expected. Example of coregion could be found on "Figure 14.22 - Sequence Diagrams where two Lifelines refer to the same set of Parts", p.519.
In transitionkind Constraints, the document said: [1] The source state of a transition with transition kind local must be a composite state. [2] The source state of a transition with transition kind external must be a composite state. Does these two constraint means that simple state can not have a outgoing transition?
The specification of ClassifierTemplateParameter has a flag allowSubstitutable. The definition of ClassifierTemplateParameter::constrainingClassifier says “If the allowSubstitutable attribute is true, then any classifier that is compatible with this constraining classifier can be substituted”. What does “compatible” mean? If we look in Templates::Classifier we find this: Semantic Variation Points If template parameter constraints apply, then the actual classifier is constrained as follows. If the classifier template parameter: • has a generalization, then an actual classifier must have generalization with the same general classifier. • has a substitution, then an actual classifier must have a substitution with the same contract. • has neither a generalization nor a substitution, then an actual classifier can be any classifier. If template parameter constraints do not apply, then an actual classifier can be any classifier. Firstly, the spec for classifier template parameters needs to clarify what compatible means; and this clarification must surely include the possibility that the relationship between the constrainingClassifier and the template parameter can be an InterfaceRealization as well as a Substitution. Secondly, this text for Semantic Variation Points is weird. Presumably it means that the constraints on substitutability of ClassifierTemplateParameter are a SVP. If so it should say so, and the SVP text should be under ClassifierTemplateParameter. Finally, it appears that given the existence of Substitution, InterfaceRealization is completely redundant. A good simplification would be to eliminate InterfaceRealization altogether; failing that to make it a subclass of Substitution to clarify that it has contract compatibility semantics.
I would like to bring to your attention (as the contact person for the UML standard) a small bug we found with the UML specification: There is no way to specify the behavior of operations which are members of data types such as enumerations. Such operations can be modeled in UML, since each classifier can have operations, and this is useful to describe, e.g. Java enumeration operations. However, they cannot be assigned method behaviors, since nested behavior can only be added to classes. One solution to this would be allowing to nest classifiers in data types - i.e. to copy the association nestedClassifier: Classifier [*] to DataType (just as was done for case for ownedOperation : Operation [*]).
In the "description" section of the Behavior metaclass, there is the following sentence: "A classifier behavior is always a definition of behavior and not an illustration". The consequences of this statement should be explained and especially its impact on the capability of using Interactions for that purpose. A constraint should be added to the specification of the BehavioredClassifier metaclass.
With the increasing use of UML and descendant languages (e.g.., SysML) for more complex diagramming situations, the occasion for crossing lines becomes increasingly hard to avoid. When such happens, it often becomes difficult to determine the correct start/destination of each line. This is compounded by the use of tree structures for the depicting of generalization and aggregation/composition relationships. Whenever two lines cross, there can ambiguity associated with the line path. The UML standard should supply a normative technique to resolve this ambiguity, The introduction of a “jog” - a small curve in one of the intersecting lines – has traditionally be acceptable. Proposed solution: In the diagram appendix, add a paragraph introducing the problem and recommending a standard graphical solution. A diagram may be useful to convey the intent. If a normative solution is not desired, the paragraph can recommend several selected approaches to resolve the disambiguities.
Incorrect: behavior can be shown similarly to Figure 12.29 on page 320, using keywords «precondition» and «postcondition». Correct: behavior can be shown similarly to Figure 12.29 on page 320, using keywords «localPrecondition» and «localPostcondition».
Constraint [2] implies that: "The name of the NamedElement referenced by signature must be the same as that of the Message" The point is that the syntax describe for the signature in the Notation section (p503) cannot ensure that the Message name will be unique inside its Namespace (i.e. its owning Interaction)
The description of Interaction provided by the Semantic section sounds good by itself but is widely inconsistent with the meta-model, according Attributes sections, Association sections and Figures 14.x. For instance: the Semantic section mentions "ordered sets of occurences" that can not be found in the meta-model. It does exist an ordered property in the association between Lifeline and OccurenceSpecification but: first it's not exactly the same thing, second the related property cannot be found anywhere in the meta-classes!... My global feeling is that the chapter 14 of the meta-model is not mature, very (too much?) complex and ambiguous.
EnumerationLiteral is an InstanceSpecification; InstanceSpecification is a DeploymentTarget. This makes EnumerationLiteral a DeploymentTarget, which is clearly nonsense. I strongly question both of these inheritance relationships
Text from the specs states: "Description An interaction is a unit of behavior that focuses on the observable exchange of information between ConnectableElements. ..." "Semantics Interactions are units of behavior of an enclosing Classifier. Interactions focus on the passing of information with Messages between the ConnectableElements of the Classifier." One issue is that in several other places of the specs interactions are described as being "owned" - not "enclosed" - by Classifier, e.g below on p. 492 we read "The classifier owning an Interaction may be specialized, and ..." Another question I have is that semantics of interaction as described now is focusing on passing of information between ConnectableElements of that specific Classifier - but traces of interaction include OccurrenceSpecifications of possibly several participants represented by LifeLines of one to many Classifiers. The case when Classifier interacts only with itself or a single other Classifier should be quite rare. When we have several Classifiers (represented by LifeLines) interacting, that interaction should include ConnectableElements of those several Classifiers involved, unless the "ConnectableElements of the Classifier" are considered to be some transitive closure of all ConnectableElements depicted on the interaction. In other words, I'd clarify both Description and Semantics of Interaction to something like: Interactions are units of behavior of an owning Classifier. Interactions focus on the passing of information with Messages between the ConnectableElements of the owning Classifier and ConnectableElements of other interacting Classifiers. All Classifiers participating in the interaction - including owner Classifier - are represented by LifeLines."
Say we want to expose a ParameterableElement as a formal template parameter. If we want to create the following List<E>, then the template parameter would refer to some parameterable element E whose type we would have to choose (say uml:Class). Now, say we wanted to create List< Interface >, or List < Class >, or List < DataType >. I don't think we would be able to then create TemplateParameterSubstitution for all these elements since the type of formal and actual parameters are inconsistent. The problem is that we must pick a concrete type for that ParameterableElement - we can't for example use Classifier as the template parameter because it's abstract.
In OCL 2.0 specification, section Operation Body Expression, it specifies that expression must conform to the result type of the operation. However, in UML 2.1.2 specificaiton, it is specified that bodyCondition of an operation is a constratin which must evaluates to a boolean expression. The problem is that UML equates the term "constraint" with "boolean-valued expression that holds true at some time." The OCL usage of the term is not so narrow. A constraint is a model element that specifies more precise semantics for another model element than what its structure alone can achieve. So, for example, an attribute constrains its values to conform to some type, but a derivation expression (whose value conforms to the attribute type) more precisely constrains its values. Likewise the operation body expression constrains the value of an operation by computing it from the parameters and the context object. Note that OCL actually calls this constraint a "body expression," not a "body condition" as UML does. OCL's notion of "constraint" even extends to definition of helper operations and attributes. Consider what it means to require boolean values for operation body constraints. They must be formulated like postconditions, as boolean expressions on the "result" variable. In OCL, the body condition does not have a "result" variable; only post-conditions have it. Furthermore, consider an example: an operation phi() defined in the Real primitive type. According to UML's rules, it could be defined like this: context Real::phi() : Real body: result = (1.0 + 5.0.sqrt()) / 2.0 or like this: context Real::phi() : Real body: (result - 1.0) = (1.0 / result) These are isomorphic constraints, but neither is friendly to OCL tool implementations (certainly not the second). According to OCL, the constraint would by formulated like this: context Real::phi() : Real body: (1.0 + 5.0.sqrt()) / 2.0 and there really is no other kind of formulation. IMO, this is much more practical for all concerned. Consider an operation that has parameters, for which I write an ineffectual body constraint like this: context Foo::doSomething(bar1 : Bar, bar2 : Bar) : Baz body: bar1 <> bar2 What does this mean? All in all, it is far mare useful to have an OCL expression that can readily be evaluated to compute the value of the operation. This leaves no room for ambiguity. The UML stipulation that Constraints in all contexts must be boolean expressions, as in operation precondition and classifier invariant context, is unnecessary. What is the benefit? It would be nice to see it removed in UML 2.3.
In the Statemachine diagram in section 15.3.12 diagram 15.42 (and the text above) it is specifying the use of 'final' to define that a redefinable element (state or transition in this case) can not be redefined. However, there is no other mention of this 'final' in the rest of the document (maybe its leftover from before?). RedefinableElement's have an isLeaf attribute which is used to determine this property. Therefore we should probably use {leaf}.
The use of "internal" transition is used incorrectly in many places where "local" should be used. The specification should be updated to correct this inconsistencies. For example, on page (575/748) of UML2.2, it states: "An entry pseudostate is used to join an external transition terminating on that entry point to an internal transition emanating from that entry point. An exit pseudostate is used to join an internal transition terminating on that exit point to an external transition emanating from that exit point" However, internal transitions are not meant to be used in this context and must be connected directly to a state. A 'local' transition is used to navigate to a subvertex which is more the use case being described here.
UML2 has Receptions which can be included in realized/provided Interfaces to indicate what Signal events a Classifier is able to receive. But it isn't clear how a Classifier would indicate in its interfaces what events it might send/generate, and therefore what events a collaborating Classifier connected to this Classifier in some way would need to be prepared to handle. UML2 Reception semantics should be updated to indicate Receptions can appear in either Realized/provided or Usage/required Interfaces. A Reception in a required interface would indicate a signal event the owning classifier might send through a SendSignalAction or BroadcastSignalAction. This would provide all the interface information needed on both sides of a connector to know what SignalEvents might be sent and/or received
I propose to define the Comment as a NamedElement instead of Element. The SysML and UPDM working groups identified that it is necessary that comment based model elements have a name, could be packaged and identified.
The spec states: "An entry point pseudostate is an entry point of a state machine or composite state. In each region of the state machine or composite state it has a single transition to a vertex within the same region." This is slightly ambiguous as one could take it to mean that the region is the region who owns the target dirctly. This would allow one to create the case where we can create an invalid active state configuration. consider: S1's region1 owns S2 and S3 who both have sub verticies. An entry point on S1 should only be able to target one vertex with region1 (either a direct or deeply nested vertex), but not more then one. If the assumption by a user was made that both the verticies in S2 and S3 could be targeted (since they are owned by different regions) then the tooling would essentially be allowing concurrent entries into a single region. Where as, really we need to specify more along the lines of that the LCA region of the source and target may have at most a single transition. An entry point pseudostate is an entry point of a state machine or state. For each transition that targets a vertex in region R, there may not exist another transition targeting a vertex in region R nor any region contained within R. Also, given the alternate semantics of entering a state (that regions don't have to be entered and the state itself can remain active), entry points should not be required on composite states only. Connecting to an entry point with no outgoing transitions or to the state border itself should be considered semantically the same. One usecase for this is that users may define entry/exit code on the state itself to preform some basic behavior, but in redefined contexts want to enhance the behavior by continuing that transition to a sub vertex.
Assuming one Collaboration represents mandatory features and another Collaboration wants to extend that. It seems natural to express only the differences in the second Collaboration and to use roleBinding to between properties of the extending Collaboration to properties of a CollaborationUse of the first. The implication is that properties of the first collaboration are included as part of the second collaboration, since the CollaborationUse is essentially an instantiation of the first Collaboration in the context of the second. The roleBindings indicate were instances of the properties of first are constrained to be instances of the second Collaboration. This usage would require that the 2nd constraint be modified and that properties of the CollaborationUse of the first Collaboration are interpreted as being incorporated into the second Collaboration except when there is a roleBinding between the properties of the first and second Collaborations.
The UML specification is not clear what it means for an element with a fully qualified name to appear within a package shape on a package diagram. 7.3.37 says “The members of the package may be shown within the large rectangle”. So it seems to rest on the definition of members, which is the union of owned members and imported members. This is somewhat reinforced by “elements that become available for use in an importing package through a package import or element import may have a distinct color or be dimmed to indicate that they cannot be modified”. Note that the definition of ElementImport says “identifies an element in another package, and allows the element to be referenced using its name without a qualifier”. So we’d expect imported elements to be dimmed, but not have a name qualification (a poor user experience if I may say so). Subsidiary issue: Why does it say that they cannot be modified? This is a matter for tool implementers, and has no place in the UML spec. But elsewhere it says “The public contents of a package are always accessible outside the package through the use of qualified names”; So how should I interpret the appearance of an element shape within a package shape when the element has its fully-qualified name (as frequently appears in the UML spec itself)? Does this imply the existence of an import or not? According to “The public contents of a package are always accessible outside the package through the use of qualified names” no import is necessary; according to “The members of the package may be shown within the large rectangle” an import is necessary. At the very least this should be clarified. More deeply perhaps the issue is that the definition of the term “referencing an element” is very dubious. Does appearing on a diagram involve referencing? How about appearing in tool windows, type pickers, etc?
The UML XMI fails to include an ownedRule for the Constraint specified for an OpaqueExpression
The XMI for the various operations integerValue, booleanValue, stringValue and unlimitedValue fails to include a "lower" attribute, so the default of [1..1] is assumed.
In the XMI, Ownerships::Element fails to include a superClass attribute for Elements::Element
In the XMI, Ownerships::Element erroneously includes an association for ownedComment. Similarly, the XMI for this package includes an association A_ownedComment_owningElement. These more properly belong in the Comments package of Abstractions.
(This is quite a nasty and significant issue that arose from discussions of issues raised on the UPDM profile. It may well be declared as Urgent.)
(start of issue)
The Profiles chapter claims in a few places (with an example in Figure 18.16) that it’s possible to have a single Stereotype extend many metaclasses. However this is contradicted by the description of Stereotype semantics defined by means of a MOF metamodel equivalent (in Figure 18.4) which shows a ‘base_Interface’ 1..1 composite ownership property on the Home Stereotype. Which makes intuitive sense since you cannot have a free-floating stereotype instance (unattached to any element). However in the case of a Stereotype extending 2 metaclasses this would result in it having 2 mandatory composite owners (e.g. for the example in Figure 18.16 base_Class and base_Component) – which is not permitted (you could never have a valid model since an instance can only ever have one composite owner) and would not make sense (it would require each instance of the Stereotype to be attached to 2 distinct model elements – each property is mandatory).
This 1..1 property is also reflected in the XMI serialization of a Profile (in 18.3.6) that makes the multiplicity of the base_Interface property 1..1 (by default). And in the Profile XSD where the xsd:element and xsd:attribute are again 1..1 (by default).
Note that this issue also arises when a Stereotype inherits from another Stereotype and they both extend different metaclasses. This situation could however be addressed in the restricted case that one metaclass is a specialization of the other and by declaring that one property redefined the other. For example assume we modify Figure 18.16 to have an additional Stereotype SuperClock which generalizes Clock and extends Class (instead of Clock directly extending Class). We could then define that Clock::base_Component {redefines} SuperClock::base_Class. Thus the Stereotype Clock ends up with only one composite owner property.
It seems there are two main options, one with variants, for addressing the general problem:
A) Prohibit a stereotype extending more than one metaclass. Or restrict to the special case above where one base_X property can redefine the other.
I’m not sure how useful it is to have Stereotypes extending multiple metaclasses anyway since one could always declare common properties on an abstract Stereotype with specialized concrete stereotypes each extending a single metaclass. Extending multiple metaclasses also gives rise to potential problems of how to express constraints – which typically require navigation to the extended element and use of its properties: if there are multiple such navigations and different properties at the target element this becomes tortuous to say the least. However I’m sure there are such profiles out there so this will ‘break’ those (despite the fact that they are inherently ill-formed anyway according to profile semantics)
B) Modify the ‘MOF equivalent metamodel’ and the XMI and XSD rendition of Profiles to make the base_X property 0..1 instead of 1..1. This would need to be combined with a somewhat-tortuous-to-express (especially if there are more than 2 metaclasses extended) constraint that exactly one of the base_X properties (including those inherited from other Stereotypes) must be non-empty. And this constraint could not be expressed in the XSD (not that XSDs are very good for validation anyway).
C) A variant of B) is to make the base_X property optional only if the Stereotype extends more than one metaclass (including those inherited). This would minimize the impact for the vast majority of existing profiles. However there are complications. In particular it would require redefinition of properties from general stereotypes which extend a single metaclass. In the above extended example with SuperClock, since that extends only one metaclass then SuperClock::base_Class would be defined as 1..1 as in the current specification. However Clock, in addition to defining Clock::base_Component[0..1] would also require Clock::base_Class[0..1} {redefines} SuperClock::base_Class. This however only works because Component specializes Class. In the general case (for example if SuperClock extended Package) then redefinition would not be possible and SuperClock::base_package would have to be changed to be optional. This violates the general design principle that extending something should not change it.
D) Due to the complications with C), a further variant of B) is to make explicit the multiplicity of the base_X property, in the same way that it can be made explicit for {required} stereotypes. So SuperClock::basePackage may be explicitly declared to be 0..1. If defaulted to 1..1 then that prohibits it from being specialized – except by a stereotype which extends a subclass of Package and {redefines) SuperClock::basePackage with a [0..1] property. So that makes the use of [1..1] for base_X the equivalent of declaring in Java that the Stereotype is ‘final’ and cannot be extended.
To summarize the impact of these options on existing profiles:
A) Requires a change only for Stereotypes that extend more than one metaclass (directly or indirectly) and probably requires new Stereotypes to be created to cover the multiple metaclasses. In those cases it will have an impact on models applying those Steretypes (to migrate to the new Stereotype) but this is a transformation that can be easily automated.
B) Requires a change to the XMI serialization of all Stereotypes in all existing Profiles (though not models applying those profiles) and their XSD files
C) Requires a change only for Stereotypes that extend more than one metaclass (directly or indirectly) and requires a change to the XMI serialization of their profiles and XSD but for those stereotypes only and possibly their general stereotypes (which could be in another Profile: I think though the only case I’m aware of that does this is UPDM itself which has not yet been Finalized).
D) Has the same impact on existing profiles as C), but has the benefit of simpler and more predictable generation rules.
Option A) has the advantage of retaining the current simple 1..1 structural constraint which is amenable to MOF and XSD validation without the need for OCL support. The other options make it harder to validate that an instance of a stereotype is applied to exactly one instance of a UML metaclass.
(end of issue)
Specification: UML 2.1 Beta 1 (2008/05/01) Section: 12.2 Activities (Abstract Syntax), Figure 12.18 Summary: This figure shows Parameter::effect : ParameterEffectKind in a way that suggests that its multiplicity is [1..1] when in fact it is [0..1]. Also, the figure incorrectly shows an Eclipse ECore stereotype, <<eAttribute>>. Proposed Resolution: In Figure 12.18: - Remove the <<eAttribute>> stereotype notation for the Parameter::effect attribute - Show the multiplicity of the attribute explicitly, i.e.: effect : ParameterEffectKind [0..1]
text on page 144: "Package diagram The following nodes and edges are typically drawn in a package diagram: • Dependency • Package • PackageExtension • PackageImport" Search in the document for "PackageExtension" produces a single result on this same page, which means that the term "PackageExtension" is no longer defined. Most likely, the text above should have "PackageMerge" instead, smth like: Package diagram The following nodes and edges are typically drawn in a package diagram: • Dependency • Package • PackageMerge • PackageImport
"Table 7.3 - Graphic paths included in structure diagrams" on pp.143-144 includes PackageImport but does not include ElementImport, described in "7.3.15 ElementImport (from Kernel)". It is also missing on p.144 in: "Package diagram The following nodes and edges are typically drawn in a package diagram: • Dependency • Package • PackageExtension • PackageImport" It should look smth like: "Package diagram The following nodes and edges are typically drawn in a package diagram: • Dependency • Package • PackageMerge • PackageImport • ElementImport
14.3.10: says “An ExecutionSpecification is a specification of the execution of a unit of behavior or action within the Lifeline. The duration of an ExecutionSpecification is represented by two ExecutionOccurrenceSpecifications, the start ExecutionOccurrenceSpecification and the finish ExecutionOccurrenceSpecification.” However slightly lower down it says “The trace semantics of Interactions merely see an Execution as the trace <start, finish>. There may be occurrences between these. Typically the start occurrence and the finish occurrence will represent OccurrenceSpecifications such as a receive OccurrenceSpecification (of a Message) and the send OccurrenceSpecification (of a reply Message).” These appear to be directly contradictory. Is it necessary for the start and finish occurrences of an ExecutionSpecification to be ExecutionOccurrenceSpecifications? Is it valid to have a MessageOccurrenceSpecification at the start and finish of an ExecutionSpecification? Is it valid to have both a MessageOccurrenceSpecification and an ExecutionOccurrenceSpecification representing the start/end of a ExecutionSpecification? Are Message reception and Execution commencement the same or different events? Also the multiplicity on the source (non-navigable) end of ExecutionOccurrenceSpecification.Execution is 1, which makes the model clearly invalid. I believe it should either be 2 or 0..2, depending on the answers to the questions above.
Section 14.3. 18 says “An InteractionUse refers to an Interaction. The InteractionUse is a shorthand for copying the contents of the referred Interaction where the InteractionUse is.” What is the relationship of the Lifelines in the used interaction to those in the using interaction? Are they supposed to be the very same lifeline instances, or are they matched by name?
Since the dot notation was introduced to represent ownership of association ends separately from navigability, it appears that the following is the case: a navigable association end that is owned by the association does not appear in the namespace of the class from which it is navigable. How, then, can it be said to be navigable? I believe that all navigable ends should appear in the namespace of the class from which they are navigable, regardless of who owns the ends.
Specification: UML 2.2 Beta1 (2008/05/01) Section: 9.3.11 Port Summary: Consider the MARTE2 FTF proposal developed in the resolution to MARTE issue 11820 in the scope of the tactical resolutions being developed for clauses 8 and 9 of the UML superstructure specification for the UML 2.3 RTF. The MARTE resolution to issue 11820 attached is available in ballot1 of the MARTE2 FTF as “issue11820 resolved.doc” here: http://www.omgwiki.org/marte-ftf2/doku.php?id=marte_ftf2_ballot_1
The following paragraph appears in 7.3.3: “An association with aggregationKind = shared differs in notation from binary associations in adding a hollow diamond as a terminal adornment at the aggregate end of the association line. The diamond shall be noticeably smaller than the diamond notation for associations. An association with aggregationKind = composite likewise has a diamond at the aggregate end, but differs in having the diamond filled in.” aggregationKind is a property of Property, not of Association, so this paragraph is incorrect.
Section 14.3.16 says “An InteractionOperand is contained in a CombinedFragment.” Yet the abstract syntax figure 14.7 shows that an InteractionOperand may be contained by a CombinedFragment, or may (via inheritance) be owned by an InteractionOperand. These are inconsistent and the specification should make clear which is correct.
In the paragraph describing Figure 2.2, the text refers to "four packages". Figure 2.2 contains more than four packages. The corresponding figure in Version 2.0 of the Superstructure displayed four packages; presumably the text wasn't updated along with the figure.
Paragraph 1, which appears to be copied from the Superstructure, is incorrect in this context. The Superstructure has compliance levels L0-L3, but the infrastacture only has L0 and LM. The paragraph needs to be rewritten.
Paragraph 1: The text states that Figure 7.1 shows a dependency between Profiles and Core. Figure 7.1 shows no dependency.
Should this section be numbered 9.1.2? Parameter is part of the BehavioralFeatures package.
Paragraph 5: The text states that class Comment has no generalizations. This conflicts with Figure 9.10 on p. 37.
The "Generalizations" heading is missing before the "ValueSpecification" bullet.
Two issues regarding Figure 10.2: 1) What is the "<<eAttribute>>" stereotype that's applied to Comment::body? I can't find a definition for it elsewhere in the document. 2) Why aren't the NamedElement::name and Comment::body attributes suffixed with "[0..1]"?
Should the definition of Element state that it reuses the definition of Element from Abstractions::Elements?
The section title is "Core::Profiles". In Figure 1 on p. 27, "Core" and "Profiles" are top-level, sibling packages (and the previous paragraph states as much). Which is correct?
Figure 13.2 shows class InfrastructureLibrary::Profiles::Element. Section 13 doesn't define a class named Element. The "Generalizations" on p. 185 says it generalizes Core::Basic::Element. Is that correct? Other classes in Core::Profiles generalize a class from Core::Constructs
Figure 13.2 shows an association between ProfileApplication and Profile that has role "appliedProfile". The text on p. 196 states that the role is "importedProfile". The respective statements of subsetting also do not correspond.
In paragraph 2, the package reference to InfrastructureLibrary::Constructs::Class omits intermediate package "Core".
In paragraph 4, the text should read "Class has a derived association ...". Currently, the sentence is missing "a".
In the Attributes section, "integer" should be capitalized
In the "Associations" part of the "9.10.3 Slot" chapter/section the text : "• value : InstanceSpecification [*]" should be changed to : "• value : ValueSpecification [*]" according to the diagram provied at page 54.
Concrete specialization of the Relationship meta-class are missing. Except few cases restricted to very specific usages (import/merge, association), and according to the current meta-model, all concrete instaciations of Relationship are Dependencies. This situation has an undesirable side-effect in UML models but also in some UML profiles like SysML and MARTE. Indeed, specialized or extended relationships like Deployment or Allocation generate unexpected dependencies between related elements. A solution might be to add a concrete (Directed)Relationship meta-class in the meta-model. The concept of "Allocation" is very generic and might provides that meta-class. It would be a convenient generalization for Deployment.
Figure 18.2 (which describes the contents of the Profiles package) is currently misleading. On this diagram the majority of the elements have their specializations to infrastructure elements shown (either directly or indirectly). However, Class and Package (which are also infrastructure specializations) do not have their specializations shown. This makes them appear to be the superstructure Class and Package when they aren't (as the diagram is being shown in the context of the superstructure specification). I suggest that you add the missing specializations to make the diagram clearer. Due to the differences between infrastructure Class and superstructure Class, you wouldn't want to confuse them.
chapter 2.2, p.3 Last paragaph, second sentence: "Note that each of the four packages..." There are more than four packages.
p.4, fig 2.2. The package L0 is missing which should also be merged into L1.
there is an issue within UPDM with profile diagrams. As there are multiple stereotypes in the diagrams, showing metaclass and extension clutters the diagrams. They become literally unreadable in the spec as they need to fit in the page, since every element takes addition space for extension: In MagicDraw, we have such notation: It saves time, is intuitive, but this is non standard thing, so we cannot use it in UPDM. I would like to raise an issue on the notation of extended metaclass, but I'm open for discussion :)
Third paragraph below Figure 18.8, second word: isStrict instead of isStric
Remove the $ character in 'extension$_' stereotypeName
Figure 18.8 includes a Metamodel formalism which has never been introduced, in particular with respect to customized metamodels. The presentation as a package with a triangle is new at this point. Although the concept of a metamodel is verbally explained in the Infrastructure, there is no abstract syntax. It becomes implicitly clear that a metamodel is a package. I suggest to insert a definition of a Metamodel as a subclass of Package in the Infrastructure document or in the Profiles chapter of this document. This also allows to explain what is meant by "applying a metamodel". Also, the term "a UML2 metamodel" (p. 666) is unclear, taking into account that UML2 itself is a metamodel. This all should be clarified due to the importance of the metamodel concept in this chapter. The same applies to the respective chapter of the Infrastructure document.
The XMI document contains "<ownedMember>" elements which should be "<packagedElement>" due to the change in the abstract syntax (see Fig. 18.2). Actually, Eclipse UML support correctly exports "<packagedElement>". The same holds for all other XMI documents.
Figure 18.9 shows a presentation option for an Interface which has not been introduced before (circle within box)
The example in Figure 18.11 is badly designed in multiple ways and is strongly misleading. Although it serves to explain the package import, it should not suggest an improper application of stereotypes. The stereotype defined here (Device) holds attributes which are not typical for devices as such. For instance, a device is not expected to have a color or volume. It may make sense to apply this stereotype to a class of TVs, but not to a class of dishwashers, for example. A better disctinction would be electrical versus non-electrical devices, or handheld versus non-handheld. Second, the attributes as shown here refer to properties which are significant for instances, not for classes. The example basically shows that we can create a TV class, declaring this to be a device. The Factory package shows an instantiation, setting the volume to some value, but omitting the remaining attributes - which *must* be set as well. The volume parameter for a class of TVs is questionable - what should it mean? This may lead the reader to believe that the volume parameter is meaningful for instances of the model element, although it is associated to the stereotype instance which is associated to the model element. Basically, the element in the Factory package denotes the class of all TVs whose volume is set to 10. This still does not imply a meaning for the instances.
Figure 18.15 does not reflect the example before. The property names "wrap" and "resolution" do not match. Moreover, a link is missing from _:Extension_ to _:Class_ which has the "metaclass" and "extension" as a role names
Replace "extensionClock" with "extension_Clock" and "baseClass" with "base_Class"
The reader may be led to believe that the application of the stereotype <<clock>> changed the model by adding an operation "Click" to the class StopWatch. It should be clarified that the operation must be owned by the StopWatch even without applying the stereotype. The stereotype instance may, of course, be associated to this operation, and serves as a pointer, for example, to be used in model transformations. Figure 18.18 does not provide this information; it shows the result of the application and not the state before.
URIs do not refer to existing resources (404 errors)
Page 19 and 20 of PDF. Description of Level 1 diagram does not make sense with respect to figure 2.2. "...packages merged into Level 0 and their contents are extended...," yet packages listed on figure 2.1 (Level 0 diagram) are not shown in figure 2.2 and no <<extend>> relationship is shown. Even a <<merge>> relationship between L1 and L0 would seem clear except for the defect noted next. "Note that each of the four packages shown in the figure...," but I see twelve packages shown in figure 2.2.
Page 24 of PDF. Table 2.2 Example feature support statement references Note (4) and Note (5). Notes only number 1 - 3. There is no Note (4) nor Note (5).
In the specification there are numerous places where associations between UML elements have only one, navigable role. This seriously restricts the ability of derived properties that are added as part of a profile. Though most tool vendors implement bi-directional relationships for everything anyway, this doesn't help at all when you're trying to define the implementation of the derived property (i.e. tag), as part of a property. It is my belief that all associations in UML should be bi-directional to support a method of non-ambiguous definition. A couple of obvious examples are: 1. Navigating from a realizing relationship to a realized InformationFlow. 2. Navigating from an ActivityEdge to an Action via a Pin.
Figures 9.17 and 9.19 and related text show that an Engine requires Power on the same port as it provides a powertrain. This makes no sense conceptually – an engine does not require power from its powertrain, it delivers power to its powertrain. Modify the examples so they make sense.
Figure 9.19 shows some kind of "dependency" between interfaces, so if that means Usage, <<use>> keyword must be used
Clarify how the provided and required interfaces of a Port are calculated when the type of a Port is a Component or a Class with Ports
The OCL for /required interfaces of Component is using ports.provided instead of ports.required
To properly and unambiguously constrain which Region 'should' own a transition, requires that the transition kind be used (further work on issue 10498). The current definition of a 'local' transition does not allow the case to have a local transition whose target is a composite state and source is nested within that composite state. It should be possible to assign this kind of transition local semantics, i.e., the composite state will not be exited nor entered; only the nested configuration of composite state will be affected as a result of exiting the nested source state and establishing a configuration for the composite state itself, i.e., the target.
In the spec, there is a constraint on TemplateParameterSubstitution, as follows: actual->forAll(a | a.isCompatibleWith(formal.parameteredElement)) "actual" and "formal" are TemplatableElement. So looking up "isCompatibleWith" definition in the spec, I find this: The query isCompatibleWith() determines if this parameterable element is compatible with the specified parameterable element. By default parameterable element P is compatible with parameterable element Q if the kind of P is the same or a subtype as the kind of Q. Subclasses should override this operation to specify different compatibility constraints. ParameterableElement::isCompatibleWith(p : ParameterableElement) : Boolean; isCompatibleWith = p->oclIsKindOf(self.oclType) This means if I defined a class template with a template parameter linked to Interface A (a ParametrableElement), and I used this interface to type a property inside the class template, that I cannot substite the interface with Class B that realizes Interface A, because Class B and Interface A do not have compatible kinds (metaclasses). Is this what the constraint is saying? Is this Valid?
Although I have read the sections in Infrastructure that talks about the meaning of association redefinition and subsetting, and I understand it for the most part, I find myself not sure sometimes which one to use when modeling associations that need to be specialized further down an inheritance hierarchy. This happened to me as I was modeling some parts of the new Diagram Definition metammodel. For some cases, it is obvious what to do like when you have an association with * multipclity that you expect to be populated differently down the hierarchy so you make it "derived union" in anticipation of subclasses subsetting it. However, for an association with 1..1 or 0..1 multipclity that you expect it to be specialized, I am not sure whether to declare it as derived union or as a regular association (in the latter case, I expect it to be redeined). These features have very powerful yet not much understood semantics by general practitioners, evident by them mostly being used by metamodelers like ourselves, but not by average users of UML (who understand the difference between is-a and has-a relationships for example and use them extensively). It is unfortunate, since these association semantics do have a good mapping to some popular programming languages (like Java as evident by the Eclipse UML2 implementation) and can help modelers intending to generate code from models had they know how to use them properly. Maybe we need some section in the spec giving a practitioner some guidance in when and how to use these concepts based on different situations that go beyond explaining what they are for?
looked at the 7 OCL constraint failures reported in Test Case 2. There are 5 different kinds of constraints that failed. In summary I found:
- In 2 of these it appears that the model, valid.xmi, is wrong.
- In 2 the OCL is wrong. One can be fixed. The other should be removed from the UML spec.
- In 1 I made a mistake when correcting an unrelated problem in the OCL.
I'll update the Validator. If my conclusions below are correct, someone should update valid.xmi too.
Details below:
(Model 'TestCase2')
Summary of Model Content:
Total objects: 94.
UML objects: 94
SysML objects: 0
The model: <uml:Model TestCase2, id=1>
Object Inventory
Summary of Warnings:
* Referent not found: 0
* Unresolved URI used for object identification: 0
* Set members not unique: 0
* Missing mandatory value: 0
* No class with name specified: 0
* Property not found: 0
* Cannot infer class of object: 0
* Multiplicity violation: 0
* Type violation: 0
* Invalid stereotype application: 0
* No object for stereotyping: 0
* Creation of abstract class: 0
* OCL constraint violation: 7 <================
* OCL execution errors: 3
* OCL errors while evaluating derived attribute: 0
* OCL errors due to missing derived attribute specifications: 315
* Identical XMI attribute xmi:id used by multiple XML elements: 0
* Expected a uml:PrimitiveType: 0
* XMI attribute xmi:id references excessive space chars: 0
OCL constraint violation (7)
There are 5 variations of this error:
1 instances of this:
The constraint Property.redefined_property_inherited() was violated.
View Instance 1
2 instances of this:
The constraint NamedElement.has_no_qualified_name() was violated.
View Instance 1
1 instances of this:
The constraint Constraint.value_specification_boolean() was violated.
View Instance 1
1 instances of this:
The constraint Interface.visibility() was violated.
View Instance 1
2 instances of this:
The constraint RedefinableElement.redefinition_context_valid() was violated.
View Instance 1
The constraint Property.redefined_property_inherited() was violated.
This one on instance 84, a Property named "redefiningProperty"
The constraint is:
redefinedProperty->notEmpty() implies
redefinitionContext->notEmpty() and
redefinedProperty->forAll(rp|redefinitionContext->
collect(fc | fc.allParents())->asSet()->
collect(c| c.allFeatures())->asSet()->includes(rp))
... 84.redefinedProperty is not empty, but 84.redefinitionContext is empty.
In as far as this constraint is what was intended, the validator is doing the right thing. The file should specify a redefinition context. If you believe the contraint or my conclusion is incorrect, let me know. Otherwise, shall I'll write an issue against the testcase?
The constraint Interface.visibility() was violated.
This one on instance 29:
The constraint is:
self.feature->forAll(f | f.visibility = #public)
self.feature contains one instance, named "operation1", and its visibility is not set. In as far as this constraint is what was intended, the validator is doing the right thing. If you believe the constraint or my conclusion is incorrect, let me know.
The constraint NamedElement.has_no_qualified_name() was violated.
This one is my mistake. I corrected an error in the derivation of qualified names, and in an unrelated act, placed that "self.name" text before the endif below. It was Set{} and should be Set{}. I'll fix the OCL in Validator and put out a new version.
result = if self.name->notEmpty() and
self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()
then self.allNamespaces()->iterate( ns : Namespace;
result : String = self.name | ns.name.concat(self.separator()).concat(result))
else self.name endif <=== should be Set{}
The constraint Constraint.value_specification_boolean() was violated.
The constraint is:
self.specification.booleanValue().oclIsKindOf(Boolean)
The function booleanValue():
result = value
It looks like this intends to perform runtime evaluation of the OCL string in the specification property (which should more accurately be specification.body, anyway). Technically, I could do this, but there is no way to describe the evaluation in OCL, and I wouldn't really want to execute arbitrary code on my server.
I will mark this OCL as an error, and have it return True. This OCL should be removed from the UML spec.
The constraint RedefinableElement.redefinition_context_valid() was violated.
After some digging I found that the definition of isRedefinitionContextValid, which is called by this was:
redefinitionContext->
exists(c | c.allParents()->
includes(redefined.redefinitionContext))
But redefined.redefinitionContext is a Collection, so the use of includes here is not correct. It should be:
redefinitionContext->
exists(c | c.allParents()->
oclIntersection(redefined.redefinitionContext)->notEmpty())
Things work fine with this correction.
Here are some (hopefully editorial) errors in the figures in the recent UML 2.2 release, document 09-02-02. A conscientious OCUP candidate brought the first of these to my attention. Figure 6.2: What is the significance of the red color of the symbols and arrows? If none, they should be black. Figure 14.1: The <<merge>> arrows are black, as is most of the rest of the figure, but the <<import>> arrows are red. This confuses at least one conscientious OCUP candidate who wrote in asking the significance of the color in the figures. i.e. Are <,import>> arrows supposed to be Red? Now I'm going back in the spec and checking all of the Abstract Syntax sections for color. Here we go... Part I, Figure 1, on page 21, also has red <<import>> arrows. Figure 8.1: Here, one of the <<merge>> arrows is red. Figure 9.1: The StructuredActivities box outline is maroon. Figure 10.1: Red <<import>> arrow Figure 11.1: Red <<import>> arrows Figure 12.1: Two boxes have red outlines and yellow fill. (Ouch!) Lots of red arrows. Figure 15.2: Red <<import>> arrows Figure 17.1: Red <<import>> arrows Figure 18.1: Red <<import>> arrows That's all I found. Hopefully it won't take a bunch of votes to turn all of these lines black
It is not clear when the circle plus notation is available for showing containment. Can it be used for showing nested class, packages, ownedBehaviors, etc.? Any containment association in the metamodel?
Section 7.3.37, Notation indicates that "The members of the package may be shown within the large rectangle. Members may also be shown by branching lines to member elements, drawn outside the package. A plus sign (+) within a circle is drawn at the end attached to the namespace (package). ". It is unclear if this is intended to apply to any Element owner/ownedElement relationship (such as nested classes, owned behaviors, etc.) or only to packages. Some vendors do support circle-plus notation to depict metamodel containment, others don't. If it applies only to packages, then what is the notation for these other membership associations?
Figure 7.38 needs to be revised. The arrowhead on the dependency of Figure 7.38 is on the wrong end. The example it illustrates is not consistent with software engineering practices and is consequently ambiguous and misleading and should be revised. These errors lead to endless confusion and debate among UML modelers as to the correct usage of the standard notation for dependencies. p.62 Notation, says, "The model element at the tail of the arrow (the client) depends on the model element at the arrowhead (the supplier)." The example of Fig. 7.38 says, "the Car class has a dependency on the CarFactory class. In this case, the dependency is an instantiate dependency, where the Car class is an instance of the CarFactory class." These sentences should be revised. Suggested wording: "the Car class depends on on the CarFactory class. In this case, the dependency is an instantiate dependency, where the Car class is instantiated by the CarFactory class. That is, the Car class depends on the CarFactory class to produce instances of Car, i.e., to produce cars."
Actor constraint [1] says: self.ownedAttribute->forAll ( a | (a.association->notEmpty()) implies ((a.association.memberEnd.size() = 2) and (a.opposite.class.oclIsKindOf(UseCase) or (a.opposite.class.oclIsKindOf(Class) and not a.opposite.class.oclIsKindOf(Behavior)))) But Actor has no ownedAttribute property, so this constraint is ill-formed.
Issue on UML 2.2 Superstructure, Section 7.3.32: 1. There are 2 constraints numbered [1] 2. The 2nd of these is: lowerBound()->notEmpty() implies lowerBound() >= 0. However the way lowerBound() is defined (operation [4]) means it can never be empty: lowerBound = if lowerValue->isEmpty() then 1 else lowerValue.integerValue() endif It makes more sense to have the constraint condition apply to the stored lowerValue. i.e. lowerValue()->notEmpty() implies lowerBound() >= 0 3. Likewise constraint [2] should be: upperValue()->notEmpty() implies upperBound() >= lowerBound() 4. Note that this omits the test currently in constraint for lowerValue notEmpty since lowerBound will then default to 1 – and it’s necessary to have the constraint check that upperValue is not less. 5. /upper and /lower are defined as [0..1]. However since they are defined in terms of upper/lowerValue – which always has a value - then they will never be empty so should be declared as [1].
The diagram on page 50 shows that a Classifier is generalized from Type , whereas the accompanying text states that Classifier is generalized from Type AND Classifier (as Specialized). Should Classifier (as Specialized) be added to the diagram? Thanks, Paul
The diagram on page 83 states that Classifier generalises Namespace, but the text of 9.19.1 states that Classifier (as specialized) generalises Classifier. Which is it? Should it be both?
Am I wrong or is there actually something inconsistent in the specification around the concept of "visibility"? As I underlined for the ballot 6 vote, the current specification explicitly states that Element/PackageImport has no impact on element visibility. Cf. my comments posted on the 27th of April about issue #11567: "According to the current definition of the visibility concept, my understanding is that it's neither necessary nor possible to use Import relationships to make an element "visible" (i.e. available). The specification explicitely states that : * an ImportedElement can only have a public visibility or no visiblity at all (cf. ElementImport, constraint #2) * (p111) : "The public contents of a package are always accessible outside the package through the use of qualified names. " * (p66): "The visibility of the ElementImport may be either the same or more restricted than that of the imported element. " Then, the only concrete effect of an Import relationship is to give the ability to refere to an element using its simple name rather than its qualified one." Nevertheless, and even if there is no impact on the resolution, I found this sentence in the discussion of issue #12833 (ballot 8) : ". The names of stereotypes or classes in a parent profile are not visible to a profile nested in that parent profile without a PackageImport"
the definition of nestedClassifier is misleading. Maybe something like: "Classifier definitions owned by the class. Subsets NameSpace::ownedMember" would be better.
Classifier::parents() is defined as "parents = generalization.general". However there is a type mismatch: the operation return type is a Set whereas the expression is a Bag. It should be defined as "parents = generalization.general->asSet()".
Currently is it possible for a Classifier to specialize the same classifier directly more than once, that is, generalization.general contains duplicates. There should probably be a constraint to make this invalid.
Should there be a constraint for extends equivalent to 16.3.6 [4], that extends should be an acylic relationship between use cases?
The semantics of associating a use case with another use case, or indeed anything other than an actor, are unclear. There is a rule specifying that use cases may be only be associated with other use cases with different subjects because they describe a complete usage of the subject. But that doesn't explain what it means to have any association. The only hint is in the notation section that gives some examples as "(e.g., to denote input/output, events, and behaviors)." However these details ought to be part of semantics and expanded on.
In RedefinableTemplateSignature.Associations we have this extendedSignature : RedefinableTemplateSignature[*] The template signature that is extended by this template signature. Subsets RedefinableElement::redefinedElement. It should read “The template signatures that are extended ...” Similarly the constraint says: The inherited parameters are the parameters of the extended template signature. And should read “extended templates signatures”. More seriously, the semantics says nothing about what happens when more than one of the extended template signatures have parameters with the same name. Is it an error? Are they merged (in which case what happens if they are different types)? Are they all there in which case what is the syntax for differentiating them? (e.g. Super1::T : Class, Super2::T : Class)
Based on UML 2.2 Diagram 9.2, it appears that Property is optionally part of StructuredClassifer. Now I understand that Properties may also be part of other things (such as associations and interfaces). But it appears that in all such places such ownership is optional. As Properties are features, looking at the multiplicity on Feature, we see Feature:featuring Classifier is 0..*. This means that Properties (and other features) need not be part of anything. So can you have a “free-floating” property? Where can you put it? Since Properties are not packagable, they can’t be owned by Packages. There are (at least) two ways of solving this (I prefer the first) 1) Make properties packageable. This gives us the advantage of making a package or model-library of constants properties. 2) Fix the hole and make properties required to be owned by something. A nearly identical argument arises from Connectors which also may be free-floating, but are not packageable. In SysML there is some interest in making connectors packageable (possibly as we care not about code-generation in the UML sense) as it would allow us to use Binding connectors (a SysML type of connector that declares equivalence) in package or class (in SysML, Block) diagrams Again there are two ways of solving this (I prefer the first) 1) Make connectors packageable. 2) Fix the hole and make connectors required to be owned by something. A more general solution may be to just apply the solution strategy to features as a whole, which would minimize the changes.
When creating classifier templates, it is possible to have template parameters that are not owned by the classifier, in at least the following situations: 1. When the classifier is a partial binding, i.e. it is bound to a template classifier but not all the parameters are bound 2. The classifier extends a template classifier and has a redefined signature. In these cases, what is the notation for the non-owned parameters? Let’s say, for example, that we define C1[A: Class, B: Class]. Then we create C2<A->G>. Does the notation for C2 show a parameter box with B, indicating that B remains to be bound? Indeed, from a metamodel point of view, is it correct for C2 to have a signature that refers to B as one of its non-owned parameters, or is C2’s signature “derived” according to “In a canonical model a bound element does not explicitly contain the model elements implied by expanding the templates it binds to, since those expansions are regarded as derived.” Similarly, given C1[A: Class, B: Class], let C3 inherit from C1. Does the notation for C3 show a parameter box with A and B? Let C3 inherit from C1 and also be bound to it. Is it possible for the formal parameter A defined in C1 to be substituted by the formal parameter A defined (by inheritance) in C3, according to the statement in 17.5.3: “In case of complete binding, the bound element may have its own formal template parameters, and these template parameters can be provided as actual parameters of the binding”?
Package merge is missing a rule for when two elements have conflicting values for isLeaf, cf. the rule for abstract elements
I noticed that in section 18.3.6 (as well as Infrastructure 13.1.6) the addition operation allOwningPackages is defined in the namespace of NamedElement and not Profile. In the metamodel, this operation is defined in InfrastructureLibrary::Profiles::NamedElement, which is a class that is not defined in the spec doc in clause 18 (neither in clause 13 in InfrastructureLibrary). Shouldn't there be a section NamedElement in clause 18 (superstructure) and clause 13 (infrastructure libary) to define this additional operation, as implemented by the metamodel now? (since the operation is already defined in that namespace)
Although I have read the sections in Infrastructure that talks about the meaning of association redefinition and subsetting, and I understand it for the most part, I find myself not sure sometimes which one to use when modeling associations that need to be specialized further down an inheritance hierarchy. This happened to me as I was modeling some parts of the new Diagram Definition metammodel. For some cases, it is obvious what to do like when you have an association with * multipclity that you expect to be populated differently down the hierarchy so you make it "derived union" in anticipation of subclasses subsetting it. However, for an association with 1..1 or 0..1 multipclity that you expect it to be specialized, I am not sure whether to declare it as derived union or as a regular association (in the latter case, I expect it to be redeined). These features have very powerful yet not much understood semantics by general practitioners, evident by them mostly being used by metamodelers like ourselves, but not by average users of UML (who understand the difference between is-a and has-a relationships for example and use them extensively). It is unfortunate, since these association semantics do have a good mapping to some popular programming languages (like Java as evident by the Eclipse UML2 implementation) and can help modelers intending to generate code from models had they know how to use them properly. Maybe we need some section in the spec giving a practitioner some guidance in when and how to use these concepts based on different situations that go beyond explaining what they are for?
A common task is to implement the operations of an interface I in a class A. The implementation of an operation has a specification reference to the realized operation. In the current UML specification, the operation must be copied into the class before it can be realized, since only owned behavioral features can be referenced: "(section 13.3.2) ... The behavioral feature must be owned by the classifier that owns the behavior or be inherited by it.". I.e. the standard only allows to reference inherited operations, but not realized operations. This is not very practical, since it implies not only copying the operation but also assuring that it remains synchronized with the operation that is defined in the interface (of course, the modeling tool could do the synchronization, but it would still imply storing redundant information within the model). It would be good to authorize a reference to an operation in a realized interface.
The BNF of Constructs::Property defines <Visibility> ::= '+' | '-' clearly missing the package and protected visibilities. This Contradicts the Superstructure in 7.3.44, where the BNF states all four visibilites.
A part (property, port, etc.) of a class is a TypedElement and can of course have applied stereotypes of its own. However, it is often useful to know not only the Type of a TypedElement, but how that type is stereotyped. This would provide more complete information about the type that helps communicate the meaning of the model. Some tools by default show the stereotypes of a type on parts typed by that type. For example, if Interface Purchasing is stereotyped as <<Provider>>, a port typed by that Interface might be displayed as <<Provider>>purchaser: Purchasing. But this is actually incorrect because it shows <<Provider>> extending a Port while the stereotype is defined to extend Inteface, not Property. UML2 should provide a notation option to allow Type stereotype names to be displayed in TypedElements. The example above could be more correctly shown as purchaser: <<Provider>> Purchasing - the stereotype for the interface is next to the interface, on the other side of the colon. If the Port is a <<Service>> port, then that would be shown as <<Service>>purchaser: <<Provider>>Purchasing.
The spec may require some clarification regarding figure 14.16 . I believe that "PIN" is just an attribute of the interaction "UserAccepted" but it may be unclear from the picture alone. In addition, how can the local attribute PIN be passed as a parameter to the operation Code()? On the message "Code" would we specify an attribute of type Opaque Expression and use PIN ? This seems to break the formal link between PIN the attribute and PIN the argument.
In the SysML 1.2 RTF, we found a small bug in the normative UML 2.3 infrastructure.xmi here: https://dev.enterprisecomponent.com:9992/repos/UML-RTF/trunk/Documents/Specification/Deliverables/UML2.3%20Normative%20XMI.zip The bug is described at the bottom of the SysML 1.2 RTF wiki page where I described how I adapted Maged’s excellent instructions for generating the normative UML 2.3 xmi to SysML 1.2. It was a bit more complicated for SysML 1.2 because we added an OCL constraint in SysML issue 11091 that required the same “copy down” package merge trick we did for UML issue 7364. Fortunately for SysML, it was easier for us since we had to mimick what we did in UML. Nonetheless, we should do something to avoid these annoying last-minute surprises.
Specification: UML Superstructure v2.2 (formal/09-02-02) In the superstructure specification, when a class is intended primarily as an increment to be merged with some other “base” class, this is usually documented by listing the “base” class under the Generalization section, with the annotation “(merge increment)”. While such documentation of merge intent is extremely useful for the understanding of the reader, putting this documentation under the “Generalization” section is confusing, since the way package merge is now used in the superstructure abstract syntax model has nothing to do with generalization. Further, this documentation convention is not always consistently applied, especially when the class also has “real” generalizations. So, the specification should retain documentation for merge increments, but the overall approach for doing this should be revised and clarified, and then this approach should be applied consistently across the specification.
On C.1 StandardProfileL2 the stereotype «create» is on language unit Dependencies, and «responsability» is on language unit Classes::Kernel. I think both belong to language unit Classes::Dependencies
Currently, a profile can include an icon for a stereotype. This means that a stereotype can have just one icon. If a stereotype extends more than one UML metaclass the profile designer might want to include different icons depending on which of the metaclasses the stereotype is applied to. For example, if I define a stereotype <Foo> that extends both <metaclass> Interface and <metaclass> Class, I will probably want a different icon for the two different usages of <Foo> but there is no way to define more than one icon per stereotype. The suggestion is that one should be able to specify an icon for the extension relationship between a stereotype and metaclass instead of (or in addition to, perhaps) on the stereotype itself. Profile authors would then be able to assign distinct icons for different stereotype usages. And UML tools would then be able to display distinct icons in such cases. This issue came up during discussions of the in-progress SoaML specification & profile. One of its stereotypes (<ServiceInterface>) extends both Class and Interface and the icons for each should be visually distinct. Currently, profiles don't provide a way to make this happen.
GT Regarding Description, Notation and Semantics section, It is difficult to distinguish MetaClass name from general term, since there are several confusing occurrences which are shown in lower case letter. It seems those are inconsistent. Clarify their usages through the entire specification.
GE There are a lot of sentences which start with Metaclass name (in upper case letter) without preceding letter. In that case, It is difficult to distinguish Metaclass name from general term. Clarify their usages through the entire specification. When sentence starts with metaclass name, put certain preceding letter, for example article, and make it distinguishable.
Annex C TH This annex .defines OMG and related companies's copyright and patent condition. But ISO defines another copyright and patent condition. Remove Annex C or make it informative Annex.
Reconcile the algebra of collections across OCL & UML’s intentional & extensional semantics & test this statically with OCL & dynamically with OCL & fUML scenarios. Bran, Your comments and those from Dave Hawkins & Salman Qadri confirm my suspicions that it would be unwise to submit a resolution to 8023 in ballot 10; I won’t. Dragan Milicev’s paper is really excellent; I’m really glad you pointed this out. I highly recommend this paper for consideration in the UML2 RFI workshop: On the Semantics of Associations and Association Ends in UML Milicev, D.; Software Engineering, IEEE Transactions on Volume 33, Issue 4, April 2007 Page(s):238 - 251 http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4123326 Dragan clearly states that his formalization of association is squarely in the domain of intentional semantics; not extensional semantics as stated in clause 7.3.3: “An association describes a set of tuples whose values refer to typed instances. An instance of an association is called a link.” This paper points to a fundamental limitation in the way the runtime semantics of the UML2 has been specified in clause 6.3.1 in the domain of extensional semantics: “Classes, events, and behaviors model sets of objects, occurrences, and executions with similar properties. Value specifications, occurrence specifications, and execution specifications model individual objects, occurrences, and executions within a particular context.” The real problem here isn’t in the fact that there are two different ways to specify the semantics of associations the restrictive interpretation in Dragan’s terminology which is really an extensional semantics and the intentional semantics Dragan proposes which I believe is fundamentally correct (as far as I’ve read it). The real problem is in the semantic mismatch between the extensional & intentional semantics of associations (assuming Dragan is right). The current extensional semantics of the UML2 is based on an impoverished notion of collections: sets & sequences. Dragan’s intentional semantics for associations involves the same categories of collections that OCL uses: sets, sequences & bags (see clause 7.5.11 in ocl2/ocl2.1) What this all means is that we need to focus an RTF cycle on reconciling the algebra of collections across OCL & the extensional & intentional semantics of UML2 and of fUML. The goal of this reconciliation is twofold: we should be able to specify all necessary well-formedness constraints on the relationship between M1 & M0 in OCL we should be able to use fUML to exercise relevant scenarios of events starting in one M1/M0 context and finishing in another M1/M0’ context and specify in OCL well-formedness constraints on the relationship between M0/M0’ as a function of the events processed & the behavior that happened as a result of processing by some active object (see clause 6.4.2). We can use the fUML subset to scope this reconciliation effort to something manageable as an RTF; learn from this experience and use that to tackle more exotic things like state machines.
Association class notation should include just the class symbol or just the association symbol, in addition to the current combination of these. Association classes are both associations and classes and should be able to be notated as either one separately.
Description: Notation of ObjectFlow "selection" and "transformation" as a note symbole does not specifiy the content of the note relatively to these behaviors. In exemples figures 12.75 and 12.112 this note contains OCL constraints or free text. It could be usefull to specify what needs to be displayed. For exemple : * if the selection/transformation is an OpaqueBehavior then the body of the OpaqueBehavior is dislayed in the note * if the selection/transformation is another Behavior then the name of the Behavior is displayed in the note Note that same problem occurs for ObjectNode selection
shouldn't the OCL statement for the Utility [1] return a collection: collect(dependency|dependency.supplier) instead of collect(dependency|dependency.client) ? and in the OCL statement for the Utility [2] shouldn't it be (classifier.clientDependency->...) instead of (classifier.supplierDependency->...) ? Please clarify.
The UML specification text for PrimitiveType states that it has no operationsnor attributes: "A primitive type defines a predefined data type, without any relevant substructure (i.e., it has no parts in the context of UML). A primitive datatype may have an algebra and operations defined outside of UML, for example, mathematically." However, because PrimitiveType is a subtype of DataType in the spec, it inherits the ability have attributes and operations. Constraints need to be added to restrict this, or else PrimitiveType should not specialize DataType. The current situation is confusing to tool vendors. Potentially any imported XMI might have a PrimitiveType with attributes and operations defined according to the specification.
In the UML 2.2 spec (ptc/2008-05-05), there is no way to show that a constraint on a class has a stereotype or stereotype tags. I would like to see something with nested braces. For example, { <<stereotype>> constraint1: body {tag1=value, tag2=value} }.
I recommend changing the notation from this:
A Constraint is shown as a text string in braces ({}) according to the following BNF:
<constraint> ::= '{' [ <name> ':' ] <Boolean-expression> '}'
to this:
A Constraint is shown as a text string in braces ({}) according to the following BNF:
<constraint> ::= '{' [ <stereotypes> ] [ <name> ':' ] <Boolean-expression> [ '{' <valuestring> '}' ] '}'
The <stereotypes> and <valuestring> use the presentation options described in 18.3.8 (Stereotype).
The UML 2.2 spec (ptc/2008-05-05) does not allow showing only a constraint name in braces. I have found this non-standard feature very valuable when working with business users and would like to see it allowed.
The most flexible way to use constraints is to have a short, informal English description as the name, and real OCL as the formal expression. Having the flexibility to show either the name or the expression gives the best of two worlds: business SMEs can read and validate the informal English name while tools can use the OCL expression to actually enforce the constraints. In addition, a diagram can present a view for business SMEs or a view for technical people.
I recommend changing the notation from this:
<constraint> ::= '{' [ <name> ':' ] <Boolean-expression> '}'
to this:
<constraint> ::= '{' [ <name> ] ':' <Boolean-expression> | <name> '}'
This change would allow:
the author to choose to show:
only { : expression } for technical users (a common practice)
only { name } for non-technical users (a currently disallowed but important practice)
both { name : body }
the viewer to tell the difference between the name and the expression when only one is shown
consistency with the way several other things work in UML, such as:
action names
action pin names
instance specification names (i.e., just shows the name when there's no type)
attributes (i.e., one can suppress the ": Type")
When you specify a property as an ordered derived union, with the implied derivation of union-ing the subsetting properties, how do you specify the order of the resulting union?
In the model, Actual is shown as 1.* and OwnedActual is shown as *. In the text 17.5.5, Actual is shown as 1 and OwnedActual is shown as 0..1.
In several places of §7.3.44 one speaks about the value(s) of a property. However, there is no property on the Property meta-class that map to this value, except the defaultValue property. On the other hand, it is stated that "If a property is derived, then its value or values can be computed from other information " but nothing make mandatory the specification of how this value is computed.
"isDerived", "defaultValue" and the missing "valueSpecification" property of the Property meta-class cannot be totaly independent.
Suggested resolution :
* Add an optional valueSpecification property to the Property meta-class with the type ValueSpecification
* Change defaultValue to be derived according to the following constraint:
{OCL} defaultValue = if self.isDerived then self.valueSpecification else NULL endif1)
In paragraph "7.3.8 Classifier (from Kernel, Dependencies, PowerTypes)" is constraint:
[4] self.inheritedMember->includesAll(self.inherit(self.parents()->collect(p | p.inheritableMembers(self)))
2)
inheritableMembers() is query with definition:
[4] Classifier::inheritableMembers(c: Classifier): Set(NamedElement);
pre: c.allParents()->includes(self)
inheritableMembers = member->select(m | c.hasVisibilityOf(m))
3)
hasVisibilityOf() is query with definition:
[5] Classifier::hasVisibilityOf(n: NamedElement) : Boolean;
pre: self.allParents()->collect(c | c.member)->includes(n)
if (self.inheritedMember->includes(n)) then
hasVisibilityOf = (n.visibility <> #private)
else
hasVisibilityOf = true
Since CMOF does a PackageMerge of Infrastructure-Core-Basic with Infrastructure-Core-Constructs, the resulting metaclass Operation ends up having 'isOrdered', 'isUnique', 'type', 'lower' and 'upper' properties, which conflict with the names of properties it inherits, particularly from MultiplicityElement and TypedElement. This is illegal unless these properties explicitly have redefinedProperty relationships.
In the UML Infrastructure XMI, the type of Core::Abstractions::Multiplicities::MultiplicityElement::includesMultiplicity() parameter M is Core::Basic::MultiplicityElement. The type of M should be Core::Abstractions::Multiplicities::MultiplicityElement to keep Abstractions independent of Basic.
In 14.3.24, the textual definition of MessageSort is badly formatted, which needs to be fixed. Then it provides for messages of sorts synchCall, asynchCall, asynchSignal, createMessage, deleteMessage and reply. So is a createMessage synchronous, or asynchronous, or can it be either? The semantics of CreateObjectAction say “The new object is returned as the value of the action” - which implies that synchronous ought to be a possibility. But chapter 14 appears silent on this topic.
According to 10.3.6: context DeploymentTarget::deployedElement derive: ((self.deployment->collect(deployedArtifact))->collect(manifestation))->collect(utilizedElement) But self.deployment->collect(deployedArtifact) gives a collection of DeployedArtifact, not of Artifact; therefore the call to manifestation is invalid. To make it correct from a type point of view, there needs to be an additional select to pick the DeployedArtifacts that are actually Artifacts. While we are at it, it is highly inappropriate to have a subclass of DeployedArtifact called Artifact: the names imply the reverse of the inheritance hierarchy.
Currently the spec says:
If this property is owned by a class associated with a binary association, and the other end of the association is also owned by a class, then opposite gives the other end.
opposite = if owningAssociation->isEmpty() and association.memberEnd->size() = 2 then let otherEnd = (association.memberEnd - self)->any() in if otherEnd.owningAssociation->isEmpty() then otherEnd else Set{} endif else Set {} endif
This is wrong. The opposite should be calculated properly whatever the property is owned by. It should say “if the property is an association end of a binary association, opposite gives the other end”.
The type of AuxiliaryConstructs::Templates::RedefinableTemplateSignature::classifier does not comform to the type of the subsetted end redefinitionContext : Classifier The type of Classes::Interfaces::InterfaceRealization::contract does not comform to the type of the subsetted end supplier : NamedElement The type of CompositeStructures::Ports::A_ownedPort_encapsulatedClassifier::encapsulatedClassifier does not comform to the type of the subsetted end encapsulatedClassifier : EncapsulatedClassifier The type of Activities::IntermediateActivities::Activity::group does not comform to the type of the subsetted end group : ActivityGroup The type of Activities::IntermediateActivities::ActivityGroup::inActivity does not comform to the type of the subsetted end inActivity : Activity The type of Activities::CompleteActivities::ActivityNode::inInterruptibleRegion does not comform to the type of the subsetted end inInterruptibleRegion : InterruptibleActivityRegion The type of Classes::Interfaces::Interface::ownedAttribute does not comform to the type of the subsetted end ownedAttribute : Property The type of CommonBehaviors::Communications::Class::ownedReception does not comform to the type of the subsetted end ownedReception : Reception The type of CommonBehaviors::Communications::Interface::ownedReception does not comform to the type of the subsetted end ownedReception : Reception The type of Components::BasicComponents::ComponentRealization::realizingClassifier does not comform to the type of the subsetted end realizingClassifier : Classifier The type of CompositeStructures::InternalStructures::A_ownedConnector_structuredClassifier::structuredClassifier does not comform to the type of the subsetted end structuredClassifier : StructuredClassifier The type of Activities::CompleteStructuredActivities::StructuredActivityNode::structuredNodeInput does not comform to the type of the subsetted end structuredNodeInput : InputPin The type of Activities::CompleteStructuredActivities::StructuredActivityNode::structuredNodeOutput does not comform to the type of the subsetted end structuredNodeOutput : OutputPin The type of Activities::IntermediateActivities::ActivityPartition::subpartition does not comform to the type of the subsetted end subpartition : ActivityPartition The type of Activities::IntermediateActivities::ActivityPartition::superPartition does not comform to the type of the subsetted end superPartition : ActivityPartition The type of Deployments::Artifacts::Manifestation::utilizedElement does not comform to the type of the subsetted end supplier : NamedElement ** Fixes for those require fixing the spec and metamodel
"<Package> Actions" has one or more package import cycles involving "<Package> AuxiliaryConstructs, <Package> Classes, <Package> CommonBehaviors, <Package> Activities." "<Package> Components" has one or more package import cycles involving "<Package> AuxiliaryConstructs, <Package> Classes, <Package> CompositeStructures." "<Package> Deployments" has one or more package import cycles involving "<Package> AuxiliaryConstructs, <Package> Classes, <Package> CompositeStructures, <Package> Components." "<Package> Interactions" has one or more package import cycles involving "<Package> AuxiliaryConstructs, <Package> Classes, <Package> CommonBehaviors." "<Package> StateMachines" has one or more package import cycles involving "<Package> AuxiliaryConstructs, <Package> Classes, <Package> CommonBehaviors." ** Fixes for those require fixing the spec and metamodel
Package InfrastructureLibrary::Core::Abstractions::BehavioralFeatures contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Changeabilities contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Classifiers contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Comments contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Constraints contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Expressions contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Generalizations contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Instances contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Literals contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::MultiplicityExpressions contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Namespaces contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Ownerships contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Redefinitions contains two or more indistinguishable members named "<Class> Classifier." Package InfrastructureLibrary::Core::Abstractions::Relationships contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::StructuralFeatures contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Super contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::TypedElements contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Core::Abstractions::Visibilities contains two or more indistinguishable members named "<Class> Element." Package InfrastructureLibrary::Profiles contains two or more indistinguishable members named "<Class> Package." Package UML::Actions contains two or more indistinguishable members named "<Class> Classifier." Package UML::Actions::BasicActions contains two or more indistinguishable members named "<Class> BehavioralFeature." Package UML::Actions::CompleteActions contains two or more indistinguishable members named "<Class> OpaqueExpression." Package UML::Actions::IntermediateActions contains two or more indistinguishable members named "<Class> MultiplicityElement." Package UML::Actions::StructuredActions contains two or more indistinguishable members named "<Class> OutputPin." Package UML::Activities contains two or more indistinguishable members named "<Class> Classifier." Package UML::Activities::CompleteActivities contains two or more indistinguishable members named "<Class> OpaqueExpression." Package UML::Activities::IntermediateActivities contains two or more indistinguishable members named "<Class> OpaqueExpression." Package UML::AuxiliaryConstructs contains two or more indistinguishable members named "<Class> Classifier." Package UML::AuxiliaryConstructs::InformationFlows contains two or more indistinguishable members named "<Class> Pin." Package UML::Classes contains two or more indistinguishable members named "<Class> Classifier." Package UML::Classes::Dependencies contains two or more indistinguishable members named "<Class> Classifier." Package UML::CommonBehaviors contains two or more indistinguishable members named "<Class> Classifier." Package UML::Components contains two or more indistinguishable members named "<Class> Classifier." Package UML::Components::BasicComponents contains two or more indistinguishable members named "<Class> Property." Package UML::CompositeStructures contains two or more indistinguishable members named "<Class> Classifier." Package UML::CompositeStructures::Ports contains two or more indistinguishable members named "<Class> Property." Package UML::Deployments contains two or more indistinguishable members named "<Class> Classifier." Package UML::Deployments::Artifacts contains two or more indistinguishable members named "<Class> NamedElement." Package UML::Interactions contains two or more indistinguishable members named "<Class> Classifier." Package UML::Interactions::BasicInteractions contains two or more indistinguishable members named "<Class> MultiplicityElement." Package UML::StateMachines contains two or more indistinguishable members named "<Class> Classifier." ** Fixes for those require fixing the spec and metamodel
The Notation chapter of AcceptEventAction is very weak, there is no description where Event name or Signal name could be displayed. It says: "An accept event action is notated with a concave pentagon. A wait time action is notated with an hour glass. " There are some usage examples in “AcceptEventAction (as specialized)” on page 309 where signal names are inside AcceptEventAction symbol, but such notation is not described under Notation !
While looking over Use Cases for other changes, I realize that I’m not sure about how inheritance (generalization) works. It appears that only constraints and features are inherited. Features include structural and behavioral features, and structural features include associations. This seems to exclude dependencies and other directed relationships and other potentially named elements in the namespace. I must have something wrong, but this means that · include and extends are not inherited; · realizations are not inherited; · nested qualifiers are not inherited; · general dependencies are not inherited
Good point, it is clearly incorrect, as "ownedAttribute" is property of Class, not Classifier (Actor). Even more interesting, this is the only way to access attached associations (by checking owned properties), so I have no ideas how OCL can check attached associations when all properties are owned by association
In the first table of section C.2, the first row, <<buildComponents>>, in the column called "Description" the word development is misspelled in the phrase ”for the purpose of system level decelopment activities"
2) is composite and subsets not derived composite property: ProtocolTransition::preCondition:Constraint [0..] Profile::metaclassReference:ElementImport [0..*] Profile::metamodelReference:PackageImport [0..*] Transition::guard:Constraint [0..] ProtocolTransition::postCondition:Constraint [0..] Operation::postcondition:Constraint [0..*] Operation::precondition:Constraint [0..*] Behavior::precondition:Constraint [0..*] Operation::bodyCondition:Constraint [0..] Behavior::postcondition:Constraint [0..*]
Property subsets other regular property, non-derived union. I would like to get rid of that as it causes implementation overhead costs, we must manage and synchronize two collections. Association::memberEnd is not union but is subsetted Class::ownedAttribute is not union but is subsetted TemplateSignature::parameter is not union but is subsetted
Redefined with lowered multiplicity. It is not possible to have correct Java implementation of that, as inherited class must have getter with same name which return type is not collection, but single element. We (and Eclipse) simply ignoring these redefinitions or adding constraint which checks value number in collection. OccurrenceSpecification::covered [1] redefines InteractionFragment::covered [0..*] Transition::redefinitionContext [1] redefines RedefinableElement::redefinitionContext [0..*] State::redefinitionContext [1] redefines RedefinableElement::redefinitionContext [0..*] StateInvariant::covered [1] redefines InteractionFragment::covered [0..*] Extension::ownedEnd [1] redefines Association::ownedEnd [0..*] Region::redefinitionContext [1] redefines RedefinableElement::redefinitionContext [0..*]
One association end is derived, another is not. It causes implementation issues, as when we set one end, opposite should be automatically set also. Vertex::outgoing [0..*] is derived, opposite Transition::source [1] is not Activity::structuredNode [0..*] is derived, opposite StructuredActivityNode::activity [0.. ConnectableElement::end [0..*] is derived, opposite ConnectorEnd::role [1] is not Package::ownedType [0..*] is derived, opposite Type::package [0..] is not Package::nestedPackage [0..*] is derived, opposite Package::nestingPackage [0..] is not Vertex::incoming [0..*] is derived, opposite Transition::target [1] is not
Refactor UML to separate SW-Specific Aspects from Foundation Language One useful refactoring would be to separate UML into a abstract modeling part and a software model part, so that other standards can base themselves on the abstract modeling piece without the baggage of software specific features. We would not want to encourage programming language-specific profiles, but wish to take out things such as components from the base UML profile.
Simplify by Making UML More Consistent: Apply class and composite structure diagram rules to behavior modeling. One problem with UML now is that the ability to simplify by applying more consistency is not taken advantage of. By being consistent – eliminating special cases, the specification becomes smaller, the modelers have to learn less, the tools can reuse code, and UML becomes easier to understand and use. As behaviors (e.g., operations, activities) are classifiers, there is no good reason why the class and composite structure diagrams cannot be used to model them. This would allow for diagrams showing inheritance, composition, associations, dependencies, etc. While this may not be “OO”, it would support functional decomposition/programming approaches, simplify, and make more regular the specification. See the RFI response ad/2009-08-05.
In OMT, states could be modeling on the class diagram, which was a powerful alternative approach to capture the structure of a state machine. It made clear the relationships between entry/exit actions of superstates on substates, the ability to override responses to trigger/actions pairs of superstates by a substate, the scope of a defer, what a history node really does, etc. understandable in a way that statemachines don’t do because of their different presentation style. This should also restore the ability to identify state-specific attributes and constraints, and the ability to specify parameters on the state’s possible behaviors – two features that have often been requested. Restoring this ability will make UML treatment of states more like their treatment for classes. Similar ideas have been periodically proposed, see http://www.conradbock.org/statemachine.html.
Current timing model does not enable useful capture/mapping of values vs time. UML does support initial values and current values, but not evolving values. This is necessary for proper description of the behavior, capture of simulations, requirements development
Software Developers, and any people who are using UML as a core language can use the ability to capture /categorize requirements
While almost every tool supports the concept of a model element specification, they are not consistent on which elements can have them nor are they consistent on the contents/typing of the specification. Please make model element specification available on ALL elements and make the format and content a rich field.
UML should support the ability to associate an image/icon with each model element. Current approaches only allow a stereotype based approach. Each model instance should be able to have its own icon.
Unique URL/URI Reference to/from Model Elements In Model-Driven Development (MDD), the model is the repository of truth on the project. However, we recognize that the complete containment of all information on a project in a single tool repository is not a near-term solution. To this end, we need the ability to support explicit references from model elements to externals (such as documents, other types of models) and similar references back. This are not just pointers, we need the ability to incorporate information (e.g., documents, web pages, diagrams, pictures) from elsewhere and to support refreshing with current data, as well as the export of model information into external locations. Some simple examples: 1. A driving requirements document may contain tables and pictures, a modeler will need direct access to these elements. 2. A reviewer of a model may need to see diagrams where the appropriate and current icons substitute for the UML graphical elements. 3. An organization may wish to publish documentation of a particular aspect of the model on the internet and wish that the visitors always obtained the latest information
While almost every tool supports the concept of a model element specification, they are not consistent on which elements can have them nor are they consistent on the contents/typing of the specification. Please make model element specification available on ALL elements and make the format and content a rich field. This capability is required for modelers to incorporate significant amount of explanatory documentation for each element. The ability to include textual descriptions for each model element and other basic metadata should be part of UML. In addition, such text should be augmented with the ability to structure and format the model element descriptions. We would like to see support for RTF, PDF, XML, HTML, and XHTML, as well as support for including graphics Similarly, a modeler should be able to type any attribute with a string-like type that allows for similar formatting or markup.
The ability to see the inherited features is often necessary, however, such items should be displayed in a graphically consistent manner – and available on all tools.
Non-structural, non-owning Containment While packages and stereotypes have their purposes, we need another way of combining and identifying groups of related elements based on specific partitioning criteria. This allows us to categorize and organize system elements – a common task for SEs. We could use this to identify those elements that are related to a particular architectural layer, due in a particular delivery, produced by a particular manufacturer, or related to a particular concern (e.g., security). Model elements could belong to any number of these containers. These containers should appear on diagrams, tables, and the browsers, but should not confer or change any prior ownership. Populating these containers could be done mechanically and/or by execution of rules. The containers can have value properties and dependencies that are considered to logically apply to the members of the container
A strong ability to support reviewing packages On the large projects, we find that the project needs the ability to present model subsets to reviewers, and allow commenting, proposed corrections, assignment of action items, and red-line comparisons. UML needs the ability to create these review packages in a way that can support the types of changes that reviewers propose – without changing the underlying model. The creation of these review packages should support both rule-based and manually constructed packages, including the diagrams and the selection of elements. These could be based on IEEE 1471 views and the use of QVT.
Support for maintaining what-if models in repository without massive duplication UML and descendant modeling languages should be able to support multiple solutions within a model without excessive duplication. This could be because of planned system evolution or because we need to compare multiple approaches. One solution might be to support standardized named effectivity/expiration fields for each model element (including dependencies). All diagrams, queries, reports, etc., could be conditioned by a selected date. Instead of dates, a set of version numbers could apply to each model element, with the model filtering work in same way.
In large-scale development environments where development may be iterative and/or incremental, it often happens that there are standardized libraries of common or reusable elements, in various levels of completion. These may be type definitions, classes, objects, parts, requirements, etc. While current «import» and «access» are useful to reuse these elements, we need the ability to specify an ordered chain of libraries, where an element usage would obtain the first occurrence of the element in the chain. Note that the libraries may be located remotely or on the web.
A strong ability to support generating Documents On the type of projects that we work on, we find that the project needs the ability to produce standardized documents from the models. While most tools support documentation generation to some extent, the rules used to construct the documents are not standardized. UML needs the ability to create these documents in a standardized way that can support automatic generation from the package structure, the model element descriptions (see above), incorporating diagrams, externals (see URL/URI above), and document models (a UML model of the document by composition of sections). The creation of these documents should support rule-based and manually constructed diagrams. These could be based on IEEE 1471 views and the use of QVT.
Diagrams as Model Elements Make diagrams full and equal model elements, tied to the regular model element that the diagram is displaying. Refer to the SysML specification in Annex A. All diagrams types should have an unique 2-3 character model element type, and also supporting diagram types. As a regular model element is should be able to support attributes, such as ownership, status, purpose, version (possibly operations also) and dependencies. As a model element, it should be referable by any URL/URI scheme that can reference model elements.
Leverage and build upon fUML semantics and associated formalism to provide semantics for behavior and structure
Diagram / Model Interchange The current level of Diagram and Model interchangeability is appalling and is a significant barrier to further penetration of UML/SysML Into the marketplace. With the advent of new test suites (such as by OMG’s Model Interchange Working Group (MIWG)), the UML specification should require demonstrated success in some of these tests before a UML tool can be declared conforming to UML. OCL Support A minimal required support for OCL should be defined as part of compliance. QVT Support A minimal required support for QVT should be defined as part of compliance.
Large Scale, Distributed, and Federated System Support Many projects of interest have become so large that for practical reasons more than one “model” may be required. Such models may also be at different locations and supported in different tools. We need features in UML that will support very large distributed heterogeneous models in a standard way. While the complete solution to this strong need is not yet known, such features will probably need to include: 1. higher level concepts than the standard package; 2. a uniform URL/URI convention for models and model elements; 3. standard APIs so that the tools can query each other; 4. a strong ability to support IEEE 1471 views; 5. ability to synchronize different models; 6. ability to propose changes across models. While some of these solutions components may be considered tool issues, users with large models need a consistent standard solution. This may solved by a separate RFP but any changes to UML for other reasons must be checked to see if it interferes with large model scenarios. As a related problem, there seems to be some confusion in the UML spec and by users about the applicability of run-time UML visibility/navigability rules to model time, some of the typical assumptions do not work with distributed models. This needs to be cleared up.
There seems to be some confusion in the UML spec and by users about the applicability of run-time UML visibility/navigability rules to model time, some of the typical assumptions do not work with distributed models. This needs to be cleared up. For example, can a tool transverse a dependency that crosses models. Can a tool transverse the reverse direction? These need to be solved in a way that is internally consistent and consistent with distributed/federated models
UML is missing useful sequence diagram support for. 1) Information Flows 2) Continuous or Repeating messages (for example, on the 200th heart beat message) 3) Improved timing semantics (requirements for min/max timing) Without these features, it will not be possible to represent common situations on sequence diagrams or specify realtime behavior. It may also prevent mapping to state diagrams.
In sequence diagrams the use of Assert, Negate, Consider, and Ignore fragments often leaves the reader confused about their intent. For example, an Assert fragment is intended to mean that this fragment is the only sequence of events to be considered. This could be interpreted as the only sequence 1) that can occur; so the reader/developer does not need to consider others as they are impossible 2) that is interesting; so that the reader/developer can ignore the others as being not interesting 3) that is allowed; so if something else occurs it is an error 4) that is allowed; so that the reader/developer needs to prevent the others from occurring. Similar issues arise with the other fragments An Negate Fragment, could be interpreted as 1) this fragment can never occur, so don’t worry about it 2) If this fragment occurs this is an error 3) You need to prevent this fragment from occurring These can be solved by adding a parameter to these fragments e.g., Fact (this is the way it is); Enforce (this is the way we have to make it); Error (violations are errors); Ignore (don’t worry about violations)
In many situations it is necessary to refer to externally defined ontologies, e.g., for types (esp enumerated types) icons, parts, etc. We need a way to select something from a rich list defined elsewhere.
Better Profile Capability The profile mechanism needs to better support the general refactoring and reuse of profile elements to allow for compatible language evolution. This can include renaming on import, pulling in partial profiles, suppressing features, etc. Profiles should support a more sophisticated ability to add contextual and usage based information, such as consistency rules, formatting rules, model/diagram filters, GUI and presentation options, transformation, documentation, and code generation. These desired profile features are similar in nature to features required by viewpoints – the ability to control much of the model presentation based on audience or circumstances.
Timing semantics for activity diagram Enable timing diagrams and associated timing semantics to support activity diagrams.
Templates, Patterns, and Frameworks The current ability to capture software templates need to be expanded or augmented in ways that can be used to depict and utilize system design and architectural patterns, and higher-level reusable frameworks
Though it is common in tools to provide a way of adding notes to diagrams that are not serialized as part of the model XMI, this is nowhere documented in the UML specification. Nor is there any notational means of distinguishing the 2 (since the dashed line attaching Comments to Elements is optional).
Specification: OMG UML Superstructure, Version 2.3 (ptc/2009-09-09) Subclause: 12.3.35 LoopNode The loopVariables of a LoopNode are OutputNodes, but they are not part of the outputs of the LoopNode. Therefore, they need to be independently owned by the LoopNode. The propery LoopNode::loopVariable should subset Element::ownedElement, and the association should be shown as composite on Figure 12.22. Otherwise the mustBeOwned constraint will be violated for loopVariables.
Action is a kind of NamedElement, but the owners of Actions do not subset the property “namespace”. The same is true of ActivityNode, but this was discussed in 8668 and resolved as correct. The same is true of CollaborationUse: a CollaborationUse is not in the ownedMembers of its Classifier. The same is true of MessageEnd and MessageOccurrenceSpecification and Gate. The same is not true of InteractionFragment, i.e. InteractionFragments appear in the namespace of their enclosing interaction. Are all of these correct?
In UML, TestIdentityAction does not currently apply to datatypes. The introduction and description of TestIdentityAction say "TestIdentifyAction is an action that tests if two values are identical objects. This action returns true if the two input values are the same identity, false if they are not." Data type values are not objects and do not have identity (that is, you cannot tell one data type value from another). If it is decided that the execution engine should not reflect the above semantics, the semantics of TestIdentityAction needs to be extended for unstructured datatype values to test whether the values are the same. For structured values, such as strings, the values and their contents would need to be the same, recursively if they contain more datatype values.
UML expansion regions currently treat each input as a collection, rather than all the inputs as members of a single collection, as the execution engine currently assumes. The description of Expansion Region says "Each input is a collection of values. If there are multiple inputs, each of them must hold the same kind of collection, although the types of the elements in the different collections may vary. The expansion region is executed once for each element (or position) in the input collection." If it is decided that the execution engine should not reflect the above semantics, then UML needs an additional attribute on ExpansionRegion to indicate whether the individual tokens of the input and out expansion nodes are taken as collections, or whether all the tokens in the nodes are taken as one collection. In ExecUML this attribute value would always be for the second option.
The containment between Activity and StructuredActivityNode has one end redefining (wrong) and the other subsetting (right). Because redefining and subsetting should be symmetric, this means that both ends are both redefining and subsetting. This is clearly wrong, because it would mean that all nodes and groups are StructuredActivityNodes. The {redefines activity, redefines inactivity} should be turned into subsetting.
In addition to the current notation:
{subsets activity, subsets inActivity}
Add a notation where subsetted/redefined properties can be qualified by their owning classifier, i.e.:
{subsets ActivityNode::activity, subsets ActivityGroup::inActivity}
And use this notation throughout the metamodel.
This would make it clear where to look for the subsetted/redefined properties when trying to understand the spec.
Issue 10826 was asking for two things: what is an applied stereotype, as opposed to the definition of the stereotype that was applied what are tag/value pairs, as opposed to the definition of the stereotype properties that led to the tag/value pairs The resolution for 10826 added the following paragraph: An instance “S” of Stereotype is a kind of metaclass that extends other metaclasses through association (Extension) rather than generalization/specialization. Relating it to a metaclass “C” from the reference metamodel (typically UML) using an “Extension” (which is a specific kind of association), signifies that model elements of type C can be extended by an instance of “S” (see example in Figure 18.13). At the model level (such as in Figure 18.18) instances of “S” are related to “C” model elements (instances of “C”) by links (occurrences of the association/extension from “S’ to “C”). Up to the last sentence, the paragraph refers to ‘an instance “S” of Stereotype’ -- i.e., the definition of “S”, a stereotype, in a profile — as illustrated in figure 18.13. The last sentence is relevant to question (1) of 10826; however, the resolution doesn’t actually answer the question — i.e., it doesn’t explain what ‘an instance of “S”’ actually is. >From Figure 18.18, the notation suggests that ‘an instance of “S”’ is some kind of instance specification but the resolution doesn’t actually say so and doesn’t address question (2) of 10826 either. I propose then to file a new issue about this and include Ed’s suggestion below as well as clarifying that in Figure 18.18, ‘an instance of “S”’ is actually an instance specification whose classifier happens to be ‘an instance “S” of Stereotype’, i.e., the definition of “S”, a kind of Class since Stereotype extends Class.
The term "Package Extension" on page 142 seems to be obsolet and possibly may be omitted
Fig. 7.15 contains two misplaced {subsets}-clauses.
In the two associations between Dependency and NamedElement, {subsets target} only makes sense for property supplier; the same holds for {subsets source} and property client.Figure 7.37 shows an example of Dependency with <<dependencyName>> in guillemets. The Notation text above it states:” The arrow may be labeled with an optional stereotype and an optional name.” However surely the name of the Dependency itself should not be in guillemets – only that of the stereotype. Note that (subclasses of) Dependency are notated using a keyword instead of a stereotype so this should also be allowed for in the text. Proposed resolution: the Figure should be revised to show the dependencyName not in guillemets and possibly with a stereotype name in guillemets.
The Notation part of section 7.3.12 includes the following text but no graphical example. Furthermore the text seems less than clear (for example whether there must be a ‘junction’ (and whether shown as a point or a line) and whether each arrow entering the junction is required to have its own (open?) arrow head. I think that as a result of this few, if any, tools support this notation. “ It is possible to have a set of elements for the client or supplier. In this case, one or more arrows with their tails on the clients are connected to the tails of one or more arrows with their heads on the suppliers. A small dot can be placed on the junction if desired. A note on the dependency should be attached at the junction point.”
Who could explain me the following constraint on Parameter within section 9.3.10: Constraints [1] A parameter may only be associated with a connector end within the context of a collaboration. self.end->notEmpty() implies self.collaboration->notEmpty() I wanted to draw delegation connectors between a port and as for example the Parameters of a behaviour such as an activity. Am I allow to do that?
There are non-derived properties at both ends - clientDependency and supplierDependency. One association is non-navigable, that means supplierDependency is owned by Association, but what does it mean in UML metamodel implementation? How it should be implemented? Eclipse has no associations at all, we (MD) simply added this property into NamedElement, but not serializing it into XMI. I would suggest to make this property derived or remove at all (if it is not serialized, it does not affect backward compatibility).
EnumerationLiteral specializes InstanceSpecification, which specializes PackageableElement, which inturn specializes NamedElement This allows enum lterals to be owned by packages and have visibility, both of which do not make a lot of sense. is it another case of unintended inheritance? Another note: does it make sense to couple the capabilities of having a 'name' and 'visibilty', as given by NamedElement?
"In both UML activities and UML statecharts it is sometimes necessary to recognize when some behavior (activity or state-based, respectively) has completed. However, in models without an explicit final node or final state respectively, it is not always clear when this condition is achieved
Sequence diagram and Communication diagrams should support instances as lifelines
I was reading through the descriptions of the Standard Stereotypes and noticed some oddities, and some aspects that should be explicitly modeled now we are creating normative definitions thereof. Overall this exercise has illustrated to me that the tabular approach for defining them is utterly inadequate and we should use one or more profile diagrams. Rather than having the explicit modeling only in the XMI BTW it seems to me that the 2nd 'Language Unit' column of the table in Annex C is misleading and pointless so should be deleted: the Stereotypes do not have a language unit. Not even the extended metaclasses have one, once merged into their L2 or L3 metamodel. Also if it's not too much hassle it would be handy to include the descriptions from Annex C in the XMI Stereotype definitions. If for no other reason these need to be updated to reference other stereotypes using their upper case name. The following are points where explicit modeling is called for; I also raise some questions about the descriptions which may need to be raised as issues: 1. I'm a bit baffled by the following from Auxiliary: "The class that the auxiliary supports may be defined explicitly using a Focus class or implicitly by a dependency relationship." - how a class be defined implicitly let alone via a Dependency? Likewise in the description of Focus 2. We should model a Constraint that the client and supplier of Dependencies stereotyped by Call must both be Operations. The description should use client and supplier not source and target 3. Likewise for Create (when applied to Dependencies) they must both be Classifiers. 4. There are 2 rows for Create – I presume this is one Stereotype that extends 2 metaclasses. 5. I do not understand the following in Create (when applied to BehavioralFeature) “May be promoted to the Classifier containing the feature.” The same appears on Destroy 6. The Derive stereotype should have a computation Property to ‘specify the computation’. I suggest this should be of type OpaqueExpression? 7. The description of Implement is a bit unclear - does it imply that the stereotype itself has a Dependency property? Or should we model a Constraint that the base_Component must be the client of a Dependency? 8. We should model that Document is a subclass of File. And, I guess, the Constraint that an element with Document applied cannot also have Source and Executable applied (what about Script and Library though?). Is File abstract as implied by the description? 9. Executable is a subclass of File. And I guess it should have the same constraint? 10. Library is a subclass of File 11. ModelLibrary needs to be cleaned up - I will raise a separate issue 12. Description of Process seems a bit lacking 13. It seems Realization and ImplementationClass cannot both be applied to the same element? 14. Script is a subclass of File. 15. Send should have constraint that the client and supplier of Dependencies to which it is applied are instances of Operation and Signal respectively. The description should use client and supplier not source and target 16. It seems odd to say that Service “computes a value”. 17. Source is a subclass of File. 18. It seems Specification and Type cannot both be applied to the same element? 19. The description of Utility “A class that has no instances, but rather denotes a named collection of non-member attributes and operations, all of which are class-scoped” – not sure what it means by ‘non-member’, but this seems to imply a constraint on the features of the Class to which it is applied. And I guess a Constraint that the Class must also be abstract (it has no instances).
Currently it is not possible to define formally in a state machine diagram that a behavior linked to a transition/state triggers a message to be sent through a port. I think that being able to formally describe this would in fact make this kind of diagrams very valuable for compositional verification of state machine diagrams. See "Towards the Compositional Verification of Real-Time UML Designs" by Holger Giese et al. for reference
16.3.1 Actor says: [1] An actor can only have associations to use cases, components, and classes. Furthermore these associations must be binary. self.ownedAttribute->forAll ( a | (a.association->notEmpty()) implies ((a.association.memberEnd.size() = 2) and (a.opposite.class.oclIsKindOf(UseCase) or (a.opposite.class.oclIsKindOf(Class) and not a.opposite.class.oclIsKindOf(Behavior)))) But an Actor does not have any ownedAttribute property, so this constraint is invalid.
Are composite tag definitions allowed?
In the more compact version of the Timing diagram (figure 14.30) we can see the change in state of a lifeline as it goes from one state to another. In particular, we see how the lifeline moves from the "Idle" state, then to other states, then back to "Idle". Some facts: If I'm interpreting this correctly, we are seeing StateInvariant on the timing diagram. StateInvariant is an InteractionFragment. The StateInvariant is kept in the Interaction::Fragment ordered collection. Issue: The problem is that if we move from the "Idle" state and then back to the same "Idle" state, we would have to create another StateInvariant to place in the Fragment collection - how else could we determine that we have moved back to the "Idle" state? StateInvariant also owns its Constraint, so there would be no way for the second StateInvariant to even refer to the same constraint as the first. Having to duplicate the StateInvariant and/or Constraint seems incorrect? ( As a side note, the spec uses the terminology "State or Condition" when it is refering to StateInvariant - I believe this is ambiguous ) Am I overlooking something obvious? If not, I think this could not only pose problems for XMI interchange, but also seems to be inefficient. Any insight would be appreciated.
There is: importMembers = self.excludeCollisions(imps)->select(imp | self.ownedMember->forAll(mem | mem.imp.isDistinguishableFrom(mem, self))) when it should be importMembers = self.excludeCollisions(imps)->select(imp | self.ownedMember->forAll(mem | imp.isDistinguishableFrom(mem, self)))
In Core::Abstractions::Super::Classifier::hasVisibilityOf there is Classifier::hasVisibilityOf(n: NamedElement) : Boolean; pre: self.allParents()->collect(c | c.member)->includes(n) if (self.inheritedMember->includes (n)) then hasVisibilityOf = (n.visibility <> #private) else hasVisibilityOf = true This is wrong because “NamedElement” doesn’t have “visibility” attribute. In fact “Feature” doesn’t have “visibility” attribute as well, so all of the properties and operations for Classifier needs to be public. That’s why I think that for now “hasVisiblityOf” should be fixed to: Classifier::hasVisibilityOf(n: NamedElement) : Boolean; pre: self.allParents()->collect(c | c.member)->includes(n) hasVisibilityOf = true but maybe it should be considered to add visibility attribute to Feature.
According to the semantics sub-clause of the §7.3.10, it seems that the intent is that there is a relationship between the context and the owner of the constraint: “In general there are many possible kinds of owners for a Constraint. The only restriction is that the owning element must have access to the constrainedElements. The owner of the Constraint will determine when the constraint specification is evaluated. For example, this allows an Operation to specify if a Constraint represents a precondition or a postcondition” I not sure it is possible to define a constraint without a context. I believe a constraint always has a context even if it is an implicit one. Maybe a convenient solution would be to make the context non-derived but mandatory ([1..1]) with a default value set to the constraint’s owner.
No problem with the issue itself or the proposed resolution. I’m just wondering about the principle of the “association-like notation”. My concerns: The specification says that “An attribute may also be shown using association notation”. Nevertheless, defining an attribute or using an association as described in figure 7.31 is not the same thing. The definition of one attribute generates only one property while the definition of a binary association generates two properties plus a classifier for the association itself. If it’s only a matter of notation, how to distinguish in a diagram between: a) an attribute with an association-like notation and b) a “true” association? Yves
Chapter 14 is ambiguous and contradictory about how to link up messages and execution specifications. This is because in the metamodel the start and finish of an ExecutionSpecification are OccurrenceSpecifications, not ExecutionOccurrenceSpecifications. This means that it appears to be valid for the MessageOccurrenceSpecification that is a Message's receiveEvent to also be the start of an ExecutionSpecification. The text is equally ambiguous. The 14.3.10 paragraph "An ExecutionSpecification is a specification of the execution of a unit of behavior or action within the Lifeline. The duration of an ExecutionSpecification is represented by two ExecutionOccurrenceSpecifications, the start ExecutionOccurrenceSpecification and the finish ExecutionOccurrenceSpecification" appears to say unambiguously that the start and finish must be ExecutionOccurrenceSpecifications. However the later sentence "Typically the start occurrence and the finish occurrence will represent OccurrenceSpecifications such as a receive OccurrenceSpecification (of a Message) and the send OccurrenceSpecification (of a reply Message)" both introduces ambiguity through the use of the word "typically", and then proceeds to blatantly contradict the earlier paragraph. This causes tool interoperability problems. I suggest targeting ExecutionSpecification::start and finish onto ExecutionOccurrenceSpecification, and rewriting the contradictory semantics accordingly.
It is not clear from chapter 14 how interaction fragments are supposed to be owned when there are InteractionOperands present. It seems to be the case, but is not stated, that everything diagrammatically inside the operand should be owned by the fragment. This would, I think, give rise to the following consequences: 1. The top and bottom of each fragment and operand must be on the same Lifeline or Execution. A fragment cannot span different executions or have its boundaries cover different levels of execution nesting. 2. Everything inside of a fragment/operand must be entirely contained by the fragment/operand. This includes both sides of a message, all nested fragments, interaction uses, and the top and bottom of execution specifications. However it appears to be a valid instance of the metamodel to parent arbitrary fragments at any level of nesting, which would enable these constraints to be violated. The specification should confirm these ownership constraints. This would best be done in conjunction with the sentence “InteractionOperand contains an ordered set of InteractionFragments” in section 14.3.16, which should state exactly which InteractionFragments must be owned by the InteractionOperand. Different vendors’ interpretations of this ambiguity can cause interoperability problems.
Is there a standard UML way of initializing complex fields. Several examples below
A: Integer (3,2) = (1,2,3,4,5,6)
A: Integer (3,2) = ((1,2,3), (4,5,6))
A: Integer (3,2) = ((1,2), (3,4), (5,6))
And are they all the same?
A: Integer (2,3) = (1,2,3,4,5,6)
A: Integer (2,3) = ((1,2,3), (4,5,6))
A: Integer (2,3) = ((1,2), (3,4), (5,6))
And are these the same?
And what’s the difference.
And here another set
Measurement (a Type)
Value: Real
Unit : String
Experiment:Measurement(3) = (1.0, “ft”, 2.0,”ft”,3,”ft”)
= ((1.0,”ft”), (2.0,”ft”), (3,”ft”))
Experiment:Measurement(3,2)) = (1.0, “ft”, 2.0,”ft”,3,”ft”, 4,”ft”, 5,”ft”,6,”ft”)
((1.0,”ft”), (2.0,”ft”), (3,”ft”), (4,”ft”), (5,”ft”), (6,”ft”))
(((1.0,”ft”), (2.0,”ft”), (3,”ft”)), ((4.0,”ft”), (5.0,”ft”), (6,”ft”)))
My preferences are for the last one above (the one with the extra set of parenthesis), because is better support composition
e.g.
NullResults:Measurement = (0.0,”ft”)
StartingResults:Measurement(3) = (NullResults, NullResults, NullResults)
Experiment:Measurement(3,2) = (StartingResults, ((4.0,”ft”),(5.0,”ft”),(6.0,”ft”)))
The UML spec is silent about the correct way of doing this. I’d like to have a language independent way of doing this.
The standard specifies the guard of an activity edge like this: guard : ValueSpecification [1..1] = true Hence it is required that every activity edge has a guard. This should be changed to [0..1] to make the guard optional. The standard should also say that if a guard is not present it means the same as a "true" guard. Note that the guard of a state machine transition is optional, so this change will make things more consistent
The UML superstructure allows an Operation to have: bodyCondition: Constraint[0..1] : An optional Constraint on the result values of an invocation of this Operation. Subsets Namespace::ownedRule Since bodyCondition is of type Constraint, its expression must be boolean according to clause 7.3.10 (Constraint): [1] The value specification for a constraint must evaluate to a Boolean value. Now, the OCL spec states in 7.3.6 that an operation body expression has the form: context Typename::operationName(param1 : Type1, ... ): ReturnType body: -- some expression and gives an example: context Person::getCurrentSpouse() : Person pre: self.isMarried = true body: self.mariages->select( m | m.ended = false ).spouse Notice that in this example, the expression is NOT boolean, therefore if "self.mariages->select( m | m.ended = false ).spouse" was used as an expression in the bodyCondition, it would not be valid. Am I missing something? in RSA, we got around this by requiring the expression to be of the format: context Typename::operationName(param1 : Type1, ... ): ReturnType body: result = some expression Is the keyword "result" legal in the expression of bodyCondition?
In the section describing Lifelines, the term "method activations" is used twice, both times on page 508. (1) "To depict method activations we apply a thin grey or white rectangle that covers the Lifeline line." (2) "See Figure 14.12 to see method activations." Having had a look at Figure 14.12 and having read section 14.3.10 ExecutionSpecification, I believe that the term "method activation" is deprecated and should be substituted by the term "execution specification".
Please create a new issue number to split the addition of generalization relationships among association in 14977 in two parts. Cases 2 and 3 below will remain in 14977 and the generalization relationships added for case 1 below will be moved to a resolution for this new issue number. This will give everyone in the RTF an opportunity to vote on the relationship between association end subsetting & association generalization separately from the fixes to the association end subsets.
"The class that the auxiliary supports may be defined explicitly using a Focus class or implicitly by a dependency relationship." - how a class be defined implicitly let alone via a Dependency? Likewise in the description of Focus
I do not understand the following in Create (when applied to BehavioralFeature) “May be promoted to the Classifier containing the feature.” The same appears on Destroy
It seems odd to say that Service “computes a value”.
1 A_owningPackage_packagedElement shown as directional 2 owningPackage shown as public member of association, not declared as an association of PackageableElement (7.3.38) 3 A_package_ownedType shown as bidirectional, but package not declared as an association of Type (7.3.51) 4 PackageableElement::visibility:VisibilityKind default value is 'false' (7.3.38) - already submitted
In Figure 7.10, Feature::isStatic is shown as an abstract attribute. Also StructuralFeature::isReadOnly and all attributes of MultiplicityElement in Figure 7.5, p27
In Figure 7.15, NamedElement::clientDependency is constrained to subset DirectedRelationship::source. Should be Dependency::client constrained, similarly Dependency::supplier should subset target.
We have a debate about the concept of Port in the SysML RTF and I would like to get your opinion about some points because we have divergent interpretations of the UML specification. Since a port can be typed by a class, what about the properties and the owned behavior(s) defined for that class? Does the interaction point that instantiates the port has slots to hold runtime values of the properties defined by its type or does it only refer to values held by the instance of its owner (or by a instance of its environment)? How ownedbehaviors defined by the type of the port may impact the way interactions at that port are managed?
A State Machine can have parameters. How can values for these parameters be passed from a submachine State which references a State Machine with parameters?
Use of isAbstract for Interfaces ------------------------------------- Section 7.3.24 of Superstructure states: “Because an interface is merely a declaration it is not an instantiable model element; that is, there are no instances of interfaces at run time.” And also: “An interface cannot be directly instantiated. Instantiable classifiers, such as classes, must implement an interface” . This would imply that isAbstract (inherited from Classifier) must be true. However there is no constraint to this effect on Interface. Furthermore none of the notation examples show the Interface name in italics. This is an issue for the Model Interchange Working Group
The syntax for property strings (defined using BNF in Notation section of 7.3.44) does not include the ability to specify aggregation of shared or composite.
Section 17.2.1 of the superstructure document, InformationFlow The text of the constraint reads "The sources and targets of the information flow can only be one of the following kind: Actor, Node, UseCase, Artifact, Class, Component, Port, Property, Interface, Package, ActivityNode, ActivityPartition and InstanceSpecification except when its classifier is a relationship (i.e. it represents a link)." The OCL reads: (self.informationSource->forAll(p | p->oclIsKindOf(Actor) or oclIsKindOf(Node) or ... the "p->" is missing from the second term above (should be "p->oclIsKindOf(Node)") and from all subsequent terms.
The description for the stereotype in Annex C contains significant semantics which are not reflected anywhere else in the specification, nor as Constraints associated with the stereotype. Because this is a stereotype, not a keyword, these are not warranted. The full text is as follows: A package that contains model elements that are intended to be reused by other packages. Model libraries are frequently used in conjunction with applied profiles. This is expressed by defining a dependency between a profile and a model library package, or by defining a model library as contained in a profile package. The classes in a model library are not stereotypes and tagged definitions extending the metamodel. A model library is analogous to a class library in some programming languages. When a model library is defined as a part of a profile, it is imported or deleted with the application or removal of the profile. The profile is implicitly applied to its model library. In the other case, when the model library is defined as an external package imported by a profile, the profile requires that the model library be there in the model at the stage of the profile application. The application or the removal of the profile does not affect the presence of the model library elements Specifically the problems are: a) More specifics should be given for “This is expressed by for a dependency between a profile and a model library package” – such as the direction and name. b) Replace ‘tagged definitions’ by ‘properties’ or at least ‘tag definition’ c) The text ‘is imported or deleted’ is vague and goes beyond anything in Profile semantics (for example does it mean a PackageImport is implicitly created?) d) “The profile is implicitly applied to its model library” does not make sense except in the specific case that the model library is a set of stereotyped elements, regardless of whether the model library owned by the profile: if the model library is for use within or with the profile why would it be necessary to apply stereotypes to its elements? And it goes beyond Profile semantics as well as resulting in a circular dependency between library and profile. e) “In the other case, when the model library is defined as an external package imported by a profile,” is inconsistent with the earlier description of ‘the other case’ which is as defined via a Dependency (not an import). f) “the profile requires that the model library be there in the model at the stage of the profile application” is both vague (‘be there’) and beyond profile semantics. Proposed resolution Replace the paragraph with the following: A package that contains model elements that are intended to be reused by other packages. Though model libraries are frequently used in conjunction with applied profiles, the classes in a model library are not stereotypes extending the metamodel. A model library is analogous to a class library in some programming languages.
18.3.6 Semantics contains the following untrue sentence which should be deleted “The profile mechanism may be used with any metamodel that is created from MOF, including UML and CWM.”
Typo in third paragraph below fig. 18.8: isStric should be isStrict
Current UML specification use the two following constraints: 15.3.8 Pseudostate (from BehaviorStateMachines) Constraint [9] The outgoing transition from an initial vertex may have a behavior, but not a trigger or guard (self.kind = PseudostateKind::initial) implies (self.outgoing.guard->isEmpty() and self.outgoing.trigger->isEmpty()) 15.3.14 Transition (from BehaviorStateMachines) Constraint [5] Transitions outgoing pseudostates may not have a trigger (except for those coming out of the initial pseudostate) (source.oclIsKindOf(Pseudostate) and (source.kind <> #initial)) implies trigger->isEmpty() These constraints are not really contradictory but it is not clear to know if an initial pseudostate can or cannot have a trigger.
Since the "isUnique" and "isOrdered" properties have default values, do we need to have both 'unique'/'nonunique' and 'ordered'/'unordered' textual annotations? or do we only need ones for non-default values? I noticed that in some presentation option sections in the spec both annotation values are mentioned, while in other sections only one value is mentioned (diagrams in the spec also use them inconsistently): Superstructure: 7.3.3 Association has 'nonunique' and 'ordered <= This seems to be the most correct 7.3.32 MultiplicityElement has 'unique'/'nonunique' and 'ordered'/'unordered' 7.3.36 Operation has 'unique' and 'ordered' 7.3.44 Property have 'unique'/ 'nonunique' and 'ordered' Infrastructure: 9.12.1 MultiplicityElement has 'unique'/'nonunique' and 'ordered'/'unordered' 11.8.2 Operation has 'unique' and 'ordered' 11.3.5 Property have 'unique' and 'ordered' What made me notice that is the addition of 'id' by resolution 15369, do we need to log an issue to fix this later?
qualifiedName is not unambiguous
Section 7.3.33 states:
“A named element also has a qualified name that allows it to be unambiguously identified within a hierarchy of nested namespaces.” And the description of the property has: “A name that allows the NamedElement to be identified within a hierarchy of nested Namespaces.”
Constraint [2] describes the derivation of /qualifiedName which makes use of the names of the containing namespaces.
However the use of isDistinguishableFrom in the constraint for Namespace, which allows the names to be the same but the types different, means that the name alone may not unambiguously identify either the element or its namespaces.
It seems that we have the following options:
- Remove the notion of type from isDistinguishableFrom and insist on the names being different
- Somehow include the type/metaclass in the qualified name (which I think we can do without needing a qualified name for the type itself – since UML has a flat namespace – but it could cause problems for profiles or other metamodels)
- Drop the idea that the qualified name allows unambiguous identification. Which would be a shame. And might affect it being marked as {id} as per the recent issue resolution
BTW the OCL for the derivation of /qualifiedName uses union() to construct it: however AFAIK this will not result in a String.
The description of NamedElement claims that: A named element also has a qualified name that allows it to be unambiguously identified within a hierarchy of nested namespaces. However the validation rules for names within a namespace take, by default, the type into account and, for a behavioral feature, parameters. The qualified name uses only the name and thus isn't unambiguous as claimed.
On the figure 9.2 "The Abstractions package contains several subpackages, all of which are specified in this clause" (shows all dependencies of Abstractions package subpackages)the Namespaces package do not depend on any others. But actually it depends on Ownerships package. Note: it is shown in right way in section "9.14 Namespaces Package". Side effect: Classifiers package depends (directly) on Namespaces package (which is shown in right way in chapter "9.4 Classifiers Package". And it depends on Ownerships package only indirectly (through Namespaces package). But on "Figure 9.2 - The Abstractions package contains several subpackages, all of which are specified in this clause" both dependencies are shown (which is not correct). To be fixed: on the "Figure 9.2 - The Abstractions package contains several subpackages, all of which are specified in this clause" 1. Add dependency "Namespaces ---> Ownerships" 2. Remove dependency "Classifiers ---> Ownerships"
The stereotype «Create» and keyword «create» are both defined in the UML 4 document a. Figure 9.10 uses «create» b. Figure 9.27 uses «create» c. In appendix B, 2nd page, the «create» keyword is defined to apply to an operation that is a constructor, and to apply to a usage dependency, both uses of «create» appear in the Table B.1. This is consistent with items a and b above. d. In table C.1, both these uses are also defined as stereotypes, but with «Create». However, as stereotype matching is case insensitive, this is also consistent with items a and b above. So are the usages in a and b, keywords or stereotypes? e. In the last (and unlabeled) table in section C of obsolete elements, «create» is obsolete when applying to a CallEvent or Usage. How does this fit in? similar problems apply to several elements in table B.1 which are both stereotypes and keywords
In section 14.4 that describes Interaction diagrams, there are statements describing interaction overview diagrams that is highly misleading and which, in my consulting experience with numerous UML users, have been the source of much misunderstanding: "Interaction Overview Diagrams are specialization of Activity Diagrams that represent Interactions" as well as: "Interaction Overview Diagrams define Interactions through a variant of Activity Diagrams" While there is indeed syntactic similarity between the two forms (e.g, with fork and join nodes), the underlying semantics between the two diagrams are quite different. For instance, activities, by definition, fully complete their execution before passing control/data tokens to their successors (as defined by the token passing rules), whereas this does not hold in general for interaction uses (the blocks in an overview diagram). In fact, while one object/lifeline could still be completing its business in one interaction use block (so to speak), its collaborating peer could already have entered a successor block. That is, in general, there is no implicit synchronization between lifelines when entering and exiting the blocks in an overview diagram. (Far too many users assume this type of synchronization, resulting in erroneous or unimplementable model specifications.) There are numerous other semantic differences between Interactions and Activities (e.g., the latter include the notion of pins, control and data flow tokens, etc., while the former do not have any such notions), which further invalidate the claim that one is a special variant of the other. Finally, the metamodels underlying the two diagrams are completely different To summarize: Interaction Overview diagrams are NOT a specialization or variant of Activity Diagrams. The solution to this problem is not just to remove the two misleading statements, but to also add an explanation that explicitly points out the differences between the two, so that readers are not misled by the similarity in notations.
coveredBy holds a number of MessageOccurenceSpecifications and so on. It mustn't be [0..1] but be [*].
In section 8.3.1 and Table 8.4 there are several examples of nation claiming to show ‘provided interface’ for a Component. However Component::provided is a derived property – with many base properties on which it is based. Hence it seems completely un-obvious what a tool is supposed to store/export if a user draws one of these diagrams. Or is it intended that users not be allowed to draw them at all, but invoke a query (in some manner rightly not covered by the UML spec) to cause the ‘provided’ line (and possibly related elements) to be displayed? A further problem is that the ‘provided’ notation is identical to the ‘provided interface’ notation documented in section 7.3.24. And Table 8.1 makes reference to 7.3.24 for the notation although it uses the different term ‘implements’. Therefore it seems that the notation should be separated from the derived property, with the notation retained for simple realizedInterfaces – either by removing the term ‘provided’ from the description of the diagrams or renaming the property to be more descriptive
Resolution 14977 cleaned up many association end subsets/redefinitions; in particular, this resolution ensures that if an association end subsets/redefines another, then there is a symmetric subsetting/redefinition of the other end and that the subsetted/redefined ends belong to the same association. Two group of proposed changes were removed from 14977. The first group involves generalization relationships among associations: http://www.omg.org/issues/uml2-rtf.open.html#Issue15274 Generalization relationships are needed when the semantics of an association whose ends subset/redefine the ends of another association is that the set of links of the former association are necessarily a subset of the links of the latter. Since this isn't necessarily the case, it implies that generalization relationships are needed to clarify this semantic intent as shown in slide 31 of the following UML2.0 presentation: http://www.omg.org/members/cgi-bin/doc?omg/04-05-01.pdf The second group involves associations that are under-specified in the sense that each association: - does not own any end (i.e., both ends are navigable according to 7.3.45) - none of the ends subset/redefine ends of another association that has semantic directionality The criteria for an association to have semantic directionality is: a) one end is navigable; the other isn't b) one end is composite; the other isn't c) one end subsets/redefines another end of an association that is semantically directed; the other doesn't d) one end has required multiplicity (i.e., lower>0); the other is optional (i.e., lower=0) e) one end has bounded multiplicity (i.e., upper>0); the other has unbounded multiplicity (i.e., upper<0) Without semantic directionality, an association owns neither of its member ends and there is no objective criteria to determine what effect changing one association end can/should/may have on changes to the other end, if any. In UML2.4, there are 9 associations that fail all of (a) through (e): [qvto:transformation] A_containedEdge_inGroup [qvto:transformation] A_containedNode_inGroup [qvto:transformation] A_covered_coveredBy [qvto:transformation] A_edge_inPartition [qvto:transformation] A_generalizationSet_generalization [qvto:transformation] A_inInterruptibleRegion_node [qvto:transformation] A_inPartition_node [qvto:transformation] A_predecessorClause_successorClause [qvto:transformation] A_subject_useCase 19 associations satisfy (a), (b), (c) but fail either (d) and (e): [qvto:transformation] A_before_toAfter [qvto:transformation] A_classifier_templateParameter_parameteredElement [qvto:transformation] A_connectableElement_templateParameter_parameteredElement [qvto:transformation] A_end_role [qvto:transformation] A_extension_metaclass [qvto:transformation] A_incoming_target_node [qvto:transformation] A_incoming_target_vertex [qvto:transformation] A_inputElement_regionAsInput [qvto:transformation] A_interruptingEdge_interrupts [qvto:transformation] A_method_specification [qvto:transformation] A_operation_templateParameter_parameteredElement [qvto:transformation] A_outgoing_source_node [qvto:transformation] A_outgoing_source_vertex [qvto:transformation] A_outputElement_regionAsOutput [qvto:transformation] A_parameterSet_parameter [qvto:transformation] A_parameteredElement_templateParameter [qvto:transformation] A_powertypeExtent_powertype [qvto:transformation] A_submachineState_submachine [qvto:transformation] A_toBefore_after All 28 cases above correspond to associations that, while well-formed in the metamodel according to 14977 & other applicable resolutions, are under-specified in the specification in the sense that there is a reasonable interpretation where each association has a natural direction, either because of cardinality restrictions (i.e., (d) or (e) would suffice to give direction to the 19 associations above) or because there is insufficient application of the architecture principles for OMG metamodels (e.g., incomplete modeling of ownership in most of the cases for the first group of 9 association). The consequence for end users is that each of the 28 associations represents a source of modeling errors unless tool implementations choose to implement these associations in a non-standard way, e.g., by ascribing a sensible semantics to these associations that removes the ambiguity about which end can be changed independently of the other end -- i.e., the association is semantically directed in that one end can be logically derived from the other end.
Currently, the prevalent use of property subsetting/redefinition mechanism has been confined to a pairs of properties defined within a single artifact (e.g., metamodel, user model, ....) In principle, the specification allows using this mechanism even for a pair of properties where the subsetted/redefined property is defined in one artifact (e.g., a metamodel) and the subsetting/redefining property is defined in another artifact (e.g., a profile extending the metamodel). This flexibility could be useful in practice -- e.g., see some of the proposed changes for SysML1.3 here: http://www.omg.org/members/sysml-rtf-wiki/doku.php?id=rtf3:groups:9_ports_and_flows. The specification does not explicitly discuss what is the semantics of subsetting/redefinition when the subsetted/redefined property is in a different artifact, potentially at a different level than the artifact where the subsetting/redefining property is defined. Combinations of subsetted/redefined property vs. subsetting/redefining property could include: - metamodel/profile - profile/profile - library/profile
Multiple tool vendors have failed to implement support for a Connector that has a type of an AssociationClass. This may be partly due to the fact that Connector (9.3.6) doesn’t explicitly describe this variation under type. Nor does any example show this use. I would expect that the properties/methods of Connector that has a type of an AssociationClass to be represented similarly to representation of an AssociationClass between Classes.
The description for Operation::isConsistentWith(redefinee : RedefinableElement) suggests that parameter direction should be consistent
"A redefining operation is consistent with a redefined operation if it has the same number of formal parameters, the same number of return results, and the type of each formal parameter and return result conforms to the type of the corresponding redefined parameter or return result."
However, the OCL provided does not check that the "direction" of parameters is consistent.
Operation::isConsistentWith(redefinee: RedefinableElement): Boolean;
pre: redefinee.isRedefinitionContextValid(self)
result = redefinee.oclIsKindOf(Operation) and
let op: Operation = redefinee.oclAsType(Operation) in
self.ownedParameter->size() = op.ownedParameter->size() and
Sequence{1..self.ownedParameter->size()}->
forAll(i | op.ownedParameter->at(1).type.conformsTo(self.ownedParameter->at(1).type))
The operation RedefinableElement::isConsistentWith(redefinee : RedefinableElement) has the documentation: "The query isConsistentWith() specifies, for any two RedefinableElements in a context in which redefinition is possible, whether redefinition would be logically consistent. By default, this is false" It is not clear from this description above whether the parameter "redefinee" is the redefining or the redefined element. A look at some of the overrides of this operation like Property::isConsistentwith(redefinee : RedefinableElement): " A redefining property is consistent with a redefined property if the type of the redefining property conforms to the type of the redefined property, and the multiplicity of the redefining property (if specified) is contained in the multiplicity of the redefined property. " The description suggests that the "redefinee" is probably the "redefined" property. On the other hand, the precondition provided in OCL suggests that "refinee" is definitely the "redefining" property: pre: redefinee.isRedefinitionContextValid(self) since RedefinableElement::isRedefinitionContext(redefined : RedefinableElement) has the description: "...at least one of the redefinition contexts of this element must be a specialization of at least one of the redefinition contexts of the specified element." In summary, this means RedefinableElement has the two operations: RedefinableElement::isConsistentWith(redefining : RedefinableElement) RedefinableElement::isRedefinitionContext(redefined : RedefinableElement) At least "redefinee" should be renamed to "redfining" since this is the term used in the descriptions. However, having the two closely related operations taking opposite parameters make it very confusing and inconsistent.
Constraint [7] in Kernel::Operation says: "A bodyCondition can only be specified for a query operation" Let us look at the definition of isQuery and bodyCondition: bodyCondition: Constraint[0..1] An optional Constraint on the result values of an invocation of this Operation. isQuery : Boolean Specifies whether an execution of the BehavioralFeature leaves the state of the system unchanged (isQuery=true) or whether side effects may occur (isQuery=false). Question: I am not sure why specifying a condition on the result of an operation is only limited to operations with no side effects. What is wrong with specifying a condition on the result of a non-query operation?
Constraint [4] in Property implies an owned end can redefine any end of any ancestor of its owning association, whether that end is association owned or not. However in the case of an association-owned end redefining a (non-association) classifier-owned end, whose association is an ancesor (of the owning association), the redefinitionContexts are stil: the owningAssociation for the redefining proeprty the classifier for the redefined property Doesn't this violate constraint [1] of RedefinableElement [1] At least one of the redefinition contexts of the redefining element must be a specialization of at least one of the redefinition contexts for each redefined element. self.redefinedElement->forAll(e | self.isRedefinitionContextValid(e)) where RedefinableElement::isRedefinitionContextValid(redefined: RedefinableElement): Boolean; result = self.redefinitionContext->exists(c | c.allParents()->includes(redefined.redefinitionContext)) since the classifier can never be an ancestor of the association?
In the semantics section of MessageEnd it says “Subclasses of MessageEnd define the specific semantics appropriate to the concept they represent.” However, in the semantics section of MessageOccurrenceSpecification, a subclass of MessageEnd, it says “No additional semantics” So it’s not clear what the semantics of MessageOccurrenceSpecification are.
I think derived properties should not have default values, since they are calculated from other info in the model and not from those default values. Here is a list of such derived properties in the metamodel: PropertyIsDerivedWithDefaultValue : 13 property = <Property> UML::State::/ isSubmachineState : Boolean defaultValue = <Literal Boolean> false property = <Property> UML::State::/ isSimple : Boolean defaultValue = <Literal Boolean> true property = <Property> UML::State::/ isOrthogonal : Boolean defaultValue = <Literal Boolean> false property = <Property> UML::State::/ isComposite : Boolean defaultValue = <Literal Boolean> false property = <Property> UML::Operation::/ upper : UnlimitedNatural [0..1] defaultValue = <Literal UnlimitedNatural> 1 property = <Property> UML::Operation::/ lower : Integer [0..1] defaultValue = <Literal Integer> 1 property = <Property> UML::Operation::/ isUnique : Boolean defaultValue = <Literal Boolean> true property = <Property> UML::Operation::/ isOrdered : Boolean defaultValue = <Literal Boolean> false property = <Property> UML::MultiplicityElement::/ upper : UnlimitedNatural [0..1] defaultValue = <Literal UnlimitedNatural > 1 property = <Property> UML::MultiplicityElement::/ lower : Integer [0..1] defaultValue = <Literal Integer> 1 property = <Property> UML::Message::/ messageKind : MessageKind defaultValue = <Instance Value> unknown property = <Property> UML::ExtensionEnd::/ lower : Integer [0..1] defaultValue = <Literal Integer > 0 property = <Property> UML::Extension::/ isRequired : Boolean defaultValue = <Literal Boolean> false do we need to fix them?
DecisionNode's behaviour when a token cannot pass any edge at the moment it arrives and the guards are evaluated is not specified. When will the guards be evaluated next time?
The last paragraph of the semantics section of 12.3.18 ConditionalNode, states Within the body section, variables defined in the loop node or in some higher-level enclosing node may be accessed and updated with new values. Values that are used in a data flow manner must be created or updated in all clauses of the conditional; otherwise, undefined values would be accessed. I assume that the reference to ‘loop node’ is incorrect.
There isn't a constraint that prevents multiple associations from being specified between the same Actor and Use Case. Multiplicity is handled already by the multiplicity at the association's ends, so having two or more different associations seems to be redundant.
Usage of <<bind>> to define parameterized classes in object diagrams is nowhere defined in the UML specification. Not as a keyword in Annex B (p. 707) and also not as a standard stereotype (Annex C, p. 713). I just wondered what the actual definition of <<bind>> may be. Maybe it would be good to define it somewhere.
I am using the UML specification very often and I am navigating a lot through specific elements. One thing which bothers me most is that I can only hop to the generalization of elements but not to their specializations. For example for activity diagrams, if I go to Section 12.3.16 CentralBufferNode (p. 360) I know that it is a sub-type of an ObjectNode. But now I have no chance to see which sub-types of a CentralBufferNode exists (e.g. a DataStoreNode). So I have to navigate back to p. 312 to see the dependencies of a CentralBufferNode. In my point of view would displaying not only generalizations but also specializations of elements directly at an element's description be a great advantage to the readability of the specification. It would certainly be a great surplus to me, maybe others have thought the same way, too.
The spec says: bodyCondition: Constraint[0..1] An optional Constraint on the result values of an invocation of this Operation. Subsets Namespace::ownedRule couple this with: The bodyCondition for an operation constrains the return result. The bodyCondition differs from postconditions in that the bodyCondition may be overridden when an operation is redefined, whereas postconditions can only be added during redefinition. Also, in the current MM, the defined operations logic is implemented as a body Condition. Therefore, the bodyCondition is not an invariant, but rather a condition that describes the return result. of an operation Since a non-query operation can also have a return result, I see no reason to prevent a body condition on it.
We are talking about an operation declared in the UML metamodel, so Operation::returnResult() : Parameter [0..1] is definitely valid UML notation. while Operation::returnResult() : Set(Parameter) which is the way it is now in spec is definitely not valid UML notation, it is supposed to be: Operation::returnResult() : Parameter [*] In both cases, the way OCL interprets the result of such opertion is similar to how it interprets any value, as a collection, and as such collection operations can be called on it. Therefore, to be consistent, this operation should be changed have a simple "Parameter" as a return type. However, if we are going to leave this operation with * multiplicity to be more robust or OCL friendly, then at least we should be consistent in those other cases, where we have singular return result. OperationHasSingularReturnResult : 16 operation = <Operation> UML::Vertex::containingStateMachine () : StateMachine operation = <Operation> UML::Transition::redefinitionContext () : Classifier operation = <Operation> UML::Transition::containingStateMachine () : StateMachine operation = <Operation> UML::Stereotype::profile () : Profile operation = <Operation> UML::Stereotype::containingProfile () : Profile operation = <Operation> UML::StateMachine::LCA (s1 : State, s2 : State) : Namespace operation = <Operation> UML::State::redefinitionContext () : Classifier operation = <Operation> UML::State::containingStateMachine () : StateMachine operation = <Operation> UML::Region::redefinitionContext () : Classifier operation = <Operation> UML::Region::containingStateMachine () : StateMachine operation = <Operation> UML::Property::opposite () : Property operation = <Operation> UML::Package::containingProfile () : Profile [0..1] operation = <Operation> UML::Operation::type () : Type operation = <Operation> UML::LinkAction::association () : Association operation = <Operation> UML::Extension::metaclassEnd () : Property operation = <Operation> UML::Extension::metaclass () : Class
Compare "Figure 9.37 - The Namespaces package" on page 71 of same document.
According to figure 7.12, Property.isReadOnly redefines StructuralFeature.isReadOnly. But the redefinition is not mentioned in 7.3.45. Both of these properties have the same name, type, multiplicity and default, so Property.isReadOnly is unnecessary. The resolution will be to delete Property.isReadOnly from metamodel, text and diagram.
On my first UML 2.5 efforts at consolidating the semantics of Classifiers in the merged model it becomes very obvious that Parameter has two sets of semantics: one related to the parameters of BehavioralFeatures and one related to the parameters of Behaviors. ParameterSet semantics talks almost exclusively about Behaviors. There is a forward reference in 12.3.13 that says “See semantics of ParameterSet”. But all 12.3.43 says is “A behavior with output parameter sets can only post outputs to the parameters in one of the sets per execution. The same is true for operations with parameter sets.” 12.3.13 also says “See notation for ParameterSet” – that is simply false, because 12.3.43 only has notation for Behaviors (well, actually Activities, because Behavior has no notation (13.3.2) but that’s the topic of a separate discussion). ParameterEffectKind, as well, talks exclusively about Behaviors. So on the face of it, the Parameter behavior related to BehavioralFeatures is distinct from the Parameter behavior related to Behaviors. Now, in the UML specification, there actually appear to be two separate metaclasses called Parameter. There is the one defined in Kernel, together with the one defined in Collaborations as a merge increment: the merge happens via Collaborations->InternalStructures->Interfaces->Dependencies->Kernel. There is a second one defined in CompleteActivities. According to the specification text, this is a specialization (it does not say merge) of the one in Kernel. However these are the merges: CompleteActivities->IntermediateActivities->BasicActivities->FundemantalActivities->BasicBehaviors->Kernel. So CompleteActivities::Parameter is also merged with the others. The end result is Parameter which defines both direction: ParameterDirectionKind and effect: ParameterEffectKind, that can be organized into subsets, regardless of where it is used. But there are almost no semantics and no notation specified for the Behavior-oriented features as they relate to BehavioralFeature. One explanation of this might that the merge is accidental, and there are supposed to be two definitions of Parameter. This is belied, however, by 12.3.13 and figure 12.18. Can anybody explain what this is supposed to be about? Are these meanings of Parameter really supposed to be integrated like this? What are the meanings of effect and parameterSet for Operations and Receptions? What is the relationship between direction and effect for a Parameter?
Issue 15780 for OCL suggests resolving the inconsistent definition of UnlimitedNatural by defining '*' infinity (and '-*' minus infinity) as valid Integer and Real values. This is appropriate to resolve the anomally that Integer conformsTo Real so any Integer is a valid Real, UnlimitedNatural conformsTo Integer so any UnlimitedNatural is a valid Integer except that at present '*' is a valid UnlimitedNatural without a valid Integer or Real counterpart. The resolution of Issue 14196, introducing UnlimitedNatural to the OCL specification, indicates that any use of UnlimitedNatural '*' as an Integer or Real requires a conversion to invalid. This imposes an undesirable implementation burden in addition to the anomalous conformance behaviour. Therefore please add '*' (and '-*') to Integer and Real.
"A region may have at most one deep history vertex." (pg 564) "A composite state may have at most one deep history vertex." (pg 557) This implies that only one region of a composite state may have a deep history vertex. There is no formal constraint to the effect. Please clarify. "deepHistory represents the most recent active configuration of the composite state that directly contains this pseudostate" (pg 557) This implies that all regions of a orthogonal composite state are returned to the the most recent active configuration of the composite state but...at the bottom of page 570 it asserts the other regions are entered "by default" which has a different semantic. Please clarify.
This came up in the MIWG testing (though that was for UML 2.2) There seem to be several cases where the specification has defaults that are not represented in the XMI. Examples of this are as follows: ActivityEdge::guard : ValueSpecification [1..1] = true ActivityEdge::weight : ValueSpecification [1..1] = 1 ObjectNode::upperBound : ValueSpecification [1..1] = * They all seem to be ValueSpecifications so I’m sure there are others. BTW these are all listed under Attributes of the metaclass whereas they are in fact modeled as Associations with ValueSpecification. So should they not be placed into the Associations section? Something to look at for 2.5 I guess.
UML 2.3 RTF resolved ISSUE 14277 as follows: “ Japan Superstructure PAS Ballot Comments - comment 20 Summary: Part I, II, III,, IV This is a multipart standard, use of "Part I, II, III, IV" make confusion. Delete unnecessary Part IV and Make others rewrite as clauses. 7. Structure, 12 Behavior, 19 Supplement and renumber other clauses. Resolution: Agree to change word “Part” to “Sub Part” throughout document. “ PTC/9-9-10 , the UML 2.3 Infrastructure convenience document has the changes of the tem “Part” to “Subpart”, as per the resolution to ISSUE 14277 by the UML 2.3 RTF. However the published UML 2.3 Infrastructure reverted to the use of the term “Part”. Also, ISO document templates do not allow hanging text. The introductory text for each is not in any numbered clause. Proposed Resolution: Change term “Part” to “Subpart”, as in PTC/9-9-10. Change title of section 6.2 to be “How to Read this Specificaton” as in PTC/9-9-10, and to be consistent with Superstructure. Add a new section 6.2.2 Contents of Subparts 6.2.2.1 Contents of Subpart I Introduction <move the hanging intro from Part I into this subclause, with minor edits to fix pointers to sections> 6.2.2.2 Contents of Subpart II Infrastructure Library <move the hanging intro from Part II into this subclause, with minor edits to fix pointers to sections> 6.2.2.3 Contents of Subpart III - Annexes <move the hanging intro from Part II into this subclause,>
Title: Part document structures in Superstructure need to conform to ISO standard Document Template Conventions Category: Editorial Nature of Problem UML 2.3 RTF resolved ISSUE 14296 as follows: “ “ Summary: This is a multipart standard, use of "Part I, II, III" make confusion. Delete Part III and Make others rewrite as clauses. 7. General Introduction, 10 Infrastructure Library, and renumber other clauses. Also, delete Part III page. Resolution: Agree to change word “Part” to “Sub Part” throughout document. “ PTC/9-9-08 , the UML 2.3 Superstructure convenience document has the changes of the tem “Part” to “Subpart”, as per the resolution to ISSUE However the published UML 2.3 Infrastructure reverted to the use of the term “Part”. Also, ISO document templates do not allow hanging text. The introductory text for each is not in any numbered clause. Proposed Resolution: Change term “Part” to “Subpart”, as in PTC/9-9-8. Add a new section 6.4.3 Contents of Subparts 6.4.3.1 Contents of Subpart I Structure <move the hanging intro from Part I into this subclause, with minor edits to fix pointers to sections> 6.4.3.2 Contents of Subpart II Behaviour <move the hanging intro from Part II into this subclause, with minor edits to fix pointers to sections> 6.4.3.3 Contents of Subpart III- Supplement <move the hanging intro from Part III into this subclause,> 6.4.3.4 Contents of Subpart IV - Annexes <move the hanging intro from Part IV into this subclause,>
Which semantic for an expansion node owned by an activity (instead an expansion region)? According OMG Unified Modeling LanguageTM (OMG UML), Superstructure, Chapter 12.3.26 An expansion node is an object node used to indicate a flow across the boundary of an expansion region. An expansion region is a structured activity region that executes multiple times corresponding to elements of an input collection. This specific structured activity node is using expansion node as input and output. From outside the expansions regions the elements of expansion nodes only appear as a collections, the elements of collection are only accessible from "inside the collection". Semantic of an expansion node owned by an expansion region is then well defined. However, in abstract syntax nothing prevents to create an expansion node owned by an activity instead of an expansion region. In this case semantic is questionable. If this kind of construction is not expected, a specific constraint should be added in UML specification in order to prevent an activity to owned expansion nodes. On the contrary, if this construction allowed, associates semantic should be defined.
In activity diagrams, the input and outputs to a decision node much all be control or object flows. However, I’m not sure why I need to have that restriction enforced. I can see that if the input is control, no output can be an object flow (because how would the object flow be generated). However, I can imagine cases where an input object flow is evaluated, and 1) If the Object flow is good, the object flow is then passed to a downstream activity Or 2) If the object flow fails, a control flow is sent to start an error recovery activity, but this activity has no need for the object flow in error I would imagine the correct restriction is that If the input flow to a decision is a control flow, only control flows can come out of the decision.
In the UML 2.3, UML 2.4 Superstructure spec, "14.3.17 Lifeline" section, coveredBy is marked with [0..1] multiplicity. In the corresponding figure in the beginning of the Interactions chapter it is marked *. coveredBy : InteractionFragment [0..1]
In the 'Associations' clause of section 9.10.3, the last association 'value : InstanceSpecification [*]' is wrong. It should be 'value : ValueSpecification [*]
In the first item of the 'Constraints' clause, (self.name->isEmpty() or self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty()) implies self.qualifiedName->isEmpty() should be self.name->isEmpty() or (self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty()) implies self.qualifiedName->isEmpty()
UML Relationships, Comments and Constraints are unable to deal properly with composite structures that have more than one nested level. For instance: assume a class “A” with two properties “b1” and “b2” both typed by a class B with only one property “p”. A relationship, a comment or a constraint cannot target specifically A.b1.p and not A.b2.p.
According to several discussions I had with UML users, it appears that many of them, who have the intent to simply to add an attribute to a class, finally create an association to the type of the required attribute. In all case I faced, the reason was that they prefer the notation UML proposes for association which is much more powerful. Mainly: Capability to get a modular diagram thanks to the “link notation” Capability to show the aggregation kind However attributes and association are not the same and it is a pity to introduce such a drift in the semantics just because of the notation. What do you think about adding a notation for the attributes that would offer the capability to represent all their properties and to designate their type using a link?
On page 613, the section of "Semantic", the first sentence of "An include relationship between two use cases means that the behavior defined in the including use case is included in the behavior of the base use case." , the "including" should be "included"
Figure 7.31 propose an “association-like” notation for attributes: - clarifying whether aggregation kind can be shown - the notation for association end property attribute should be clearly distinct from that for a property attribute that is not an association end, even for the visually impaired.
I think that the source of confusion could be the paragraph in page 683 in 10-11-13.pdf “The most direct implementation of the Profile mechanism that a tool can provide is by having a metamodel based implementation, similar to the Profile metamodel. However, this is not a requirement of the current standard, which requires only the support of the specified notions, and the standard XMI based interchange capacities. The profile mechanism has been designed to be implementable by tools that do not have a metamodel-based implementation.” In this paragraph the “XMI based interchange capacities” are mentioned, but there is not a direct reference to page 684, to clarify that these the “XMI interchange capacities” are specified in 684. This paragraph gives the impression that the XMI interchange format is not closed.
The UML Superstructure spec states in Subclause 18.3.7 that: “A Profile can define Classes, DatatTypes, PrimitiveTypes and Enumerations as well as Stereotypes since Profiles imports Constructs. However, these types can only be used as the type of properties in the profile, they cannot be used as types in models the profile is applied to since they apply at the meta-model level, not the model level. It is however possible to define these types in separate packages and import them as needed in both profiles and models in order to use them for both purposes. Stereotypes can participate in binary associations. The opposite class can be another stereotype, a non-stereotype class that is owned by a profile, or a metaclass of the reference metamodel. For these associations there must be a property owned by the Stereotype to navigate to the opposite class. Where the opposite class is not a stereotype, the opposite property must be owned by the Association itself rather than the other class/metaclass.” However, the restrictions expressed in this text are not formalized by any constraints. Either OCL should be added to formalize these restrictions, or the restrictions should be removed
In UML 2.3, section 14.3.19 (Lifelines), the notation of a lifeline is given as follows: <lifelineident> ::= ([‘[‘ ‘]’]] [: [decomposition]) | ‘self’ <selector> ::= <expression> <decomposition> ::= ‘ref’ <interactionident> [‘strict’] Given a Lifeline has an explicit name, it seems as though its not allowed to be displayed. Does anyone know if there is a specific reason for not showing the name of a Lifeline given it has one?
According to the abstract syntax, Generalization::generalizationSet has upper bound *. According to the text: Package PowerTypes A generalization can be designated as being a member of a particular generalization set. There is only one place where the possibility of many sets is mentioned, where it says: “The generalizationSet association designates the collection of subsets to which the Generalization link belongs. All of the Generalization links that share a given general Classifier are divided into subsets (e.g., partitions or overlapping subset groups) using the generalizationSet association. Each collection of subsets represents an orthogonal dimension of specialization of the general Classifier.” The first of these sentences implies that a Generalization can belong to many (“collection of”) GeneralizationSets. The second sentence contains a phrase “subsets (e.g., partitions or overlapping subset groups)” that makes little sense. Rephrasing “subset groups” as “subsets” gives us “e.g., partitions or overlapping subsets” which seems to imply that the GeneralizationSets may overlap. But then “Each collection of subsets represents an orthogonal dimension of specialization” translates to “each collection of GeneralizationSets represents an orthogonal dimension…” which is obviously wrong. Rephrasing as “Each GeneralizationSet represents an orthogonal dimension …” makes more sense: but if they are orthogonal, how can they overlap? Then, in the notation and further explanations, there is no discussion whatsoever of the possibility of a generalization belonging to many GeneralizationSets. I think this is clearly an error in the metamodel.
Figure 15.45 of superstructure v2.3 illustrates the representation of deferred triggers on states. The transition between states "Get Cups" and "Pour coffee" specifies a trigger "light goes out" which is also identified as a deferred trigger of state "Get Cups". Does "light goes out" trigger the transition, or is it deferred? If the figure is not wrong, it would probably be helpful to add a comment in the text (note that figure 15.45 is not referenced in the text).
In my opinion section 9.2 should be numbered as section 9.1.2. That would match to the rest of the numbering scheme.
look at Page 46, there is a typo in the word "metaatribute" in the sentence: ... "AssociationEnd was a metaclass in prior UML, now demoted to a member of Association. The *metaatribute* targetScope"
I downloaded (and partially read) the UML Superstructure file "10-05-05.pdf" from your site. That's one of two defining documents of UML 2.3. Figure 15.32 shows the "Typing password" state from a Statechart diagram. It defines two "entry" actions: setEchoInvisible and setEchoNormal. Clearly, the second action should be an exit action, not an entry action. Can you correct this error in the next version of the document? It's a minor error, but you'll agree with me that it's a bad example this way, I suppose.
UML specification does not provide exact rules for element names. For example, namespace "provides a means for resolving composite names, such as name1::name2::name3." What are the rules for the name1/2/3? Could we use spaces, dashes, digits? For the class name we should: "capitalize the first letter of class names (if the character set supports uppercase)." But what are the rules for the class name? "A use case is shown as an ellipse, either containing the name of the use case or with the name of the use case placed below the ellipse." But what are the rules for the use case name?
Specification requires URI package attribute to follow the rules and syntax of the IETF URI specification RFC 2396. RFC 2396 was rendered obsolete by the more recent version of the URI syntax - RFC 3986, released in 2005.
While describing profile URI attribute for profiles UML specification mingled definition of URI and format used for XMI. URI value as a whole should follow URI specification RFC 2396 and OMG recommended format: uri = http://profileParentQualifiedName/version/profileName.xmi When URI is used for XMI, the profileParentQualifiedName part should also be (made?) valid XML QName, e.g. with "all other illegal XML QName characters removed". Note, that XML QName usually has namespace prefix followed by ':', e.g. 'taxes:dependent', which contradicts to and has no sense as related to the first URI 2396 requirement.
Text says: "A Class that is extended by a Stereotype may be extended by the optional stereotype «Metaclass» ..." The second "extended" has no sense. It should say something like: "A Class that is extended by a Stereotype may be denoted by the optional stereotype «Metaclass» ..."
Text says: "The names of Profiles are shown using a dashed arrow with an open arrowhead from the package to the applied profile." "The names" is not relevant in this context. The arrow is related to profile application. The text should say something like: "The applied Profiles are shown ..."
Several Figures has wrong package name shown. In all cases package name should be "Core" instead of "Constructs": - Figure 7.3 - The Core packages - Part II, Figure 2 - The Core package contains the packages PrimitiveTypes, Abstractions, Basic, and Constructs... - Figure 9.1 - The Core package is owned by the InfrastructureLibrary pack... - Figure 10.1 - The Core package is owned by the InfrastructureLibrary package... - Figure 11.1 -The Core package is owned by the InfrastructureLibrary package... Also, the package name should be shown on the tab.
Typo: say join and not joint. The notation for a fork and join is a short heavy bar (Figure 15.25). The bar may have one or more arrows from source states to the bar (when representing a joint).
Figure 15.32 shows the "Typing password" state from a Statechart diagram. It defines two "entry" actions: setEchoInvisible and setEchoNormal. Clearly, the second action should be an exit action, not an entry action. Can you correct this error in the next version of the document? It's a minor error, but you'll agree with me that it's a bad example this way, I suppose
Is there a semantic difference between markign an associationEnd with isID=true and putting an upper bound of "1" on its opposite end (i.e., a value of this end is related to a maximum of 1 value on the other end)? If there is no semantic difference, is Property::isID only useful for attributes that are not association ends (like primitive attributes that are typically not ends)?
The multiplicity of State::stateInvariant is specified as [0..1]. This seems to restrictive, as it common for states to have multiple invariants, especially since this is the most convenient mechanism for specifying the actual values for properties, etc. that define the state. Furthermore, widening the multiplicity to [*] would be in alignment with the multiplicities of pre/postconditions on operations, etc.
On page 35, Figure 7.15 the Namespace element is described as Namespace from Dependencies package, but (on page 103) Namespace element is defined from Kernel package only.
On page 36, Figure 7.16 shows the content of Interface package. Interface element has associations to four other elements with multiplicity of *. Multiplicity information is not defined on page 89, where the association names for Interface element has been defined.
The UML Superstructure Specification V2.4 states in 16.3.6 UseCase (from UseCases): “Two use cases specifying the same subject cannot be associated since each of them individually describes a complete usage of the subject.” For the longest time, this looked like a common-sense rule. However, it seems to me that in the context of SOA there is at least on exception to this rule. Let’s say that: 1. The subject represents a component (as understood in SOA) and the use cases represent the component’s services. 2. The initiating actor of all of the component’s services is Another Use Case. This reflects the SOA reality that services are not directly consumed by human actors but by other use cases. 3. The component offers services A and B, both of which trace back to legitimate uses. 4. As it happens, when service B is defined in detail it turns out that one of its steps amounts exactly to the functionality represented as service A. In such situations, where the subject already has a public service (A) that can actually be reused by one or more of its other public services (B), I think it’s entirely reasonable to allow B to be associated with A. After all, A’s initiating actor is Another Use Case, which is exactly what B is. In object-orientated terms this amounts to an object performing an operation on itself. I propose for UML to accommodate this scenario.
Version 2.4 intruduces a new UML primitive type - Real. This information has not been mentioned on page 127 - 7.3.44. The package name (I suppose Kernel) has not been defined for LiteralReal - chapter 7.3.29 (page 95); table of contents (page II).
It is an unfortunate restriction to omit guards from the specification of <trigger>/defer. Please explicitly state or reconsider this restriction since using a guard would simplify many scenarios involving event deferral
Suppose we have a stereotype S extending UML::Class. We can apply S to a UML::Class, UML::Activity, UML::StateMachine and any other element whose metaclass is a kind of UML::Class. The UML notation for stereotype allows showing applications of S as <<S>> but this notation does not clearly show what kind of element the element is. In cases where distinct metaclasses (e.g., UML::Class, UML::Activity, UML::StateMachine) use the same notation (i.e. a box), the overall notation is ambiguous. The UML notation could be extended to show optionally the metaclass of an element, e.g., <<S>> [Class] vs. <<S>> [Activity] vs. <<S>> [StateMachine]. Proposed resolution: in clause 18.3.9, Stereotype, under notation, change: When a stereotype is applied to a model element (an instance of a stereotype is linked to an instance of a metaclass), the name of the stereotype is shown within a pair of guillemets above or before the name of the model element, or where the name would appear if the name is omitted or not displayed. For model elements that do not have names but do have a graphical representation, unless specifically stated elsewhere, the stereotypes can be displayed within a pair of guillemets near the upper right corner of the graphical representation. If multiple stereotypes are applied, the names of the applied stereotypes are shown as a comma-separated list with a pair of guillemets. When the extended model element has a keyword, then the stereotype name will be displayed close to the keyword, within separate guillemets (example: «interface» «Clock»). to: When a stereotype is applied to a model element (an instance of a stereotype is linked to an instance of a metaclass), the name of the stereotype is shown within a pair of guillemets above or before the name of the model element, or where the name would appear if the name is omitted or not displayed optionally followed by the name of the model element's metaclass within a pair of square brackets. For model elements that do not have names but do have a graphical representation, unless specifically stated elsewhere, the stereotypes can be displayed within a pair of guillemets near the upper right corner of the graphical representation optionally followed by the name of the model element's metaclass within a pair of square brackets. If multiple stereotypes are applied, the names of the applied stereotypes are shown as a comma-separated list with a pair of guillemets. When the extended model element has a keyword, then the stereotype name will be displayed close to the keyword, within separate guillemets (example: «interface» [Interface], «Clock» [Class]).
At one point (page 42) the specification reads: "Navigability notation was often used in the past according to an informal convention, whereby non-navigable ends were assumed to be owned by the association whereas navigable ends were assumed to be owned by the classifier at the opposite end. This convention is now deprecated. Aggregation type, navigability, and end ownership are orthogonal concepts, each with their own explicit notation." The same thought can be found here: http://www.omg.org/issues/issue15128.txt : "... an old constraint from UML 1.x when navigability meant the same as ownership of property" However at another place (page 38) the specification reads: "An end property of an association that is owned by an end class or that is a navigable owned end of the association indicates that the association is navigable from the opposite ends; otherwise, the association is not navigable from the opposite ends." So is navigability orthogonal to end ownership or not? I think that the specification is somewhat unclear concerning these issues. The descriptions of ownedEnd and navigableOwnedEnd don't clarify much and seem to be too brief.
UML supports declarations of elements with multiplicity bounds; OCL does not
OCL supports declarations of nested collections; UML does not
A possible unification of the capabilities/syntaxes could be achieved by UML introducing Bag/OrderedSet/Sequence/Set as alternatives for {ordered,unique} etc and OCL adopting <> brackets and multiplicity qualification.
Concrete Syntax
-----------------------
The syntax is not obvious
All of Set<Type[0..5]> or Set<Type>[0..5] or Set<Type : 0..5> or Set[0..5]<Type> could be a bounded Set.
All of Set<Set<Type[0..5]>[0..5]> or Set<Set<Type>[0..5]>[0..5] or Set<Set<Type : 0..5>: 0..5> or Set[0..5]<Set[0..5]<Type>> could be a 2D bounded Set.
Set[0..5]<Set[0..5]<Type>> seems to best localize the multiplicity for the collection-type.
Abstract Syntax
----------------------
UML embeds its 'collection' declaration in a MultiplicityElement, which doesn't scale to nested collections. MultiplicityElement is a nuisance for OCL since it provides an alternate form of collection declaration to the CollectionType type constructor. A unified behaviour could deprecate MultiplicityElement and introduce a CollectionType type constructor with ordered, unique, lower, upper in addition to signature attributes.
Nullable Unit Collection Semantics
-----------------------------------------------
So far so good, but there is an OCL semantic issue that is exposed by a compatibility conversion of MultiplicityElement.
Currently MyType[0..1] is a nullable non-collection, so an OCL navigation of an unspecified value gives a null, which crashes any navigated collect iteration such as a->collect(b)->collect(c). A crash on a null object is confusing with respect to an empty collection for which iterations just skip the empty. Deprecating MultiplicityElement would convert MyType[0..1] to Set[0..1]<MyType>; clearly a collection not an object, which avoids the value-dependence that a MultiplicityElement that happens to have a unit upper bound is not a Collection. There is now no way to express a nullable object, so perhaps a { nullable } constraint can be supported. This restores the semantic coverage and conversion compatibility: [1] is ignored, [0..1] is treated as {nullable} and other multiplicities become correspondingly bounded collections. This also has the benefit that ordered and unique would cease to have any relevant semantics for non-collection objects thereby eliminating OCL's dilemma as to whether a [1] { ordered, unique } should be converted to a unit OrderedSet rather than a unit Set by the -> operator.
However, we can now wonder what the difference is between MyType{nullable} and Bag[0..1]<MyType> and why modelers should prefer one or the other. A difference is that in OCL a->collect(b)->collect(c) will crash if b is a null MyType{nullable} whereas it will skip over a null for the empty collection. This seems really bad; a collect over a structurally valid model crashes. But is this OCL just throwing a problem over the fence to UML? Perhaps the problem is that OCL 2.3 has still not resolved the distinct semantics of null and invalid. Perhaps, since OclVoid conforms to all types, null has null/empty values of all properties with a 0 lower bound. Therefore null.oclAsType(NamedElement).name could be null rather than invalid, and so a->collect(b)->collect(c) should crash on invalid structures, but return a result including interspersed nulls for intermediate collects at null nullable elements.
So the difference between MyType{nullable} and Bag[0..1]<MyType> is that:
MyType{nullable} is what modelers will normally use. It is an object that may be null and always participates in an iteration as exactly one value, which may be null which may in turn participate in strucyurally valid iterations.
Bag[0..1]<MyType> is a clumsy but consistent alternative. It is a unit collection that may be empty and only participates in an iteration when not empty.
In the OMG Unified Modeling Language (OMG UML), Infrastructure document, it is said that this document, and the Superstructure document, should be used in conjunction (page 9) as the two volumes cross-reference each other and the specifications are fully integrated. But on page 2 of the OMG Unified Modeling Language (OMG UML), Infrastructure document we can find 2 compliance levels. And on page 2 of the OMG Unified Modeling Language (OMG UML), Superstructure document (ptc/2010-11-14 version 2.4) we can find 4 compliance levels. Which is rioght ? Two our four ? As both documents are integrated shouldn't them have the same explanation for compliance levels ? It gets a little confusing to understand this.
On page 5 of the OMG Unified Modeling Language (OMG UML), Infrastructure document, I think there's a small error (maybe a typo). It's in the last line of this page, where it's written: XMI Metadata Interchange (XMI) Maybe the correct text would be: XML Metadata Interchange (XMI) That is, XML instead of XMI at the beginning of the phrase.
On page 9 of the OMG Unified Modeling Language (OMG UML), Superstructure document, there is the same error (or maybe, typo) as in the Infrastructure document. It's in the seventh bullet at the beginning of the page, where it's written: XMI Metadata Interchange (XMI) Maybe the correct text would be: XML Metadata Interchange (XMI) That is, XML instead of XMI at the beginning of the phrase.
On page 14, Figure 7.3 of the OMG Unified Modeling Language (OMG UML), Infrastructure document, I think there's a small error in the picture. The picture details the Core package, as explained in the text. But the name in the top of the package is written as "Construct" (please note that I'm talking about the name of the whole package, the left- hand side one in the picture, and not the name os the sub-package Construct itself). It gets a little bit confusing that the name of the whole package is written as "Construct" instead of "Core". Please note also that the Figure "Part II, Figure 2" on page 27 is the same. And Figure 9.1 on page 29. And Figure 10.1 on page 91. And 11.1 on page 103. And maybe others that I couldn't find now.
On page 177, Clause 12, second paragraph, in the middle, XMI is written in small case, as "...whose xmi serialization...", maybe it's recomended to write in upper case as in the rest of the document.
I noticed that all normative UML2.x infrastructure and superstructure documents have the same bug: In ProfileApplications, under Associations, the following property is incorrect: • importedProfile: Profile [1] References the Profiles that are applied to a Package through this ProfileApplication. Subsets PackageImport::importedPackage It should describe the following property ProfileApplication::appliedProfile : Profile[1] as follows: appliedProfile : Profile[1] References the Profile that is applied to a Package through this ProfileApplication. Subsets DirectedRelationship::target In the UML2.xInfrastructure metamodel and the 2.4 beta2 merged metamodel the documentation for ProfileApplication::appliedProfile should be changed from: References the Profiles that are applied to a Package through this ProfileApplication. to: References the Profile that is applied to a Package through this ProfileApplication. This affects the following documents: UML2.4 Infrastructure & Superstructure beta2 (ptc/2010-11-16 and ptc/2010-11-14) UML2.3 Infrastructure & Superstructure (formal/2010-05-03 and formal/2010-05-05) UML2.2 Infrastructure & Superstructure (formal/2009-02-04 and formal/2009-02-02) UML2.1.2 Infrastructure & Superstructure (formal/2007-11-04 and formal/2011-11-02) UML2.1.1 Infrastructure & Superstructure (formal/2007-02-06 and formal/2007-02-05) UML2.0 Infrastructure & Superstructure (formal/2005-07-04 and formal/2005-07-05) This affects the following normative files: http://www.omg.org/spec/UML/20101101/UML.xmi http://www.omg.org/spec/UML/20101101/Infrastructure.xmi http://www.omg.org/spec/UML/20090901/Infrastructure.cmof http://www.omg.org/spec/UML/20061012/Infrastructure.cmof http://www.omg.org/spec/UML/20061012/Infrastructure.cmof The same bug is also in the Documents/Specifications/2.4/Deliverable files in SVN revision 21132
It seems there is an issue with derived Property.opposite.
Spec says:
/ opposite : Property [0..1] In the case where the property is one navigable end of a binary association with both ends navigable, this gives the other end.
By description, it should keep reference to opposite navigable end, but OCL works only when navigable end is owned by class.
It does not work when navigable end is owned by association:
Constraint #1:
[1] If this property is owned by a class associated with a binary association, and the other end of the association is also owned by a class, then opposite gives the other end.
opposite = if owningAssociation->isEmpty() and association.memberEnd->size() = 2 then let otherEnd = (association.memberEnd - self)->any() in if otherEnd.owningAssociation->isEmpty() then otherEnd else Set{} endif else Set {} endif
Any comments?
Which one is correct? Property description or constraint text?
In “Figure A.3 Two Diagrams of Packages” the left most diagram has a header that says: “i) Package symbol (as part of a larger diagram diagram)” This text should be (as far as I can figure out) “i) Package symbol (as part of a larger package diagram)” Similarly, the paragraph before the diagram has the following text “Figure A.3 illustrates that a package symbol for package P (in some containing package CP) may show the same contents as the class diagram for the package. i) is a diagram for package CP with graphical symbols representing the fact that the CP package contains a package P.” To clarify this, make the following one word change “Figure A.3 illustrates that a package symbol for package P (in some containing package CP) may show the same contents as the class diagram for the package. i) is a package diagram for package CP with graphical symbols representing the fact that the CP package contains a package P.”
There is a list of possible namespaces that are suitable for appearing in the package header (containing • activity • class • component • deployment • interaction • package • state machine • use case) It seems to me that there are other possible namespaces that could be diagramed. For example Model, Node, Datatype, etc.
Graphically, Constraints appear independently so the unordered
characteristric of NamedElement.ownRule seems sensible. However in a textual
rendering ordering is appropriate.
For instance, Constraints may sensibly be layered so that simple Constraints
come first and act as guards against redundant evaluation of later
Constraints.
For instance, when auto-generating a specification such as the OCL
specification, a specific ordering is required in the generated output.
Please change to {ordered}.
Referenced UML Superstructure Version: 2.4 beta2 Issue: In chapter 16 on use cases, a <<subsystem>> stereotype is applied to the subject (or system boundary) in three figures: * Figure 16.5 - Example of the use cases and actors for an ATM system (p. 614) * Figure 16.8 - Example of a use case for withdrawal and transfer of funds (p. 616) * Figure 16.11 - Use cases owned by a package (p. 621) According to Table B.1 - UML Keywords (p. 712), that specific stereotype is only applicable to Component. The subject of a use case is of type Classifier. So the named diagrams are not syntactically wrong but slightly irritating to the reader because there is no indication that in these examples, the use case subject is actually a more specific type of a classifier, namely a component. The diagrams could lead to misinterpretations like "it is allowed to use the subsystem stereotype for any use case subject". The textual description for Figure 16.5 does not clarify but only states "For example, the use cases shown in Figure 16.5 on page 614 apply to the “ATMsystem” classifier" Regarding Figure 16.8 the accompanying text makes no clarification. Figure 16.11 is even more confusing as it seems to be the case that the component being subject to the use cases is part of a package. Also the package name "ATMtopPkg" does not seem to be a good name for a package. Recommendation: 1) Add textual description to explain the origin of the <<subsystem>> stereotype on the three diagrams -or- remove subsystem stereotype as UML examples should not include constructs of any profile (even if it is one of the standard profiles) 2) Rename "ATMtopPkg" in Figure 16.11 (e.g. to ATMNetwork)
SysML 1.3 -- http://www.omg.org/cgi-bin/doc?ptc/2011-08-10 -- is defined as an extension of UML 2.4.1
What is the XMI serialization of applying the profile to a UML 2.4.1 Package?
The XMI serialization of the application of a profile in UML 2.4.1, section 18.3.7, was written at a time when UML2.0 required Stereotypes to be directly contained in a Profile. UML 2.3 relaxed this. According to the Stereotype semantics defined in UML 2.4.1 (18.3.9), a Stereotype may be contained in a Profile or a Package which defines the namespace for the Stereotype.
The XMI serialization in 18.3.7 is defined by a contrived example where a Stereotype is directly contained in its Profile (see Figs. 18.8, 18.9). SysML 1.3 has several nested packages (see Fig 4.3 in SysML 1.3) Neither UML 2.4.1 nor XMI 2.4.1 clearly address how the serialization of the application of Package-nested Stereotypes works.
For SysML 1.3, the XMI published for the SysML profile itself looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmlns:xmi="http://www.omg.org/spec/XMI/20110701"
xmlns:mofext="http://www.omg.org/spec/MOF/20110701"
xmlns:uml="http://www.omg.org/spec/UML/20110701">
<uml:Profile URI="http://www.omg.org/spec/SysML/20110919/SysML" xmi:type="uml:Profile"
xmi:id="_OMG_SysML_20110919_SysML__0"
name="SysML"
visibility="public">
...
<packagedElement xmi:type="uml:Package" xmi:id="_OMG_SysML_20110919_SysML_Blocks" name="Blocks">
...
<packagedElement xmi:type="uml:Stereotype" xmi:id="_OMG_SysML_20110919_SysML_Blocks-Block"
name="Block">
...
</packagedElement>
...
</packagedElement>
</uml:Profile>
<mofext:Tag xmi:type="mofext:Tag" xmi:id="_OMG_SysML_20110919_SysML__2"
name="org.omg.xmi.nsPrefix"
value="SysML"
element="_OMG_SysML_20110919_SysML__0"/>
</xmi:XMI>
Given the fact that, per the MOF/XMI 2.4.1 specification, only the toplevel UML Package Namespace maps to an XMI Document Namespace,
it follows that nested UML Package Namespaces have no corresponding XML Namespace declaration.
This means that SysML's Blocks Package cannot have any XML Namespace declaration per current MOF/XMI 2.4.1 rules.
Therefore, the only possible serialization for this example is the following:
<xmi:XMI
....
xmlns:SysML="http://www.omg.org/spec/SysML/20110919/SysML"
....
>
<uml:Package name="A" ........>
....
<packagedElement xmi:type="uml:Class" xmi:id="123" name="B"
....
</uml:Package>
....
<SysML:_OMG_SysML_20110919_SysML_Blocks-Block base_Class="123" xmi:id="456" ... />
....
</xmi:XMI>
This particular serialization may be surprising to some who might have expected:
<xmi:XMI
....
xmlns:SysML="http://www.omg.org/spec/SysML/20110919/SysML"
....
>
<uml:Package name="A" ........>
....
<packagedElement xmi:type="uml:Class" xmi:id="123" name="B"
....
</uml:Package>
....
<SysML:Block base_Class="123" xmi:id="456" ... />
....
</xmi:XMI>
The familiar-looking XMI serialization assumes that all UML CLassifiers in scope of a Profile have unique XMI:id values. The reason is very subtle but it is a consequence of the fact that the MOF/XMI specification maps only the toplevel UML Namespace into a corresponding XML Namespace declaration -- i.e., a toplevel UML::Model/Package/Profile has a corresponding XML Namespace declaration & prefix; nested UML Namespaces do not!
This means that the UML Namespace distinguishability criteria that suffices for ensuring UML NamedElements are distinguishable within the same UML Namespace
is insufficient to guarantee that the *XMI* encoding of such UML NamedElements will be also distinguishable in the scope of their containing XML Namespace!
For SysML 1.3, I specifically used an unconventional XMI:id generation algorithm that encodes the fully qualified path (name/metatype/linearized collection order) of each UML Element so as to ensure that each XMI:id Element in the scope of an XMI document is distinguishable within that document.
In section 14.3.18, the constraints 3 and 4 say that the arguments of message must correspond to the parameters/properties of the signature (operation/signal). This leads to an ambiguous siuation in some situations. For example:
Let's assume there is an operation with the following signatur op1(x:String[*], y:String[*]) or a Signal S with two properties
S::p1 : String[0..1]
S::p2 : String[0..1]
Since there is no direct relationship between an argument and a parameter/property it is not possible to determine what argument belongs to the first parameter/property (list in case opf operation example) and what to the second one.
This problem always occurrs when two parameters/properties of the same type are specified in a sequence and the first one has either an optional multiplicity or an upper bound equals *.
A possible solution is to introduce an additional metaclass MessageArgumentSpecification, which should be contained by Message instead of ValueSpecification directly, with the following structure:
MessageArgumentSpecification{
refersTo: TypedElement [1] {where the referenced TypedElement is either an instance of parameter or property}
arguments : ValueSpecification [1..*] {ordered}
}
It might be also considerable to keep the association between a referenced element and an argument bilateral. In this case, the association between Message and MessageArgumentSpecification should be ordered.Constraint 4 of Message in section 14.3.18 requires that in case of a Signal signature, the arguments of the message must correspond to the properties of the Signal. We found this constraint too restrictive. A Signal is a classifier, hence it is possible to create an InstanceSpecification for the Signal. A InstanceSpecification can be referenced by an InstanceValue (ValueSpecification) from within the message argument list. We suggest to weaken the first sentence of constraint 4 a little from : In the case when the Message signature is a Signal, the arguments of the Message must correspond to the attributes of the Signal. to In the case when the Message signature is a Signal, the arguments of the Message must correspond to the attributes of the Signal, or to the Signal itself.
Figure 14.4 - Messages in the spec depicts that arguments of a message are contained in that message. This containmentship is not necessary and in many cases counterproductive. The containment prevents ValueSpecifications for being reused in multiple messages. Instead, the very same ValueSpecification must be created in each message. Since ValueSpecification is a PackageableElement, there is no problem in making the association between Message and ValueSpecification a non-containment association.
Until UML 2.3, OccurrenceSpecification (OS) was an abstract superclass for the concrete occurrence specifications MessageOccurrenceSpecificatio (MOS) and ExecutionOccurrenceSpecification (EOS). In UML 2.3 OS became concrete. This apparently subtle change has a significant impact of the usage of domain-specific events in Interaction. A user can now place an OS along a lifeline directly, instead of using using the already existent ActionExecutionSpecification or BehaviorExecutionSpecification. This eases the definition of domain-specific occurrence specifications (let's call it events from henceforth) by defining stereotypes directly for an OS. For example, in the UML Testing Profile, there are some test-specific events (e.g. ValidationAction, a sterotype for CallOperationAction) which can be used inside Interaction. Until UML 2.3 the steps for including such a domain-specific actions in Interactions have been the following: 1. Create an Action and let it being contained by the Interaction 2. Configure that Action and apply the corresponding stereotype 3. Create the ActionExecutionSpecification 4. Create the EOS as the start EOS and link the ActionExecutionSpecification with the EOS 5.Create the EOS as the finish EOS and link the ActionExecutionSpecification with the EOS 6. Link the ActionExecutionSpecification with the Action The whole procedure involved a lot of very fine-grained and subtled concepts and requires an advanced knowledge of the Interactions metamodel (frankly, only few tools support this complex procedure). Since UML 2.4, the steps are reduced to the following one: 1. Create an OccurrenceSpecification on a lifeline 2. Apply a stereotype to the OS and configurethe OS The stereotyped OS assumes the semantics provided by the domain-specific OS (in UTP ValidationOccurrenceSpecification). This reduces the complexity of integrating such domain-specific events, reduces the memory foorprint and eases the handling and creation of interactions containing such stereotyped OS. The problem is that OS does not declare a national representation, and we doubt that this concept will be provided by tools if there is not standardized representation. Therefore, we suggest to define a (at least optional) notation for OS as a rectangle or rounded rectangle with a compartment for stereotype visualization and a compartment for an optional label (name of the OS or an expression within the stereotype). This change would not affect the XMI or metamodel, but has a significant impact of the way interaction are perceived and created.
The Superstructure 2.3 mentions (15.3.14, page 573) a constraint for transitions:
“Transitions outgoing pseudo states may not have a trigger (except for those coming out of the initial pseudo state).”
I think this constraint is too limiting.
First of all, it is not observed even in the specification:
On page 546 it says about state lists (15.3.9, page 546):
“Multiple trigger-free and effect-free transitions originating on a set of states and targeting a junction vertex with a single
outgoing transition may be presented as a state symbol with a list of the state names and an outgoing transition symbol
corresponding to the outgoing transition from the junction.”
Conclusion:
1) the transition from each of the states in the list cannot have a trigger
2) the constraint says, that the transition from a junction vertex also cannot have a trigger
==> the transitions out of state lists cannot have triggers
However In figure 15.27 and 15.28 such triggers are shown (e, f, logCard, logVerify).
Second and more importantly, the described situation of “multiple transitions originating on a set of states and targeting a junction vertex” is quite common and therefore should be allowed, whether or not the modeler wants to use state lists.
Suggestion
Transitions from junction vertexes should be an exception to the constraint above. So the constraint on transitions needs to be reformulated:
Page 573: “Transitions outgoing pseudo states may not have a trigger (except for those coming out of the initial or of junction pseudo states).”
Then another constraint needs to be added
Page 573: “The outgoing transitions of a junction pseudo state may have triggers only, when the incoming transitions originate from states and don’t have triggers.”
While for older versions of XML the concrete syntax for persisting UML models was given in DTD, for newer versions of XMI a related concrete syntax specification e.g. as XML Schema is missing (even if the syntax is described in ptc/2010-12-06). Pure syntax compliance tests for given XMI files cannot be performed.
The EnumerationLiterals in the XMI include values for the ‘classifier’ property which is redefined to be derived in the metamodel. Even if not derived it would be the inverse of the owning composition so should not be serialized.
ChangeEvent has defined association changeExpression:Expression[1], but the figure 13.12 depicts the association toward UML::Classes::Kernel::ValueSpecification.
In the description of a MultiplicityElement in the superstructure, constraint 1 claims that 'upperBound()->notEmpty() implies upperBound() > 0', while in the last paragraph of the semantics, it is declared that a multiplicity of [0..0] is possible. These statements are in conflict with each other.
Abstraction class has defined association "mappings" of type Expression, but on page 35, figure 7.15 depicts Abstraction with the association of type OpaqueExpression.
In Adobe Acrobat Reader, there are no "Subpart I" and "Subpart II" whereas there are "Subpart III" and "Subpart IV" . This seems inconsistent
In Figure 8.2, A_realization_abstraction_component appears over Component - ComponentRealization composition line. But this name (association name?) is not used anywhere.
In Figure 12.4, RedefinableElement has no note "(from Kernel)". I think all classes that do not belong to BasicActivities should be noted as "(from SomePackage)" within class compartment.
Figure 12.21 blurs. In additon, the default value of LoopNode#isTestedFirst looks "fal...". (I suppose "false").
In Figure 12.22, there is "{ordered}" near role "+clause". I think {ordered} must be located near +bodyOutput, rather than +clause."nonuni..." must be appeared as "nonunique"
Two association ends "interval" are hidden by class "Interval" and the last letters ("l") are not displayed."nonuni..." must be appeared as "nonunique"
It seems that "io-oargument" is misspelling of "io-argument".
enumeration TransitionKind should appear in Figure 15.2.
The textual syntax of CallEvent and SignalEvents states the following: "<call-event> :: <name> [‘(‘ [<assignment-specification>] ‘)’] <assignment-specification> ::= <attr-name> [‘,’ <attr-name>]* <attr-name> is an implicit assignment of the corresponding parameter of the operation to an attribute (with this name) UML Superstructure Specification, of the context object owning the triggered behavior" This may lead to a situation where name clashes can occurr, if the context object already contains an identically named attibute. How should situations like a name clashes be resolved?
The textual syntax of CallEvent and SignalEvents states the following: "<call-event> :: <name> [‘(‘ [<assignment-specification>] ‘)’] <assignment-specification> ::= <attr-name> [‘,’ <attr-name>]* <assignment-specification> is optional and may be omitted even if the operation has parameters." Does this mean that the parameters of the event are still assigned to attributes of the context object? If so, how long are those implicitly assigned attribute values stored in the context object? Since this is just a workaround to be able to express guard conditions that evaluate whether a transition can fire based on the recieved trigger, I would assume, the implicitly assigned attribute values are kind of transient or temporarly and will become invalid (or deleted) after all guards of the outgoing state are evaluated. Otherwise, I would like have this paragraph stated clearer. It is a vital and crucial part how to deal with triggering events and with guard that refer to those trigger events.
In Figure 17.13, the default value of ClassifierTemplateParameter#allowSubstitution is truncated to "...".
In V2.4.1 from 11-08-05 on page 14 in Figure 7.3 – „The Core packages“ the outer package is named „Constructs“. Is that correct or should it be called “Core”?
Section [notation] there is a wrong description. [* default is {incomplete, disjoint}] is wrong, isn't it? [* default is {incomplete, overlapping}] is correct, maybe. Because, [Attributes] says isDisjoint that's default value is falseIn the 'Descriiption' section of chapter '16.3.5 Include (from UseCases)' there is a sentence: 'Note that the included use case is not optional, and is always required for the including use case to execute correctly.' Interpretation of ‘include’ relationship, implying that it’s usage is valid only if included UC is obligatory for including UC to execute correctly, is probably the source of opinion, that the only way to model conditional parts of UC scenario using external UC, is by using ‘extend’ relationship. I find such conclusion in many books dealing with analysis/UML, for instance: ' Business Analysis’, page 188 (ISBN-10: 1906124612,ISBN-13: 978-1906124618). As a result the difference in aplicability between ‘include’ and ‘extend’ relationship is stressed almost only based on conditionallity of relationship between UC. In my opinion it’s valid to use ‘include’ relationship when pointing to another UC, that won’t be executed every time the base UC does. It’s just the internal logic of base UC scenario, that decides if it’s appropriate to call external UC or not. And if we depend only on result of an external UC, we should use ‘include’ relationship (so most of the time), while when there is a need to introduce its logic we should use ‘extend’ relationship. I think, that the sentencje: 'Note that the included use case is not optional, and is always required for the including use case to execute correctly' should be removed or clarified, because if forces analysts to use mostly (if not only) an ‘extend’ relationship, that is far more complicated to use and time consuming to document than ‘include’.
Reading the document cited, I noticed some editorial errors. Thus, below you will find some suggestions for editorial changes.
* Page 23, Section 8.3.2, first sentence: Instead of "are enumerated", it should probably read "is enumerated".
* Page 48, section 9.8.3, subsection titled "Associations": Instead of "owning expression. Subsets", it should probably read "owning expression subsets".
* Page 96, section 10.2.1, subsection titled "Semantics", second paragraph, first sentence: Instead of "features on another class", it should probably read "features of another class".
* Page 98, section 10.2.5, subsection titled "Attributes", last bullet point, last sentence: Instead of "Default value", it should read "The default value".
* Page 111, section 11.3.1, first paragraph, second and third sentences: A space character is missing between the two sentences.
* Page 113, section 11.3.1, subsection titled "Semantics", sixth paragraph, first sentence: Instead of "characterized", it should read "characterizes".
* Page 151, section 11.7.5, subsection titled "Examples": Instead of "imported WebShop", it should read "imported to WebShop".
* Page 154, section 11.8.2, subsection titled "Constraints". Instead of "n operation", it should read "An operation".
* Page 173, section 12, second paragraph, fifth paragraph: Instead of "profile?s", it should read "profile's".
* Page 173, section 12, first numbered paragraph, last sentence: Instead of "more constraining", it should read "more constraining than".
* Page 178, section 12.1.2, subsection titled "Semantics", first paragraph, last sentence: Instead of "at most", it should (probably?) read "at least".
* Page 186, section 12.1.7, subsection titled "Semantics", last paragraph on page, last sentence: Instead of "and or", it should read "and/or".
* Page 191, section 12.1.8, subsection titled "Semantics", first paragraph, fourth and fifth sentences: There seems to be a mistake on the boundary between the two sentences ("all its nested and imported."); probably, something is missing at the end of the fourth sentence after "imported".
* Page 194, section 12.1.9, subsection titled "Semantics", third paragraph on page, second sentence: Instead of "theses stereotypes", it should read "these sstereotypes".
* Page 194, section 12.1.9, subsection titled "Notation", third paragraph, first sentence: Instead of "stereotype?s", it should read "stereotype's".
* Page 195, section 12.1.9, subsection titled "Presentation Options", first sentence on page: Instead of "may shown", it should read "may be shown".
* Page 196, section 12.1.9, subsection titled "Examples", last paragraph on page, second sentence: Before "isRequired", opening quotation marks are missing.
If I am not mistaken, there is an error in several UML diagrams. Let me start with page 14, figure 7.3: The name of the package on the left side is "Constructs", but it probably should read "Core", shouldn't it? This UML diagram seems to be depicted several times in the document cited, which is why the situation is the same in the following places: page 27, second figure; page 29, figure 9.1; page 91, figure 10.1; page 103, figure 11.1. Also, on page 162, section 11.9.2, subsection titled "Notation", second bullet point, it reads: "If the members of the package are shown within the large rectangle, then the name of the package should be placed within the tab." This would have to be implemented in the UML diagram(s) referred to above (now, the name "Constructs", that is to be corrected by "Core", is within the rectangle instead of within the tab). I would be very glad to receive some feedback on my remarks.
In the internet I found a reference to something called a "SynchState" for state machines. I searched the UM Superstructure but didn't find this defined there, although there is an index entry for it. Either the index entry is irrelevant or the state was omitted from the document
In V2.4.1 from 11-08-05 on page 14 in Figure 7.3 – „The Core packages“ the outer package is named „Constructs“. Is that correct or should it be called “Core”?
Subsection Associations is not in synch with the abstract syntax depicted in Figure 13.12. In the abstract syntax, change expression is typed by ValueSpecification, whereas in Association section it is described as Expression. Possible resolution: Change changeExpression : Expression to changeExpression : ValueSpecification.
In many cases, modeler would like to specify the mapping of an Abstraction on an informal level by just providing a LiteralString or OpaqueExpression describing the mapping in a natural language. The necessity to use an Expression is for this kind of usage of this feature cumbersome and clunky. The resolution could be to use a more common metaclass of Expression, i.e. ValueSpecification, to provide the highest level of flexibility to the modeler, how mappings can be specified.
In the semantics of activity, it is written "A token contains an object, datum, or locus of control, and is present in the activity diagram at a particular node." The term "locus of control" seems strange, and I think it should be "focus of control".
There is no capability in UML for giving an element an alternate name (an alias) within the package that defines it.
is there a reason why a transition's effect and triggers of a state machine transition (section 15.3.14 in UML 2.4, respectively section 14.5, subsection Transition in UML 2.5 initial submission) do not belong to the transition's namespace as members? Both simply subset ownedElement. In contrast, a transition's guard subsets Namespace:ownedRule, which made me think the former ones ought to subset Namespace:onwedMember in lieu of Element:ownedElement as well. I roughly flicked through the open issues of UML, but did not find anything related to this question. So, if there was not decided deliberately, I would open an issue for that
"coveredBy : InteractionFragment" is stated with a multiplicity of "[0..1]" although in the comment it says "References the InteractionFragments" and the machine readable XMI file of the superstructure has "*" as the value of the upper value of the coveredBy attribute.
The caption of the first package(left) of the figure 7.3 is not wrong? The correct should not be Core(instead Construct)? That figure had me confused at the beginning
UML says: ” Stereotypes can participate in binary associations. The opposite class can be another stereotype, a non-stereotype class that is owned by a profile, or a metaclass of the reference metamodel.” How are instances of these stereotypes and associations to be serialized? For example, look at SysML1.3 in which the stereotype ValueType has an association named A_valueType_unit to the stereotype Unit. How is a SysML 1.3 model supposed to instantiate this? There will be an element representing the stereotype instance of this form: <sysml:ValueType xmi:id="id1" base_DataType="id2" unit="id3"/> What should id3 be the identity of? Presumably the target stereotype instance? Or the model element to which the target stereotype instance is applied? Is such an association allowed to be a composition? If so what would be the deletion semantics? Also, would we really expect to see any elements of this form? <sysml: A_valueType_unit xmi:id="id4" valueType="id1" unit="id5"/>? The following sentence: “For these associations there must be a property owned by the Stereotype to navigate to the opposite class. Where the opposite class is not a stereotype, the opposite property must be owned by the Association itself rather than the other class/metaclass” appears to imply that we would never see such an element, but I don’t know of any statement to confirm this
Action::inputPin and Action::outputPin are both derived unions. Both also have opposite association owned ends that are not derived. While I don't think the metamodel is actually incorrect, those owned ends are implicitly derived unions too. So I think it would make more sense to make that explicit. I've just picked two examples, however I believe there are more in the specification.
I probably discovered a little error in the UML 2.4.1 Superstructure Specification on page 109 in section “Associations” (from Chapter “7.3.38 Package (from Kernel)”): The property “packagedElement: PackageableElement [*]” is not a derived property and should therefore not be prefixed with a ‘/’.
currently (till 2.5) a message's signature is of type NamedElement that
resolves either to an Operation or Signal. Apart from the fact that the
nearest common superclass is Namespace, the use of elements of different
inheritance hierarchies makes it cumbersome/impractical to work with the
signatures easily. You always have to check what concrete signature is
associated, cast it into the appropriate subclass (i.e. either Signal or
Operation) and use it further.
Regarding Message::Signature, I was wondering, whether it wouldn't be
simpler and far more consistent to refer to a BehavioralFeature
(Operation/Reception which has to have an Signal associated) directly
instead of NamedElement (which ought to be Namespace)?
This leads to a situation where I was wondering why a Reception, though
it is a BehavioralFeature, does not say any word about owned parameters
at all? However, if Receptions would be able to capture information
about parameter, too, the treatment of Reception and Operation would be
pretty much the same with regard to their parameter semantics. So, it
might be worth to reconsider the relationship between BehavioralFeature,
Reception and Parameter. We could supplement
BehavioralFeature::ownedParameter {ordered, subsets
Namespace::ownedMember} containment
with
/Reception::ownedParameter [0..1] {redefines
BehavioralFeature::ownedParameter } containment
The derivation algorithm of Reception::ownedParameter could be similar
to the following: A Reception declares at most one Parameter. Its type
and name must exactly the name and type of the Signal, referenced by
Reception::signal, if present. The direction kind of a Reception's
Parameter must be set to IN exclusively.
context Reception
inv 'parameter':
if not self.signal.oclIsUndefined then
not self.ownedParameter.oclIsUndefined and
self.ownedParameter.type = self.signal and self.ownedParameter.name =
self.signal.name and self.ownedParameter.directionKind ==
ParameterDirectionKind::IN
else
endif
This would ease the usage of BehavioralFeatures a lot, I'd say. In case
of Messages, one would only have to walk over
Message::signature::parameter instead of casting it down to either an
Operation or Signal..
In the UML spec there are several places where the color of the notation is specified. For example, the composition diamond is specified as black, the state machines junction ball is specified as black, and the lost/found message is specified as black, and the information identifier is a black triangle. Similarly there are few cases where white and grey are specified. This is overly limiting, some tools use a solid color for the items specified as black, or let the user select the color (usually selecting the same as the line color). It would not be good to limit the representation to only black color, as that would invalidate most PowerPoint and several tools. Please change the color black to “solid” or “filled with the line color” and change “white” to “hollow” or “un-filled”. For grey/gray it should be “a distinguishable value between the solid and the hollow”
It is written that the Lifeline head has a shape that is based on the classifier for the part that this lifeline represents. I think you want to tell that we can have a "stick man", if the lifeline represents an Actor. It should be good to show an example for a lifeline that represents an Actor (it was the case in UML 1.3 at page 343, Figure 3-48).
I recently wrote a code generator for my UML tool for state machines. One of the properties of a state machine is called /context, which is the Class that has the state machine as its Classifier Behavior (if any exists). When I created a submachine state, the /context field of the state machine inside the submachine state was listing the parent state machine as its /context, rather than the class owning the parent state machine. This does not make semantic sense, because the purpose of the context field is the allow the state machine to have access to the methods and data of the class that implements the state machine behavior. The UML spec says that to find the /context of a state machine, you must travel up the Owner tree until you hit the first Behaviored Classifier. My UML tool vendor pointed out to me that a State Machine is classified as a behaviored Classifier so it qualifies. That did not make sense to me because a State Machine is classified as a Behavior. How can a Behavior also be a class that owns a behavior? After checking the UML spec further, I discovered that a Behavior, and therefore a State Machine, is derived from Class (Kernel), which is not a Behaviored Classifier. However, after all the packages are merged, Class (Kernel) gets merged with Class (Communications), which *is* a Behaviored Classifier, and the merge rules allow the class hierarchy to be merged together. I confirmed this anomaly was present in the merged XMI files at OMG website. I believe this problem is unique to Class metatype. If you look at Annex F of the UML spec, it shows the complex class hierarchy associated with Classifiers from various packages prior to merging. There are three merge increments for Class in three different places on the tree. These are even called out explicitly in the diagram. You can see how the inheritance tree would be changed dramatically when these three Class increments are merged together. All other cases where the metatype increments are merged do not change the structure of the inheritance tree. The Class metatype is unique in this respect. I thought about a solution and I believe there is an easy fix to this problem. It requires replacing the Class (Communicatoins) increment with a new metatype called BehavioredClass, and replacing the Class (StructuredClasses) increment with the already existing EncapsulatedClassifier. After this change, a BehavioredClass would be both a Class (Kernel) and a BehavioredClassifier, as is already illustrated in 13.3.8 but would now be more intuitive. Component would now inherit from Class (Kernel) and EncapsulatedClassifier (Ports). Node would inherit directly from EncapsulatedClassifier, thus preserving the pre-merge idea that Node's should not have data and methods associated with them (as with Class (Kernel)). This is another currently odd outcome of merging the packages together. Because Class (Kernel) is a concrete metatype (and therefore shows up in modeling tools), you would need to make BehavioredClass concrete also. Modelers would have to expose it and I think this would be an improvement. I've always felt that active classes (like OS tasks) and non-active classes (data and methods only) are such distinct object types that they should have separate representations. The elimination of the Class (StructuredClasses) increment would also prevent the merge from adding ports to the generic concept of a Class, which is also desirable since ports are not useful without the ability to represent internal structure. After that modification, there are other modifications that would naturally follow. The one I can see is that the isActive attribute of Class would now be a derived attribute which is set to true for classes that inherit BehavioredClass and false otherwise. With this change, in the fully merged UML package, a StateMachine would be derived from Class with only the Kernel attributes. It would no longer falsely inherit from BehavioredClassifier. A whole bunch of other inherited properties that make no sense would also go away.
My previous submission has been resolved. Apparently, the UML spec provides an exception clause in the definition of the /context field to allow the context classifier to propagate downward to sub state machines. I do not know how to find and close the original issue so I'm mentioning it here. That said, the semantic issue I raise I believe is still present and is illustrated precisely by the need for that exception clause in the /context field definition. I'd like to propose a much simpler solution. A UML Behavior describes the dynamic behavior of its context classifier. All attributes and operations that it class during its execution should come from the context classifier. There is no need for the Behavior to own attributes and operations on its own, and I would like to suggest deriving Behavior directly from Classifier rather than from Class in section 13.3.2. I have not investigated the full impact of such a change, but I believe it would not have any significant impact and would improve the semantic integrity of the model. A simple example is that a Behavior has a specification which could be, for example, a call to an Operation. Although the Operation belongs to a Class (its context), would would argue that the Operation is itself a Class?
In Figure 14.5 of UML 2.4.1 (and still valid for UML 2.5), the association end 'action' of Interaction subsets Element.ownedElement. Since Interaction is a Namespace and Action a NamedElement, I reckon it ought to subset Namespace.ownedMember instead.
You wrote "lifeline: LifeLine[0..*]" at page 495 but you should write "lifeline: Lifeline[0..*]". The "L" must be in lowercase because it is the correct name of the class that represents a lifeline (as you can see at the 14.3.17 section and in the class diagram at page 475).
Figure 12.15 (on page 370) shows a DataStoreNode (which is a subclass of CentralBufferNode) that is conntected to an action ("Assign Employee").
But in the description of CentralBufferNode (p. 361) it says: "They do not connect directly to actions".An Actor doesn't have an attribute named "ownedAttribute".
Under Compliance Levels, the first paragraph following the level descriptions is confusing, since it references the terms "top-tier" and "second-tier" packages without ever defining what those means. For me, this entire paragraph is meaningless as a result.
UML2.4.1 Superstructure, section 8.3, Figure 8.4 shows that UML::Component has a composite association to UML::PackageElement; that is:
UML::Component::packagedElement : UML::PackageableElement { subsets UML::Namespace::ownedMember }
This is the only place in the UML metamodel where a kind of UML::Classifier has the capability to own arbitrary kinds of UML::PackageableElements.
As long as the classifier capabilities needed in practice are within the scope of what UML::Class already provides, then it is practically very useful to use UML::Component in lieu of UML::Class.
By doing so, a UML::Component-as-an-enhanced-UML::Class gains the capability to own additional kinds of UML::PackageElements that a plain UML::Class cannot; e.g.:
UML::Package, UML::Dependency, UML::InformationFlow, UML::ValueSpecification, UML::InstanceSpecification, UML::Event, UML::Observation, UML::Profile, UML::Model.
Unfortunately, other kinds of UML::Class do not get such benefits. For example, a UML::StateMachine is a kind of UML::Class just like UML::Component but unlike UML::Component, it can't own arbitrary UML::PackageableElements.
In particular, it cannot own any UML::Event even though this would make eminent sense in some cases (e.g., internal events not visible outside of the UML::StateMachine).
Finally, the well-formedness and semantics of a kind of UML::Class with namespace-nested UML::PackageableElements need to be addressed for unusual combinations including but not necessarily limited to the following cases:
1) nested UML::Profiles and UML::ProfileApplications
2) specialization of a general classifier nested within its packagedElements
3) applying a stereotype defined in a UML::Profile nested within its packagedElements
4) the target of an elementImport from a UML::Namespace nested within its packagedElements
Currently, UML 2.4.1 requires that: The graph of classifier generalization relationships must be acyclic See 7.3.8 Classifier [2] Generalization hierarchies must be directed and acyclical. A classifier cannot be both a transitively general and transitively specific classifier of the same classifier. This constraint probably came from the influence of programming languages on the design of the UML. This constraint is certainly useful in many domain-specific applications of the UML but it is certainly not useful across all domains. For example, in ontologies, it is common practice to use circular generalization relationships among classifiers to express their semantic equivalence; see: http://www.w3.org/TR/owl2-syntax/#Equivalent_Classes The ODM 1.0 includes this approach as an option for using the UML as a notation for OWL1 ontologies — see 14.2.5.11 in http://www.omg.org/spec/ODM/1.0/ A generalization must be owned by the specialized classifier See 7.3.20: specific: Classifier [1] References the specializing classifier in the Generalization relationship. Subsets DirectedRelationship::source and Element::owner This ownership constraint prevents using the UML where a generalization between A and B needs to be added without modifying A or B.
wonder about the arrows used in communication diagramms (superstructure spec, Page 524). Do they indicate the type of message - as it is with sequence diagramms (sync, async) - or do they indicate the direction of message only. I didn't find a statement in the superstructure spec and several UML related books offered different oppinions.
This sentence is apparently missing words: "through interactions in the form of <?????> (e.g., sequence diagrams or similar notations)"
It would be very useful if a notation was defined to allow a stereotype instance property value which references another instance in the model to be shown as a link on a diagram. For example, a stereotype Foo could have a property Bar of type Foo (in order that one Foo can reference another Foo). On a diagram showing two instances of Foo, you could then add and show a link between them labelled Bar rather than only being allowed to use a compartment or callout note. This would be useful to many profiles, but I couldn't find an existing issue which covered it.
The UML spec says: "The value of firstEvent[i] is related to event[i]" So the "event" feature of DurationObservation should be ordered since the order is significant: we need to refer to it by index.
I've encountered one slight problem in the superstructure XMI file of UML2.4.1 . I've grabbed the ptc/2010-11-18 revision of Superstructure.xmi from here: http://www.omg.org/spec/UML/2.4.1/ On examining I see that all enumeration literals contain classifier="..." field serialized; e.g.: > <ownedLiteral xmi:type="uml:EnumerationLiteral" > xmi:id="Activities-CompleteActivities-ObjectNodeOrderingKind-unordered" name="unordered" > classifier="Activities-CompleteActivities-ObjectNodeOrderingKind"> There are ~62 such places in Superstructure.xmi (I've not looked into Infrastructure.xmi, but I think there will also be cases like this) Classifier metaproperty of EnumerationLiteral metaclass is derived in UML2.4.1 - per Figure 7.13 and chapter 7.3.17 (EnumerationLiteral::classifier redefines the original InstanceSpecification::classifier, which is not derived). Since derived fields are not usually serialized by XMI production rules (unless this is overridden, which seems not to be the case), I think these fields should be cleaned out.
In the section diagram is specified that a Comment is a specialization of Element but in the definition of Comment says that Comment have no Generalizations
This is a request to add a capability in UML to specify the upper and/or lower multiplicity value of a part (composite aggregation relationship) with a class attribute of type integer; typically this attribute is a derived attribute. When derived, a constraint can be used to define the value derivation. This capability has been found to be useful in the following applications. 1. When reference models are re-used in different contexts this capability allows some variants to be specified in the reference model and the value be automatically derived based on its use in the new context. 2. The value of the multiplicity to be used for a specific configuration may be derived through an analysis performed external to the model. A diagram is available that shows an example of the concrete syntax that could be used. In this example a constraint is defined for the attribute “numberOfPedals”. If this diagram would be helpful and I can forward it. I did not see a means of attaching a jpg diagram to this on-line form. This capability can be developed in a way that does not impact on code generation or execution, as the values can all be constant at run time (and at code-generation time). The primary purpose of this is to allow the ability to have reference models for variations without using the overhead of templates (otherwise the whole model might need to be a template of template, which would certainly be unwieldy and confusing), and to allow for a common way of specifying this for descendant languages like SysML.
The operation "isConsistentWith" is not overridden for any RedefinableElement in this chapter. Hence the contraint expression "A redefining element must be consistent with each redefined element." (from RedefinableElement) evaluates to false for any instance. Please add an operation for ObjectNode at least.
In the "Description" section, it stated that "Attributes of a class are represented by instances of Property that are owned by the class". Expected: "Attributes of a class are represented by Properties that are owned by the class". In page 43: it is stated that "an association end owned by a class is also an attribute". In page 36, memberEnd: Property[2..*] indicated that association end is Property. In all, I think Attribute is Property, only if the Property is owned by a class. It is confusing to mention instance in this context.
UML needs to explain in terms of UML what applying and associating
stereotypes means and additionally needs to explain all aspects of their
serialization. The UML specification has yet to explain what it means what "applying a stereotype" and what "stereotypes can participate in associations" mean in terms of UML.
Since the UML profile mechanism is definitely not a metamodeling extension facility, these explanations must be made in terms of UML directly rather than indirectly via the "MOF2-equivalent semantics".
Below is a 3-step proposal to explain what "applying a stereotype" and "stereotypes can participate in associations" mean in terms of UML.
This proposal is illustrated using the SysML profile definition of the ValueType, Unit and QuantityKind stereotypes shown below:
Point #1) The UML specification only shows how an instance of a stereotype is serialized but it does not say what that serialization is in terms of the UML metamodel.
For example, we have:
- 2 serializations of UML::InstanceSpecification
<packagedElement xmi:type="uml:InstanceSpecification"
xmi:id="_ISO-80000-1-SysML_mass_PackageableElement"
name="mass">
<packagedElement xmi:type="uml:InstanceSpecification"
xmi:id="_ISO-80000-1-SysML_kilogram_PackageableElement"
name="kilogram">
- 2 serializations of instances of stereotypes, QuantityKind and Unit.
<sysml:QuantityKind xmi:id="_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
base_InstanceSpecification="_ISO-80000-1-SysML_mass_PackageableElement"/>
<sysml:Unit xmi:id="_ISO-80000-1-SysML_kilogram_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
base_InstanceSpecification="_ISO-80000-1-SysML_kilogram_PackageableElement"
quantityKind="_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance"
symbol="kg"/>
I claim that serializations of instances of stereotypes are in fact just serializations of UML::InstanceSpecifications whose classifiers are stereotypes.
That is, the above two elements are really a different serialization of the following:
<packagedElement xmi:id="_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
xmi:type="uml:InstanceSpecification"
classifier="_SysML_Blocks_PackageableElement-QuantityKind_PackageableElement"
base_InstanceSpecification="_ISO-80000-1-SysML_mass_PackageableElement"/>
<packagedElement xmi:id="_ISO-80000-1-SysML_kilogram_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
xmi:type="uml:InstanceSpecification"
classifier="_SysML_Blocks_PackageableElement-Unit_PackageableElement"
base_InstanceSpecification="_ISO-80000-1-SysML_kilogram_PackageableElement"
quantityKind="_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance"
symbol="kg"/>
The rationale for this is simply that we must be able to specify constraints in OCL as well as queries/transformations in QVT and actions in any action language (e.g., ALF) where we can operate on instances of stereotypes without having to implement profile-specific tooling.
Point #2) The UML specification should explicitly say that:
2.1) an instance of a stereotype is a distinguished instance of UML::InstanceSpecification whose classifier is the stereotype definition
2.2) what distinguishes an UML::InstanceSpecification whose classifier is a UML::Stereotype is that it is serialized differently than any other UML::InstanceSpecification (whose classifier is not a UML::Stereotype)
The rationale for (2.1) is that this is the simplest way to address this point without introducing a new metaclass in the UML metamodel.
The rationale for (2.2) is that we need a way to tell how to serialize any UML::InstanceSpecification, whether it is an instance of a stereotype or something else.
Point #3) The meaning of "stereotypes can participate in associations" is that it is possible to create link instance of such an association (i.e., a UML::InstanceSpecifications) and that the slots of this link instance refer to the distinguished UML::InstanceSpecifications corresponding to the instances of the stereotypes related via such a link.
The problem is that the UML specification (2.4 and 2.5) does not say how to serialize such links.
This is something that caused me a lot of headaches when producing the XMI for SysML 1.3.
Because the ISO-80000-1-SysML.xmi and ISO-80000-1-QUDV.xmi are libraries, there will be references to elements defined in them.
Since the SysML profile has associations between Unit & QuantityKind, it means that we should be able to externally refer to particular links between particular instances of Unit & QuantityKind.
I tried to do this in 1.3 but I realize that I got it wrong, specifically, the slot values refer to the UML elements representing Unit and QuantityKind when in fact they should be referring to the distinguished UML::InstanceSpecifications representing the instances of Unit & QuantityKind (see in bold below):
<packagedElement xmi:type="uml:InstanceSpecification"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement"
name="a_kilogram[unit]_mass[quantityKind]">
<classifier href="http://www.omg.org/spec/SysML/20120322/SysML.xmi#_SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement"/>
<slot xmi:type="uml:Slot"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement-unit_Property">
<definingFeature href="http://www.omg.org/spec/SysML/20120322/SysML.xmi#_SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement-unit_Property"/>
<value xmi:type="uml:InstanceValue"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement-unit_Property-value__ValueSpecification.0"
instance="_ISO-80000-1-SysML_kilogram_PackageableElement"/>
</slot>
<slot xmi:type="uml:Slot"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-Unit_PackageableElement-quantityKind_Property">
<definingFeature href="http://www.omg.org/spec/SysML/20120322/SysML.xmi#_SysML_Blocks_PackageableElement-Unit_PackageableElement-quantityKind_Property"/>
<value xmi:type="uml:InstanceValue"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-Unit_PackageableElement-quantityKind_Property-value__ValueSpecification.0"
instance="_ISO-80000-1-SysML_mass_PackageableElement"/>
</slot>
</packagedElement>
These should have been:
<packagedElement xmi:type="uml:InstanceSpecification"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement"
name="a_kilogram[unit]_mass[quantityKind]">
<classifier href="http://www.omg.org/spec/SysML/20120322/SysML.xmi#_SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement"/>
<slot xmi:type="uml:Slot"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement-unit_Property">
<definingFeature href="http://www.omg.org/spec/SysML/20120322/SysML.xmi#_SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement-unit_Property"/>
<value xmi:type="uml:InstanceValue"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-A_unit_quantityKind_PackageableElement-unit_Property-value__ValueSpecification.0"
instance="_ISO-80000-1-SysML_kilogram_PackageableElement-appliedStereotypeInstance__InstanceSpecification"/>
</slot>
<slot xmi:type="uml:Slot"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-Unit_PackageableElement-quantityKind_Property">
<definingFeature href="http://www.omg.org/spec/SysML/20120322/SysML.xmi#_SysML_Blocks_PackageableElement-Unit_PackageableElement-quantityKind_Property"/>
<value xmi:type="uml:InstanceValue"
xmi:id="_ISO-80000-1-SysML_a_kilogram_u00255Bunit_u00255D_mass_u00255BquantityKind_u00255D_PackageableElement-slot__Slot._SysML_Blocks_PackageableElement-Unit_PackageableElement-quantityKind_Property-value__ValueSpecification.0"
instance="_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance__InstanceSpecification"/>
</slot>
</packagedElement>
Point #3) There is no crossing of metalevels in SysML's ValueType (extension of UML::DataType) associated to stereotypes extending UML::InstanceSpecification (Unit, QuantityKind)
In practice, it means that if we defined, say, "MassInKilograms", a UML::DataType and applied SysML::ValueType to it, we would have something like this:
<packagedElement xmi:type="uml:DataType"
xmi:id="123"
name="MassInKilograms"/>
<sysml:ValueType xmi:id="456" base_DataType="123"
unit="_ISO-80000-1-SysML_kilogram_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
quantityKind="_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance__InstanceSpecification"/>
And we should be able to explicitly create a link instance for the association between ValueType & Unit and its slots would refer to the distinguished UML::InstanceSpecifications corresponding to the stereotype instances thus related, I.e.:
"456" and "_ISO-80000-1-SysML_kilogram_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
Similarly, the link instance for the association between ValueType & QuantityKind would have as its slots the following:
"456" and "_ISO-80000-1-SysML_mass_PackageableElement-appliedStereotypeInstance__InstanceSpecification"
The rationale for this point is that since stereotypes can participate in associations, it follows that instances of stereotypes can be linked via instances of such associations.
To put it simply, I'm saying this:
The spec should clearly state that an instance spec is a legitimate value
of a property typed by a classifier.
The spec should make sure that the abstract syntax operations &
constraints involving all kinds of UML classifiers & instance
specifications work according to the above.
The UML spec tacitly agrees with this as shown in several examples:
Figure 7.54 in UML 2.4.1, page 82.
Figures 9.31, 9.32, 9.33 in UML Simplification Revised August draft, p. 143
test