我正在尝试使用EMF建模网络。 网络应由彼此连接的节点组成。 每个节点应与其他节点建立一个或多个连接,如网状网络。
该模型应由EMF客户端平台(ECP)演示应用程序编辑。 当用户创建节点时,在ECPs模型资源管理器中,他/她可以设置与其他节点的连接,最好是在列表中。
首先尝试是自我引用,但问题是没有双向自引用。这导致没有看到来自相对节点的连接。
我的下一个想法是使用中间连接类,这会导致另一个问题。我想自动创建此连接,而模型资源管理器中没有出现连接类。哪个可以在生成的EMF查看器中实现,但不能在我正在使用的ECP演示应用程序中实现。
第三个想法:我能想到解决最后一个想法的唯一方法是在节点视图中使用tableControl来编辑那里的连接类。但是,模型资源管理器中隐藏连接类的问题仍然存在,连接类出现在项目文件夹(最高级别)中,而不是出现在它们的包含类中(在我的例子中是网络类)。
> Doe的任何人都有一些想法,如何解决我的任何问题?编辑:其他信息
节点之间的连接根据定义是全双工的。 然后,图表应该用作最短路径算法的输入。
答案 0 :(得分:1)
你的第一次尝试是好的。实际上,你可以在Ecore中进行相反的模型。为此,您必须为同一个对象建模两个EReferences
(因此两个反身引用),然后将eOpposite
之一的属性EReference
设置为另一个。
以下是一个简单的元模型,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" />
使用此元模型,您可以创建包含许多Graph
的{{1}}。每个节点可以Node
个其他节点。如果reference
Node
作为对另一个名为A
的引用,则B
的{{1}}集合会自动使用relatives
进行更新。