<?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
      <xs:element name="dell">
        <!-- Lists the three types of products offered by Dell -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="desktops" maxOccurs="5"/>
            <xs:element ref="servers" maxOccurs="5"/>
            <xs:element ref="noteBooks" maxOccurs="5"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="desktops">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="desktop" maxOccurs="5"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="servers">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="server" maxOccurs="5"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="noteBooks">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="noteBook" maxOccurs="5"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="desktop">
        <!-- All information for desktops are held under here  -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="new" minOccurs="0"/>
            <xs:element name="save" type="xs:decimal" minOccurs="0"/>
            <xs:element name="desktopName" type="xs:string"/>
            <xs:element name="desktopModelNumber" type="xs:string"/>
            <xs:element name="description" type="xs:string"/>
            <xs:element ref="price"/>
            <xs:element ref="code"/>
            <xs:element ref="processor"/>
            <xs:element ref="os"/>
            <xs:element ref="memory"/>
            <xs:element ref="hardDrive"/>
            <xs:element ref="monitor"/>
            <xs:element ref="graphics"/>
            <xs:element ref="opticalDrive"/>
            <xs:element ref="service"/>
            <xs:element name="software" type="xs:string"/>
            <xs:element ref="upgrades"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="server">
        <!-- All information for servers are held under here  -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="new" minOccurs="0"/>
            <xs:element name="info" type="xs:string" minOccurs="0"/>
            <xs:element name="save" type="xs:decimal" minOccurs="0"/>
            <xs:element name="serverName" type="xs:string"/>
            <xs:element name="serverModelNumber" type="xs:string"/>
            <xs:element name="description" type="xs:string"/>
            <xs:element ref="price"/>
            <xs:element ref="code"/>
            <xs:element ref="processor"/>
            <xs:element name="support" type="xs:string"/>
            <xs:element ref="memory"/>
            <xs:element ref="hardDrive"/>
            <xs:element name="raidController" type="xs:string"/>
            <xs:element name="networkCard" type="xs:string"/>
            <xs:element ref="service"/>
            <xs:element ref="upgrades"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="noteBook">
        <!-- All information for notebooks are held under here  -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="new" minOccurs="0"/>
            <xs:element name="save" type="xs:decimal" minOccurs="0"/>
            <xs:element name="noteBookName" type="xs:string"/>
            <xs:element name="noteBookModelNumber" type="xs:string"/>
            <xs:element name="description" type="xs:string"/>
            <xs:element ref="price"/>
            <xs:element ref="code"/>
            <xs:element ref="processor"/>
            <xs:element ref="os"/>
            <xs:element ref="memory"/>
            <xs:element ref="hardDrive"/>
            <xs:element ref="monitor"/>
            <xs:element ref="graphics"/>
            <xs:element ref="opticalDrive"/>
            <xs:element ref="service"/>
            <xs:element name="software" type="xs:string" minOccurs="0"/>
            <xs:element ref="upgrades"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="new">
        <!-- This tag is used to say if the product is new.  Can be optional -->
        <xs:complexType></xs:complexType>
      </xs:element>
      <xs:element name="price">
        <!-- The price of the products before and after VAT -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="excluding"/>
            <xs:element ref="including"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="excluding">
        <!-- Decimal number for price before VAT.  Can be as little as 250 and as much as 800 -->
        <xs:simpleType>
          <xs:restriction base ="xs:decimal">
            <xs:minInclusive value="250"/>
            <xs:maxInclusive value="800"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="including">
        <!-- Decimal number for the price after VAT.  Can be as little as 350 and as much as 1000 -->
        <xs:simpleType>
          <xs:restriction base ="xs:decimal">
            <xs:minInclusive value="350"/>
            <xs:maxInclusive value="1000"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="code">
        <!-- The product code can have numbers and letters but needs to be between 13 and 14 characters long -->
        <xs:simpleType>
          <xs:restriction base ="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:minLength value="13"/>
            <xs:maxLength value="14"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="processor">
        <!-- All processor information is held under here -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="manufacturer"/>
            <xs:element ref="mobile" minOccurs="0"/>
            <xs:element ref="model"/>
            <xs:element ref="modelNumber" minOccurs="0"/>
            <xs:element name="modelFeature" type="xs:string" minOccurs="0"/>
            <xs:element ref="ghz"/>
            <xs:element ref="cache"/>
            <xs:element name="fsb" type="xs:decimal"/>
            <xs:element ref="wireless" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="manufacturer">
        <!-- Manufacturers name can either be Intel, ATI or Dell -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="Intel"/>
            <xs:enumeration value="ATI"/>
            <xs:enumeration value="Dell"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="mobile">
        <!-- Tells you that it has mobile technology.  Can be optional -->
        <xs:complexType></xs:complexType>
      </xs:element>
      <xs:element name="model">
        <!-- A list of all of the model names for the processor -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="Celeron D"/>
            <xs:enumeration value="Pentium 4"/>
            <xs:enumeration value="Pentium M"/>
            <xs:enumeration value="Celeron M"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="modelNumber">
        <!-- Lists all of the model numbers for the processor.  Has to be decimal -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="326"/>
            <xs:enumeration value="330"/>
            <xs:enumeration value="360"/>
            <xs:enumeration value="370"/>
            <xs:enumeration value="531"/>
            <xs:enumeration value="551"/>
            <xs:enumeration value="640"/>
            <xs:enumeration value="725"/>
            <xs:enumeration value="740"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ghz">
        <!-- Lists the amount of GHz the processor can have.  Has to be decimal -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:enumeration value="1.40"/>
            <xs:enumeration value="1.50"/>
            <xs:enumeration value="1.60"/>
            <xs:enumeration value="1.73"/>
            <xs:enumeration value="2.53"/>
            <xs:enumeration value="2.66"/>
            <xs:enumeration value="2.80"/>
            <xs:enumeration value="3.00"/>
            <xs:enumeration value="3.20"/>
            <xs:enumeration value="3.40"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="cache">
        <!-- Lists the amount of cache the processor can have -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="256KB"/>
            <xs:enumeration value="256K L2"/>
            <xs:enumeration value="1MB"/>
            <xs:enumeration value="1MB L2"/>
            <xs:enumeration value="2MB L2"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="wireless">
        <!-- Holds the information if the product is wireless ready.  Can be optional -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="manufacturer"/>
            <xs:element ref="wirelessModel"/>
            <xs:element ref="wirelessModelNumber"/>
            <xs:element ref="standard"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="wirelessModel">
        <!-- Lists all of the model names for the wireless models -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="Pro WLAN"/>
            <xs:enumeration value="TrueMobile"/>
            <xs:enumeration value="Pro/Wireless"/>
            <xs:enumeration value="Celeron M"/>
            <xs:enumeration value="Centrino"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="wirelessModelNumber">
        <!-- Lists the model number for all of the wireless models -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="1370"/>
            <xs:enumeration value="2100"/>
            <xs:enumeration value="2200"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="standard">
        <!-- Shows what standard the wirless model has -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="802.11b"/>
            <xs:enumeration value="802.11g"/>
            <xs:enumeration value="802.11b/g"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="os">
        <!-- Lists the Operating System that comes with the product -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="Microsoft Windows XP Home Edition"/>
            <xs:enumeration value="Microsoft Windows XP Profesional Edition"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="memory">
        <!-- Shows all of the information for the memory -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="was"/>
            <xs:element ref="now"/>
            <xs:element name="memoryType" type="xs:string" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="was">
        <!-- Lists old size of the memory -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="256"/>
            <xs:enumeration value="512"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="now">
        <!-- Lists the new size of the memory -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="512"/>
            <xs:enumeration value="768"/>
            <xs:enumeration value="1024"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="hardDrive">
        <!-- Shows all of the information for the hard drives -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="capacity"/>
            <xs:element name="attatchment" type="xs:string" minOccurs="0"/>
            <xs:element name="diskArray" type="xs:string" minOccurs="0"/>
            <xs:element name="rpm" type="xs:decimal" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="capacity">
        <!-- Lists all of the capacitys for the hard drives -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="40"/>
            <xs:enumeration value="60"/>
            <xs:enumeration value="80"/>
            <xs:enumeration value="160"/>
            <xs:enumeration value="250"/>
            <xs:enumeration value="320"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="monitor">
        <!-- Shows all of the information for the monitor -->
        <xs:complexType>
          <xs:sequence>
            <xs:element name="diagonal" type="xs:decimal"/>
            <xs:element name="monitorType" type="xs:string"/>
            <xs:element ref="resolution" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="resolution">
        <!-- Shows the information for the height and width of the resolution.  Can be optional -->
        <xs:complexType>
          <xs:sequence>
            <xs:element name="width" type="xs:decimal"/>
            <xs:element name="height" type="xs:decimal"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="graphics">
        <!-- Shows all of the information for the graphics card -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="integrated" minOccurs="0"/>
            <xs:element ref="manufacturer"/>
            <xs:element name="graphicsModel" type="xs:string"/>
            <xs:element name="graphicsModelNumber" type="xs:string" minOccurs="0"/>
            <xs:element ref="shared" minOccurs="0"/>
            <xs:element name="size" type="xs:decimal" minOccurs="0"/>
            <xs:element name="connection" type="xs:string" minOccurs="0"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="integrated">
        <!-- Tells you that the graphics card is integrated.  Can be optional -->
        <xs:complexType></xs:complexType>
      </xs:element>
      <xs:element name="shared">
        <!-- Tells you that the graphics card is shared with the memory.  Can be optional -->
        <xs:complexType></xs:complexType>
      </xs:element>
      <xs:element name="opticalDrive">
        <!-- Shows all information for the optical drive -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="integrated" minOccurs="0"/>
            <xs:element ref="internal" minOccurs="0"/>
            <xs:element ref="speed"/>

            <xs:element ref="type"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="internal">
        <!-- Tells you that the optical drive is internal -->
        <xs:complexType></xs:complexType>
      </xs:element>
      <xs:element name="speed">
        <!-- Lists the speed of the optical drive -->
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="8"/>
            <xs:enumeration value="16"/>
            <xs:enumeration value="24"/>
            <xs:enumeration value="48"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="type">
        <!-- Lists the type of optical drive -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="DVD-ROM/24x CDRW Combo Drive"/>
            <xs:enumeration value="CD-RW/DVD Combo Drive"/>
            <xs:enumeration value="DVD+/-RW Drive"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="service">
        <!-- Lists all of the types of services that come with the products -->
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
            <xs:enumeration value="90 Day Collect and Return (CAR) Service"/>
            <xs:enumeration value="1 Year Collect and Return (CAR) Service"/>
            <xs:enumeration value="1 Year Next Business Day Service"/>
            <xs:enumeration value="1 Year Euro Collect and Return Service"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="upgrades">
        <!-- Shows all of the information for the upgrades -->
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="upgrade"  maxOccurs="3"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="upgrade">
        <!-- Lists the upgrades with their price.  Can have a maximum of three -->
        <xs:complexType>
          <xs:sequence>
            <xs:element name="description" type="xs:string"/>
            <xs:element name="upgradePrice" type="xs:decimal"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>