如何从 XSD 模式以编程方式生成 EMF 模型(.ecore、.genmodel)?

3 java xsd eclipse-emf

我一直在尝试将此作为独立应用程序的最后阶段,以将建模程序使用的文件格式转换为 EMF 模型。我能够将原始格式转换为 XSD,我可以使用 Eclipse 导入器手动将其转换为 EMF 模型,但我不知道如何以编程方式执行此操作以自动执行此过程。Java 命令可以正常工作,任何执行相同操作的命令行语句也可以,因为我可以从 Java 中执行该语句。我花了一段时间寻找如何做到这一点,尝试http://wiki.eclipse.org/Generating_Dynamic_Ecore_from_XML_Schema以及各种其他潜在的解决方案,但似乎没有任何效果。如果有人能够提供一些关于如何从 XSD 文件生成 .ecore 和(/或?).genmodel 文件的示例代码,我将非常感激,但即使是关于如何进行的一些指导会很有帮助。

谢谢你。

Zso*_*rök 5

看一看org.eclipse.xsd.ecore.XSDEcoreBuilderEclipse 导入器向导使用的类和它的方式。
使用起来似乎相当简单,您只需调用它的generate方法之一,您就会返回 aCollection<Resource>或 a Collection<EObject>。

(编辑:在评论回答附加问题)
的EPackage类是E字形芯的等效xs:schema,它包含了EClassES,这是在打开的E字形芯当量xs:complexType秒。

以下代码片段应创建一个 foo.ecore 文件并将其保存到与源 XSD 相同的文件夹中。如果 foo.xsd 有额外的导入 XSD,它们将被转换成单独的 .ecore 文件,因此返回类型为Collection<Resource>。

URI schemaURI = URI.createFileURI("foo.xsd");
Collection<Resource> ecoreResources = XSDEcoreBuilder.generateResources(schemaURI);
for (Resource ecoreResource : ecoreResources) {
    ecoreResource.save(null);
}
Run Code Online (Sandbox Code Playgroud)