Using the XML Schema Infoset Model APIs and the different techniques
described in this
tutorial, create the po.xsd, which is defined in the
XML Schema Part 0: Primer.
Hint: You will notice that some of the elements defined
in the po.xsd schema contain
anonymous/local complex types.
Local complex types are created the same way as if they were global,
which was done in Exercise 4: Create a global complex type with a sequence model
group,
but don't set the name of the complex type, and instead of adding
it to the root schema you just need to use the
setAnonymousTypeDefinition(XSDTypeDefinition) on
the org.eclipse.xsd.XSDElementDeclaration object.
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element minOccurs="0" ref="comment"/>
<xsd:element name="items" type="Items"/>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute fixed="US" name="country" type="xsd:NMTOKEN"/>
</xsd:complexType>
<xsd:complexType name="Items">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="item">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="USPrice" type="xsd:decimal"/>
<xsd:element minOccurs="0" ref="comment"/>
<xsd:element minOccurs="0" name="shipDate" type="xsd:date"/>
</xsd:sequence>
<xsd:attribute name="partNum" type="SKU" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
<xsd:element name="comment" type="xsd:string"/>
</xsd:schema>
Solution:
Exercise 7 solution