ID and IDREF Files

Discussion in 'XML' started by geoff, Dec 2, 2007.

  1. geoff

    geoff Guest

    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>
    geoff, Dec 2, 2007
    #1
    1. Advertising

  2. geoff wrote:
    > 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.


    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
    Martin Honnen, Dec 2, 2007
    #2
    1. Advertising

  3. geoff

    geoff Guest

    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
    geoff, Dec 2, 2007
    #3
  4. geoff

    geoff Guest

    geoff, Dec 2, 2007
    #4
  5. geoff wrote:

    > 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>


    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
    Martin Honnen, Dec 2, 2007
    #5
  6. geoff

    geoff Guest

    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
    geoff, Dec 3, 2007
    #6
  7. geoff

    geoff Guest

    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
    geoff, Dec 3, 2007
    #7
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. rico
    Replies:
    2
    Views:
    396
  2. kevkev

    JAXB and IdRef

    kevkev, May 18, 2005, in forum: Java
    Replies:
    3
    Views:
    4,291
    kevkev
    May 19, 2005
  3. Maulik Thaker

    querry on ID's and IDREF in DTD

    Maulik Thaker, Feb 21, 2006, in forum: XML
    Replies:
    10
    Views:
    1,223
    Aalap
    Feb 25, 2006
  4. Elhanan
    Replies:
    0
    Views:
    371
    Elhanan
    Aug 22, 2006
  5. Replies:
    2
    Views:
    1,343
Loading...

Share This Page