EMF模型的序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EMF模型的序列化相关的知识,希望对你有一定的参考价值。

我正在接触EMF,我想检查一下我头脑中的概念是否准确。

我知道可以在Eclipse中创建EMF模型,然后使用它来生成Java代码。

我进一步明白,模型可以序列化到磁盘然后再返回,但我不明白这个的使用。

当然模型文件本身可以保存吗?是否有明显的序列化用例?

答案

我想,你在混淆两个术语:“元模型”和“模型”。

EMF模型实际上是一个元模型:它是一个可以保存数据的模型的描述。 EMF模型/元模型可以以许多不同的格式表示。对于EMF,我们通常使用.ecore/.genmodel.xcore文件。

从EMF模型/元模型中,您可以生成代表模型和模型操作的Java代码。从理论层面来看,EMF模型和Java代码是相同的,因为它们代表相同的信息。

使用生成的Java代码,您可以实例化对象以保存模型数据。然后,可以将这些数据以多种不同的格式保存到磁盘。 EMF可以自动提供将模型数据序列化为XML并返回磁盘所需的代码。 (实际上,没有涉及生成的代码 - 它完全基于...Factory类中的模型描述)。实现其他格式(如JSON或数据库模式)相当容易。


一个例子:

假设您已经使用EMF来描述自行车的模型(车轮,车把,车架,鞍座等)。从EMF模型中,您可以生成Java类,这些类可以根据对象和它们之间的关系来描述相同的自行车。

现在,您可以通过创建/构造和连接Java类的对象来实例化模型中的许多不同的自行车。

然后可以将这些自行车序列化为XML并返回,这样您就可以将自行车保存到磁盘上。


通过MDA(模型驱动架构),我们实际上讨论了4个级别的模型:

  • M0通常是物理人工制品。例如。在纸上的自行车或账单。
  • M1是物理人工制品的表示 - 这是模型
  • M2是模型的描述 - 元模型 - 在这种情况下是基于EMF的模型,描述模型的实体,关系和属性
  • M3是对模型描述的描述 - 元元模型 - 实际上也可以在EMF中表示。您在.ecore文件和...Package类中找到的信息在M3模型中表示,因为它们描述了M2模型。

后者真的只对我们这些教MDA的人有用......在你正常的工作中,你真的只需要想到M0,M1和M2 ......

另一答案

序列化是指持久化模型实例(您的数据)的内容。您可以序列化为XML,JSON,数据库等。

以上是关于EMF模型的序列化的主要内容,如果未能解决你的问题,请参考以下文章

EMF 模型到模型

如何在 Java 中以编程方式合并 EMF 模型?

将节点附加到 EMF 数据模型实例 XML

教程4 - 验证和权限

无法使用 Python 将 EMF 插入 Word

将 EMF 转换为 PNG,结果并不完美