是否可以从实例(模型本身)引用eClass (ecore中的元类)?
假设我有一个ecore元模型M2.ecore,其中包含一个基类BASECLASS,所有元类(eClasses)都是从它派生的。这就是,BASECLASS是M2.ecore元模型的所有eClasses的超类。其中一个名为M的类使用BASECLASS,因此eClass M和BASECLASS之间有一个eClass:
M2.生态
ClassA ----inherits_from------|> BASECLASS
ClassM ----inherits_from------|> BASECLASS
ClassM ----uses-(eReference)---> BASECLASS然后,我有一个eClass M的实例eClass,我想链接到M2.ecore的eClasses,例如:
M2.xmi
INSTANCE_M -----eReference---> (M2.ecore).Class_A这就是,我想链接元模型的类。显然,使用示例反射编辑器,我只能链接实例,而不能链接元类。
为什么?如何解决这个问题?
提前谢谢你
发布于 2011-12-30 09:44:59
首先,我要说,您的需求(在某种程度上)与EMF的工作方式背道而驰。使用EMF,您有一个模型定义了一些概念(让我们称之为“元模型”)及其实例(让我们称之为“模型”)。您需要的是一个包含模型元素和元模型元素的模型。可以出现在模型中的概念需要在元模型中定义,但元模型只是一个常规模型。在标准EMF工作流中,它只是Ecore (meta)模型的一个实例,Ecore本身也只是EMF模型的一个实例。所以你有这样的情况:
M2.xmi
您希望在M2.xmi中操作在M2.ecore中定义的概念实例和在Ecore.ecore中定义的概念实例(其中一个实例是您的M2.ecore模型)。
您可以创建包含概念的M2.ecore模型,例如,属性"myMetaEntity“引用来自Ecore.ecore的概念。在ecore编辑器中,右键单击"load resource",然后从“注册包”中选择"http://www.eclipse.org/emf/2002/Ecore“和"Ok”。一旦“导入”,您就可以从Ecore.ecore模型中创建对元素的引用--例如,您可以创建一个类型为"EClass“的属性myMetaEntity。然后,您可以使用它引用来自M2.ecore模型的EClass,但请记住,M2.ecore中定义的这个属性将接受"EClass“概念的任何实例,甚至是来自M3.ecore或XYZ.ecore的实例。
如果您只想要一个从实例到其元类的链接,您可以使用"eClass()“方法,但是如果您真的想在实例元素和元类之间创建”复杂“链接,就不能真正地创建元模型,但是您可以创建一个元模型,从元元模型导入概念(我非常讨厌这个名称.),在这里,Ecore.ecore获得了操作这两者的机会,但是它也打开了某种类型的”潘多拉盒子“,因为你不能说”只有当这些概念来自M2.ecore时,才能操纵在Ecore.ecore中定义的概念的实例“。
如果您知道您在做什么,或者如果您的用户(或者不熟悉这个问题的微妙之处的人)不操作它,因为您将给他们一个API / UI或其他什么东西,那么您会很好,但是请记住,您想要做一些概念上很棘手的事情(但在EMF技术上很容易)。
https://stackoverflow.com/questions/8402587
复制相似问题