Como converter XSD para Ecore (EMF)
-
21-08-2019 - |
Pergunta
Qual é a melhor maneira de converter .xsd
-arquivos em .ecore
-files?
Existe um plugin do Eclipse para isso?
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