Skip to main content
Jump to: navigation, search

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.

  1. Convert a given XSD into Ecore
  2. Load an XML into the generated Ecore
  3. Display the loaded Model using a TreeViewer

For this code to execute, you need to include the following plugins as dependencies

  • org.eclipse.emf.ecore
  • org.eclipse.xsd
  • org.eclipse.emf.ecore.xmi
  • org.eclipse.emf.edit.ui

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

Note: The XML File should contain xsi:schemaLocation. EMF provides this inbuild feature wherein if the XML knows its schema, emf would build the model from the Schema and load the XML without having to perform Step 1.Convert XSD into Schema.

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

Further Reading
Discover the Eclipse Modeling Framework (EMF) and Its Dynamic Capabilities
Newsgroup Msg11109 18:06, 10 February 2007 (EST)

Copyright © Eclipse Foundation, Inc. All Rights Reserved.