在 EMF 中建模自引用节点并使用 ECP 编辑它们

modeling self referencing nodes in EMF and edit them with ECP

我正在尝试使用 EMF 为网络建模。 网络应该由相互连接的节点组成。 每个节点应该与其他节点有一个或多个连接,就像一个网状网络。

该模型应可由 EMF 客户端平台 (ECP) 演示应用程序编辑。 当用户创建节点时,在 ECPs model-explorer 中,he/she 可以设置与其他节点的连接,最好是在列表中。

第一次尝试是自引用,但问题是没有双向自引用。这导致看不到来自对面节点的连接。

我的下一个想法是使用中间连接class,这导致了另一个问题。我想自动创建此连接,而模型资源管理器中不会出现连接 class。这可以在生成的 EMF 查看器中实现,但不能在我使用的 ECP 演示应用程序中实现。

第三个想法:我能想到的解决最后一个想法的唯一方法是在节点视图中使用 tableControl,在其中编辑连接 class。但是随后在模型资源管理器中隐藏连接 class 的问题仍然存在,并且连接 class 出现在项目文件夹(最高级别)中而不是它们包含的 class (在我的例子中网络 class).

有没有人有一些想法,如何解决我的任何问题?

编辑:附加信息

根据定义,节点之间的连接是全双工的。 然后该图应用作最短路径算法的输入。

你的第一次尝试是好的。实际上,您可以在 Ecore 中建立相反的模型。为此,您必须为同一对象建模两个 EReferences(因此两个自反引用),然后将其中一个 EReference 的 属性 eOpposite 设置为另一个一。

这是一个带有 eOpposite 集的简​​单元模型:https://repository.genmymodel.com/vincent.aranega/NodeGraph

在 Ecore-XMI 中,它看起来像这样(注意 eOpposite 值):

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZhv1pEeW9zv77lynsJg"
    name="references" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZiv1pEeW9zv77lynsJg"/>

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZiv1pEeW9zv77lynsJg"
    name="relatives" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZhv1pEeW9zv77lynsJg" />

使用此元模型,您可以创建一个包含许多 NodeGraph。每个节点可以 reference 其他节点。如果 Node A 作为对另一个名为 B 的引用,Brelatives 集合将自动更新为 A.