<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>Elements and attributes</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 create all of the different constructs within the XML Schema Infoset model. This tutorial is the second of a two-part series.";
var justTitle="XML Schema Infoset Model, Part 2";
var tutorialPrereqs="http://www.ibm.com/developerworks/edu/os-dw-os-schema2-i.html";
var menu1blurb="Before you start"; 
var menu2blurb="Overview of XML Schema documents"; 
var menu3blurb="Simple types"; 
var menu4blurb="Complex types"; 
var menu5blurb="Content models"; 
var menu6blurb="Elements and attributes"; 
var menu7blurb="Pulling it all together"; 
var menu8blurb="You try it!"; 
var menu9blurb="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 menu9over=new Image(108,68); 
var menu9out=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"; 
menu9over.src="imagemaster/himenu9.jpg"; 
menu9out.src="imagemaster/menu9.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 2"></td><td width="*" valign="bottom" align="right"><a border="0" href="os-schema2.zip"><img alt="ZIP" border="0" src="../default/i/icon-zip.gif"></a><a border="0" href="os-schema2-ltr.pdf"><img alt="PDF (letter)" border="0" src="../default/i/icon-pdf-ltr.gif"></a><a border="0" href="os-schema2-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="index6.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-schema2-9-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"><a border="0" onMouseOver="iOver('topprevious'); iOver('bottomprevious'); self.status=previousblurb; return true;" onMouseOut="iOut('topprevious'); iOut('bottomprevious'); self.status=''; return true;" href="os-schema2-6-5.html"><img alt="Previous" border="0" src="../default/i/previous.gif" name="topprevious"></a></td><td background="../default/i/sw-gold.gif"><img border="0" src="../default/i/xnext.gif"></td></tr><tr><td width="100%" colspan="5"></td><td width="108" height="1" bgcolor="#000000" align="right"><img alt="" height="1" width="108" src="../default/i/c.gif"></td></tr><tr><td colspan="5"></td><td align="right"><a border="0" onMouseOver="iOver('topnextsection'); iOver('bottomnextsection'); self.status=nextsectionblurb; return true;" onMouseOut="iOut('topnextsection'); iOut('bottomnextsection'); self.status=''; return true;" href="os-schema2-7-1.html"><img alt="Next Section" src="../default/i/nextsection.gif" border="0" name="topnextsection"></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/titlebar6.jpg" alt="6. Elements and attributes"></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>Exercise 6 solution</b></font></td><td width="200" align="right"><font size="1" face="Verdana, Arial, sans-serif"><nobr>    page 6 of 6</nobr></font></td></tr></table><br><br></p><font size="2" face="Verdana, Arial, sans-serif"><pre><font size="2" face="Courier New">
//Exercise 6 builds from Exercise 5
Lab5 lab5 = new Lab5();
XSDSchema schema = lab5.createSchema(xsdFile);

/**
 * Create global attributeGroup with name="shapeAttributes" and has the following
 * attributes:
 *   &lt;attributeGroup name="shapeAttributes" /&gt;
 *     &lt;attribute name="size" type="string" use="required" /&gt;
 *     &lt;attribute name="length" type="int" use="optional" /&gt;
 *   &lt;/attributeGroup&gt;
 */
XSDAttributeGroupDefinition shapeAttributes = XSDFactory.eINSTANCE.createXSDAttributeGroupDefinition();

//Set the name = "shapeAttributes"
shapeAttributes.setName("shapeAttributes");
                
/**
 * Create local attribute size, which need XSDAttributeUse to store the usage
 */
XSDAttributeUse sizeAttrUse = XSDFactory.eINSTANCE.createXSDAttributeUse();

//Set the use="required"
sizeAttrUse.setUse(XSDAttributeUseCategory.REQUIRED_LITERAL);

XSDAttributeDeclaration sizeAttr = XSDFactory.eINSTANCE.createXSDAttributeDeclaration();

//Set the name="size"
sizeAttr.setName("size");

//Set the type="string"
XSDSimpleTypeDefinition stringType = schema.getSchemaForSchema().
        resolveSimpleTypeDefinition(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001,"string");
sizeAttr.setTypeDefinition(stringType);

//Add the sizeAttr to the sizeAttrUse
sizeAttrUse.setContent(sizeAttr);

//Add the sizeAttrUse to the global attribute group
shapeAttributes.getContents().add(sizeAttrUse);

/**
 * Create local attribute length, which need XSDAttributeUse to store the usage
 */
XSDAttributeUse lengthAttrUse = XSDFactory.eINSTANCE.createXSDAttributeUse();

//Set the use="optional"
sizeAttrUse.setUse(XSDAttributeUseCategory.OPTIONAL_LITERAL);

XSDAttributeDeclaration lengthAttr = XSDFactory.eINSTANCE.createXSDAttributeDeclaration();

//Set the name="length"
lengthAttr.setName("length");

