Pergunta

Qual é a melhor maneira de converter .xsd-arquivos em .ecore-files?

Existe um plugin do Eclipse para isso?

Foi útil?

Solução

Isso é o que funcionou para mim:

  • Novo -> Project ...
  • Eclipse Modeling Framework -> EMF projeto
  • Modelo importadores: XML Schema
  • Modelo URIs : [Select XSD File]

Para revalidar a .ecore-File quando xsd mudou:

  • Botão direito do mouse .genmodel -File
  • Recarregar ...

Outras dicas

Se você não quiser criar um novo projeto MDT cada vez que você quiser importar um esquema como modelo Ecore, em seguida, há também uma outra maneira de fazer isso:

  • Novo -> EMF Generator Modelo (em "Eclipse Modeling Framework")
  • Pressione Next
  • Selecionar pasta e especificar filename (tem que ter a extensão "genmodel")
  • Pressione Next
  • Selecione " XML Schema " como modelo importador
  • Pressione Next
  • Escolha um URI à sua XSD
  • (Opcionalmente, selecione caixa de seleção "Criar XML Schema para Ecore Map" se você deseja gerar um arquivo de mapa .xsd2ecore)
  • Pressione Next
  • Selecione todos os pacotes desejados root
  • Pressione Concluir

Um exemplo de classe. Eu não limpar as importações.

 

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

    }

}

Você tentou

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

Ele gera .ecore e .genmodel para o seu conjunto de XSDs.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top