ID and IDREF Files

G

geoff

This is how the book has the files (3 of them) but xml notepad says shipTo
has to be filled out, I hate it when book examples do not work :(


======== INVOICE.XML ==========

<?xml version="1.0" encoding="UTF-8"?>
<invoice:invoice xmlns:invoice="http://www.skatestown.com/ns/invoice"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.skatestown.com/ns/invoice
./invoice.xsd"
id="43871" submitted="2004-01-05" customerId="73852">
<billTo id="addr-1">
<company>The Skateboard Warehouse</company>
<street>One Warehouse Park</street>
<street>Building 17</street>
<city>Boston</city>
<state>MA</state>
<postalCode>01775</postalCode>
</billTo>
<shipTo href="addr-1"/>
<order>
<item sku="318-BP" quantity="5" unitPrice="49.95">
<description>Skateboard backpack; five pockets</description>
</item>
<item sku="947-TI" quantity="12" unitPrice="129.00">
<description>Street-style titanium skateboard.</description>
</item>
<item sku="008-PR" quantity="1000" unitPrice="0.00">
<description>Promotional: SkatesTown stickers</description>
</item>
</order>
<tax>89.89</tax>
<shippingAndHandling>200</shippingAndHandling>
<totalCost>2087.64</totalCost>
</invoice:invoice>



======== INVOICE.XSD ==========

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema
targetNamespace="http://www.skatestown.com/ns/invoice"
xmlns:po="http://www.skatestown.com/ns/po"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.skatestown.com/ns/invoice">

<xsd:import namespace="http://www.skatestown.com/ns/po"
schemaLocation="./po.xsd" />
<xsd:annotation>
<xsd:documentation xml:lang="en">
Invoice schema for SkatesTown.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="invoice" type="invoiceType" />
<xsd:complexType name="invoiceType">
<xsd:sequence>
<xsd:element name="billTo" type="po:addressType" />
<xsd:element name="shipTo" type="po:addressType" />
<xsd:element name="order">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="itemType" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="tax" type="priceType" />
<xsd:element name="shippingAndHandling" type="priceType" />
<xsd:element name="totalCost" type="priceType" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:positiveInteger" use="required" />
<xsd:attribute name="submitted" type="xsd:date" use="required" />
<xsd:attribute name="customerId" type="xsd:positiveInteger" use="required"
/>
</xsd:complexType>
<xsd:complexType name="itemType">
<xsd:complexContent>
<xsd:extension base="po:itemType">
<xsd:attribute name="unitPrice" type="priceType" use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:simpleType name="priceType">
<xsd:restriction base="xsd:decimal">
<xsd:minInclusive value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>


========== PO.XSD =========

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns="http://www.skatestown.com/ns/po"
targetNamespace="http://www.skatestown.com/ns/po"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Purchase order schema for SkatesTown.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="po" type="poType" />
<xsd:complexType name="poType">
<xsd:sequence>
<xsd:element name="billTo" type="addressType" />
<xsd:element name="shipTo" type="addressType" />
<xsd:element name="order">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="itemType" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" use="required" type="xsd:positiveInteger" />
<xsd:attribute name="submitted" use="required" type="xsd:date" />
<xsd:attribute name="customerId" use="required" type="xsd:positiveInteger"
/>
</xsd:complexType>
<xsd:complexType name="addressType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" minOccurs="0" />
<xsd:element name="company" type="xsd:string" minOccurs="0" />
<xsd:element name="street" type="xsd:string" maxOccurs="unbounded" />
<xsd:element name="city" type="xsd:string" />
<xsd:element name="state" type="xsd:string" minOccurs="0" />
<xsd:element name="postalCode" type="xsd:string" minOccurs="0" />
<xsd:element name="country" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID" />
<xsd:attribute name="href" type="xsd:IDREF" />
</xsd:complexType>
<xsd:complexType name="itemType">
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="sku" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}" />
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="quantity" use="required" type="xsd:positiveInteger"
/>
</xsd:complexType>
</xsd:schema>
 
M

Martin Honnen

geoff said:
This is how the book has the files (3 of them) but xml notepad says shipTo
has to be filled out, I hate it when book examples do not work :(


======== INVOICE.XML ==========

<?xml version="1.0" encoding="UTF-8"?>
<invoice:invoice xmlns:invoice="http://www.skatestown.com/ns/invoice"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.skatestown.com/ns/invoice
./invoice.xsd"
id="43871" submitted="2004-01-05" customerId="73852">
<billTo id="addr-1">
<company>The Skateboard Warehouse</company>
<street>One Warehouse Park</street>
<street>Building 17</street>
<city>Boston</city>
<state>MA</state>
<postalCode>01775</postalCode>
</billTo>
<shipTo href="addr-1"/>


shipTo is defined here
<xsd:complexType name="invoiceType">
<xsd:sequence>
<xsd:element name="billTo" type="po:addressType" />
<xsd:element name="shipTo" type="po:addressType" />
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
as being of type po:addressType and that is defined here
<xsd:complexType name="addressType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" minOccurs="0" />
<xsd:element name="company" type="xsd:string" minOccurs="0" />
<xsd:element name="street" type="xsd:string" maxOccurs="unbounded" />
<xsd:element name="city" type="xsd:string" />
<xsd:element name="state" type="xsd:string" minOccurs="0" />
<xsd:element name="postalCode" type="xsd:string" minOccurs="0" />
<xsd:element name="country" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID" />
<xsd:attribute name="href" type="xsd:IDREF" />
</xsd:complexType>

It has mandatory child elements like street and city.

As said in my reply to your first post, IDREF does not mean that the
referenced element is included.
 
G

geoff

Got it.

The point of the book is that usually the shipTo and billTo addresses are
the same and it used the IDREF mechanism to prevent having to enter
duplicate information.

So, what mechanism would one use so addressType information is entered once?

--g
 
M

Martin Honnen

geoff said:
So, what mechanism would one use so addressType information is entered once?

You could define a list of addresses, each with an ID, and then you
could have shipTo and billTo reference the ID value using an IDREF
attribute, as I have already tried to suggest e.g.
<invoice>
<address-list>
<address id="addr1">
...
</address>
</address-list>
<shipTo ref="addr1"/>
<billTo ref="addr1"/>
</invoice>
 
G

geoff

I guess it points out the importance of tools. I modified it by hand but
always got some schema declaration error.

I'll put it on the shelf for now and look for a tool to manipulate the xml
and schemas.

--g
 
G

geoff

Hello,

For my own benefit, I did what you suggested, using the po.xsd and po.xml
(did not use the invoice.xsd). In the xsd, I specified two choices, have
three address parts (addressList, shipTo, and billTo) where the use of 'id'
and 'href' are required or have two address parts, shipTo and billTo.

I am sure in real life it would be handled more efficiently but, hey, this
is an exercise :)

--g
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,754
Messages
2,569,527
Members
44,998
Latest member
MarissaEub

Latest Threads

Top