<?xml version="1.0" encoding="UTF-8"?>
<!--
  S.S. Travels partner API: OpenTravel (OTA 2015B) vehicle message profile.
  This is a lightweight profile schema covering the root elements, the attributes S.S. Travels reads,
  and lax content everywhere else, so messages that validate against the full OpenTravel 2015B
  schemas also validate here. Full OTA schemas: https://opentravel.org
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.opentravel.org/OTA/2003/05"
           targetNamespace="http://www.opentravel.org/OTA/2003/05" elementFormDefault="qualified" version="2015B-sst1">

  <xs:attributeGroup name="OTA_PayloadStdAttributes">
    <xs:attribute name="Version" type="xs:decimal" use="required"/>
    <xs:attribute name="EchoToken" type="xs:string"/>
    <xs:attribute name="TimeStamp" type="xs:dateTime"/>
    <xs:attribute name="Target" type="xs:string"/>
    <xs:attribute name="PrimaryLangID" type="xs:language"/>
    <xs:anyAttribute processContents="lax"/>
  </xs:attributeGroup>

  <xs:complexType name="Lax" mixed="true">
    <xs:sequence><xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/></xs:sequence>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>

  <xs:complexType name="RequestorIDType">
    <xs:attribute name="ID" type="xs:string" use="required"/>
    <xs:attribute name="Type" type="xs:string"/>
    <xs:attribute name="MessagePassword" type="xs:string"/>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>
  <xs:complexType name="POSType">
    <xs:sequence>
      <xs:element name="Source" maxOccurs="10">
        <xs:complexType>
          <xs:sequence><xs:element name="RequestorID" type="RequestorIDType"/><xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/></xs:sequence>
          <xs:anyAttribute processContents="lax"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="LocationCodeType">
    <xs:attribute name="LocationCode" type="xs:string" use="required"/>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>
  <xs:complexType name="VehRentalCoreType">
    <xs:sequence>
      <xs:element name="PickUpLocation" type="LocationCodeType"/>
      <xs:element name="ReturnLocation" type="LocationCodeType" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="PickUpDateTime" type="xs:dateTime" use="required"/>
    <xs:attribute name="ReturnDateTime" type="xs:dateTime" use="required"/>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>
  <xs:complexType name="UniqueIDType">
    <xs:attribute name="ID" type="xs:string" use="required"/>
    <xs:attribute name="Type" type="xs:string" use="required"/>
    <xs:anyAttribute processContents="lax"/>
  </xs:complexType>

  <!-- Requests -->
  <xs:element name="OTA_VehAvailRateRQ">
    <xs:complexType><xs:sequence>
      <xs:element name="POS" type="POSType" minOccurs="0"/>
      <xs:element name="VehAvailRQCore">
        <xs:complexType><xs:sequence>
          <xs:element name="VehRentalCore" type="VehRentalCoreType"/>
          <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence><xs:anyAttribute processContents="lax"/></xs:complexType>
      </xs:element>
      <xs:element name="VehAvailRQInfo" type="Lax" minOccurs="0"/>
    </xs:sequence><xs:attributeGroup ref="OTA_PayloadStdAttributes"/></xs:complexType>
  </xs:element>

  <xs:element name="OTA_VehResRQ">
    <xs:complexType><xs:sequence>
      <xs:element name="POS" type="POSType" minOccurs="0"/>
      <xs:element name="VehResRQCore">
        <xs:complexType><xs:sequence>
          <xs:element name="VehRentalCore" type="VehRentalCoreType"/>
          <xs:element name="Customer" type="Lax"/>
          <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence><xs:anyAttribute processContents="lax"/></xs:complexType>
      </xs:element>
      <xs:element name="VehResRQInfo" type="Lax" minOccurs="0"/>
      <xs:element name="TPA_Extensions" type="Lax" minOccurs="0"/>
    </xs:sequence><xs:attributeGroup ref="OTA_PayloadStdAttributes"/></xs:complexType>
  </xs:element>

  <xs:element name="OTA_VehRetResRQ">
    <xs:complexType><xs:sequence>
      <xs:element name="POS" type="POSType" minOccurs="0"/>
      <xs:element name="VehRetResRQCore">
        <xs:complexType><xs:sequence>
          <xs:element name="UniqueID" type="UniqueIDType"/>
          <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence></xs:complexType>
      </xs:element>
    </xs:sequence><xs:attributeGroup ref="OTA_PayloadStdAttributes"/></xs:complexType>
  </xs:element>

  <xs:element name="OTA_VehModifyRQ">
    <xs:complexType><xs:sequence>
      <xs:element name="POS" type="POSType" minOccurs="0"/>
      <xs:element name="VehModifyRQCore">
        <xs:complexType><xs:sequence>
          <xs:element name="UniqueID" type="UniqueIDType"/>
          <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence><xs:anyAttribute processContents="lax"/></xs:complexType>
      </xs:element>
      <xs:element name="VehModifyRQInfo" type="Lax" minOccurs="0"/>
    </xs:sequence><xs:attributeGroup ref="OTA_PayloadStdAttributes"/></xs:complexType>
  </xs:element>

  <xs:element name="OTA_VehCancelRQ">
    <xs:complexType><xs:sequence>
      <xs:element name="POS" type="POSType" minOccurs="0"/>
      <xs:element name="VehCancelRQCore">
        <xs:complexType><xs:sequence>
          <xs:element name="UniqueID" type="UniqueIDType"/>
          <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence>
        <xs:attribute name="CancelType" type="xs:string"/>
        <xs:anyAttribute processContents="lax"/></xs:complexType>
      </xs:element>
    </xs:sequence><xs:attributeGroup ref="OTA_PayloadStdAttributes"/></xs:complexType>
  </xs:element>

  <xs:element name="OTA_VehLocSearchRQ">
    <xs:complexType><xs:sequence>
      <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </xs:sequence><xs:attributeGroup ref="OTA_PayloadStdAttributes"/></xs:complexType>
  </xs:element>

  <!-- Responses: Success + optional Warnings + payload, or Errors -->
  <xs:complexType name="RSType">
    <xs:sequence><xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/></xs:sequence>
    <xs:attributeGroup ref="OTA_PayloadStdAttributes"/>
  </xs:complexType>
  <xs:element name="OTA_VehAvailRateRS" type="RSType"/>
  <xs:element name="OTA_VehResRS" type="RSType"/>
  <xs:element name="OTA_VehRetResRS" type="RSType"/>
  <xs:element name="OTA_VehModifyRS" type="RSType"/>
  <xs:element name="OTA_VehCancelRS" type="RSType"/>
  <xs:element name="OTA_VehLocSearchRS" type="RSType"/>
  <xs:element name="OTA_ErrorRS" type="RSType"/>
</xs:schema>
