Java 使用EMF加载和解析XMI文件

Java 使用EMF加载和解析XMI文件,java,xsd,modeling,emf,xmi,Java,Xsd,Modeling,Emf,Xmi,我需要通过EMF加载和解析xmi文件(版本:OMG xmi 2.4.1),但现在卡住了 在中,有一个XMI模式XMI.xsd,还有一个XMI模型.XMI。例如,在这里,我需要通过EMF加载和解析XMI model.XMI 我所做的工作如下: Eclipse中的新EMF项目 导入xmi模式:xmi.xsd,并获取一个xmi.genmodel文件 使用xmi.genmodel在eclipse中生成所有代码,它将生成模型代码 新建Junit4测试用例,并尝试加载带有Junit插件测试的XMI mod

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

在中,有一个XMI模式XMI.xsd,还有一个XMI模型.XMI。例如,在这里,我需要通过EMF加载和解析XMI model.XMI

我所做的工作如下:

  • Eclipse中的新EMF项目
  • 导入xmi模式:xmi.xsd,并获取一个xmi.genmodel文件
  • 使用xmi.genmodel在eclipse中生成所有代码,它将生成模型代码
  • 新建Junit4测试用例,并尝试加载带有Junit插件测试的XMI model.XMI文件,但失败,下面是我的代码

    @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);
    }
    
    好的,然后我尝试读取xsd文件和xmi文件,我发现有一个名称空间
    xmlns:uml=”http://www.omg.org/spec/UML/20110701“
    XMI model.XMI中,因此我转到uml空间的链接,试图找到uml的模式。不幸的是,在这个链接中,所有关于UML的文件都是en格式的XMI

    所以我又尝试了两种选择:

  • 尝试使用企业架构师和Altova XMLspy将UML.xmi转换为UML.xsd,并执行上述相同操作失败。我个人认为,这种转换可能会丢失一些信息
  • 我发现了一个类似的问题
  • 您可以在OMG网站XMI XSD 2.1.1上找到XMI XSD,但您还需要UML模式和MOF模式。 读写UMLXMI文件的更好方法是使用EclipseUML实现。它可以很容易地在Eclipse之外的一个简单Java程序中使用:请参阅

    我按照答案阅读了关于EclipseUML实现的文档,但我认为这并不是我想要的


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

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

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

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

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