0

私は Ecore メタモデルを持っています。ノードPeerには、ノードMessageとの「 in 」という包含関係 0..*があります。ピアに含まれるすべてのメッセージに異なる名前を付けたいです。したがって、ピアは同じ名前の 2 つのメッセージを持つことはできません。

  +--------+                  +-----------+
  |  PEER  |◄►-- in 0..* -->  |  MESSAGE  |
  +--------+                  +-----------+
                              |name:String|
                              +-----------+
  • 属性Message.nameのオプションid=trueを入れました
  • オプションEKeys=nameの関係Peer.inを入れました
  • メッセージのメソッドhashCode()およびequals()をオーバーライドして、属性に基づいてそれらを計算しようとしました

しかし、モデルでは、ピア. 私は、OCL が私が望むことを達成するのに役立つのではないかと考えました。

実際、私は M2M に ATL を使用しています。その結果、ピアには多くの同等のメッセージが含まれています。ピアがメッセージを追加する前にそのメッセージを既に持っているかどうかにかかわらず、ATL ルールで手動で制御することなく、制約がメタモデルで暗黙的であることを望みます。

ありがとうございました

ノード ピア

<eClassifiers xsi:type="ecore:EClass" name="Peer">
    <eStructuralFeatures xsi:type="ecore:EReference" name="in" upperBound="-1" 
     eType="#//Message"
     containment="true" eKeys="#//Message/name"
    />
</eClassifiers>

ノード メッセージ

<eClassifiers xsi:type="ecore:EClass" name="Message" abstract="true">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" 
     eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"
     iD="true"
    />
</eClassifiers>
4

2 に答える 2