我需要通过EMF加载和解析xmi文件(版本:OMG XMI 2.4.1),但现在卡住了。
在OMG XMI Spec 2.4.1中,有一个XMI架构 XMI.xsd 和一个 XMI-model.xmi 。所以在这里,例如,我需要通过EMF加载和解析 XMI-model.xmi 。
我做了如下:
新建一个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);
}
例外是:
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的所有文件都是格式XMI。
所以我尝试了两个选项:
您可以在OMG网站XMI XSD 2.1.1上找到XMI XSD,但您还需要UML Schema和MOF Schema。 读取和编写UML XMI文件的更好方法是使用Eclipse UML实现。它可以在Eclipse之外的简单Java程序中轻松使用:参见
我按照答案阅读了有关Eclipse UML实现的文档,但我认为这不是我想要的。
所以我希望有人可以给我一些建议。在此先感谢您的帮助!
答案 0 :(得分:0)
根据您的描述,我无法告诉您确切的上下文,但XMI通常用作元模型实例的序列化格式(即“物理模式”)(类似于“逻辑模式”)。
但是您要做的是使用XMI作为元模型,并使用XML(使用XSD架构)作为序列化格式。这可能不是你想要的。
为了加载使用XMI进行序列化的UML元模型的实例,只需创建资源集并使用.uml
加载resourceSet.getResource(uri, true)
文件。只要您的Eclipse插件的类路径包含UML插件作为依赖项,这应该可行。