【问题标题】:How to convert XSD to Ecore (EMF)如何将 XSD 转换为 Ecore (EMF)
【发布时间】:2010-10-14 20:48:58
【问题描述】:

.xsd-files 转换为.ecore-files 的最佳方法是什么?

有 Eclipse 插件吗?

【问题讨论】:

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


    【解决方案1】:

    你试过了吗

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

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

    【讨论】:

      【解决方案2】:

      如果您不想每次将架构导入为 ECore 模型时都创建新的 MDT 项目,那么还有另一种方法可以做到这一点:

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

      【讨论】:

      • 谢谢,一直在寻找这个:)。
      【解决方案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");
      
          }
      
      }
      
      

      【讨论】:

        【解决方案4】:

        这对我有用:

        • 新建 -> 项目...
        • Eclipse 建模框架 -> EMF 项目
        • 模型导入器: XML 架构
        • 模型 URIs[选择 xsd 文件]

        在 xsd 更改时重新验证 .ecore-File:

        • 右键单击.genmodel-文件
        • 重新加载...

        【讨论】:

        • 在 Galileo 中,您必须安装“XSD Ecore Converter”功能。这为 XML Schema 提供了模型导入器。
        • 在从未有过的 Eclipse 版本中,此功能包含在“XSD - XML Schema Definition SDK”功能中。
        • 在较新的版本中(在我的例子中是 neon 3),我需要安装 XML schema definition。所以我可以看到 XML 模式导入器。
        猜你喜欢
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 2011-08-21
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        相关资源
        最近更新 更多