The attached source code is the accompanying material to the Long Talk written and presented by Ed Merks at EclipseCon 2006, entitled XML Binding With The Eclipse Modeling Framework. It is presented as an exercise for the reader, showing complete code where the presentation shows only excerpts.
This exercise is carried out entirely using the Eclipse Software Development Kit (SDK) version 3.2 with the Eclipse Modeling Framework (EMF) 2.2 installed into it. The exercise instructions refer to this product as either Eclipse or as "the workbench".
DOM Create And Save
<?xml version="1.0" encoding="UTF-8"?><tree:rootNode
xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root">
<tree:childNode label="text">text</tree:childNode>
<tree:childNode label="comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
DOM Load And Traverse
<?xml version="1.0" encoding="UTF-8"?><tree:rootNode
xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root">
<tree:childNode label="text">text</tree:childNode>
<tree:childNode label="comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
Traversing DOM Element
{http://www.eclipse.org/emf/example/dom/Tree}rootNode
label=root
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=text
'text'
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=comment
<!--comment-->
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=cdata
<![CDATA[<cdata>]]>
'\n'
EMF DOM Create And Save <?xml version="1.0" encoding="UTF-8"?> <tree:rootNode xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root"> <tree:childNode label="text">text</tree:childNode> <tree:childNode label="comment"><!--comment--></tree:childNode> <tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode> </tree:rootNode>
EMF DOM Load And Traverse <?xml version="1.0" encoding="UTF-8"?> <tree:rootNode xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root"> <tree:childNode label="text">text</tree:childNode> <tree:childNode label="comment"><!--comment--></tree:childNode> <tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode> </tree:rootNode>
Traversing EMF AnyType
{http://www.eclipse.org/emf/example/dom/Tree}rootNode
label=root
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=text
'text'
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=comment
<!--comment-->
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=cdata
<![CDATA[<cdata>]]>
'\n'
Result of EMF to DOM conversion
<?xml version="1.0" encoding="UTF-8"?><tree:rootNode
xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root">
<tree:childNode label="text">text</tree:childNode>
<tree:childNode label="comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
XSD Create Schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.eclipse.org/emf/example/dom/Tree">
<xsd:complexType mixed="true" name="TreeNode">
<xsd:sequence>
<xsd:element ecore:name="childNodes" form="qualified" maxOccurs="unbounded"
name="childNode" type="tree:TreeNode"/>
</xsd:sequence>
<xsd:attribute name="label" type="xsd:ID"/>
<xsd:attribute ecore:reference="tree:TreeNode" name="references">
<xsd:simpleType>
<xsd:list itemType="xsd:anyURI"/>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="rootNode" type="tree:TreeNode"/>
</xsd:schema>
XSD to Ecore Mapping
package http://www.eclipse.org/emf/example/dom/Tree
class DocumentRoot
attribute mixed:EFeatureMapEntry
reference xMLNSPrefixMap:EStringToStringMapEntry
reference xSISchemaLocation:EStringToStringMapEntry
reference rootNode:TreeNode
class TreeNode
attribute mixed:EFeatureMapEntry
reference childNodes:TreeNode
attribute label:ID
reference references:TreeNode
<?xml version="1.0" encoding="UTF-8"?>
<tree:rootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree"
xsi:schemaLocation="http://www.eclipse.org/emf/example/dom/Tree ../model/DOMEMFTreeNode.xsd"
label="root">
<tree:childNode label="text">text</tree:childNode>
<tree:childNode label="comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
Traversing EMF EObject
{http://www.eclipse.org/emf/example/dom/Tree}rootNode
label=root
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=text
'text'
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=comment
<!--comment-->
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=cdata
<![CDATA[<cdata>]]>
'\n'
EMF Dynamic Load Schema
<?xml version="1.0" encoding="UTF-8"?>
<tree:rootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree"
xsi:schemaLocation="http://www.eclipse.org/emf/example/dom/Tree ../model/DOMEMFTreeNode.xsd"
label="root">
<tree:childNode label="text">text</tree:childNode>
<tree:childNode label="comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
Traversing EMF EObject
{http://www.eclipse.org/emf/example/dom/Tree}rootNode
label=root
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=text
'text'
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=comment
<!--comment-->
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=cdata
<![CDATA[<cdata>]]>
'\n'
Showing References set by traversal
<?xml version="1.0" encoding="UTF-8"?>
<tree:rootNode xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root"
references="#root">
<tree:childNode label="text" references="#root">text</tree:childNode>
<tree:childNode label="comment" references="#root"><!--comment--></tree:childNode>
<tree:childNode label="cdata" references="#root"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
EMF Static Generated Load and Traverse
<?xml version="1.0" encoding="UTF-8"?>
<tree:rootNode xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree"
label="root" references="#root">
<tree:childNode label="text" references="#root">text</tree:childNode>
<tree:childNode label="comment" references="#root"><!--comment--></tree:childNode>
<tree:childNode label="cdata" references="#root"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
Traversing EMF TreeNode
{http://www.eclipse.org/emf/example/dom/Tree}rootNode
label=root
reference=#root
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=text
reference=#root
'text'
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=comment
reference=#root
<!--comment-->
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=cdata
reference=#root
<![CDATA[<cdata>]]>
'\n'
Showing the references set in the copy
<?xml version="1.0" encoding="ASCII"?>
<tree:rootNode xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root"
references="#root EMFDOMTreeNodeWithReferences.xml#root">
<tree:childNode label="text"
references="#root EMFDOMTreeNodeWithReferences.xml#text">text</tree:childNode>
<tree:childNode label="comment"
references="#root EMFDOMTreeNodeWithReferences.xml#comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"
references="#root EMFDOMTreeNodeWithReferences.xml#cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
EMF Multi Resource Static Generated Load and Traverse
<?xml version="1.0" encoding="ASCII"?>
<tree:rootNode xmlns:tree="http://www.eclipse.org/emf/example/dom/Tree" label="root"
references="#root EMFDOMTreeNodeWithReferences.xml#root">
<tree:childNode label="text"
references="#root EMFDOMTreeNodeWithReferences.xml#text">text</tree:childNode>
<tree:childNode label="comment"
references="#root EMFDOMTreeNodeWithReferences.xml#comment"><!--comment--></tree:childNode>
<tree:childNode label="cdata"
references="#root EMFDOMTreeNodeWithReferences.xml#cdata"><![CDATA[<cdata>]]></tree:childNode>
</tree:rootNode>
Traversing EMF TreeNode file:/E:/workspace/org.eclipse.emf.example.dom/data/TreeNodeMap.xml
{http://www.eclipse.org/emf/example/dom/Tree}rootNode
label=root
reference=TreeNodeMap.xml#root
reference=EMFDOMTreeNodeWithReferences.xml#root
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=text
reference=TreeNodeMap.xml#root
reference=EMFDOMTreeNodeWithReferences.xml#text
'text'
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=comment
reference=TreeNodeMap.xml#root
reference=EMFDOMTreeNodeWithReferences.xml#comment
<!--comment-->
'\n '
{http://www.eclipse.org/emf/example/dom/Tree}childNode
label=cdata
reference=TreeNodeMap.xml#root
reference=EMFDOMTreeNodeWithReferences.xml#cdata
<![CDATA[<cdata>]]>
'\n'