Как конвертировать XSD в Ecore (EMF) - PullRequest
7 голосов
/ 22 марта 2009

Как лучше всего конвертировать .xsd -файлы в .ecore -файлы?

Есть ли для этого плагин Eclipse?

Ответы [ 4 ]

8 голосов
/ 23 марта 2009

Вот что у меня сработало:

  • Новое -> Проект ...
  • Eclipse Modeling Framework -> EMF Project
  • Импортеры моделей: Схема XML
  • URI модели : [Выбрать файл xsd]

Для повторной проверки .ecore-файла после изменения xsd:

  • Щелкните правой кнопкой мыши .genmodel -File
  • Обновить ...
6 голосов
/ 23 мая 2012

Если вы не хотите создавать новый проект MDT каждый раз, когда хотите импортировать схему как модель ECore, тогда есть и другой способ сделать это:

  • Новое -> Модель генератора ЭДС (в "Eclipse Modeling Framework")
  • Нажмите Далее
  • Выберите папку и укажите имя файла (должно иметь расширение "genmodel")
  • Нажмите Далее
  • Выберите " XML-схема " в качестве импортера модели
  • Нажмите Далее
  • Выберите URI для вашего XSD
  • (При желании установите флажок «Создать схему XML для карты Ecore», если вы хотите создать файл карты .xsd2ecore)
  • Нажмите Далее
  • Выберите все нужные корневые пакеты
  • Нажмите Готово
3 голосов
/ 06 января 2011

Пример класса. Я не чистил импорт.

 

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");

    }

}

0 голосов
/ 12 августа 2014

Вы пробовали

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

Он генерирует .ecore и .genmodel для вашего набора XSD.

...