Сопоставление точечной нотации в XMI

Начиная с версии 2.1 (или около того) в UML введена так называемая точечная нотация, которая сообщает, обозначает ли имя роли помимо точки в конце ассоциации принадлежащее свойство в противоположном классе. Начиная с 2.5 OMG довольно широко использует это обозначение.

Теперь мне интересно, как это должно быть сопоставлено с XMI. В спецификации UML указано на стр. 717

UMLEdge (Association/Connector/InstanceSpecification/Property/ConnectorEnd , isAssociationDotShown включен)

Поэтому я ожидал бы иметь атрибут в 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. хотел бы переварить, так как я просто догадываюсь здесь.

person qwerty_so    schedule 13.04.2018    source источник
comment
Кажется логичным, хотя я не уверен, почему бы не показать точку, если она принадлежит?   -  person muszeo    schedule 16.04.2018
comment
Моя проблема: как мне закодировать это в XMI, поскольку, похоже, нет (стандартной) конструкции для отображения точки после импорта (скажем) в EA.   -  person qwerty_so    schedule 16.04.2018
comment
Кажется, что XMI не поддерживает ассоциацию и точки владения. Возможно, предполагается, что они должны быть заменены соответствующими ссылочными свойствами в задействованных классах перед сериализацией модели класса в XMI. Я предполагаю, что Спецификация обмена диаграммами UML должна включать их поддержку.   -  person Gerd Wagner    schedule 17.04.2018
comment
@GerdWagner Я тоже это подозреваю. Причиной этого может быть тот факт, что точечная запись является относительно новой. Очень плохо.   -  person qwerty_so    schedule 17.04.2018


Ответы (1)


Свойство isAssociationDotShown является свойством UmlDiagramWithAssociations (UML 2.5 § B.7.15) в приложении B обмена диаграммами UML и описывается как

isAssociationDotShown : Boolean [1..1] = false
Указывает, следует ли использовать точечную нотацию для ассоциаций.

Обратите внимание, что по умолчанию это свойство имеет значение false, что означает, что на диаграмме не должны отображаться точки ассоциации.

Сама точечная запись определена в UML (UML 2.5 § 11.5.4) как

Принадлежность концов ассоциации ассоциированному классификатору может быть обозначена графически маленьким закрашенным кружком, который для краткости мы будем называть точкой.

Отображение в XMI на самом деле не что иное, как право собственности на члены ассоциации.

Пример из спецификаций UML: введите здесь описание изображения

Пример 1: точка с обеих сторон

Связь между InteractionFragment и Interaction имеет точку с обеих сторон, что указывает на то, что оба конца принадлежат противоположному классификатору.
И действительно, в xmi, предоставленном OMG, мы находим:

<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: точка на одной стороне

Связь между StateInvariant и Constraint имеет точку только на конце 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>

Импорт в ЕА

К сожалению, похоже, есть ошибка в функции импорта xmi в EA, поскольку она теряет понятие принадлежащих концов (и, следовательно, точек). При импорте в EA (v14.5 BETA) результат такой:

введите здесь описание изображения

person Geert Bellekens    schedule 17.04.2018
comment
Спасибо, Герт. Я посмотрю на это позже сегодня вечером. На первый взгляд, я удивлен, что они (Боже мой, аббревиатура ооочень хороша) сделали право собственности частью диаграммы, а не самой ассоциации. Так что все еще в ловушке принадлежащего конца ассоциации по сравнению с атрибутом с типом. - person qwerty_so; 17.04.2018
comment
Итак (прежде чем мне придется уйти) все сводится к использованию ownedAttribute для варианта с точками — и надеюсь, что Sparx исправит это когда-нибудь в будущем? Таким образом, isAssociationDotShown - это просто дополнительный флаг диаграммы для его отображения (интересно, почему по умолчанию это false). - person qwerty_so; 17.04.2018
comment
@ThomasKilian Да, по крайней мере, я так это понял. - person Geert Bellekens; 17.04.2018
comment
Заглянуть в источник OMG XMI — хорошая идея. Надо было подумать об этом... Я не увидел точек в EA после импорта и просто подумал, что они не закодированы. Но очевидно, что EA ошибается при импорте. Вздох. - person qwerty_so; 17.04.2018
comment
А, интересно, молодец. Я предполагаю, что это связано с расширением техники с течением времени и желанием сохранить совместимость с историческим методом. Я согласен, что для диаграмм 2.5 по умолчанию должно быть установлено значение true. - person muszeo; 18.04.2018