//Set the type="int"
XSDSimpleTypeDefinition intType = schema.getSchemaForSchema().
        resolveSimpleTypeDefinition(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001,"int");
lengthAttr.setTypeDefinition(intType);

//Add the lengthAttr to the lengthAttrUse
lengthAttrUse.setContent(lengthAttr);

//Add the lengthAttrUse to the global attribute group
shapeAttributes.getContents().add(lengthAttrUse);       

//Add the new attribute group to the root schema
schema.getContents().add(shapeAttributes);
                
/**
 * Now lets create and add some attributes to the given complexType
 *
 * &lt;attribute name="lang" type="string" &gt; 
 *
 * &lt;complexType name="PurchaseOrderType" &gt;
 *   &lt;sequence&gt;
 *     &lt;element name="state" type="po:USState" minOccurs="0" /&gt;
 *     &lt;element ref="po:notes" /&gt;
 *   &lt;/sequence&gt;
 *   &lt;attribute name="color" type="string" /&gt;
 *   &lt;attribute ref="po:lang" /&gt;
 *   &lt;attributeGroup ref="po:shapeAttributes" /&gt;
 * &lt;/complexType&gt;
 *
 * Create Global Attribute name="lang" and type="string"
 * Create the local attribute color type="string"
 * Create then attribute reference to global attribute po:lang
 * Create attributeGroup reference to global attributeGroup po:shapeAttributes
 */

//Create Global Attribute name="lang" and type="string"
XSDAttributeDeclaration langAttr = XSDFactory.eINSTANCE.createXSDAttributeDeclaration();

//Set name="lang"
langAttr.setName("lang");

//Set type="string"
langAttr.setTypeDefinition(stringType);

//Add the global attribute to the given schema
schema.getContents().add(langAttr);

//Lets get the PurchaseOrderType complex type
XSDComplexTypeDefinition purchaseOrderType = schema.resolveComplexTypeDefinition("PurchaseOrderType");

//Create the local attribute color type="string"
XSDAttributeUse colorAttrUse = XSDFactory.eINSTANCE.createXSDAttributeUse();
                
XSDAttributeDeclaration colorAttr = XSDFactory.eINSTANCE.createXSDAttributeDeclaration();

//Set the name="color"
colorAttr.setName("color");

//Set type="string"             
colorAttr.setTypeDefinition(stringType);

//Add the colorAttr to the colorAttrUse
colorAttrUse.setContent(colorAttr);

//Add the colorAttrUse to the complex type
purchaseOrderType.getAttributeContents().add(colorAttrUse);

//Create then attribute reference to global attribute po:lang
XSDAttributeUse langRefAttrUse = XSDFactory.eINSTANCE.createXSDAttributeUse();
                
XSDAttributeDeclaration langRefAttr = XSDFactory.eINSTANCE.createXSDAttributeDeclaration();

//Set the reference="po:lang"
langRefAttr.setResolvedAttributeDeclaration(langAttr);
                
//Add the langRefAttr to the langRefAttrUse
langRefAttrUse.setContent(langRefAttr);

//Add the langRefAttrUse to the complex type
purchaseOrderType.getAttributeContents().add(langRefAttrUse);   

//Create attributeGroup reference to global attributeGroup po:shapeAttributes   
XSDAttributeGroupDefinition shapeAttributesRef = XSDFactory.eINSTANCE.createXSDAttributeGroupDefinition();
                
//Set the resolved attributeGroup
shapeAttributesRef.setResolvedAttributeGroupDefinition(shapeAttributes);

//Add the attribute group reference to the complex type
purchaseOrderType.getAttributeContents().add(shapeAttributesRef);

// Save the contents of the resource to the file system.
schema.eResource().save(Collections.EMPTY_MAP);                                 
                                        </font></pre><br></font></td></tr></table><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="right" colspan="6"><a border="0" onMouseOver="iOver('topnextsection'); iOver('bottomnextsection'); self.status=nextsectionblurb; return true;" onMouseOut="iOut('topnextsection'); iOut('bottomnextsection'); self.status=''; return true;" href="os-schema2-7-1.html"><img alt="Next Section" src="../default/i/nextsection.gif" border="0" name="bottomnextsection"></a></td></tr><tr><td width="100%" colspan="5"></td><td width="108" height="1" bgcolor="#000000" align="right"><img alt="" height="1" width="108" 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="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="index6.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-schema2-9-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"><a border="0" onMouseOver="iOver('topprevious'); iOver('bottomprevious'); self.status=previousblurb; return true;" onMouseOut="iOut('topprevious'); iOut('bottomprevious'); self.status=''; return true;" href="os-schema2-6-5.html"><img alt="Previous" border="0" src="../default/i/previous.gif" name="bottomprevious"></a></td><td background="../default/i/sw-gold.gif"><img border="0" src="../default/i/xnext.gif"></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>