Java 使用EMF加载和解析XMI文件
我需要通过EMF加载和解析xmi文件(版本:OMG xmi 2.4.1),但现在卡住了 在中,有一个XMI模式XMI.xsd,还有一个XMI模型.XMI。例如,在这里,我需要通过EMF加载和解析XMI model.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
- Eclipse中的新EMF项目
- 导入xmi模式:xmi.xsd,并获取一个xmi.genmodel文件
- 使用xmi.genmodel在eclipse中生成所有代码,它将生成模型代码
- 新建Junit4测试用例,并尝试加载带有Junit插件测试的XMI model.XMI文件,但失败,下面是我的代码
好的,然后我尝试读取xsd文件和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); }
在XMI model.XMI中,因此我转到uml空间的链接,试图找到uml的模式。不幸的是,在这个链接中,所有关于UML的文件都是en格式的XMI 所以我又尝试了两种选择:xmlns:uml=”http://www.omg.org/spec/UML/20110701“
- 尝试使用企业架构师和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)