EMF/Generating Dynamic Ecore from XML Schema
Generating Ecore using from XML Schema
In this Wiki document, i have tried to document the steps involved in Generating Ecore using XML Schema and loading a appropriate XML File into the Model.
- Convert a given XSD into Ecore
- Load an XML into the generated Ecore
- Display the loaded Model using a TreeViewer
For this code to execute, you need to include the following plugins as dependencies
Convert a XSD into Ecore
The following code snippet would enable you to load an existing XSD and convert it into an Ecore.
XSDEcoreBuilder xsdEcoreBuilder = new XSDEcoreBuilder(); ResourceSet resourceSet = new ResourceSetImpl(); Collection eCorePackages = xsdEcoreBuilder.generate(URI.createFileURI("D:/model/example.xsd"));
Note: Running this code could get you a nullPointerException or schemaFileNotFoundException. This is due to a ever popular Crimsom DOM bug. Please refer to the following link to find a workaround to this problem.
Manifestation of Crimsom DOM Bug
Load an XML into the Ecore
HashMap options = new HashMap(); options.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); Resource resource = resourceSet.createResource(URI.createFileURI("D:/model/example.xml")); resource.load(options);
Display using a TreeViewer
List factories = new ArrayList(); factories.add(new ResourceItemProviderAdapterFactory()); factories.add(new ReflectiveItemProviderAdapterFactory()); ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(); TreeViewer tViewer = new TreeViewer(parent); tViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory); tViewer.setLabelProvider(new AdapterFactoryContentProvider(adapterFactory); tViewer.setInput(resourceSet);