XMI 中的映射点符号

Mapping dot notation in XMI

从 2.1(或左右)开始,UML 引入了所谓的点符号,它告诉关联端除点之外的角色名称是否表示相对 class 中的拥有 属性 .由于 2.5 OMG 相当广泛地使用了该表示法。

现在我想知道如何将其映射到 XMI。 UML 规范在 p. 上说明。 717

UMLEdge (Association/Connector/InstanceSpecification/Property/ConnectorEnd , isAssociationDotShown enabled)

所以我希望在 XMI 中有一个像

这样的属性
<ownedEnd isAssociationDotShown="true" xmi:type="uml:Property" ...

我在 Enterprise Architect 中尝试过,但(难怪)它不起作用。 EA 正在使用它自己的扩展

<style value="Union=0;Derived=0;AllowDuplicates=0;Navigable=Unspecified;Owned=1;"/>

(最后是 Owned=1)。我当然可以模仿那个符号,但是

  1. 这仅适用于 EA 和
  2. 我想坚持我
  3. 的标准
  4. 想消化一下,因为我只是在这里猜测。

属性 isAssociationDotShown 是 Annex B UML Diagram Interchange 中 UmlDiagramWithAssociations (UML 2.5 § B.7.15) 的 属性,描述为

isAssociationDotShown : Boolean [1..1] = false
Indicates whether dot notation for associations shall be used.

请注意,默认情况下此 属性 为假,这意味着图表不应显示关联点。

点符号本身在 UML (UML 2.5 § 11.5.4) 中定义为

Ownership of Association ends by an associated Classifier may be indicated graphically by a small filled circle, which for brevity we will term a dot.

到 XMI 的映射实际上只不过是协会成员端的所有权。

UML 规范中的示例:

例1:两边点

InteractionFragmentInteraction之间的关联两边都有一个点,表示两端都属于相反的分类器。
确实在 OMG 提供的 xmi 中我们发现:

<packagedElement xmi:type="uml:Association" xmi:id="A_fragment_enclosingInteraction" name="A_fragment_enclosingInteraction" memberEnd="Interaction-fragment InteractionFragment-enclosingInteraction"/>

没有自己的目的。两端都由两端的分类器拥有,如 OwnedAttributes

<ownedAttribute xmi:type="uml:Property" xmi:id="Interaction-fragment" name="fragment" type="InteractionFragment" isOrdered="true" aggregation="composite" subsettedProperty="Namespace-ownedMember" association="A_fragment_enclosingInteraction">
    <ownedComment xmi:type="uml:Comment" xmi:id="Interaction-fragment-_ownedComment.0" annotatedElement="Interaction-fragment">
        <body>The ordered set of fragments in the Interaction.</body>
    </ownedComment>
    <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Interaction-fragment-_upperValue" value="*"/>
    <lowerValue xmi:type="uml:LiteralInteger" xmi:id="Interaction-fragment-_lowerValue"/>
</ownedAttribute>

另一个:

<ownedAttribute xmi:type="uml:Property" xmi:id="InteractionFragment-enclosingInteraction" name="enclosingInteraction" type="Interaction" subsettedProperty="NamedElement-namespace" association="A_fragment_enclosingInteraction">
    <ownedComment xmi:type="uml:Comment" xmi:id="InteractionFragment-enclosingInteraction-_ownedComment.0" annotatedElement="InteractionFragment-enclosingInteraction">
        <body>The Interaction enclosing this InteractionFragment.</body>
    </ownedComment>
    <lowerValue xmi:type="uml:LiteralInteger" xmi:id="InteractionFragment-enclosingInteraction-_lowerValue"/>
</ownedAttribute>

示例 2:点在一侧

StateInvariantConstraint之间的关联只有Constraint端有一个点
关联本身在 XMI 中定义为:

<packagedElement xmi:type="uml:Association" xmi:id="A_invariant_stateInvariant" name="A_invariant_stateInvariant" memberEnd="StateInvariant-invariant A_invariant_stateInvariant-stateInvariant">
    <ownedEnd xmi:type="uml:Property" xmi:id="A_invariant_stateInvariant-stateInvariant" name="stateInvariant" type="StateInvariant" subsettedProperty="Element-owner" association="A_invariant_stateInvariant">
        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_invariant_stateInvariant-stateInvariant-_lowerValue"/>
    </ownedEnd>
</packagedElement>

没有圆点的那一端归协会所有。
带点的结尾属于 StateInvariant 作为 ownedAttribute。

<ownedAttribute xmi:type="uml:Property" xmi:id="StateInvariant-invariant" name="invariant" type="Constraint" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_invariant_stateInvariant">
    <ownedComment xmi:type="uml:Comment" xmi:id="StateInvariant-invariant-_ownedComment.0" annotatedElement="StateInvariant-invariant">
        <body>A Constraint that should hold at runtime for this StateInvariant.</body>
    </ownedComment>
</ownedAttribute>

导入 EA

不幸的是,EA 中的 xmi 导入函数似乎存在一个错误,因为它失去了拥有端(以及点)的概念。将其导入 EA (v14.5 BETA) 时,结果为: