<html>
              <!-- This panel generated from the developerWorks XML tag set for tutorials, Version 3.0.2.  (C) Copyright 2000, 2002 IBM Corporation.  All rights reserved. -->
            <head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Working with XML Schema resources in Eclipse</title></head><body vlink="663366" alink="330000" text="000000" bgcolor="ffffff"><script language="javascript">
<!-- 
var emailAbstract="This tutorial gives you the building blocks you need to set up and work with the XML Schema Infoset Model. It shows how to  set up the development environment, create and load XML Schema models, work with namespaces, and reuse definitions across XML Schema models. This tutorial is the first of a two-part series that introduces you to XML Schema concepts and the XML Schema Infoset model.";
var justTitle="XML Schema Infoset Model, Part 1";
var tutorialPrereqs="http://www.ibm.com/developerworks/edu/os-dw-os-schema1-i.html";
var menu1blurb="Before you start"; 
var menu2blurb="XML Schema fundamentals"; 
var menu3blurb="Setting up the development environment"; 
var menu4blurb="Using XML Schema Infoset Model classes"; 
var menu5blurb="Working with XML Schema resources in Eclipse"; 
var menu6blurb="Working with namespaces"; 
var menu7blurb="You try it!"; 
var menu8blurb="Summary and resources"; 

      var browser = "x";
      if (navigator.userAgent.indexOf("Mozilla/4") != -1) browser = "N3";
      else if (navigator.userAgent.indexOf("Mozilla/3") != -1) browser = "N3";
      else browser = "x";
      
      if (browser=="N3")
      {
    var menu1over=new Image(108,68); 
var menu1out=new Image(108,68); 
var menu2over=new Image(108,68); 
var menu2out=new Image(108,68); 
var menu3over=new Image(108,68); 
var menu3out=new Image(108,68); 
var menu4over=new Image(108,68); 
var menu4out=new Image(108,68); 
var menu5over=new Image(108,68); 
var menu5out=new Image(108,68); 
var menu6over=new Image(108,68); 
var menu6out=new Image(108,68); 
var menu7over=new Image(108,68); 
var menu7out=new Image(108,68); 
var menu8over=new Image(108,68); 
var menu8out=new Image(108,68); 

        var topmainover=new Image(77,15);
        var topmainout=new Image(77,15);
        var bottommainover=new Image(77,15);
        var bottommainout=new Image(77,15);
        var topsectionover=new Image(98,15);
        var topsectionout=new Image(98,15);
        var bottomsectionover=new Image(98,15);
        var bottomsectionout=new Image(98,15);
        var topfeedbackover=new Image(80,15);
        var topfeedbackout=new Image(80,15);
        var bottomfeedbackover=new Image(80,15);
        var bottomfeedbackout=new Image(80,15);
        var toppreviousover=new Image(77,15);
        var toppreviousout=new Image(77,15);
        var bottompreviousover=new Image(77,15);
        var bottompreviousout=new Image(77,15);
        var topnextover=new Image(60,15);
        var topnextout=new Image(60,15);
        var bottomnextover=new Image(60,15);
        var bottomnextout=new Image(60,15);
        var topnextsectionover=new Image(108,15);
        var topnextsectionout=new Image(108,15);
        var bottomnextsectionover=new Image(108,15);
        var bottomnextsectionout=new Image(108,15);
      
    menu1over.src="imagemaster/himenu1.jpg"; 
menu1out.src="imagemaster/menu1.jpg"; 
menu2over.src="imagemaster/himenu2.jpg"; 
menu2out.src="imagemaster/menu2.jpg"; 
menu3over.src="imagemaster/himenu3.jpg"; 
menu3out.src="imagemaster/menu3.jpg"; 
menu4over.src="imagemaster/himenu4.jpg"; 
menu4out.src="imagemaster/menu4.jpg"; 
menu5over.src="imagemaster/himenu5.jpg"; 
menu5out.src="imagemaster/menu5.jpg"; 
menu6over.src="imagemaster/himenu6.jpg"; 
menu6out.src="imagemaster/menu6.jpg"; 
menu7over.src="imagemaster/himenu7.jpg"; 
menu7out.src="imagemaster/menu7.jpg"; 
menu8over.src="imagemaster/himenu8.jpg"; 
menu8out.src="imagemaster/menu8.jpg"; 

        var mainblurb="Main menu";
        var sectionblurb="Section menu";
        var feedbackblurb="Give feedback on this tutorial";
        var previousblurb="Go to previous panel";
        var nextblurb="Go to next panel";
        var nextsectionblurb="Go to next section";

      topmainover.src="../default/i/h-main.gif";
      topmainout.src="../default/i/main.gif";
      bottommainover.src="../default/i/h-main.gif";
      bottommainout.src="../default/i/main.gif";
      topsectionover.src="../default/i/h-section.gif";
      topsectionout.src="../default/i/section.gif";      
      bottomsectionover.src="../default/i/h-section.gif";
      bottomsectionout.src="../default/i/section.gif";      
      topfeedbackover.src="../default/i/h-feedback.gif";
      topfeedbackout.src="../default/i/feedback.gif";
      bottomfeedbackover.src="../default/i/h-feedback.gif";
      bottomfeedbackout.src="../default/i/feedback.gif";
      toppreviousover.src="../default/i/h-previous.gif";
      toppreviousout.src="../default/i/previous.gif";
      bottompreviousover.src="../default/i/h-previous.gif";
      bottompreviousout.src="../default/i/previous.gif";
      topnextover.src="../default/i/h-next.gif";
      topnextout.src="../default/i/next.gif";
      bottomnextover.src="../default/i/h-next.gif";
      bottomnextout.src="../default/i/next.gif";
      topnextsectionout.src="../default/i/nextsection.gif";
      topnextsectionover.src="../default/i/h-nextsection.gif";
      bottomnextsectionout.src="../default/i/nextsection.gif";
      bottomnextsectionover.src="../default/i/h-nextsection.gif";
      }
      function iOut(image)
      {
        if (browser=="N3")document[image].src=eval(image + "out.src");
      }
      function iOver(image)
      {
        if (browser=="N3")document[image].src=eval(image + "over.src");
      }
      // -->
    </script><script src="../default/i/emailfriend.js" language="javascript"></script><a href="#navskip"><img border="0" alt="Skip to main content" src="../default/i/c.gif"></a><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr bgcolor="#006699">
      <td width="300">
        <table width="300" border="0" cellspacing="0" cellpadding="0">
          <tr bgcolor="#006699">
            <td width="150"><img src="../default/i/mast_logo.gif" alt="IBM" width="160" height="47"></td>
            <td width="150" background="../default/i/mgradient.gif"><font size="-2" color="#99ccff" face="Verdana, sans-serif"><b>&nbsp;</b></font><br><img src="../default/i/c.gif" width="150" height="1" alt=""></td>
          </tr>
        </table> 
      </td>
      <td align="left" width="300">
        <table width="300" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="100"><a href="http://www.ibm.com/shop1/"><img border="0" src="../default/i/shopibm.gif" width="100" height="25" alt="Shop"></a></td>
            <td width="100"><a href="http://www.ibm.com/support/"><img border="0" src="../default/i/support.gif" width="100" height="25" alt="Support"></a></td>
            <td width="100"><a href="http://www.ibm.com/download/"><img border="0" src="../default/i/downloads.gif" width="100" height="25" alt="Downloads"></a></td>
          </tr>
        </table>
      </td>
    </tr>
  </table><table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr bgcolor="#000000">
      <td>
        <table width="600" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td bgcolor="#006699" width="150"><img src="../default/i/mast_lnav_sp.gif" width="150" height="21" alt=""></td>
            <td colspan="4" bgcolor="#000000">
              <table border="0" cellspacing="0" cellpadding="0" height="21">
                <tr>
                  <td height="21" bgcolor="#000000" width="79" align="center"><a class="nav" style="color: #ffffff;" href="http://www.ibm.com/home/"><font size="-2" color="#ffffff" face="Verdana, sans-serif"><b>IBM Home</b></font></a></td>
                  <td bgcolor="#959595" width="1"><img src="../default/i/c.gif" width="1" height="1" alt=""></td>
                  <td height="21" bgcolor="#000000" width="74" align="center"><a class="nav" style="color: #ffffff;" href="http://www.ibm.com/products/"><font size="-2" color="#ffffff" face="Verdana, sans-serif"><b>Products</b></font></a></td>
                  <td bgcolor="#959595" width="1"><img src="../default/i/c.gif" width="1" height="1" alt=""></td>
                  <td height="21" bgcolor="#000000" width="81" align="center"><a class="nav" style="color: #ffffff;" href="http://www.ibm.com/services/"><font size="-2" color="#ffffff" face="Verdana, sans-serif"><b>Consulting</b></font></a></td>
                  <td bgcolor="#959595" width="1"><img src="../default/i/c.gif" width="1" height="1" alt=""></td>
                  <td height="21" bgcolor="#000000" width="81" align="center"><a class="nav" style="color: #ffffff;" href="http://www.ibm.com/solutions/"><font size="-2" color="#ffffff" face="Verdana, sans-serif"><b>Industries</b></font></a></td>
                  <td bgcolor="#959595" width="1"><img src="../default/i/c.gif" width="1" height="1" alt=""></td>
                  <td height="21" bgcolor="#000000" width="57" align="center"><a class="nav" style="color: #ffffff;" href="http://www.ibm.com/news/"><font size="-2" color="#ffffff" face="Verdana, sans-serif"><b>News</b></font></a></td>
                  <td bgcolor="#959595" width="1"><img src="../default/i/c.gif" width="1" height="1" alt=""></td>
                  <td height="21" bgcolor="#000000" width="78" align="center"><a class="nav" style="color: #ffffff;" href="http://www.ibm.com/ibm/"><font size="-2" color="#ffffff" face="Verdana, sans-serif"><b>About IBM</b></font></a></td>
                </tr>
              </table>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table><table width="100%" cellspacing="0" cellpadding="0" border="0">
    <tr>
      <td bgcolor="#ffffff" height="1" width="150"><img src="../default/i/c.gif" width="150" height="1" alt=""></td>
    </tr>
    <tr>
      <td bgcolor="#cc6633" height="3" width="150"><img src="../default/i/c.gif" width="150" height="3" alt=""></td>
    </tr>
    <tr>
      <td bgcolor="#333333" height="1" width="150"><img src="../default/i/c.gif" width="150" height="1" alt=""></td>
    </tr>
    <tr>
      <td bgcolor="#000000" height="1" width="150"><img src="../default/i/c.gif" width="150" height="1" alt=""></td>
    </tr>
  </table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td><font color="#006699" face="Verdana, sans-serif" size="-1"><a href="http://www.ibm.com/developer/">IBM developerWorks</a> : <a href="http://www.ibm.com/developer/xml/">XML</a> : <a href="http://www-106.ibm.com/developerworks/views/xml/tutorials.jsp">Education - Tutorials</a></font><br><img src="imagemaster/masthead.jpg" alt="XML Schema Infoset Model, Part 1"></td><td width="*" valign="bottom" align="right"><a border="0" href="os-schema1.zip"><img alt="ZIP" border="0" src="../default/i/icon-zip.gif"></a><a border="0" href="os-schema1-ltr.pdf"><img alt="PDF (letter)" border="0" src="../default/i/icon-pdf-ltr.gif"></a><a border="0" href="os-schema1-a4.pdf"><img alt="PDF (A4)" border="0" src="../default/i/icon-pdf-a4.gif"></a><a href="javascript:newWindow()" border="0"><img alt="e-mail" border="0" src="../default/i/icon-email.gif"></a></td></tr><tr><td height="2" colspan="2"><img height="2" width="1" src="../default/i/c.gif"></td></tr></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td width="150" height="1" bgcolor="#000000" colspan="6"><img alt="" height="1" width="150" src="../default/i/c.gif"></td></tr><tr><td background="../default/i/sw-gold.gif"><a border="0" href="index.html" onMouseOver="iOver('topmain'); iOver('bottommain'); self.status=mainblurb; return true;" onMouseOut="iOut('topmain'); iOut('bottommain'); self.status=''; return true;"><img alt="Main menu" border="0" src="../default/i/main.gif" name="topmain"></a></td><td background="../default/i/sw-gold.gif"><a border="0" onMouseOver="iOver('topsection'); iOver('bottomsection'); self.status=sectionblurb; return true;" onMouseOut="iOut('topsection'); iOut('bottomsection'); self.status=''; return true;" href="index5.html"><img alt="Section menu" border="0" src="../default/i/section.gif" name="topsection"></a></td><td background="../default/i/sw-gold.gif"><a border="0" onMouseOver="iOver('topfeedback'); iOver('bottomfeedback'); self.status=feedbackblurb; return true;" onMouseOut="iOut('topfeedback'); iOut('bottomfeedback'); self.status=''; return true;" href="os-schema1-8-3.html"><img alt="Feedback" border="0" src="../default/i/feedback.gif" name="topfeedback"></a></td><td width="100%" background="../default/i/sw-gold.gif"><img src="../default/i/c.gif"></td><td background="../default/i/sw-gold.gif"><img border="0" src="../default/i/xprevious.gif"></td><td background="../default/i/sw-gold.gif"><a border="0" onMouseOver="iOver('topnext'); iOver('bottomnext'); self.status=nextblurb; return true;" onMouseOut="iOut('topnext'); iOut('bottomnext'); self.status=''; return true;" href="os-schema1-5-2.html"><img alt="Next" border="0" src="../default/i/next.gif" name="topnext"></a></td></tr></table><table bgcolor="ffffff" cellspacing="0" cellpadding="2" border="0" height="400" width="100%"><tr valign="bottom"><td height="25" colspan="4"><img border="0" height="25" width="562" src="imagemaster/titlebar5.jpg" alt="5. Working with XML Schema resources in Eclipse"></td></tr><tr><td bgcolor="ffffff" width="15">&nbsp;</td><td bgcolor="ffffff" width="12">&nbsp;</td><td valign="top" align="left" bgcolor="ffffff" width="*"><p><br><table cellspacing="0" cellpadding="0" border="0"><tr><td width="90%"><font size="4" face="Verdana, Arial, sans-serif"><b>Creating an XML Schema file</b></font></td><td width="200" align="right"><font size="1" face="Verdana, Arial, sans-serif"><nobr>    page 1 of 3</nobr></font></td></tr></table><br><br></p><font size="2" face="Verdana, Arial, sans-serif"><p>
