eclipse - 引用 Ecore Eclasses。是否可以从 xmi 实例中引用 eClass?

标签 eclipse instance modeling eclipse-emf-ecore

是否可以从实例(模型本身)引用 eClass(ecore 中的元类)?

假设我有一个 ecore 元模型 M2.ecore,其中包含一个基类 BASECLASS,所有元类 (eClasses) 都从该基类派生而来。也就是说,BASECLASS 是 M2.ecore 元模型的所有 eClass 的父类(super class)。其中一个称为 M 的类使用 BASECLASS,因此 eClass M 和 BASECLASS 之间存在 eReference:

M2.ecore

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

然后我有一个 eClass M 的实例 INSTANCE_M,我想链接到 M2.ecore 的 eClasses,例如:

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

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

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

先感谢您

最佳答案

首先,我想说您的需求(在某种程度上)与 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 中定义的此属性将接受“EClass”概念的任何实例,即使来自 M3.ecore 或 XYZ.ecore。

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

如果您知道自己在做什么,或者如果您的用户(或任何不熟悉这个问题的微妙之处的人)不操作它,因为您将为他们提供 API/UI 或其他东西,那么您很好,但请记住您想要做一些概念上棘手的事情(但使用 EMF 在技术上很容易)。

关于eclipse - 引用 Ecore Eclasses。是否可以从 xmi 实例中引用 eClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8402587/

相关文章:

eclipse - Eclipse 和 Maven 多模块项目的依赖性问题

javascript多个对象实例相同的时间戳

java - 以编程方式打印类直方图

algorithm - 流体模拟如何集成到刚体 phisix 引擎中?

machine-learning - 次优提前停止可以防止机器学习中的过度拟合?

php - Eclipse 4.2 在 Linux 上创建 Windows 回车?

java - 未找到原生的实现

javascript - 创建远离其构造函数的新对象实例

uml - 在类图中显示列表中的选择

java - 如何在 tomcat 6.0 中发布 Apache-Axis Web 服务