首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用EMF加载多个xmi文件

用EMF加载多个xmi文件
EN

Stack Overflow用户
提问于 2017-04-18 15:26:42
回答 1查看 768关注 0票数 1

我已经使用EMF三周了。我已经使用正在运行的Eclipse应用程序创建了我的元模型和一个实例。现在,我的问题是,Eclipse的运行实例保存了多个XMI文件,我希望解析它们,以便创建处理xmi文件中数据的另一个文本文件。为此,我使用了EMF的XMIResource API,当我加载一个文件而不交叉引用其他xmi文档时,一切都进行得很顺利。但是,当我加载一个包含交叉引用到其他xmi文档的xmi文档时,所有交叉引用都没有正确地保存在我的Java模型中。

我使用这段代码加载xmi文件:

代码语言:javascript
复制
XMIResource resourceInTy = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/instancesTypes.model"));
    resourceInTy.load(null);
    Environment env1 = (Environment) resourceInTy.getContents().get(0);

    XMIResource resourceContRel = new XMIResourceImpl(URI.createURI("file:/runtime-New_configuration/ApplicationInstance/ContextRelations.model"));
    resourceContRel.load(null);
    Environment env2 = (Environment) resourceContRel.getContents().get(0);

    env.setTypes(env1.getTypes());
    env.setInstances(env1.getInstances());
    env.setContextRelations(env2.getContextRelations());

如您所见,"Environment“对象是所有元模型的根对象,在解析xmi文件后,这些元模型应该包含所有正确设置的EList对象。

这里的问题是,在EList "ContextRelations“中应该有对另一个称为”参数“的对象的引用,该对象具有对对象类型的引用。如果我试图检索类型,将出现一个空引用!我深入地寻找了关于这个问题的另一个问题,但我发现的最接近的问题是在这个链接上有一个没有答案的问题:Loading Multiple files using EMF resource load?

这里有两个xmi文件: ContextRelations.model

代码语言:javascript
复制
<parameters number="5">
  <type href="instancesTypes.model#//@types.0"/>
</parameters>
<parameters number="6">
  <type href="instancesTypes.model#//@types.4"/>
</parameters>
<contextRelations name="in"parameters="//@parameters.0//@parameters.1">
  <initialComplexEvent href="Events.model#//@events.0"/>
  <endingComplexEvent href="Events.model#//@events.1"/>
</contextRelations>

InstancesTypes.model

代码语言:javascript
复制
<types name="Emp"/>
<types name="Cam"/>
<types name="Comp"/>
<types name="Fi"/>
<types name="Loc"/>
<types name="St"/>
<types name="Read"/>
<instances name="Alice" type="//@types.0"/>
<instances name="r01" type="//@types.4"/>
<instances name="Bob" type="//@types.0"/>
<instances name="cctv1" type="//@types.1"/>
<instances name="doc" type="//@types.3"/>
<instances name="m1" type="//@types.2"/>
<instances name="m2" type="//@types.2"/>
<instances name="m3" type="//@types.2"/>
<instances name="nfc01" type="//@types.6"/>
<instances name="usb1" type="//@types.5"/>

次要问题:

如您所见,我使用三个根对象: env1和env2作为临时变量,将它们的内容放在主根对象(env)中。我这样做是因为我不知道如何同时解析所有xmi文件,只创建一个根对象。

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-19 12:44:11

由于这个网页:http://www.bar54.de/2012/04/emf-load-model-with-eproxyuri-references/,我解决了这个问题。

基本上,为了解决代理(交叉引用),我必须创建一个资源集,将所有的资源都放在集合中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43476279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档