2011-12-06 16 views
3

インスタンス(モデル自体)からeClass(ecoreのメタクラス)を参照することは可能ですか?Ecore Eclassesを参照しています。 xmlインスタンスからeClassを参照することは可能ですか?

すべてのメタクラス(eClasses)が派生するベースクラスBASECLASSを含むecoreメタモデルM2.ecoreがあるとしましょう。これは、BASECLASSはM2.ecoreメタモデルのすべてのeClassのスーパークラスです。 Mと呼ばれるこのクラスの一つ、基底クラスを使用するため、Mのeclassと基底クラス間のeReferenceがある:

M2.ecore

ClassA ----inherits_from------|> BASECLASS 
ClassM ----inherits_from------|> BASECLASS 
ClassM ----uses-(eReference)---> BASECLASS 

その後、私はインスタンスのeclass MのINSTANCE_Mを持っています

M2.xmi

INSTANCE_M -----eReference---> (M2.ecore).Class_A 
:私は、例えば、M2.ecoreのeClassesにリンクしたいこと

これは、メタモデルのクラスをリンクしたいのです。どうやら、サンプルリフレクティブエディタを使用すると、インスタンスとメタクラスをリンクすることしかできません。

なぜですか?この問題を解決するには?

は、すべての

答えて

0

まず事前にありがとうございます、私はあなたの必要性は、EMFの動作方法に対して(のように)行くと言うでしょう。 EMFでは、いくつかの概念(「メタモデル」と呼ぶ)とそのインスタンス(それらを「モデル」と呼ぶ)を定義するモデルがあります。あなたが望むのは、モデル要素とメタモデル要素を含むモデルです。モデルに表示できる概念は、メタモデルで定義する必要がありますが、メタモデルは単なる通常のモデルです。標準的なEMFワークフローでは、Ecore(メタ)モデルのインスタンスに過ぎず、EcoreはEMFモデル自体のインスタンスでもあります。だから、このような状況があります: - > M2.ecore --instanceof - > Ecore.ecore --instanceof -

M2.xmi --instanceof> Ecore.ecore ...

をそして、あなたがしたいですM2.xmiで定義された概念のインスタンスとEcore.ecoreで定義された概念のインスタンス(M2.ecoreモデルであるインスタンスの1つ)を操作するために使用されます。

M2.ecoreモデルに、Ecore.ecoreの概念を参照する属性 "myMetaEntity"などの概念を含むものとして作成できます。 ecoreエディタで、 "load resource"を右クリックし、 "registered packages"から選択し、 "http://www.eclipse.org/emf/2002/Ecore"と "Ok"を選択します。 「インポート」されたら、Ecore.ecoreモデルから要素への参照を作成できます。たとえば、EClass型の属性myMetaEntityを作成できます。これを使用してM2.ecoreモデルからEClassを参照できますが、M2.ecoreで定義されているこの属性はM3.ecoreまたはXYZ.ecoreからの "EClass"概念のインスタンスを受け入れることに注意してください。

インスタンスからメタクラスへのリンクが必要な場合は、メソッド "eClass()"を使用できますが、実際にはインスタンス要素とメタクラスの間に "複雑な"リンクを作成する場合は、メタモデルからコンセプトをインポートするメタモデルを作成することができます(私はその名前があまりにも嫌いです...)、ここではEcore.ecoreは、両方を操作する機会を得るためにも、「パンドラのボックス」を開くこともできます。 Ecore.ecoreで定義された概念のインスタンスを操作できるのは、それらの概念がM2.ecoreのものである場合のみです。

あなたが何をしているのか、あるいはあなたのユーザー(またはこの問題の微妙なことに慣れていない人)がAPI/UIなどを与えるためにこれを操作しない場合は、あなたは概念的には難しいことをしたいと思っています(しかし、技術的にはEMFで簡単に)。

関連する問題