blob: 418688c38e0beb77a9f37b22670c9bcb4e60e440 [file] [log] [blame]
<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>