<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!-- MTP document scheme (version 0.1) 2005-07-27 -->
  <!--
    Relax NG Compact (mtp.rnc) form is base for all others (XMLScheme, DTD), which are generated by 'trang'
    Klokan Petr Pridal
  -->
  <!--
    TODO: Beter handling of date types
    Klokan comment: element salary { xsd:decimal { minInclusive="0" maxExclusive="10000000" fractionDigits="2" } },
    Klokan comment: attribute id { xsd:string { pattern = "[A-Z]{2,3} \d{2}-\d{2}" } }
    Klokan comment: element country { xsd:string { minLength="2" maxLength="2" } }
  -->
  <xs:element name="MTPDocument">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Job"/>
        <xs:element ref="Supplier"/>
        <xs:element minOccurs="0" ref="DocumentNoteFromSupplier"/>
        <xs:element minOccurs="0" ref="DocumentSupplierReference"/>
        <xs:element maxOccurs="unbounded" ref="LineItem"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Attachment"/>
      </xs:sequence>
      <xs:attribute name="preparationDate" type="xs:date"/>
      <xs:attribute name="preparationTime" type="xs:time"/>
      <xs:attribute name="preparationSystem"/>
      <xs:attribute name="preparationSystemVersion"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="DocumentNoteFromSupplier" type="xs:string"/>
  <xs:element name="DocumentSupplierReference" type="xs:string"/>
  <xs:element name="Job">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="State"/>
        <xs:element ref="Type"/>
        <xs:element ref="NeedByDate"/>
        <xs:element ref="Priority"/>
        <xs:element minOccurs="0" ref="REQRaised"/>
        <xs:element minOccurs="0" ref="REQReceived"/>
        <xs:element ref="Budget"/>
        <xs:element minOccurs="0" ref="NoteToSupplier"/>
        <xs:element minOccurs="0" ref="Justification"/>
        <xs:element ref="ShipOwner"/>
        <xs:element ref="Vessel"/>
        <xs:element ref="DeliveryPort"/>
        <xs:element minOccurs="0" ref="Equipment"/>
      </xs:sequence>
      <xs:attribute name="id" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="State">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="Requisition"/>
        <xs:enumeration value="RequestForQuote"/>
        <xs:enumeration value="Quote"/>
        <xs:enumeration value="PurchaseOrder"/>
        <xs:enumeration value="OrderConfirmation"/>
        <xs:enumeration value="Invoice"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="Type" type="xs:string"/>
  <xs:element name="NeedByDate" type="xs:string"/>
  <xs:element name="Priority" type="xs:string"/>
  <xs:element name="REQRaised" type="xs:string"/>
  <xs:element name="REQReceived" type="xs:string"/>
  <xs:element name="Budget">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="NoteToSupplier" type="xs:string"/>
  <xs:element name="Justification" type="xs:string"/>
  <xs:element name="ShipOwner">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name"/>
        <xs:element ref="Address"/>
        <xs:element minOccurs="0" ref="BillingAddress"/>
        <xs:element ref="Country"/>
        <xs:element ref="Telephone"/>
        <xs:element ref="Email"/>
        <xs:element ref="Fax"/>
        <xs:element ref="Web"/>
      </xs:sequence>
      <xs:attribute name="id" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Name" type="xs:string"/>
  <xs:element name="Address" type="xs:string"/>
  <xs:element name="BillingAddress" type="xs:string"/>
  <xs:element name="Country">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Telephone" type="xs:string"/>
  <xs:element name="Email" type="xs:string"/>
  <xs:element name="Fax" type="xs:string"/>
  <xs:element name="Web" type="xs:string"/>
  <xs:element name="Vessel">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name"/>
        <xs:element ref="IMO"/>
        <xs:element minOccurs="0" ref="Contact"/>
        <xs:element minOccurs="0" ref="ContactTelephone"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="IMO" type="xs:string"/>
  <xs:element name="Contact" type="xs:string"/>
  <xs:element name="ContactTelephone" type="xs:string"/>
  <xs:element name="DeliveryPort">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="DeliverTo"/>
        <xs:element ref="Pier"/>
        <xs:element ref="Port"/>
        <xs:element ref="City"/>
        <xs:element ref="Country"/>
        <xs:element ref="ETA"/>
        <xs:element ref="ETD"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Pier" type="xs:string"/>
  <xs:element name="Port" type="xs:string"/>
  <xs:element name="City" type="xs:string"/>
  <xs:element name="ETA" type="xs:string"/>
  <xs:element name="ETD" type="xs:string"/>
  <xs:element name="Supplier">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name"/>
        <xs:element ref="Address"/>
        <xs:element ref="BillingAddress"/>
        <xs:element ref="Country"/>
        <xs:element ref="Telephone"/>
        <xs:element ref="Email"/>
        <xs:element ref="Fax"/>
        <xs:element ref="Web"/>
      </xs:sequence>
      <xs:attribute name="id" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Equipment">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name"/>
        <xs:element ref="Manufacturer"/>
        <xs:element ref="Model"/>
        <xs:element ref="SerialNumber"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="SerialNumber" type="xs:string"/>
  <xs:element name="LineItem">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Description"/>
        <xs:element ref="Quantity"/>
        <xs:element ref="Price"/>
        <xs:element ref="Manufacturer"/>
        <xs:element ref="Model"/>
        <xs:element ref="OnBoard"/>
        <xs:element minOccurs="0" ref="NoteToSupplier"/>
        <xs:element minOccurs="0" ref="NoteFromSupplier"/>
      </xs:sequence>
      <xs:attribute name="id" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Description" type="xs:string"/>
  <xs:element name="Quantity">
    <xs:complexType mixed="true">
      <xs:attribute name="uom" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Price">
    <xs:complexType mixed="true">
      <xs:attribute name="currency" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="OnBoard" type="xs:string"/>
  <xs:element name="NoteFromSupplier" type="xs:string"/>
  <xs:element name="Manufacturer" type="xs:string"/>
  <xs:element name="Model" type="xs:string"/>
  <xs:element name="Attachment">
    <xs:complexType mixed="true">
      <xs:attribute name="fileName" use="required"/>
      <xs:attribute name="contentType"/>
      <xs:attribute name="encoding">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Base64"/>
            <xs:enumeration value="UU"/>
            <xs:enumeration value=""/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="location"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="DeliverTo">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name"/>
        <xs:element ref="Address"/>
        <xs:element ref="BillingAddress"/>
        <xs:element ref="Country"/>
        <xs:element ref="Telephone"/>
        <xs:element ref="Email"/>
        <xs:element ref="Fax"/>
        <xs:element ref="Web"/>
      </xs:sequence>
      <xs:attribute name="id" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

