私は 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>