Before you create complicated XML Schema
structures, you should first create a skeleton XML Schema model and save it in the
Eclipse workspace. You have the option of giving 
the schema a namespace or not.
</p><p>
<b>Creating an XML Schema file with no target namespace</b>
<br>
As shown in Listing 1 below, the steps for creating an XML Schema file with no target
namespace are:
<ol>
<li>
Create the
org.eclipse.emf.ecore.resource.Resource using
the new xml schema Uri
</li>
<li>Create the XSDSchema root object</li>
<li>
Set up the schema for schema namespace
information on the root XSDSchema object
</li>
<li>
Call updateElement() on the root XSDSchema
object
</li>
<li>
Add the root XSDSchema object to the resource you 
created in step 1
</li>
<li>Save the resource</li>
</ol>
</p><p>
<b>Listing 1. Creating an XML Schema file with no target namespace</b>
<pre><font size="2" face="Courier New">org.eclipse.xsd.examples.command.CreateXSDWithNoTNSOperation
public XSDSchema createXSDSchema(IFile xsdFile)
{
  try
  {
    //Get the URI of the model file.
    URI fileURI = URI.createPlatformResourceURI(xsdFile.getFullPath().toString());

    //Create a resource set to manage the different resources
    ResourceSet resourceSet = new ResourceSetImpl();

    //Create a resource for this file.
    Resource resource = resourceSet.createResource(fileURI);

    //Create the root XSDSchema object
    XSDSchema xsdSchema = XSDFactory.eINSTANCE.createXSDSchema();

    //set the schema for schema QName prefix to "xsd"
    xsdSchema.setSchemaForSchemaQNamePrefix("xsd");
    java.util.Map qNamePrefixToNamespaceMap = xsdSchema.getQNamePrefixToNamespaceMap();

    //put the following namespace in the root schema namespace map
    //xsd:http://www.w3.org/2001/XMLSchema
    qNamePrefixToNamespaceMap.put(xsdSchema.getSchemaForSchemaQNamePrefix(),
      XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001);

    //We call updateElement to synchronize the MOF model with the underlying DOM model
    //This should only have to be done after creating a new model 
    xsdSchema.updateElement();

    //Add the root schema to the resource that was created above
    resource.getContents().add(xsdSchema);

    //Save the contents of the resource to the file system.
    resource.save(Collections.EMPTY_MAP);

    return xsdSchema;
  }
  catch (Exception exception)
  {
    exception.printStackTrace();
  }
  return null;
}
</font></pre>
</p><p>
<b>Creating an XML Schema file with target namespace
"http://www.eclipse.org/xsd/examples/createxsd"</b>
<br>
As shown in Listing 2, the basic
steps in creating an XML Schema file with a target
namespace are very similar to creating aa XML Schema file
with no target namespace. The major difference is that
you set the targetNamespace() on the XSDSchema root, and
you also add a defined prefix to the root schema
<a href="os-schema1-6-1.html">QName prefix namespace map</a>, which maps to the new target namespace.
</p><p>
<b>Listing 2. Creating an XML Schema file with a target namespace</b>
<pre><font size="2" face="Courier New">org.eclipse.xsd.examples.command.CreateXSDWithTNSOperation
public XSDSchema createXSDSchema(IFile xsdFile)
{
  try
  {
    //Get the URI of the model file.
    URI fileURI = URI.createPlatformResourceURI(xsdFile.getFullPath().toString());

    //Create a resource set to manage the different resources
    ResourceSet resourceSet = new ResourceSetImpl();

    //Create a resource for this file.
    Resource resource = resourceSet.createResource(fileURI);

    //Create the root XSDSchema object
    XSDSchema xsdSchema = XSDFactory.eINSTANCE.createXSDSchema();

    //Set the target namespace of the given schema document to 
    //http://www.eclipse.org/xsd/examples/createxsd
    xsdSchema.setTargetNamespace("http://www.eclipse.org/xsd/examples/createxsd");

    java.util.Map qNamePrefixToNamespaceMap = xsdSchema.getQNamePrefixToNamespaceMap();
    qNamePrefixToNamespaceMap.put(xsdSchema.getSchemaForSchemaQNamePrefix(), 
      XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001);

    //put the following namespace in the root schema namespace map
    //createxsd:http://www.eclipse.org/xsd/examples/createxsd
    qNamePrefixToNamespaceMap.put("createxsd", xsdSchema.getTargetNamespace());

    //We call updateElement to synchronize the MOF model with the underlying DOM model
    //This should only have to be done after creating a new model 
    xsdSchema.updateElement();

    //Add the root schema to the resource that was created above
    resource.getContents().add(xsdSchema);

    // Save the contents of the resource to the file system.
    resource.save(Collections.EMPTY_MAP);

  return xsdSchema;
  }
  catch (Exception exception)
  {
    exception.printStackTrace();
  }
  return null;
}
</font></pre>
</p><br></font></td></tr></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td background="../default/i/sw-gold.gif"><a border="0" href="index.html" onMouseOver="iOver('topmain'); iOver('bottommain'); self.status=mainblurb; return true;" onMouseOut="iOut('topmain'); iOut('bottommain'); self.status=''; return true;"><img alt="Main menu" border="0" src="../default/i/main.gif" name="bottommain"></a></td><td background="../default/i/sw-gold.gif"><a border="0" onMouseOver="iOver('topsection'); iOver('bottomsection'); self.status=sectionblurb; return true;" onMouseOut="iOut('topsection'); iOut('bottomsection'); self.status=''; return true;" href="index5.html"><img alt="Section menu" border="0" src="../default/i/section.gif" name="bottomsection"></a></td><td background="../default/i/sw-gold.gif"><a border="0" onMouseOver="iOver('topfeedback'); iOver('bottomfeedback'); self.status=feedbackblurb; return true;" onMouseOut="iOut('topfeedback'); iOut('bottomfeedback'); self.status=''; return true;" href="os-schema1-8-3.html"><img alt="Feedback" border="0" src="../default/i/feedback.gif" name="bottomfeedback"></a></td><td width="100%" background="../default/i/sw-gold.gif"><img src="../default/i/c.gif"></td><td background="../default/i/sw-gold.gif"><img border="0" src="../default/i/xprevious.gif"></td><td background="../default/i/sw-gold.gif"><a border="0" onMouseOver="iOver('topnext'); iOver('bottomnext'); self.status=nextblurb; return true;" onMouseOut="iOut('topnext'); iOut('bottomnext'); self.status=''; return true;" href="os-schema1-5-2.html"><img alt="Next" border="0" src="../default/i/next.gif" name="bottomnext"></a></td></tr><tr><td width="150" height="1" bgcolor="#000000" colspan="6"><img alt="" height="1" width="150" src="../default/i/c.gif"></td></tr></table><style>
.bbg { background-color : #000000; vertical-align: middle }

a.mainlink:link { text-decoration: none; color: #ffffff; font-family: Verdana, Arial, sans-serif; font-size: 10px; font-weight: bold; }
a.mainlink:visited { text-decoration: none; color: #ffffff; font-family: Verdana, Arial, sans-serif; font-size: 10px; font-weight: bold; }
a.mainlink:hover { text-decoration: underline; color: #ffffff; font-family: Verdana, Arial, sans-serif; font-size: 10px; font-weight: bold; }

.divider { color: #999999; font-family: Verdana, Arial, sans-serif; font-size: 10px; font-weight: normal; }
</style><table width="760" cellspacing="0" cellpadding="0" border="0">
<tr>
<td><img src="../default/i/c.gif" width="1" height="1" alt=""></td>
</tr>
<tr valign="top">
<td height="21" class="bbg"><img src="../default/i/c.gif" width="1" height="1" alt="">  <a href="http://www-106.ibm.com/developerworks/cgi-bin/click.cgi?url=http://www.ibm.com/ibm/?origin=dwfooter" class="mainlink">About IBM</a><span class="divider">  |  </span><a href="http://www-106.ibm.com/developerworks/cgi-bin/click.cgi?url=http://www.ibm.com/privacy/?origin=dwfooter" class="mainlink">Privacy</a><span class="divider">  |  </span><a href="http://www-106.ibm.com/developerworks/cgi-bin/click.cgi?url=http://www.ibm.com/legal/?origin=dwfooter" class="mainlink">Legal</a><span class="divider">  |  </span><a href="http://www-106.ibm.com/developerworks/cgi-bin/click.cgi?url=http://www.ibm.com/contact/?origin=dwfooter" class="mainlink">Contact</a></td>
</tr>
</table><script type="text/javascript" language="JavaScript1.2" src="//www.ibm.com/common/stats/stats.js"></script><noscript><img src="//i.ihost.com/i/c.gif" width="1" height="1" alt="" border="0"></noscript></body></html>