我有一个问题:
在我的建模工具(企业架构师)中,我建模了一个元模型(基于 UML)。 现在我想将元模型转化为Ecore。但我不知道该怎么做。
在 Enterprise Architect 中,我可以将元模型导出到 UML XMI。有谁知道是否可以将生成的 XMI 转换为 Ecore XMI ?!
谢谢
最佳答案
Does anyone know if it is possible to transform the generated XMI to Ecore XMI ?!
是的,这是可能的——至少在轮廓上是可能的。您可以将问题分为两部分:
- 语义映射是什么?换句话说,如何将源 XMI 中的概念映射到目标 eCore 模型中的概念?
- 您将如何在实践中实现这些映射?
语义映射
我假设您的元模型专注于静态结构。 ECore 不支持声明 EOperations 之外的动态概念。如果相关的话,请详细了解下面的动态。
我具体不了解 EA,也不了解它支持哪个(些)版本的 XMI。然而,它将是核心 UML 概念的一些变体:类、属性、操作、关联、AssociationEnd 等。
eCore有一个similar (if smaller) set of concepts :EClass
、EAttribute
、EDataType
、EReference
、EOperation
等。 “类型”概念之间相当强的相关性;例如:
- UML 类 --> EClass
- 属性 --> EAttribute
- 操作 --> EOperation
所以那里的映射应该是直接的。基本上为每个 UML 概念创建一个 ECore 等效实例。
关系不太明显,但仍然可行。 ECore 不直接支持关系; EReference
是唯一类似的概念。然而,合成关联非常容易,例如:
- 单向导航 UML 关联成为单个
EReference
,并复制了最小和最大基数 - UML 双向关联变成两个
EReferences
,每个方向一个。您还应该设置EotherEnd
属性,这实际上表明两个EReferences
是同一关联的一部分。
希望这能给您带来启发。
实现
定义概念映射后,有很多关于如何实现它的选项。所有这些通常都会遵循相同的基本模型:
解析源代码 --> 将源概念映射到目标概念 --> 生成目标文本。
您可以使用 xslt(因为它只是一个 XML->XML 转换)。您还可以使用众多可用的模型到模型 (M2M) 和/或模型到文本 (M2T) 工具包之一。参见例如Eclipse 建模项目( M2M 、 M2T )。您还可以直接从 EA 使用 EA API 读取模型,而不是生成和解析 XMI。您的选择取决于您的环境、技能等。
如果你想看看它在实践中是什么样子,你可以看看 MagicDraw 。它提供开箱即用的 ECore 导出。 (请注意,这是一个付费工具 - 但可以使用 eval)。
也可能值得直接询问 Sparx:如果没有可用于 EA 的 ECore 导出附加组件/插件,我会感到有点惊讶。
第h。
动态
如果您的模型具有动态性(状态模型等),那么您就会遇到更多问题。 ECore 根本不涵盖这些概念。可以扩展 ECore,这可能是一种选择 - 但这可能需要更多工作,因为与 ECore 一起使用的工具不太可能理解您的扩展。
关于eclipse - UML XMI 到 Ecore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10303280/