EMF使用XMIResourceImpl(默认,最流行的方式)序列化数据模型,该模型 严格使用XMI格式,而不是自定义XML结构 。
有关EMF及其使用案例的文章,请参见http://eclipsedriven.blogspot.com/。
我同意其他答复者的观点,EMF可能不是您想要的。
如果我真的想使用带有自定义XML结构的EMF(即非XMI),则可能会使用JAXB来编组/解组我的EMF对象(EObjects)。
因此,EMF与JAXB不同,它们具有不同的目的和目标。实际上,您可能可以以某种方式组合EMF和JAXB。我从未尝试过,但似乎存在有效的用例。(如上所述,用于将EMF对象编组到XML或从XML编组)
要了解EMF,您需要切换范例。首先,删除“ XML”部分,让它从您的脑海中消失。然后,我建议您执行以下操作:
- 创建一个空的EMF项目。
- 创建一个简单的Ecore文件(.ecore),或从Internet上获取它。或从任何XML Schema / UML文件导入Ecore模型。
- 右键单击EClass,然后单击“创建动态实例”,这将创建一个.xmi文件。
- 使用Eclipse打开.xmi文件,这将打开该模型的EMF编辑器。根据需要进行编辑。
- 检查(编辑的).xmi文件的内容。您会看到该格式完全符合Ecore模型。您将无法从模型<-> XMI文件更改/自定义映射,因为顾名思义,XMIResourceImpl仅读取/保存XMI文件(恰好在XML之上实现),但不读取/保存任意XML格式。
EMF支持读取/写入 XML Schema元模型
(即XSD文件),以便将其转换为Ecore元模型,但不支持符合该模式的XML文件(甚至不符合Ecore),除非这些文件为XMI格式。
要将EMF模型持久存储到关系数据库中,请参阅:http :
//eclipsedriven.blogspot.com/2010/12/persisting-emf-objects-to-rdbms-
with.html
我正在使用Teneo。(以及CDO)
关于“ XML”,如果您坚持使用XMI并对此感到满意,那么EMF将使您的生活 更加 轻松,因为您无需进行 任何
映射(与JAXB不同)。缺点是我们的对象必须是EMF对象。
EMF对象是由EMF生成并实现EObject并直接或间接扩展EObjectImpl的对象。通常,您不想手动编写EMF对象,这很麻烦。另一方面,JAXB“对象”通常是纯域对象POJO,并且没有JAXB的其他要求。请注意,与JAXB不同,
EMF对象不是POJO。 这解释了EMF和JAXB之间的另一个不同目标。它们的重叠小于您的想象。
从XMI(不是XML)读取非常容易:
XMIResource resource = new XMIResourceImpl(URI.create("file:/path/to/mymodel.xmi"));resource.load(null);System.out.println( resource.eContents().get(0) );


