2016-03-01 249 views
0

我需要通过EMF加载和解析xmi文件(版本:OMG XMI 2.4.1),但现在卡住了。使用EMF加载和解析XMI文件

OMG XMI Spec 2.4.1,有一个XMI架构XMI.xsdXMI-model.xmi。因此,例如,我需要通过EMF加载并解析XMI-model.xmi

我所如下进行:

  • 新在Eclipse EMF项目
  • 导入XMI模式:XMI.xsd,并得到一个xmi.genmodel文件
  • 使用xmi.genmodel生成日蚀中的所有代码,它会生成模型代码
  • 新建一个Junit4测试用例并尝试l dd XMI-model.xmi文件与Junit插件测试但失败,以下是我的代码。

    @Test 
    public void test() throws IOException { 
        URI uri = URI 
          .createFileURI("/home/pzhengshuai/Desktop/15Feb-19Feb/XMI-model.xmi"); 
        _20110701ResourceFactoryImpl factory = new _20110701ResourceFactoryImpl(); 
        Resource resource = factory.createResource(uri); 
        Map<String, Boolean> options = new HashMap<String, Boolean>(); 
        options.put(XMLResource.OPTION_KEEP_DEFAULT_CONTENT, Boolean.TRUE); 
        resource.load(options); 
        EObject model = (EObject) resource.getContents().get(0); 
        Assert.assertNotNull(model); 
    } 
    

唯一的例外是:

org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Feature 'XMIType' not found. (file:/home/pzhengshuai/Desktop/15Feb-19Feb/XMI-model.xmi, 2, 164) 

好吧,那我试图读取XSD文件和XMI文件,我发现存在XMI-model.xmi内部命名空间xmlns:uml="http://www.omg.org/spec/UML/20110701",所以我去了uml空间的链接,试图找到UML的模式。不幸的是,在这个链接中,关于UML的所有文件都是en格式的XMI。

所以,我想两个选项:

  1. 尝试UML.xmi转换为UML.xsd通过使用企业架构师和Altova的XMLSpy的,和上面做同样的东西,失败。就我个人而言,我认为这种转换可能会失去一些信息。
  2. 我发现了一个类似的问题here

您可以找到OMG网站XMI XSD 2.1.1在XMI XSD,但你还需要UML架构和财政部架构。 读取和写入UML XMI文件的更好方法是使用Eclipse UML实现。它可以在Eclipse以外的简单Java程序中轻松使用:请参阅

我遵循了答案并阅读了有关Eclipse UML实现的文档,但我认为这不是我想要的。

所以我希望有人能给我一些建议。预先感谢您的帮助!

回答

0

从您的描述中,我无法告诉您确切的上下文,但XMI通常用作元模型实例的序列化格式(即“物理模式”)(类似于“逻辑模式”) 。

但是你要做的是使用XMI作为元模型,并使用XML(与XSD模式)作为序列化格式。这可能不是你想要的。

为了加载使用XMI序列化的UML元模型实例,只需创建一个资源集并使用resourceSet.getResource(uri, true)加载您的.uml文件。只要你的Eclipse插件的类路径包含UML插件作为依赖项,这应该可以工作。