如何将XSD转换为Ecore(EMF)

时间:2009-03-22 20:19:12

标签: xsd eclipse-plugin eclipse-emf eclipse-emf-ecore

.xsd - 文件转换为.ecore - 文件的最佳方式是什么?

是否有Eclipse插件?

4 个答案:

答案 0 :(得分:8)

这对我有用:

  • 新 - >项目...
  • Eclipse Modeling Framework - > EMF项目
  • 模型导入器: XML架构
  • 模型URI [选择xsd-File]

在xsd更改时重新验证.ecore文件:

  • 右键单击 .genmodel -File
  • 刷新...

答案 1 :(得分:6)

如果您不希望每次要将架构导入为ECore模型时都创建新的MDT项目,那么还有另一种方法可以执行此操作:

  • 新 - > EMF生成器模型(在“Eclipse Modeling Framework”中)
  • 按下一步
  • 选择文件夹并指定文件名(必须具有扩展名“genmodel”)
  • 按下一步
  • 选择“ XML架构”作为模型导入程序
  • 按下一步
  • 选择 XSD
  • 的URI
  • (可选,如果要生成.xsd2ecore地图文件,请选中“将XML架构创建为Ecore Map”复选框)
  • 按下一步
  • 选择所有需要的根软件包
  • 完成

答案 2 :(得分:3)

示例类。我没有清理进口货物。

 

import org.eclipse.emf.common.util.URI;

import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;

import org.eclipse.emf.ecore.*;
import org.eclipse.xsd.*;
import org.eclipse.xsd.ecore.XSDEcoreBuilder;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.*;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.edit.ui.*;


public class Xsd2Ecore {

    public static void main(String[] args) {
        Xsd2Ecore x2e = new Xsd2Ecore();
        x2e.go("UMLVersions/V1.0.0/UML2XMI.xsd", "UMLVersions/V1.0.0/UML2100.xmi");
    }


    public void go(String sourcename, String targetname) {

        System.out.println("Starting");

        XSDEcoreBuilder xsdEcoreBuilder = new XSDEcoreBuilder();
        ResourceSet resourceSet = new ResourceSetImpl();
        Collection eCorePackages = xsdEcoreBuilder.generate(URI.createFileURI(sourcename));

        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl());
        Resource resource = resourceSet.createResource(URI.createFileURI(targetname));

        for (Iterator iter = eCorePackages.iterator(); iter.hasNext();) {
            EPackage element = (EPackage) iter.next();
            resource.getContents().add(element);
        }

        try {
            resource.save(null);
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Finished");

    }

}

答案 3 :(得分:0)

你试过吗

eclipse –console –noExit –noSplash -data C:\temp\emf-ws
    -application org.eclipse.xsd.ecore.importer.XSD2GenModel

它为您的XSD集生成.ecore和.genmodel。