2011-12-06 31 views
3

是否有可能从一个实例(模型本身)引用的eclass(在的Ecore元类)?参考Ecore Eclasses。是否有可能从xmi实例引用eClasses?

让我们假设我有一个包含一个基类基类从所有的元类(的eclass)导出的Ecore元模型M2.ecore。这是,BASECLASS是M2.ecore元模型的所有eClass的超类。这一个班叫米,使用的基类,所以就有了eclass的M和基类之间的EReference:

M2.ecore

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

然后我有eclass的M的实例INSTANCE_M我要链接到M2.ecore的的eclass,例如:

M2.xmi

INSTANCE_M -----eReference---> (M2.ecore).Class_A 

这是,我想链接元模型的类。显然,使用样本反射编辑器我只能链接实例而不是元类。

为什么?如何解决这个问题呢?

预先感谢您

回答

0

首先,我要说的是,你需要去(在某种程度上)对EMF的工作方式。使用EMF,您可以定义一些模型来定义一些概念(我们称之为“元模型”)及其实例(让我们称之为“模型”)。你想要的是一个包含模型元素和元模型元素的模型。模型中可能出现的概念需要在元模型中定义,但元模型只是一个常规模型。在标准的EMF工作流程中,它只是Ecore(元)模型的一个实例,而Ecore本身也仅仅是一个EMF模型的实例。所以,你有这样的情况:

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

而你要在M2.xmi中操作M2.ecore中定义的概念实例和Ecore.ecore中定义的概念实例(其中一个实例是M2.ecore模型)。

可以创建你M2.ecore模型包含的概念,例如属性“myMetaEntity”引用来自Ecore.ecore的概念。在ecore编辑器中,右键点击“加载资源”,然后从“注册包”中选择并选择“http://www.eclipse.org/emf/2002/Ecore”和“确定”。一旦“导入”,您可以创建对Ecore.ecore模型中元素的引用,例如,您可以使用类型“EClass”创建属性myMetaEntity。然后,您可以用它来从M2.ecore模型引用的EClass,但请记住,在M2.ecore定义这个属性可以接受的,甚至从M3.ecore或XYZ.ecore了“的EClass”概念的任何实例。

如果你只是想从一个实例到它的元类的链接,你可以使用方法“eClass()”,但如果你真的想在实例元素和元类之间创建“复杂”的链接,可以创建一个元模型从元元模型导入概念(我讨厌这个名字这么多...),这里Ecore.ecore,获得的机会操作既但它也打开了某种“潘多拉的盒子”,因为你可以不要说“只有当这些概念来自M2.ecore时,你才能操纵在Ecore.ecore中定义的概念实例”。

如果你知道自己在做什么,或者如果你的用户(或任何不熟悉这个问题微妙之处的人)不会操纵这个,因为你会给他们一个API /一个用户界面或其他东西,你很好,但保持记住,你想做一些概念上的棘手(但EMF在技术上很容易)。

相关问题