问题
What is the best way to convert .xsd
-files into .ecore
-files?
Is there an Eclipse plugin for that?
回答1:
That's what worked for me:
- New -> Project...
- Eclipse Modeling Framework -> EMF Project
- Model Importers: XML Schema
- Model URIs: [Select xsd-File]
To revalidate the .ecore-File when xsd has changed:
- Right-Click on .genmodel-File
- Reload...
回答2:
If you do not want to create a new MDT project every time you want to import a schema as ECore model then there is also another way to do this:
- New -> EMF Generator Model (in "Eclipse Modelling Framework")
- Press Next
- Select folder and specify filename (has to have the extension "genmodel")
- Press Next
- Select "XML Schema" as model importer
- Press Next
- Select URI to your XSD
- (Optionally, select tick box "Create XML Schema to Ecore Map" if you want to generate a .xsd2ecore map file)
- Press Next
- Select all desired root packages
- Press Finish
回答3:
An example class. I did not clean up the imports.
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:
Have you tried
eclipse –console –noExit –noSplash -data C:\temp\emf-ws
-application org.eclipse.xsd.ecore.importer.XSD2GenModel
It generates .ecore and .genmodel for your set of XSDs.
来源:https://stackoverflow.com/questions/671555/how-to-convert-xsd-to-ecore-emf