<?xml version="1.0" encoding="UTF-8"?>

<!--
     AlpineBits 2026-10
     http://www.alpinebits.org/

     W3C XML Schema file

     changelog:

    v. 2026-10  2.1    **************************************************************************************************
                       RatePlans: added ALPINEBITS-PETS to the allowed values of
                       RatePlan/BookingRules/BookingRule -> CodeContext and of
                       RatePlan/Supplements/Supplement -> InvType.
                       Pets have been priced this way since release 2022-10, but the value was never added to the
                       schema, so a message that carried it could not be valid.
                       Releases 2022-10 and 2024-10 spell the value ALPINEBITSEXTRA-PETS. It was shortened here
                       because OTA declares Supplement -> InvType as StringLength1to16 and the old spelling is
                       20 characters long, so it could never validate against OTA.
                       The reserved value ALPINEBITSEXTRA of RatePlan/Supplements/Supplement -> InvType was renamed
                       to ALPINEBITS at the same time, so that the two AlpineBits-specific values share one prefix.
                       It stands for a shared list of common InvCode values that does not exist yet, so no message
                       in use carries it.

    v. 2026-10  2.0    **************************************************************************************************
                       GuestRequests (push): the HotelReservations element of OTA_HotelResNotifRS is now optional, as it
                       is in OTA2015A. It was mandatory here and requires at least one HotelReservation, so a server that
                       could process none of the requests in a batch had no valid way to acknowledge nothing; it can now
                       answer with the warning outcome of section 2.3, listing every refusal in Warnings and omitting
                       the element. The empty element stays invalid, as OTA2015A rejects it. No document valid until
                       now becomes invalid, but clients must be prepared for the element to be absent.

    v. 2026-10  1.9    **************************************************************************************************
                       Empty wrapper elements are no longer accepted where OTA2015A requires at least one child, so that
                       the rule of section 4 holds without exception: every document valid against this schema is also
                       valid against OTA2015A.
                       - Inventory HotelInfo (push and pull): Services requires at least one Service, Service/Features
                         at least one Feature, MultimediaDescription/TextItems at least one TextItem
                       - Inventory Basic (push and pull): GuestRoom/MultimediaDescriptions requires at least one
                         MultimediaDescription
                       - RatePlans: Offer/OfferRules requires its OfferRule
                       - GuestRequests (push): OTA_HotelResNotifRQ/HotelReservations requires at least one
                         HotelReservation
                       Except for Features, the document already prescribed at least one child in each of these
                       elements and only the schema was wider; the sections on Features and on the push of
                       GuestRequests have been corrected accordingly.
                       Unaffected: an empty GuestRooms element keeps its documented meaning of "remove all room
                       categories", and an empty ReservationsList still reports "no reservations", both of which
                       OTA2015A accepts.

    v. 2026-10  1.8    **************************************************************************************************
                       RatePlans, BaseRates and GuestRequests: RatePlanCode is now StringLength1to16 in all four
                       declarations, down from StringLength1to64. OTA2015A types the attribute as 16 characters in
                       RoomStay/RatePlans/RatePlan, the position every reservation must fill, so a longer code could
                       be published here and never reported back. Codes of 17 to 64 characters are no longer accepted;
                       the longest code in the shipped samples is 14 characters.

    v. 2026-10  1.7    **************************************************************************************************
                       BaseRates: the sub-elements of OTA_HotelRatePlanRQ/RatePlans/RatePlan are now a sequence
                       (DateRange, RatePlanCandidates, HotelRef), which is what section 4.5.1 describes and the
                       order OTA2015A uses. They used to be a choice with maxOccurs="unbounded", so the schema
                       accepted a RatePlan repeating a sub-element, giving them in any order, or carrying no
                       HotelRef at all; OTA2015A rejects the first two and the documentation rejects all three.

    v. 2026-10  1.6    **************************************************************************************************
                       Inventory: HotelDescriptiveContent/Policies/Policy now carries exactly one policy, as
                       section 4.3 has always stated; its children are declared as a choice, in the order
                       OTA2015A declares them (CancelPolicy, GuaranteePaymentPolicy, CheckoutCharges, PolicyInfo,
                       TaxPolicies, PetsPolicies, StayRequirements). They used to be a sequence of optional
                       elements, so any combination of them in one Policy was accepted here and rejected by
                       OTA2015A, whose order differs. Messages that follow the documented model are unaffected.

    v. 2026-10  1.5    **************************************************************************************************
                       Schema-wide alignment with OTA2015A, so that every document valid against this schema is also
                       valid against OTA2015A, as stated in section 4. Nothing that OTA2015A allows has been removed:
                       every change narrows a value space that was wider here than in OTA.
                       - enumerations restored: Award/RatingSymbol, Deadline/OffsetDropTime and the CardCode of
                         AcceptedPayment/PaymentCard, which accepted any non-empty string
                       - CurrencyCode: now [a-zA-Z]{3}, as OTA AlphaLength3, instead of any three characters
                       - OTA code list values: Email/EmailType, Phone/PhoneTechType, HotelCategory/Code and
                         GeneralEventInfo/Type now use the OTA_CodeType pattern
                       - numeric attributes: upper bounds added where OTA has them (ages, occupancies, quantities,
                         multipliers, error and warning codes, percentages)
                       - string attributes: maximum lengths added where OTA has them (StateCode, PhoneNumber, URL/ID,
                         DiscountPattern, CompanyName/Code and CodeContext)
                       - Discount/DiscountPattern: the empty string is no longer accepted, OTA requires at
                         least one character
                       - UniqueID/ID in FreeRooms and RatePlans: now StringLength1to32, as OTA has it
                       - Position: Latitude, Longitude and Altitude stay decimals but are now bounded to the
                         16 characters OTA allows (eight decimal places, i.e. millimetre precision)
                       - cardinality: maxOccurs capped as OTA does for Errors/Error, GuestCounts/GuestCount,
                         Customer/Telephone, EventContacts/EventContact, LocationCategories/Category (99),
                         OfferRule/Occupancy (5) and Rate/Base (1)

    v. 2026-10  1.4    **************************************************************************************************
                       RatePlans: RatePlan/Offers/Offer/OfferRules/OfferRule/LengthsOfStay/LengthOfStay ->
                       the empty string has been removed from the allowed values of the required attribute
                       MinMaxMessageType because it is not specified in the OTA standard. Accepting it conflicted
                       with the rule that every document valid against this schema is also valid against OTA2015A.

    v. 2026-10  1.3    **************************************************************************************************
                       RatePlans: Attribute RatePlanNotifType value `Full` has been removed because it is not specified
                       in the OTA standard.

    v. 2026-10  1.2    **************************************************************************************************
                       DepositPayments: type declaration added for various attributes

    v. 2026-10  1.1    **************************************************************************************************
                       OTA_NotifReportRQ: added optional ResGlobalInfo to transfer the HotelCode
                       PaymentCardType: standardised type for payment cards in
                           HotelReservation/RoomStays/RoomStay/Guarantee/GuaranteesAccepted/GuaranteeAccepted and
                           HotelReservation/ResGlobalInfo/DepositPayments/GuaranteePayment/AcceptedPayments/AcceptedPayment
                       BankAcctNumber and BankID: PlainText changed from NumericStringLength1to19 to StringLength1to64
                       CompanyInfo/AddressInfo: added optional Language attribute
                       All messages now uniformly have the Version and TimeStamp attributes specified by OTA.
                       Warnings unified: the attributes intended for warnings can be specified for all messages.
                       Redundancies in the schema eliminated through common type definitions.

    v. 2026-10  1.0    **************************************************************************************************
                       GuestRequests: HotelReservation/../RoomStay -> added element ResGuestRPHs
                       GuestRequests: HotelReservation/../ResGuest -> added attribute ResGuestRPH, maxOccurs="unbounded"
                       GuestRequests: HotelReservation/ResGlobalInfo/../ProfileInfo -> maxOccurs="3"
                       GuestRequests: HotelReservation/ResGlobalInfo/../ProfileInfo -> ProfileType extended (1,3,4)
                       GuestRequests: HotelReservation/ResGlobalInfo/../ProfileInfo -> can contain a Customer element
                       internal refactoring: various types defined separately for reuse
                       Inventory: HotelDescriptiveContent/FacilityInfo/../GuestRoom -> added Attribute MaxAdultOccupancy

    v. 2024-10  1.4    **************************************************************************************************
                       All occurrences of type="def_nonempty_string" have been replaced with the value defined in
                       OTA 2015A.

    v. 2024-10  1.3    **************************************************************************************************
                       HotelCode: Bugfix: define HotelCode as required everywhere

    v. 2024-10  1.2    **************************************************************************************************
                       RatePlans: Attribute RatePlanNotifType value `New` has been replaced with `Full`. `New` is still
                       accepted for compatibility reasons.
                       Inventory: Element TypeRoom changed to mandatory element

    v. 2024-10  1.1    **************************************************************************************************
                       GuestRequests: added optional RoomRates element

    v. 2024-10  1.0    **************************************************************************************************
                       GuestRequests: added optional Services element


    v. 2022-10  1.2    **************************************************************************************************
                       GuestRequests: allow Errors in OTA_HotelResNotifRS
                       GuestRequests: allow Warnings in OTA_NotifReportRS
                       Inventory: allow Warnings in OTA_HotelDescriptiveInfoRS
                       BaseRates: allow Warnings in OTA_HotelRatePlanRS


    v. 2022-10  1.1    **************************************************************************************************
                       GuestRequests: added optional LastModifyDateTime attribute for HotelReservation element


    v. 2022-10  1.0    **************************************************************************************************
                       GuestRequests: added optional attribute RoomStayReservation to element HotelReservation


    v. 2020-10  1.6    **************************************************************************************************
                       HotelCode: define HotelCode as String of length 1 to 16, just like in OTA2015A


    v. 2020-10  1.5    **************************************************************************************************
                       Inventory: fix HotelDescriptiveContents -> ... -> ContactInfo -> ... -> URL -> ID restriction
                       The written 2020-10 standard says on page 55 that "...Partners are allowed to define further
                       values...". The prior XSD defined an enumeration of allowed values, which was too restrictive. This
                       has been fixed.


    v. 2020-10  1.4    **************************************************************************************************
                       Inventory: removed attributes Code and CodeContext from element CompanyName under ContactInfo


    v. 2020-10  1.3    **************************************************************************************************
                       make LocationCategories optional


    v. 2020-10  1.2    **************************************************************************************************
                       OTA_PingRS has been loosened to accept Warning elements of any type, as well asError elements


    v. 2020-10  1.1    **************************************************************************************************
                       FreeRooms: major changes, since that action has completely been rewritten; the root node has been
                       changed from OTA_HotelAvailNotifRQ/RS to OTA_HotelInvCountNotifRQ/RS
                       (done by C. Gapp)

                       **************************************************************************************************
                       the CurrencyCode attribute used to be defined as non-empty string or hard-coded to "EUR"; this has
                       been changed to a generic string with 3 character in order to allow other currencies and to be
                       compatible with OTA

                       **************************************************************************************************
                       GuestRequests: added SpecialRequests for pets

                       **************************************************************************************************
                       Inventory: HotelDescriptiveContents has been expanded: ContactInfos has more content and
                       HotelInfo, Policies and AffiliationInfo are now strictly defined (they used to allow any OTA
                       content).

                       **************************************************************************************************
                       new action Activities: elements OTA_HotelPostEventNotifRQ and OTA_HotelPostEventNotifRS added


    v. 2018-10  1.3    more things changed related to the new section "Responses with a request for complete sets of data":

                       - added "11" as allowed value for the attribute Type of the Error elements

                       - made the attribute Code of the Error elements optional

                       - added Warnings element below OTA_ResRetrieveRS


    v. 2018-10  1.2    the Status attribute has been extended to all Warning elements (also the ones
                       for GuestRequests) and to Error elements; the choice of keywords has become
                       a common definition (def_send_complete)


    v. 2018-10  1.1    added Status attribute to Warning element (see section "Responses with a
                       request for complete sets of data")

                       fixed copy&paste error in enumeration of new RoomType attribute values


    v. 2018-10  1.0    **************************************************************************************************
                       allowed additional value "HTML" for attribute TextFormat in Inventory
                       HotelDescriptiveContents -> ... -> FacilityInfo -> ... -> MultimediaDescription -> ... -> Description


                       **************************************************************************************************
                       https://gitlab.com/alpinebits/developers-kit/issues/5
                       "Booking push functionality"

                       042 - GuestRequests:

                             added HotelCode and HotelName attributes to BasicPropertyInfo element
                             (this is needed to share the HotelReservation-sub-schema for
                             "GuestRequests" and "GuestRequests (Push)")

                             added new root nodes OTA_HotelResNotifRQ/OTA_HotelResNotifRS for
                             "GuestRequests (Push)" messages with a shared HotelReservation-sub-schema


                       **************************************************************************************************
                       https://gitlab.com/alpinebits/developers-kit/issues/8
                       "Extension with new room types"

                       042 - GuestRequests:
                             OTA_ResRetrieveRS -> ... -> HotelReservation > RoomStays > RoomStay > RoomTypes > RoomType {1}

                       and

                       044 - Inventory/*:
                             group name="def_hoteldescriptivecontents" -> ... -> GuestRoom -> TypeRoom

                       => Added optional RoomType attribute with possible values 1, 2, 3, 4, 5, 6, 7, 8, 9.


                       **************************************************************************************************
                       https://gitlab.com/alpinebits/developers-kit/issues/10
                       "Hotel ID transmission"

                       044 - Inventory/*
                             group name="def_hoteldescriptivecontents" -> ... -> ContactInfos

                       => defined (narrowed down) the content of the ContactInfos element


                       **************************************************************************************************
                       https://gitlab.com/alpinebits/developers-kit/issues/4
                       "Handshaking review"

                       03 - Handshake

                       => added new root elements OTA_PingRQ and OTA_PingRS


    v. 2017-10  1.1 -  RatePlans:       RatePlans > RatePlan > Offers: allow only MinLOS and MaxLOS attributes (not the forward ones too)

    v. 2017-10  1.0 -  FreeRooms:       OTA_HotelAvailNotifRQ -> UniqueID (added allowed value to attribute Type, by Luca Rainone)
                       FreeRooms:       OTA_HotelAvailNotifRQ -> AvailStatusMessages -> ...  -> StatusApplicationControl (added new mandatory attribute BookingThreshold)

                       GuestRequests:   OTA_ResRetrieveRS -> ReservationsList -> ... -> RatePlan (added element Commission)
                       GuestRequests:   OTA_ResRetrieveRS -> ReservationsList -> ... -> CardNumber (added attributes EncryptedValue and EncryptionMethod)
                       GuestRequests:   OTA_ResRetrieveRS -> ReservationsList -> ... -> RoomStay > RoomTypes (made optional)

                       SimplePackages section removed

                       Inventory has become Inventory/Basic (Push) and Inventory/HotelInfo (Push):
                                        OTA_HotelDescriptiveContentNotifRQ (major changes, one being that empty GuestRooms elements are now allowed by Luca Rainone)

                       Inventory/Basic (Pull) and Inventory/HotelInfo (Pull) added

                       RatePlans:       OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> BookingRules -> ... -> LengthOfStay (added allowed values to attribute MinMaxMessageType)
                       RatePlans:       OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> Supplements -> Supplement (added element PrerequisiteInventory)
                       RatePlans:       OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> Supplements -> Supplement -> Description (major changes)
                       RatePlans:       OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> Offers -> Offer (major changes)
                       RatePlans:       OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> Description (major changes)
                       RatePlans:       OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> ... -> BaseByGuestAmt (NumberOfGuests and Type are optional now to allow static rates)

                       BaseRates section added

    v. 2015-07b 1.4 - weaken the schema for Inventory (to prepare for upcoming release that will support Inventory deltas):

                      - the RoomAmenityCode attribute becomes optional to allow empty Amenity elements
                      - the MultimediaDescription element can be empty

    v. 2015-07b 1.3 - RatePlans > RatePlan > Description > TextFormat can now also be "HTML" (besides "PlainText")

    v. 2015-07b 1.2 - added optional attributes RatePlanID and RatePlanQualifier to RatePlan
                      for the new OTA_HotelRatePlanNotif_accept_RatePlanJoin capability

    v. 2015-07b 1.1 - added def_invTypeCode_string type (string with up to 8 chars) used for the following attributes that identify room categories:

                      FreeRooms:     OTA_HotelAvailNotifRQ -> AvailStatusMessages -> AvailStatusMessage -> StatusApplicationControl -> InvTypeCode
                      GuestRequests: OTA_ResRetrieveRS -> ReservationList -> HotelReservation -> RoomStays -> RoomStay -> RoomTypes > RoomType -> RoomTypeCode
                      Inventory:     OTA_HotelDescriptiveContentNotifRQ -> HotelDescriptiveContents -> HotelDescriptiveContent -> FacilityInfo -> GuestRooms -> GuestRoom -> Code
                      RatePlan:      OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> BookingRules -> BookingRule -> Code
                      RatePlan:      OTA_HotelRatePlanNotifRQ -> RatePlans -> RatePlan -> Rates -> Rate -> InvTypeCode

                      (derived from Lukas Braun's pull request)

    v. 2015-07b 1.0 - RatePlans > RatePlan > Rates > Rate > BaseByGuestAmts > AmountAfterTax
                      must be > 0.0 (was: >= 0.0)

     v. 2015-07 2.9 - Inventory: added a missing maxOccurs="unbounded" to the ImageItem

     v. 2015-07 2.8 - Inventory: reconciled with the definitions given in the updated document

     v. 2015-07 2.7 - changes to Inventory: removed the old Inventory, added MaxChildOccupancy to GuestRoom,
                      made some of the attributes mandatory, formating changes

     v. 2015-07 2.6 - made sub-elements of HotelReservation > ... > Customer > Address {0,1} optional

     v. 2015-07 2.5 - added a choice of 'Modify' for ResStatus

     v. 2015-07 2.4 - added MinCount attribute to Offer>>Guest

     v. 2015-07 2.3 - changes to Supplement: a few attributes are removed and many attributes are made optional

     v. 2015-07 2.2 - RatePlans/Supplements: changed format of description

     v. 2015-07 2.1 - GuestRequests: ResGuests >> Customer: attributes Gender and Language are now optional

     v. 2015-07 2.0 - allow Warnings in OTA_NotifReportRQ messages

     v. 2015-07 1.9 - GuestRequests: use CardNumber -> PlainText instead of the Remark attribute of
                      PaymentCard under Guarantee; add BasicPropertyInfo element at the end of the
                      ResGlobalInfo block for OTA-2015A compatiblity

     v. 2015-07 1.8 - added section for New Inventory (exact name pending)

     v. 2015-07 1.7 - allowed more than one HotelReservationID

     v. 2015-07 1.6 - RatePlans: allow optional PrerequisiteInventory element under Supplement element

     v. 2015-07 1.5 - Inventory: removed Amenities and added optional Room -> RoomTypeCode

     v. 2015-07 1.4 - HotelReservationID -> ResID_Type is not limited to 13 anymore

     v. 2015-07 1.3 - new section in RoomStays: Guarantee -> GuaranteesAccepted -> GuaranteeAccepted -> PaymentCard

     v. 2015-07 1.2 - new section in ResGlobalInfo: Profiles -> ProfileInfo -> Profile -> CompanyInfo

     v. 2015-07 1.1 - HotelReservation > RoomStays > RoomStay > RoomTypes > RoomType is now
                      mandatory and has a new optional attribute RoomClassificationCode

     v. 2015-07 1.0 - OTA_NotifReportRS besides Success, now also allows Error responses

     v. 2014-04 1.6 - [fixed] InvCode attribute in Supplement changed from def_int_ge0 to def_nonempty_string

     v. 2014-04 1.5 - [strictness improvement] made NumberOfGuests attribute mandatory

     v. 2014-04 1.4 - [fixed] RatePlans: optional Rate attributes RateTimeUnit and UnitMultiplier added

     v. 2014-04 1.3 - [fixed] GuestRequests: ReservationsList can be empy

     v. 2014-04 1.2 - follow-up to fix 1.1 that allowed empty AvailStatusMessages elements too
                      (reverted)

     v. 2014-04 1.1 - empty AvailStatusMessage elements in FreeRooms now allowed
                      (see https://groups.google.com/d/msg/alpinebits/B-orBE9eJCk/rKyIYbNBFNoJ )
                    - Version and TimeStamp also added to OTA_NotifReportRS
                      (see https://groups.google.com/d/msg/alpinebits/jwaPC3XAafo/yDDYCkpNPYEJ )

     v. 2014-04 1.0 - major rewrite for 2014-04

     previous changelogs:

     v. 2013-04 1.0 - the XML schema is now flattened into this single file;
                      some improvements by Martin;
                      added optional RatePlanCode attribute to RatePlan;
                      removed restrictions on the form of the ID attribute in UniqueID

     W3C XML Schema for OTA_HotelAvailNotifRQ:
     v. 2013-04 1.0 - added MessageContentCode attribute for delta messages
     v. 2012-05 1.2 - changed Thu -> Thur and Wed -> Weds for OTA compatibility
     v. 2012-05 1.1 - added optional TimeStamp attribute for OTA_HotelAvailNotifRQ to be compatible with AlpineBits 2011-11 documents
     v. 2012-05 1.0

     W3C XML Schema for OTA_HotelAvailNotifRS:
     v. 2013-04 1.0 - added warnings
     v. 2012-05 1.0

     W3C XML Schema for OTA_ReadRQ:
     v. 2012-05 1.0

     W3C XML Schema for OTA_ResRetrieveRS:
     v. 2013-04 1.0 - simplified the definition of GuestCounts for XSD conformance,
                      moved UniqueID and RatePlans elements to common to support schema flattening
     v. 2012-05 1.0

     W3C XML Schema for OTA_HotelRatePlanNotifRQ:
     v. 2013-04 1.0 - removed def_plaintext and simplified def_rate_plan to fix an issue with the parsing of the schema,
                      moved UniqueID and RatePlans elements to common
     v. 2012-05 1.2 - changed Thu -> Thur and Wed -> Weds for OTA compatibility
     v. 2012-05 1.0

     W3C XML Schema for OTA_HotelRatePlanNotifRS:
     v. 2013-04 1.0 - added warnings
     v. 2012-05 1.0
-->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           targetNamespace="http://www.opentravel.org/OTA/2003/05"
           xmlns="http://www.opentravel.org/OTA/2003/05">


  <!-- ******************************************************************************* -->
  <!-- * Handshake                                                                     -->
  <!-- ******************************************************************************* -->

  <!-- Handshake: OTA_PingRQ -->

  <xs:element name="OTA_PingRQ">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="EchoData" type="def_nonempty_string"/>
      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- Handshake: OTA_PingRS -->

  <xs:element name="OTA_PingRS">
    <xs:complexType>

      <xs:choice>

        <!-- choice: Errors -->

        <xs:sequence>
          <xs:element name="Errors">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Error" maxOccurs="99">
                  <xs:complexType mixed="true">
                    <xs:attribute name="Type" use="required">
                      <xs:simpleType>
                        <xs:restriction base="xs:string">
                          <xs:enumeration value="11"/>
                          <xs:enumeration value="13"/>
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                    <xs:attribute name="Code" type="def_int_1to999"/>
                    <xs:attribute name="Status" type="def_handshake_status"/>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>

        <!-- choice: Success + Warnings + EchoData -->

        <xs:sequence>
          <xs:element name="Success"/>
          <xs:element name="Warnings" minOccurs="0">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Warning" maxOccurs="unbounded">
                  <xs:complexType mixed="true">
                    <xs:attribute name="Type" use="required" type="def_int_1to999"/>
                    <xs:attribute name="Status" type="def_handshake_status"/>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="EchoData" type="def_nonempty_string"/>
        </xs:sequence>

      </xs:choice>

      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * Activities                                                                    -->
  <!-- ******************************************************************************* -->

  <!-- Activities: OTA_HotelPostEventNotifRQ -->

  <xs:element name="OTA_HotelPostEventNotifRQ">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="EventReports">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="EventReport" maxOccurs="99">
                <xs:complexType>
                  <xs:sequence>

                    <!-- EventSites -->
                    <xs:element name="EventSites">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="EventSite">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Event_ID">
                                  <xs:complexType>
                                    <xs:attribute name="ID" type="StringLength1to32" use="required"/>
                                    <xs:attribute name="ID_Context" type="StringLength1to32" use="required"/>
                                    <xs:attribute name="Type" use="required">
                                      <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                          <xs:enumeration value="18"/>
                                        </xs:restriction>
                                      </xs:simpleType>
                                    </xs:attribute>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                              <xs:attributeGroup ref="def_hotel_reference"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>

                    <!-- GeneralEventInfo -->
                    <xs:element name="GeneralEventInfo">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="EventContacts" minOccurs="0">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="EventContact" maxOccurs="99">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="PersonName" minOccurs="0">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="GivenName" type="StringLength1to64" minOccurs="0"/>
                                            <xs:element name="Surname" type="StringLength1to64"/>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="URL" minOccurs="0">
                                        <xs:complexType>
                                          <xs:simpleContent>
                                            <xs:extension base="def_nonempty_string">
                                              <xs:attribute name="Type" use="required">
                                                <xs:simpleType>
                                                  <xs:restriction base="xs:string">
                                                    <xs:enumeration value="Image"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                            </xs:extension>
                                          </xs:simpleContent>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="EmployeeInfo" minOccurs="0">
                                        <xs:complexType>
                                          <xs:attribute name="EmployeeId">
                                            <xs:simpleType>
                                              <xs:restriction base="xs:string">
                                                <xs:minLength value="1"/>
                                                <xs:maxLength value="16"/>
                                              </xs:restriction>
                                            </xs:simpleType>
                                          </xs:attribute>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="Role" type="StringLength1to32"/>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="AttendeeInfo" minOccurs="0">
                            <xs:complexType>
                              <xs:attribute name="TotalQuantity" use="required" type="def_int_ge0"/>
                              <xs:attribute name="PreRegisteredQuantity" use="required" type="def_int_ge0"/>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="Dates" minOccurs="0">
                            <xs:complexType>
                              <xs:sequence>
                                <!-- LatestDate/Start/End are dates or datetimes, but we cannot make a choice between the two,
                                     because XSD would need Elements to be different to distinguish the cases. -->
                                <xs:element name="Date" maxOccurs="99">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="EndDateWindow" minOccurs="0">
                                        <xs:complexType>
                                          <xs:attribute name="LatestDate" use="required" type="DateOrDateTimeType"/>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="LocationCategories" minOccurs="0">
                                        <xs:complexType>
                                          <xs:sequence>
                                            <xs:element name="Location" minOccurs="0">
                                              <xs:complexType>
                                                <xs:attribute name="AreaID" use="required" type="NumericStringLength1to8"/>
                                              </xs:complexType>
                                            </xs:element>
                                            <xs:element name="Category" maxOccurs="99">
                                              <xs:complexType>
                                                <xs:simpleContent>
                                                  <xs:extension base="def_nonempty_string">
                                                    <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                  </xs:extension>
                                                </xs:simpleContent>
                                              </xs:complexType>
                                            </xs:element>
                                          </xs:sequence>
                                        </xs:complexType>
                                      </xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="Start" use="required" type="DateOrTimeOrDateTimeType"/>
                                    <xs:attribute name="End" type="DateOrTimeOrDateTimeType"/>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="Comments" minOccurs="0">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="Comment" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="Text" minOccurs="0" maxOccurs="unbounded">
                                        <xs:complexType>
                                          <xs:simpleContent>
                                            <xs:extension base="def_nonempty_string">
                                              <xs:attribute name="Language" type="def_language_string"/>
                                            </xs:extension>
                                          </xs:simpleContent>
                                        </xs:complexType>
                                      </xs:element>
                                      <xs:element name="Image" type="def_nonempty_string" minOccurs="0" maxOccurs="unbounded"/>
                                    </xs:sequence>
                                    <xs:attribute name="Name" use="required">
                                      <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                          <xs:enumeration value="Title"/>
                                          <xs:enumeration value="Category"/>
                                          <xs:enumeration value="Gallery"/>
                                          <xs:enumeration value="Description"/>
                                        </xs:restriction>
                                      </xs:simpleType>
                                    </xs:attribute>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="Type" type="def_ota_code"/>
                        <xs:attribute name="URL" type="def_url_string"/>
                        <xs:attribute name="Acronym" type="StringLength1to32"/>
                      </xs:complexType>
                    </xs:element>

                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- Activities: OTA_HotelPostEventNotifRS -->

  <xs:element name="OTA_HotelPostEventNotifRS">
    <xs:complexType>
      <xs:group ref="def_generic_response"/>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * FreeRooms                                                                     -->
  <!-- ******************************************************************************* -->

  <!-- FreeRooms: OTA_HotelInvCountNotifRQ -->

  <xs:element name="OTA_HotelInvCountNotifRQ">
    <xs:complexType>
      <xs:sequence>

        <!-- UniqueID {0,1} -->

        <xs:element name="UniqueID" minOccurs="0">
          <xs:complexType>
            <xs:attribute name="Type" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="16"/>
                  <xs:enumeration value="35"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="ID" use="required" type="StringLength1to32"/> <!-- an ID is required by OTA, we ignore the value -->
            <xs:attribute name="Instance" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="CompleteSet"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>

        <!-- Inventories {1} -->

        <xs:element name="Inventories">
          <xs:complexType>
            <xs:sequence>

              <!-- Inventories > Inventory (1,} -->

              <xs:element name="Inventory" maxOccurs="unbounded">
                <xs:complexType>

                  <!-- Inventories > Inventory > StatusApplicationControl {0,1} -->

                  <xs:sequence>
                    <xs:element name="StatusApplicationControl" minOccurs="0">
                      <xs:complexType>
                        <xs:attribute name="Start" use="required" type="def_date"/>
                        <xs:attribute name="End" use="required" type="def_date"/>
                        <xs:attribute name="InvTypeCode" type="def_invTypeCode_string"/>
                        <xs:attribute name="InvCode" type="StringLength1to16"/>
                        <xs:attribute name="AllInvCode" type="def_bool"/>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="InvCounts" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="InvCount" maxOccurs="3">
                            <xs:complexType>
                              <xs:attribute name="CountType" use="required">
                                <xs:simpleType>
                                  <xs:restriction base="xs:string">
                                    <xs:enumeration value="2"/>
                                    <xs:enumeration value="6"/>
                                    <xs:enumeration value="9"/>
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:attribute>

                              <xs:attribute name="Count" use="required" type="def_int_ge0"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attributeGroup ref="def_hotel_reference"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- FreeRooms: OTA_HotelInvCountNotifRS -->

  <xs:element name="OTA_HotelInvCountNotifRS">
    <xs:complexType>
      <xs:group ref="def_generic_response"/>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * GuestRequests                                                                 -->
  <!-- ******************************************************************************* -->

  <!-- GuestRequests (push): OTA_HotelResNotifRQ -->

  <xs:element name="OTA_HotelResNotifRQ">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="HotelReservations">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="def_hotelreservation"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- GuestRequests (push): OTA_HotelResNotifRS -->

  <xs:element name="OTA_HotelResNotifRS">
    <xs:complexType>
      <xs:sequence>

        <xs:choice>

          <!-- choice: Errors {1} -->

          <xs:group ref="def_errors"/>

          <!-- choice: Success {1} + Warnings {0,1} + HotelReservations {0,1} -->

          <xs:sequence>

            <xs:element name="Success"/>
            <xs:group ref="def_detailed_warnings"/>

            <xs:element name="HotelReservations" minOccurs="0">
              <xs:complexType>
                <xs:sequence>

                  <xs:element name="HotelReservation" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="UniqueID">
                          <xs:complexType>
                            <xs:attribute name="Type" use="required">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="14"/>
                                  <xs:enumeration value="15"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                            <xs:attribute name="ID" use="required" type="StringLength1to32"/>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>

        </xs:choice>

      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- GuestRequests: OTA_ReadRQ -->

  <xs:element name="OTA_ReadRQ">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="ReadRequests">
          <xs:complexType>
            <xs:sequence>

              <xs:element name="HotelReadRequest">
                <xs:complexType>
                  <xs:sequence>

                    <xs:element name="SelectionCriteria" minOccurs="0">
                      <xs:complexType>
                        <xs:attribute name="Start" use="required" type="def_datetime"/>
                      </xs:complexType>
                    </xs:element>

                  </xs:sequence>
                  <xs:attributeGroup ref="def_hotel_reference"/>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- GuestRequests: OTA_ResRetrieveRS -->

  <xs:element name="OTA_ResRetrieveRS">
    <xs:complexType>

      <xs:choice>

        <!-- choice: Errors {1} -->

        <xs:group ref="def_errors"/>

        <!-- choice: Success {1} + Warnings {0,1} + ReservationsList {1} -->

        <xs:sequence>

          <xs:element name="Success"/>
          <xs:group ref="def_warnings"/>

          <xs:element name="ReservationsList">
            <xs:complexType>
              <xs:sequence>
                <xs:group ref="def_hotelreservation" minOccurs="0"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>

        </xs:sequence>

      </xs:choice>

      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- GuestRequests: OTA_NotifReportRQ -->

  <xs:element name="OTA_NotifReportRQ">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="Success"/>

        <xs:group ref="def_detailed_warnings"/>

        <xs:element name="NotifDetails" minOccurs="0">
          <xs:complexType>
            <xs:sequence>

              <xs:element name="HotelNotifReport">
                <xs:complexType>
                  <xs:sequence>

                    <xs:element name="HotelReservations">
                      <xs:complexType>
                        <xs:sequence>

                          <xs:element name="HotelReservation" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:sequence>

                                <xs:element name="UniqueID">
                                  <xs:complexType>
                                    <xs:attribute name="Type" use="required">
                                      <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                          <xs:enumeration value="14"/>
                                          <xs:enumeration value="15"/>
                                        </xs:restriction>
                                      </xs:simpleType>
                                    </xs:attribute>
                                    <xs:attribute name="ID" use="required" type="StringLength1to32"/>
                                  </xs:complexType>
                                </xs:element>

                                <xs:element name="ResGlobalInfo" minOccurs="0">
                                  <xs:complexType>
                                    <xs:sequence>

                                      <xs:element name="BasicPropertyInfo">
                                        <xs:complexType>
                                          <xs:attributeGroup ref="def_hotel_reference"/>
                                        </xs:complexType>
                                      </xs:element>

                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>

                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>

                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>

                  </xs:sequence>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- GuestRequests: OTA_NotifReportRS -->

  <xs:element name="OTA_NotifReportRS">
    <xs:complexType>
      <xs:group ref="def_generic_response"/>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * Inventory/Basic (Push) and Inventory/HotelInfo (Push)                         -->
  <!-- ******************************************************************************* -->

  <!-- Inventory: OTA_HotelDescriptiveContentNotifRQ -->

  <xs:element name="OTA_HotelDescriptiveContentNotifRQ">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="def_hoteldescriptivecontents"/>
      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- Inventory: OTA_HotelDescriptiveContentNotifRS -->

  <xs:element name="OTA_HotelDescriptiveContentNotifRS">
    <xs:complexType>
      <xs:group ref="def_generic_response"/>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * Inventory/Basic (Pull) and Inventory/HotelInfo (Pull)                         -->
  <!-- ******************************************************************************* -->

  <!-- Inventory: OTA_HotelDescriptiveInfoRQ -->

  <xs:element name="OTA_HotelDescriptiveInfoRQ">
    <xs:complexType>
      <xs:sequence>

        <xs:element name="HotelDescriptiveInfos">
          <xs:complexType>
            <xs:sequence>

              <xs:element name="HotelDescriptiveInfo">
                <xs:complexType>
                  <xs:attributeGroup ref="def_hotel_reference"/>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- Inventory: OTA_HotelDescriptiveInfoRS -->

  <xs:element name="OTA_HotelDescriptiveInfoRS">
    <xs:complexType>

      <xs:choice>

        <!-- choice: Errors {1} -->

        <xs:group ref="def_errors"/>

        <!-- choice: Success {1} + Warnings {0, } + HotelDescriptiveContents {1} -->

        <xs:sequence>
          <xs:element name="Success"/>
          <xs:group ref="def_warnings"/>

          <xs:group ref="def_hoteldescriptivecontents"/>
        </xs:sequence>

      </xs:choice>

      <xs:attributeGroup ref="def_version_timestamp"/>

    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * RatePlans                                                                     -->
  <!-- ******************************************************************************* -->

  <!-- RatePlans: OTA_HotelRatePlanNotifRQ -->

  <xs:element name="OTA_HotelRatePlanNotifRQ">
    <xs:complexType>
      <xs:sequence>

        <!-- UniqueID {0,1} -->

        <xs:element name="UniqueID" minOccurs="0">
          <xs:complexType>
            <xs:attribute name="Type" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="16"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="ID" use="required" type="StringLength1to32"/> <!-- an ID is required by OTA, we ignore the value -->
            <xs:attribute name="Instance" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="CompleteSet"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>

        <!-- RatePlans {1} -->

        <xs:group ref="def_rateplans"/>

      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>

  <!-- RatePlans: OTA_HotelRatePlanNotifRS -->

  <xs:element name="OTA_HotelRatePlanNotifRS">
    <xs:complexType>
      <xs:group ref="def_generic_response"/>
      <xs:attributeGroup ref="def_version_timestamp"/>
    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * BaseRates                                                                     -->
  <!-- ******************************************************************************* -->

  <!-- BaseRates: OTA_HotelRatePlanRQ -->

  <xs:element name="OTA_HotelRatePlanRQ">
    <xs:complexType>
      <xs:sequence>

        <!-- RatePlans {1} -->

        <xs:element name="RatePlans">
          <xs:complexType>
            <xs:sequence>

              <!-- RatePlans > RatePlan {1} -->

              <xs:element name="RatePlan">
                <xs:complexType>
                  <xs:sequence>

                    <!-- the sub-elements documented in section 4.5.1, given in order;
                         same order as OTA2015A, which has DestinationSystemsCode and
                         Offers in between and does not require HotelRef -->

                    <xs:element name="DateRange" minOccurs="0">
                      <xs:complexType>
                        <xs:attribute name="Start" type="def_date"/>
                        <xs:attribute name="End" type="def_date"/>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="RatePlanCandidates" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="RatePlanCandidate" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:attribute name="RatePlanCode" type="StringLength1to16"/>
                              <xs:attribute name="RatePlanID" type="StringLength1to64"/>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>

                    <xs:element name="HotelRef">
                      <xs:complexType>
                        <xs:attributeGroup ref="def_hotel_reference"/>
                      </xs:complexType>
                    </xs:element>

                  </xs:sequence>
                </xs:complexType>
              </xs:element>

            </xs:sequence>
          </xs:complexType>
        </xs:element>

      </xs:sequence>
      <xs:attributeGroup ref="def_version_timestamp"/>

    </xs:complexType>
  </xs:element>

  <!-- BaseRates: OTA_HotelRatePlanRS -->

  <xs:element name="OTA_HotelRatePlanRS">
    <xs:complexType>

      <xs:choice>

        <!-- choice: Errors {1} -->

        <xs:group ref="def_errors"/>

        <!-- choice: Success {1} + Warnings {0, } + RatePlans {1} -->

        <xs:sequence>
          <xs:element name="Success"/>
          <xs:group ref="def_warnings"/>

          <xs:group ref="def_rateplans"/>
        </xs:sequence>

      </xs:choice>
      <xs:attributeGroup ref="def_version_timestamp"/>

    </xs:complexType>
  </xs:element>


  <!-- ******************************************************************************* -->
  <!-- * common definition of HotelReservation used in GuestRequests                   -->
  <!-- ******************************************************************************* -->

  <xs:group name="def_hotelreservation">
    <xs:sequence>

      <!-- HotelReservation {1,} (the group is referenced with minOccurs="0" where an empty list is meant) -->

      <xs:element name="HotelReservation" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>

            <!-- HotelReservation > UniqueID {1} -->

            <xs:element name="UniqueID">
              <xs:complexType>
                <xs:attribute name="Type" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="14"/>
                      <xs:enumeration value="15"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="ID" use="required" type="StringLength1to32"/>
              </xs:complexType>
            </xs:element>

            <!-- HotelReservation > RoomStays {0,1} -->

            <xs:element name="RoomStays" minOccurs="0">
              <xs:complexType>
                <xs:sequence>

                  <!-- HotelReservation > RoomStays > RoomStay {1,} -->

                  <xs:element name="RoomStay" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>

                        <!-- HotelReservation > RoomStays > RoomStay > RoomTypes {0,1} -->

                        <xs:element name="RoomTypes" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>

                              <!-- HotelReservation > RoomStays > RoomStay > RoomTypes > RoomType {1} -->

                              <xs:element name="RoomType">
                                <xs:complexType>
                                  <xs:attribute name="RoomTypeCode" type="def_invTypeCode_string"/>
                                  <xs:attribute name="RoomClassificationCode" type="def_int_0to999"/>
                                  <xs:attribute name="RoomType">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="1"/>
                                        <xs:enumeration value="2"/>
                                        <xs:enumeration value="3"/>
                                        <xs:enumeration value="4"/>
                                        <xs:enumeration value="5"/>
                                        <xs:enumeration value="6"/>
                                        <xs:enumeration value="7"/>
                                        <xs:enumeration value="8"/>
                                        <xs:enumeration value="9"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > RatePlans {0,1} -->

                        <xs:element name="RatePlans" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>

                              <!-- HotelReservation > RoomStays > RoomStay > RatePlans > RatePlan {1} -->

                              <xs:element name="RatePlan">
                                <xs:complexType>
                                  <xs:sequence>

                                    <!-- HotelReservation > RoomStays > RoomStay > RatePlans > RatePlan > Commission {0,1} -->

                                    <xs:element name="Commission" minOccurs="0">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="CommissionPayableAmount" minOccurs="0">
                                            <xs:complexType>
                                              <xs:attribute name="Amount" type="def_decimal_ge0"/>
                                              <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="Percent" type="def_int_0to100"/>
                                      </xs:complexType>
                                    </xs:element>

                                    <!-- HotelReservation > RoomStays > RoomStay > RatePlans > RatePlan > MealsIncluded {0,1} -->

                                    <xs:element name="MealsIncluded" minOccurs="0">
                                      <xs:complexType>
                                        <xs:attribute name="MealPlanIndicator" use="required">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="1"/>
                                              <xs:enumeration value="true"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="MealPlanCodes" use="required">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="1"/>
                                              <xs:enumeration value="3"/>
                                              <xs:enumeration value="10"/>
                                              <xs:enumeration value="12"/>
                                              <xs:enumeration value="14"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                  <xs:attribute name="RatePlanCode" type="StringLength1to16"/>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > RoomRates {0,1} -->

                        <xs:element name="RoomRates" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>

                              <!-- HotelReservation > RoomStays > RoomStay > RoomRates > RoomRate {1} -->

                              <xs:element name="RoomRate">
                                <xs:complexType>
                                  <xs:sequence>

                                    <!-- HotelReservation > RoomStays > RoomStay > RoomRates > RoomRate > Rates {1} -->

                                    <xs:element name="Rates">
                                      <xs:complexType>
                                        <xs:sequence>

                                          <!-- HotelReservation > RoomStays > RoomStay > RoomRates > RoomRate > Rates > Rate {1,} -->

                                          <xs:element name="Rate" maxOccurs="unbounded">
                                            <xs:complexType>
                                              <xs:sequence>

                                                <!-- HotelReservation > RoomStays > RoomStay > RoomRates > RoomRate > Rates > Rate > Base {1} -->

                                                <xs:element name="Base" maxOccurs="1">
                                                  <xs:complexType>
                                                    <xs:attribute name="AmountAfterTax" type="def_decimal_gt0"/>
                                                    <xs:attribute name="CurrencyCode"   type="def_three_char_string"/>
                                                  </xs:complexType>
                                                </xs:element>

                                              </xs:sequence>

                                              <xs:attribute name="EffectiveDate" use="required" type="def_date"/>
                                              <xs:attribute name="ExpireDate" type="def_date"/>
                                              <xs:attribute name="ExpireDateExclusiveInd" type="def_bool"/>
                                              <xs:attribute name="RateTimeUnit">
                                                <xs:simpleType>
                                                  <xs:restriction base="xs:string">
                                                    <xs:enumeration value="Day"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                              <xs:attribute name="UnitMultiplier" type="def_int_gt0"/>
                                            </xs:complexType>
                                          </xs:element>

                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                  <xs:attribute name="RatePlanCode" use="required" type="StringLength1to16"/>
                                  <xs:attribute name="RoomTypeCode" use="required" type="def_invTypeCode_string"/>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > GuestCounts {0,1} -->

                        <xs:element name="GuestCounts" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>

                              <!-- HotelReservation > RoomStays > RoomStay > GuestCounts > GuestCount {1,} -->

                              <xs:element name="GuestCount" maxOccurs="99">
                                <xs:complexType>
                                  <xs:attribute name="Count" use="required" type="def_int_1to999"/>
                                  <xs:attribute name="Age" type="def_int_0to999"/>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > TimeSpan {1} -->

                        <xs:element name="TimeSpan">
                          <xs:complexType>
                            <xs:sequence>

                              <!-- HotelReservation > RoomStays > RoomStay > TimeSpan > StartDateWindow {0,1} -->

                              <xs:element name="StartDateWindow" minOccurs="0">
                                <xs:complexType>
                                  <xs:attribute name="EarliestDate" use="required" type="def_date"/>
                                  <xs:attribute name="LatestDate" use="required" type="def_date"/>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                            <xs:attribute name="Start" type="def_date"/>
                            <xs:attribute name="End" type="def_date"/>
                            <xs:attribute name="Duration">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:pattern value="P[0-9]+N"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > Guarantee {0,1} -->

                        <xs:element name="Guarantee" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="GuaranteesAccepted">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="GuaranteeAccepted">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="PaymentCard" type="PaymentCardType"/>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > Total {0,1} -->

                        <xs:element name="Total" minOccurs="0">
                          <xs:complexType>
                            <xs:attribute name="AmountAfterTax" use="required" type="def_decimal_ge0"/>
                            <xs:attribute name="CurrencyCode" use="required" type="def_three_char_string"/>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelReservation > RoomStays > RoomStay > ResGuestRPHs {0,1} -->
                        <xs:element name="ResGuestRPHs" type="ListOfRPH" minOccurs="0"/>

                        <!-- HotelReservation > RoomStays > RoomStay > ServiceRPHs {0,1} -->
                        <xs:element name="ServiceRPHs" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="ServiceRPH" maxOccurs="unbounded">
                                <xs:complexType>
                                  <xs:attribute name="RPH" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:pattern value="[0-9]{1,8}"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                      <xs:attribute name="RoomStayGroupID" type="StringLength1to32"/>
                    </xs:complexType>
                  </xs:element>

                </xs:sequence>
              </xs:complexType>
            </xs:element>

            <!-- HotelReservation > Services {0,1} -->

            <xs:element name="Services" minOccurs="0">
              <xs:complexType>
                <xs:sequence>

                  <!-- HotelReservation > Services > Service {1,} -->

                  <xs:element name="Service" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="ServiceDetails">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="GuestCounts" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="GuestCount" maxOccurs="99">
                                      <xs:complexType>
                                        <xs:attribute name="Age" type="def_int_1to999"/>
                                        <xs:attribute name="Count" type="def_int_1to999" use="required"/>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element name="TimeSpan" minOccurs="0">
                                <xs:complexType>
                                  <xs:attribute name="Start" type="DateOrTimeOrDateTimeType" use="required"/>
                                  <xs:attribute name="End" type="DateOrTimeOrDateTimeType"/>
                                </xs:complexType>
                              </xs:element>
                              <xs:element name="Comments" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Comment">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="Text">
                                            <xs:complexType>
                                              <xs:simpleContent>
                                                <xs:extension base="def_nonempty_string">
                                                  <xs:attribute name="TextFormat" use="required">
                                                    <xs:simpleType>
                                                      <xs:restriction base="xs:string">
                                                        <xs:enumeration value="PlainText"/>
                                                      </xs:restriction>
                                                    </xs:simpleType>
                                                  </xs:attribute>
                                                </xs:extension>
                                              </xs:simpleContent>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element name="Total">
                                <xs:complexType>
                                  <xs:attribute name="AmountAfterTax" use="required" type="def_decimal_ge0"/>
                                  <xs:attribute name="CurrencyCode" use="required" type="def_three_char_string"/>
                                </xs:complexType>
                              </xs:element>
                              <xs:element name="ServiceDescription" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Text">
                                      <xs:complexType>
                                        <xs:simpleContent>
                                          <xs:extension base="def_nonempty_string">
                                            <xs:attribute name="TextFormat" use="required">
                                              <xs:simpleType>
                                                <xs:restriction base="xs:string">
                                                  <xs:enumeration value="PlainText"/>
                                                </xs:restriction>
                                              </xs:simpleType>
                                            </xs:attribute>
                                          </xs:extension>
                                        </xs:simpleContent>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="ID" use="required" type="def_one_to_thirty_two_chars_string"/>
                      <xs:attribute name="Type" use="required">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <xs:enumeration value="16"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                      <xs:attribute name="ServiceCategoryCode" use="required">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <xs:enumeration value="BOARD"/>
                            <xs:enumeration value="SUPPLEMENT"/>
                            <xs:enumeration value="SPA"/>
                            <xs:enumeration value="FOOD"/>
                            <xs:enumeration value="BEVERAGE"/>
                            <xs:enumeration value="ACTIVITY"/>
                            <xs:enumeration value="TOURISTTAX"/>
                            <xs:enumeration value="TRANSFER"/>
                            <xs:enumeration value="PACKAGE"/>
                            <xs:enumeration value="RESOURCE"/>
                            <xs:enumeration value="OTHER"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                      <xs:attribute name="ServiceInventoryCode" type="def_one_to_sixteen_chars_string" use="required"/>
                      <xs:attribute name="ServiceRPH">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <xs:pattern value="[0-9]{1,8}"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                      <xs:attribute name="ServicePricingType" use="required">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <xs:enumeration value="Per night"/>
                            <xs:enumeration value="Per person"/>
                            <xs:enumeration value="Per person per night"/>
                            <xs:enumeration value="Per stay"/>
                            <xs:enumeration value="Per use"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                      <xs:attribute name="Inclusive" type="xs:boolean" use="required"/>
                      <xs:attribute name="Quantity" type="def_int_1to999" use="required"/>
                    </xs:complexType>
                  </xs:element>

                </xs:sequence>
              </xs:complexType>
            </xs:element>

            <!-- HotelReservation > ResGuests {0, 1} -->

            <xs:element name="ResGuests" minOccurs="0">
              <xs:complexType>
                <xs:sequence>

                  <!-- HotelReservation > ResGuests > ResGuest {1,} -->

                  <xs:element name="ResGuest" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Profiles">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="ProfileInfo">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Profile">
                                      <xs:complexType>
                                        <xs:sequence>

                                          <!-- HotelReservation > ... > Customer {1} -->

                                          <xs:element name="Customer" type="CustomerType"/>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="ResGuestRPH" type="RPH_Type"/>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>

            <!-- HotelReservation > ResGlobalInfo {0,1} -->

            <xs:element name="ResGlobalInfo" minOccurs="0">
              <xs:complexType>
                <xs:sequence>

                  <!-- HotelReservation > ResGlobalInfo > Comments {0,1} -->

                  <xs:element name="Comments" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <!-- HotelReservation > ResGlobalInfo > Comment {1,2} -->

                        <xs:element name="Comment" maxOccurs="3">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:choice>

                                <xs:element name="ListItem" minOccurs="0" maxOccurs="unbounded">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="def_nonempty_string">
                                        <xs:attribute name="ListItem" use="required" type="def_int_ge0"/>
                                        <xs:attribute name="Language" use="required" type="def_language_string"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>

                                <xs:element name="Text" minOccurs="0" type="def_nonempty_string"/>

                              </xs:choice>
                            </xs:sequence>
                            <xs:attribute name="Name" use="required">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="included services"/>
                                  <xs:enumeration value="customer comment"/>
                                  <xs:enumeration value="additional info"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- HotelReservation > ResGlobalInfo > SpecialRequests {0,1} -->

                  <xs:element name="SpecialRequests" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SpecialRequest" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Text" minOccurs="0">
                                <xs:complexType>
                                  <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                      <xs:attribute name="TextFormat" use="required">
                                        <xs:simpleType>
                                          <xs:restriction base="xs:string">
                                            <xs:enumeration value="PlainText"/>
                                          </xs:restriction>
                                        </xs:simpleType>
                                      </xs:attribute>
                                    </xs:extension>
                                  </xs:simpleContent>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                            <xs:attribute name="RequestCode" use="required" type="StringLength1to16"/>
                            <xs:attribute name="CodeContext" use="required">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="ALPINEBITS"/>
                                  <xs:enumeration value="HOTEL"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- HotelReservation > ResGlobalInfo > DepositPayments {0,1} -->

                  <xs:element name="DepositPayments" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="GuaranteePayment" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="AcceptedPayments">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="AcceptedPayment">
                                      <xs:complexType>
                                        <xs:choice>
                                          <xs:element name="PaymentCard" type="PaymentCardType" minOccurs="0"/>
                                          <xs:element name="BankAcct" minOccurs="0">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="BankAcctName" type="StringLength1to64" minOccurs="0"/>
                                                <xs:element name="BankAcctNumber">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element name="PlainText" type="StringLength1to64"/>
                                                    </xs:sequence>
                                                    <xs:attribute name="Mask">
                                                      <xs:simpleType>
                                                        <xs:restriction base="xs:string">
                                                          <xs:pattern value="[0-9a-zA-Z]{1,32}"/>
                                                        </xs:restriction>
                                                      </xs:simpleType>
                                                    </xs:attribute>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element name="Voucher" minOccurs="0">
                                            <xs:complexType>
                                              <xs:attribute name="ElectronicIndicator" use="required">
                                                <xs:simpleType>
                                                  <xs:restriction base="xs:boolean">
                                                    <xs:pattern value="1|true"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                              <xs:attribute name="Identifier" type="StringLength1to64" use="required"/>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:choice>
                                        <xs:attribute name="GuaranteeTypeCode">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="3"/>
                                              <xs:enumeration value="28"/>
                                              <xs:enumeration value="46"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="GuaranteeID" type="StringLength1to64"/>
                                        <xs:attribute name="PaymentTransactionTypeCode">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="charge"/>
                                              <xs:enumeration value="reserve"/>
                                              <xs:enumeration value="refund"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element name="AmountPercent" minOccurs="0">
                                <xs:complexType>
                                  <xs:attribute name="Amount" use="required" type="def_decimal_gt0"/>
                                  <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                            <xs:attribute name="Start" type="def_datetime"/>
                            <xs:attribute name="GuaranteeCode" type="StringLength1to32"/>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- HotelReservation > ResGlobalInfo > CancelPenalties {0,1} -->

                  <xs:element name="CancelPenalties" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="CancelPenalty">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="PenaltyDescription">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Text" type="def_nonempty_string"/>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- HotelReservation > ResGlobalInfo > HotelReservationIDs {0,1} -->

                  <xs:element name="HotelReservationIDs" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="HotelReservationID" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:attribute name="ResID_Type" use="required" type="def_int_1to999"/>
                            <xs:attribute name="ResID_Value" type="StringLength1to64"/>
                            <xs:attribute name="ResID_Source" type="StringLength1to64"/>
                            <xs:attribute name="ResID_SourceContext" type="StringLength1to64"/>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- HotelReservation > ResGlobalInfo > Profiles {0,1} -->

                  <xs:element name="Profiles" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <!-- HotelReservation > ResGlobalInfo > Profiles > ProfileInfo {1,3} -->

                        <xs:element name="ProfileInfo" type="ProfileInfoType" maxOccurs="3"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <xs:element name="BasicPropertyInfo">
                    <xs:complexType>
                      <xs:attributeGroup ref="def_hotel_reference"/>
                    </xs:complexType>
                  </xs:element>

                </xs:sequence>
              </xs:complexType>
            </xs:element>

          </xs:sequence>
          <xs:attribute name="CreateDateTime" use="required" type="def_datetime"/>
          <xs:attribute name="LastModifyDateTime" type="def_datetime"/>
          <xs:attribute name="ResStatus" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="Requested"/>
                <xs:enumeration value="Reserved"/>
                <xs:enumeration value="Cancelled"/>
                <xs:enumeration value="Modify"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="RoomStayReservation" type="def_bool"/>
        </xs:complexType>
      </xs:element>

    </xs:sequence>
  </xs:group>


  <!-- ******************************************************************************* -->
  <!-- * common definition for HotelDescriptiveContents element as used                -->
  <!-- * in the Inventory types Inventory/HotelInfo (Push) and Inventory/Basic (Push)  -->
  <!-- ******************************************************************************* -->

  <xs:group name="def_hoteldescriptivecontents">
    <xs:sequence>

      <xs:element name="HotelDescriptiveContents">
        <xs:complexType>
          <xs:sequence>

            <xs:element name="HotelDescriptiveContent">
              <xs:complexType>
                <xs:sequence>

                  <!-- HotelInfo (Inventory/HotelInfo (push)) -->
                  <xs:element name="HotelInfo" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <!-- HotelInfo > CategoryCodes -->
                        <xs:element name="CategoryCodes" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="HotelCategory">
                                <xs:complexType>
                                  <xs:attribute name="Code" type="def_ota_code"/>
                                  <xs:attribute name="CodeDetail" use="required" type="StringLength1to128"/>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelInfo > Descriptions  -->
                        <xs:element name="Descriptions" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="MultimediaDescriptions">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="MultimediaDescription" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:choice>
                                          <xs:element name="TextItems" minOccurs="0">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="TextItem" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element name="Description" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                          <xs:simpleContent>
                                                            <xs:extension base="def_nonempty_string">
                                                              <xs:attribute name="TextFormat" use="required">
                                                                <xs:simpleType>
                                                                  <xs:restriction base="xs:string">
                                                                    <xs:enumeration value="PlainText"/>
                                                                    <xs:enumeration value="HTML"/>
                                                                  </xs:restriction>
                                                                </xs:simpleType>
                                                              </xs:attribute>
                                                              <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                            </xs:extension>
                                                          </xs:simpleContent>
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                    <xs:attribute name="SourceID" type="StringLength1to32"/>
                                                    <xs:attribute name="CopyrightNotice" type="StringLength1to64"/>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element name="ImageItems" minOccurs="0">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="ImageItem" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element name="ImageFormat">
                                                        <xs:complexType>
                                                          <xs:sequence>
                                                            <xs:element name="URL" type="def_url_string"/>
                                                          </xs:sequence>
                                                          <xs:attribute name="CopyrightNotice" type="StringLength1to64"/>
                                                          <xs:attribute name="SourceID" type="StringLength1to32"/>
                                                          <xs:attribute name="Title" type="StringLength1to64"/>
                                                          <xs:attribute name="ApplicableStart">
                                                            <xs:simpleType>
                                                              <xs:restriction base="xs:string">
                                                                <xs:pattern value="--[0-1][0-9]-[0-3][0-9]"/>
                                                              </xs:restriction>
                                                            </xs:simpleType>
                                                          </xs:attribute>
                                                          <xs:attribute name="ApplicableEnd">
                                                            <xs:simpleType>
                                                              <xs:restriction base="xs:string">
                                                                <xs:pattern value="--[0-1][0-9]-[0-3][0-9]"/>
                                                              </xs:restriction>
                                                            </xs:simpleType>
                                                          </xs:attribute>
                                                        </xs:complexType>
                                                      </xs:element>
                                                      <xs:element name="Description" minOccurs="0" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                          <xs:simpleContent>
                                                            <xs:extension base="def_nonempty_string">
                                                              <xs:attribute name="TextFormat" use="required">
                                                                <xs:simpleType>
                                                                  <xs:restriction base="xs:string">
                                                                    <xs:enumeration value="PlainText"/>
                                                                    <xs:enumeration value="HTML"/>
                                                                  </xs:restriction>
                                                                </xs:simpleType>
                                                              </xs:attribute>
                                                              <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                            </xs:extension>
                                                          </xs:simpleContent>
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                    <xs:attribute name="Category" use="required">
                                                      <xs:simpleType>
                                                        <xs:restriction base="def_int_gt0">
                                                          <xs:enumeration value="1"/>
                                                          <xs:enumeration value="2"/>
                                                          <xs:enumeration value="4"/>
                                                          <xs:enumeration value="12"/>
                                                          <xs:enumeration value="15"/>
                                                          <xs:enumeration value="22"/>
                                                        </xs:restriction>
                                                      </xs:simpleType>
                                                    </xs:attribute>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element name="VideoItems" minOccurs="0">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="VideoItem" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element name="VideoFormat">
                                                        <xs:complexType>
                                                          <xs:sequence>
                                                            <xs:element name="URL" type="def_url_string"/>
                                                          </xs:sequence>
                                                          <xs:attribute name="CopyrightNotice" type="StringLength1to64"/>
                                                          <xs:attribute name="SourceID" type="StringLength1to32"/>
                                                          <xs:attribute name="Title" type="StringLength1to64"/>
                                                          <xs:attribute name="ApplicableStart">
                                                            <xs:simpleType>
                                                              <xs:restriction base="xs:string">
                                                                <xs:pattern value="[0-1][0-9]-[0-3][0-9]"/>
                                                              </xs:restriction>
                                                            </xs:simpleType>
                                                          </xs:attribute>
                                                        </xs:complexType>
                                                      </xs:element>
                                                      <xs:element name="Description" minOccurs="0" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                          <xs:simpleContent>
                                                            <xs:extension base="def_nonempty_string">
                                                              <xs:attribute name="TextFormat" use="required">
                                                                <xs:simpleType>
                                                                  <xs:restriction base="xs:string">
                                                                    <xs:enumeration value="PlainText"/>
                                                                    <xs:enumeration value="HTML"/>
                                                                  </xs:restriction>
                                                                </xs:simpleType>
                                                              </xs:attribute>
                                                              <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                            </xs:extension>
                                                          </xs:simpleContent>
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                    <xs:attribute name="Category" use="required">
                                                      <xs:simpleType>
                                                        <xs:restriction base="def_int_gt0">
                                                          <xs:enumeration value="1"/>
                                                          <xs:enumeration value="2"/>
                                                          <xs:enumeration value="4"/>
                                                          <xs:enumeration value="12"/>
                                                          <xs:enumeration value="20"/>
                                                          <xs:enumeration value="22"/>
                                                        </xs:restriction>
                                                      </xs:simpleType>
                                                    </xs:attribute>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:choice>
                                        <xs:attribute name="InfoCode">
                                          <xs:simpleType>
                                            <xs:restriction base="def_int_gt0">
                                              <xs:enumeration value="1"/>
                                              <xs:enumeration value="17"/>
                                              <xs:enumeration value="23"/>
                                              <xs:enumeration value="24"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelInfo > Position -->
                        <xs:element name="Position" minOccurs="0">
                          <xs:complexType>
                            <xs:attribute name="Altitude" type="def_coordinate"/>
                            <xs:attribute name="AltitudeUnitOfMeasureCode">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="3"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                            <xs:attribute name="Latitude" type="def_coordinate"/>
                            <xs:attribute name="Longitude" type="def_coordinate"/>
                          </xs:complexType>
                        </xs:element>

                        <!-- HotelInfo > Services -->
                        <xs:element name="Services" minOccurs="0">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Service" maxOccurs="unbounded">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Features" minOccurs="0">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="Feature" maxOccurs="unbounded">
                                            <xs:complexType>
                                              <xs:attribute name="AccessibleCode" use="required" type="def_int_1to999"/>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                  <xs:attribute name="Code" use="required" type="def_alpinebits_code"/>
                                  <xs:attribute name="MealPlanCode">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="12"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="ProximityCode" type="def_int_1to999"/>
                                  <xs:attribute name="Included" type="def_bool"/>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                      <xs:attribute name="HotelStatusCode" type="def_int_1to999"/>
                    </xs:complexType>
                  </xs:element>

                  <!-- FacilityInfo (Inventory/Basic (push))  -->
                  <xs:element name="FacilityInfo" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="GuestRooms">
                          <xs:complexType>
                            <xs:sequence>

                              <xs:element name="GuestRoom" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="TypeRoom">
                                      <xs:complexType>
                                        <xs:attribute name="StandardOccupancy" type="def_int_gt0"/>
                                        <xs:attribute name="RoomClassificationCode" type="def_int_0to999"/>
                                        <xs:attribute name="RoomID" type="StringLength1to16"/>
                                        <xs:attribute name="Size" type="def_int_ge0"/>
                                        <xs:attribute name="RoomType">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="1"/>
                                              <xs:enumeration value="2"/>
                                              <xs:enumeration value="3"/>
                                              <xs:enumeration value="4"/>
                                              <xs:enumeration value="5"/>
                                              <xs:enumeration value="6"/>
                                              <xs:enumeration value="7"/>
                                              <xs:enumeration value="8"/>
                                              <xs:enumeration value="9"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>

                                    <xs:element name="Amenities" minOccurs="0">
                                      <xs:complexType>
                                        <xs:sequence>

                                          <xs:element name="Amenity" maxOccurs="unbounded">
                                            <xs:complexType>
                                              <xs:attribute name="RoomAmenityCode" type="def_alpinebits_code"/>
                                            </xs:complexType>
                                          </xs:element>

                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>

                                    <xs:element name="MultimediaDescriptions" minOccurs="0">
                                      <xs:complexType>
                                        <xs:sequence>

                                          <xs:element name="MultimediaDescription" maxOccurs="unbounded">
                                            <xs:complexType>
                                              <xs:choice>

                                                <xs:element name="TextItems" minOccurs="0">
                                                  <xs:complexType>
                                                    <xs:sequence>

                                                      <xs:element name="TextItem">
                                                        <xs:complexType>
                                                          <xs:sequence>

                                                            <xs:element name="Description" maxOccurs="unbounded">
                                                              <xs:complexType>
                                                                <xs:simpleContent>
                                                                  <xs:extension base="def_nonempty_string">
                                                                    <xs:attribute name="TextFormat" use="required">
                                                                      <xs:simpleType>
                                                                        <xs:restriction base="xs:string">
                                                                          <xs:enumeration value="PlainText"/>
                                                                          <xs:enumeration value="HTML"/>
                                                                        </xs:restriction>
                                                                      </xs:simpleType>
                                                                    </xs:attribute>
                                                                    <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                                  </xs:extension>
                                                                </xs:simpleContent>
                                                              </xs:complexType>
                                                            </xs:element>

                                                          </xs:sequence>
                                                        </xs:complexType>
                                                      </xs:element>

                                                    </xs:sequence>
                                                  </xs:complexType>
                                                </xs:element>

                                                <xs:element name="ImageItems" minOccurs="0">
                                                  <xs:complexType>
                                                    <xs:sequence>

                                                      <xs:element name="ImageItem" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                          <xs:sequence>

                                                            <xs:element name="ImageFormat">
                                                              <xs:complexType>
                                                                <xs:sequence>
                                                                  <xs:element name="URL" type="def_url_string"/>
                                                                </xs:sequence>
                                                                <xs:attribute name="CopyrightNotice" type="StringLength1to64"/>
                                                              </xs:complexType>
                                                            </xs:element>

                                                            <xs:element name="Description" minOccurs="0" maxOccurs="unbounded">
                                                              <xs:complexType>
                                                                <xs:simpleContent>
                                                                  <xs:extension base="def_nonempty_string">
                                                                    <xs:attribute name="TextFormat" use="required">
                                                                      <xs:simpleType>
                                                                        <xs:restriction base="xs:string">
                                                                          <xs:enumeration value="PlainText"/>
                                                                        </xs:restriction>
                                                                      </xs:simpleType>
                                                                    </xs:attribute>
                                                                    <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                                  </xs:extension>
                                                                </xs:simpleContent>
                                                              </xs:complexType>
                                                            </xs:element>

                                                          </xs:sequence>
                                                          <xs:attribute name="Category" use="required" type="def_int_1to999"/>
                                                        </xs:complexType>
                                                      </xs:element>

                                                    </xs:sequence>
                                                  </xs:complexType>
                                                </xs:element>

                                              </xs:choice>
                                              <xs:attribute name="InfoCode">
                                                <xs:simpleType>
                                                  <xs:restriction base="def_int_gt0">
                                                    <xs:enumeration value="1"/>
                                                    <xs:enumeration value="23"/>
                                                    <xs:enumeration value="25"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                            </xs:complexType>
                                          </xs:element>

                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                  <xs:attribute name="Code" use="required" type="def_invTypeCode_string"/>
                                  <xs:attribute name="MaxOccupancy" type="def_int_gt0"/>
                                  <xs:attribute name="MinOccupancy" type="def_int_gt0"/>
                                  <xs:attribute name="MaxChildOccupancy" type="def_int_gt0"/>
                                  <xs:attribute name="MaxAdultOccupancy" type="def_int_gt0"/>
                                  <xs:attribute name="ID" type="def_invTypeCode_string"/>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- Policies (Inventory/HotelInfo (push)) -->
                  <xs:element name="Policies" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="Policy" maxOccurs="unbounded">
                          <xs:complexType>
                            <!-- exactly one policy per Policy element, as documented in section 4.3;
                                 declared in the order OTA2015A declares them -->
                            <xs:choice>

                              <xs:element name="CancelPolicy">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="CancelPenalty">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="PenaltyDescription">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="Text" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:simpleContent>
                                                      <xs:extension base="def_nonempty_string">
                                                        <xs:attribute name="TextFormat" use="required">
                                                          <xs:simpleType>
                                                            <xs:restriction base="xs:string">
                                                              <xs:enumeration value="PlainText"/>
                                                              <xs:enumeration value="HTML"/>
                                                            </xs:restriction>
                                                          </xs:simpleType>
                                                        </xs:attribute>
                                                        <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                      </xs:extension>
                                                    </xs:simpleContent>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="GuaranteePaymentPolicy">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="GuaranteePayment">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="AcceptedPayments">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="AcceptedPayment" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:sequence>
                                                      <xs:element name="BankAcct" minOccurs="0">
                                                        <xs:complexType>
                                                          <xs:sequence>
                                                            <xs:element name="BankAcctName" type="StringLength1to64"/>
                                                            <xs:element name="BankAcctNumber">
                                                              <xs:complexType>
                                                                <xs:sequence>
                                                                  <xs:element name="PlainText" type="StringLength1to64"/>
                                                                </xs:sequence>
                                                              </xs:complexType>
                                                            </xs:element>
                                                            <xs:element name="BankID">
                                                              <xs:complexType>
                                                                <xs:sequence>
                                                                  <xs:element name="PlainText" type="StringLength1to64"/>
                                                                </xs:sequence>
                                                              </xs:complexType>
                                                            </xs:element>
                                                          </xs:sequence>
                                                        </xs:complexType>
                                                      </xs:element>
                                                      <xs:element name="Cash" minOccurs="0">
                                                        <xs:complexType>
                                                          <xs:attribute name="CashIndicator" use="required" type="def_bool"/>
                                                        </xs:complexType>
                                                      </xs:element>
                                                      <xs:element name="PaymentCard" minOccurs="0">
                                                        <xs:complexType>
                                                          <xs:sequence>
                                                            <xs:element name="CardType" type="def_nonempty_string" minOccurs="0"/>
                                                          </xs:sequence>
                                                          <xs:attribute name="CardCode" type="def_card_code"/>
                                                        </xs:complexType>
                                                      </xs:element>
                                                    </xs:sequence>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element name="AmountPercent" minOccurs="0">
                                            <xs:complexType>
                                              <xs:attribute name="Percent" use="required" type="def_decimal_0to100"/>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element name="Deadline" minOccurs="0">
                                            <xs:complexType>
                                              <xs:attribute name="OffsetDropTime"       use="required" type="def_offset_drop_time"/>
                                              <xs:attribute name="OffsetTimeUnit"       use="required" type="TimeUnitType"/>
                                              <xs:attribute name="OffsetUnitMultiplier" use="required" type="def_int_0to999"/>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="CheckoutCharges">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="CheckoutCharge">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="Description">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="Text" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:simpleContent>
                                                      <xs:extension base="def_nonempty_string">
                                                        <xs:attribute name="TextFormat" use="required">
                                                          <xs:simpleType>
                                                            <xs:restriction base="xs:string">
                                                              <xs:enumeration value="PlainText"/>
                                                              <xs:enumeration value="HTML"/>
                                                            </xs:restriction>
                                                          </xs:simpleType>
                                                        </xs:attribute>
                                                        <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                      </xs:extension>
                                                    </xs:simpleContent>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="Amount" type="def_decimal_ge0"/>
                                        <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                                        <xs:attribute name="DecimalPlaces" type="def_int_gt0"/>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="PolicyInfo">
                                <xs:complexType>
                                  <xs:attribute name="MinGuestAge" type="def_int_ge0"/>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="TaxPolicies">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="TaxPolicy">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="TaxDescription">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="Text" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:simpleContent>
                                                      <xs:extension base="def_nonempty_string">
                                                        <xs:attribute name="TextFormat" use="required">
                                                          <xs:simpleType>
                                                            <xs:restriction base="xs:string">
                                                              <xs:enumeration value="PlainText"/>
                                                              <xs:enumeration value="HTML"/>
                                                            </xs:restriction>
                                                          </xs:simpleType>
                                                        </xs:attribute>
                                                        <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                      </xs:extension>
                                                    </xs:simpleContent>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="Amount" type="def_decimal_ge0"/>
                                        <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                                        <xs:attribute name="DecimalPlaces" type="def_int_gt0"/>
                                        <xs:attribute name="Code">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="3"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="ChargeFrequency">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="1"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="ChargeUnit">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="21"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="PetsPolicies">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="PetsPolicy">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="Description">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="Text" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:simpleContent>
                                                      <xs:extension base="def_nonempty_string">
                                                        <xs:attribute name="TextFormat" use="required">
                                                          <xs:simpleType>
                                                            <xs:restriction base="xs:string">
                                                              <xs:enumeration value="PlainText"/>
                                                              <xs:enumeration value="HTML"/>
                                                            </xs:restriction>
                                                          </xs:simpleType>
                                                        </xs:attribute>
                                                        <xs:attribute name="Language" use="required" type="def_language_string"/>
                                                      </xs:extension>
                                                    </xs:simpleContent>
                                                  </xs:complexType>
                                                </xs:element>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="MaxPetQuantity" type="def_int_0to99"/>
                                        <xs:attribute name="NonRefundableFee" type="def_decimal_ge0"/>
                                        <xs:attribute name="ChargeCode" type="def_int_1to999"/>
                                        <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                                        <xs:attribute name="DecimalPlaces" type="def_int_gt0"/>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="StayRequirements">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="StayRequirement" maxOccurs="2">
                                      <xs:complexType>
                                        <xs:attribute name="StayContext">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="Checkin"/>
                                              <xs:enumeration value="Checkout"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="Start">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:pattern value="[0-2][0-9]:[0-5][0-9]:[0-5][0-9]"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="End">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:pattern value="[0-2][0-9]:[0-5][0-9]:[0-5][0-9]"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                            </xs:choice>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- AffiliationInfo (Inventory/HotelInfo (push)) -->
                  <xs:element name="AffiliationInfo" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Awards">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Award" maxOccurs="unbounded">
                                <xs:complexType>
                                  <xs:attribute name="Rating" use="required" type="def_decimal_ge0"/>
                                  <xs:attribute name="Provider" use="required" type="def_nonempty_string"/>
                                  <xs:attribute name="RatingSymbol" type="def_rating_symbol"/>
                                  <xs:attribute name="OfficialAppointmentInd" type="def_bool"/>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- ContactInfos (Inventory/HotelInfo (push)) -->
                  <xs:element name="ContactInfos" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="ContactInfo">
                          <xs:complexType>
                            <xs:sequence>

                              <xs:element name="Addresses" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Address" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:sequence>
                                          <xs:element name="AddressLine" type="StringLength1to255"/>
                                          <xs:element name="CityName" type="StringLength1to64"/>
                                          <xs:element name="PostalCode" type="StringLength1to16"/>
                                          <xs:element name="StateProv" minOccurs="0">
                                            <xs:complexType>
                                              <xs:attribute name="StateCode" use="required" type="def_state_code"/>
                                            </xs:complexType>
                                          </xs:element>
                                          <xs:element name="CountryName" minOccurs="0">
                                            <xs:complexType>
                                              <xs:attribute name="Code" use="required">
                                                <xs:simpleType>
                                                  <xs:restriction base="xs:string">
                                                    <xs:pattern value="[A-Z][A-Z]"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                            </xs:complexType>
                                          </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="Language" type="def_language_string"/>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="Phones" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Phone" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:attribute name="PhoneTechType" use="required" type="def_ota_code"/>
                                        <xs:attribute name="PhoneNumber" use="required">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:pattern value="\+?[0-9]+"/>
                                              <xs:maxLength value="32"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="Emails" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Email" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:simpleContent>
                                          <xs:extension base="def_nonempty_string">
                                            <xs:attribute name="EmailType" use="required" type="def_ota_code"/>
                                          </xs:extension>
                                        </xs:simpleContent>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="URLs" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="URL" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:simpleContent>
                                          <xs:extension base="xs:anyURI">
                                            <xs:attribute name="ID" type="def_uppercase_string"/>
                                          </xs:extension>
                                        </xs:simpleContent>
                                      </xs:complexType>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="CompanyName" type="def_any_string" minOccurs="0"/>

                            </xs:sequence>

                            <xs:attribute name="Location">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="6"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>

                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- TPA_Extensions (Inventory/HotelInfo (push)) -->
                  <xs:element name="TPA_Extensions" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="AdditionalCodes">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="AdditionalCode" maxOccurs="unbounded">
                                <xs:complexType>
                                  <xs:simpleContent>
                                    <xs:extension base="def_nonempty_string">
                                      <xs:attribute name="Type" use="required" type="def_nonempty_string"/>
                                    </xs:extension>
                                  </xs:simpleContent>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                </xs:sequence>
                <xs:attribute name="HotelCityCode" type="StringLength1to8"/>
                <xs:attributeGroup ref="def_hotel_reference"/>
                <xs:attribute name="AreaID" type="NumericStringLength1to8"/>
              </xs:complexType>
            </xs:element>

          </xs:sequence>
        </xs:complexType>
      </xs:element>

    </xs:sequence>
  </xs:group>


  <!-- ******************************************************************************* -->
  <!-- * common definition for RatePlans element as used                               -->
  <!-- * in RatePlans and BaseRates                                                    -->
  <!-- ******************************************************************************* -->

  <xs:group name="def_rateplans">

    <xs:sequence>
      <xs:element name="RatePlans">
        <xs:complexType>
          <xs:sequence>

            <!-- RatePlans > RatePlan {1,} -->

            <xs:element name="RatePlan" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>

                  <!-- RatePlans > RatePlan > BookingRules {0,1} -->

                  <xs:element name="BookingRules" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="BookingRule" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>

                              <xs:element name="LengthsOfStay" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="LengthOfStay" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:attribute name="Time" use="required" type="def_decimal_ge0"/>
                                        <xs:attribute name="TimeUnit" use="required">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="Day"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="MinMaxMessageType" use="required">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="SetMinLOS"/>
                                              <xs:enumeration value="SetForwardMinStay"/>
                                              <xs:enumeration value="SetMaxLOS"/>
                                              <xs:enumeration value="SetForwardMaxStay"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="DOW_Restrictions" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="ArrivalDaysOfWeek" type="def_days_of_week" minOccurs="0"/>
                                    <xs:element name="DepartureDaysOfWeek" type="def_days_of_week" minOccurs="0"/>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="RestrictionStatus" minOccurs="0">
                                <xs:complexType>
                                  <xs:attribute name="Restriction">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="Master"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="Status">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="Open"/>
                                        <xs:enumeration value="Close"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                            <xs:attribute name="CodeContext">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="ROOMTYPE"/>
                                  <xs:enumeration value="ALPINEBITS-PETS"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                            <xs:attribute name="Code" type="def_invTypeCode_string"/>
                            <xs:attribute name="Start" type="def_date"/>
                            <xs:attribute name="End" type="def_date"/>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- RatePlans > RatePlan > Rates {0,1} -->

                  <xs:element name="Rates" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="Rate" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>

                              <xs:element name="BaseByGuestAmts" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="BaseByGuestAmt" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:attribute name="NumberOfGuests" type="def_int_1to999"/>
                                        <xs:attribute name="AmountAfterTax" type="def_decimal_gt0"/>
                                        <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                                        <xs:attribute name="Type">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="7"/>
                                              <xs:enumeration value="25"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="AgeQualifyingCode" type="def_int_1to999"/>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="AdditionalGuestAmounts" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="AdditionalGuestAmount" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:attribute name="Amount" type="def_decimal_ge0"/>
                                        <xs:attribute name="AgeQualifyingCode" type="def_int_1to999"/>
                                        <xs:attribute name="MinAge" type="def_int_1to999"/>
                                        <xs:attribute name="MaxAge" type="def_int_1to999"/>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="RateDescription" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="ListItem" maxOccurs="unbounded">
                                      <xs:complexType>
                                        <xs:simpleContent>
                                          <xs:extension base="def_nonempty_string">
                                            <xs:attribute name="ListItem" use="required" type="def_int_ge0"/>
                                            <xs:attribute name="Language" use="required" type="def_language_string"/>
                                          </xs:extension>
                                        </xs:simpleContent>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                  <xs:attribute name="Name" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="included services"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="MealsIncluded" minOccurs="0">
                                <xs:complexType>
                                  <xs:attribute name="Breakfast" type="def_bool"/>
                                  <xs:attribute name="Lunch" type="def_bool"/>
                                  <xs:attribute name="Dinner" type="def_bool"/>
                                  <xs:attribute name="MealPlanCodes">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="1"/>
                                        <xs:enumeration value="3"/>
                                        <xs:enumeration value="10"/>
                                        <xs:enumeration value="12"/>
                                        <xs:enumeration value="14"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="MealPlanIndicator">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="1"/>
                                        <xs:enumeration value="true"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                            <xs:attribute name="MinGuestApplicable" type="def_int_1to999"/>
                            <xs:attribute name="Start" type="def_date"/>
                            <xs:attribute name="End" type="def_date"/>
                            <xs:attribute name="RateTimeUnit">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="Day"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                            <xs:attribute name="UnitMultiplier" type="def_int_1to999"/>
                            <xs:attribute name="Mon" type="def_bool"/>
                            <xs:attribute name="Tue" type="def_bool"/>
                            <xs:attribute name="Weds" type="def_bool"/>
                            <xs:attribute name="Thur" type="def_bool"/>
                            <xs:attribute name="Fri" type="def_bool"/>
                            <xs:attribute name="Sat" type="def_bool"/>
                            <xs:attribute name="Sun" type="def_bool"/>
                            <xs:attribute name="Duration">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:pattern value="P[0-9]+N"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>
                            <xs:attribute name="InvTypeCode" type="def_invTypeCode_string"/>

                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- RatePlans > RatePlan > Supplements {0,1} -->

                  <xs:element name="Supplements" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="Supplement" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:choice>
                                <xs:element name="PrerequisiteInventory" minOccurs="0">
                                  <xs:complexType>
                                    <xs:attribute name="InvCode" use="required" type="StringLength1to16"/>
                                    <xs:attribute name="InvType" use="required">
                                      <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                          <xs:enumeration value="ALPINEBITSDOW"/>
                                          <xs:enumeration value="ROOMTYPE"/>
                                        </xs:restriction>
                                      </xs:simpleType>
                                    </xs:attribute>
                                  </xs:complexType>
                                </xs:element>
                              </xs:choice>
                              <!-- RatePlans > RatePlan > Supplements > Supplement > Description {0,5} -->

                              <xs:element name="Description" minOccurs="0" maxOccurs="5">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:choice maxOccurs="unbounded">

                                      <xs:element name="ListItem" type="def_nonempty_string"/>

                                      <xs:element name="Image" type="def_url_string"/>

                                      <xs:element name="Text">
                                        <xs:complexType>
                                          <xs:simpleContent>
                                            <xs:extension base="def_nonempty_string">
                                              <xs:attribute name="TextFormat" use="required">
                                                <xs:simpleType>
                                                  <xs:restriction base="xs:string">
                                                    <xs:enumeration value="PlainText"/>
                                                    <xs:enumeration value="HTML"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                              <xs:attribute name="Language" type="def_language_string"/>
                                            </xs:extension>
                                          </xs:simpleContent>
                                        </xs:complexType>
                                      </xs:element>

                                      <xs:element name="URL" type="def_url_string"/>

                                    </xs:choice>

                                  </xs:sequence>

                                  <xs:attribute name="Name" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="title"/>
                                        <xs:enumeration value="intro"/>
                                        <xs:enumeration value="description"/>
                                        <xs:enumeration value="gallery"/>
                                        <xs:enumeration value="codelist"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>

                            <xs:attribute name="AddToBasicRateIndicator">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="1"/>
                                  <xs:enumeration value="true"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>

                            <xs:attribute name="ChargeTypeCode">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="1"/>
                                  <xs:enumeration value="12"/>
                                  <xs:enumeration value="18"/>
                                  <xs:enumeration value="19"/>
                                  <xs:enumeration value="20"/>
                                  <xs:enumeration value="21"/>
                                  <xs:enumeration value="24"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>

                            <xs:attribute name="Amount" type="def_decimal_ge0"/>

                            <xs:attribute name="InvType" use="required">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:enumeration value="EXTRA"/>
                                  <xs:enumeration value="ALPINEBITS"/>
                                  <xs:enumeration value="ALPINEBITS-PETS"/>
                                </xs:restriction>
                              </xs:simpleType>
                            </xs:attribute>

                            <xs:attribute name="InvCode" type="StringLength1to16" use="required"/>

                            <xs:attribute name="MandatoryIndicator" type="def_bool"/>

                            <xs:attribute name="Start" type="def_date"/>
                            <xs:attribute name="End" type="def_date"/>

                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- RatePlans > RatePlan > Offers {0,1} -->

                  <xs:element name="Offers" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:element name="Offer" maxOccurs="3">
                          <xs:complexType>
                            <xs:sequence>

                              <xs:element name="OfferRules" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="OfferRule">
                                      <xs:complexType>
                                        <xs:sequence>

                                          <xs:element name="LengthsOfStay" minOccurs="0">
                                            <xs:complexType>
                                              <xs:sequence>

                                                <xs:element name="LengthOfStay" maxOccurs="unbounded">
                                                  <xs:complexType>
                                                    <xs:attribute name="Time" use="required" type="def_decimal_ge0"/>
                                                    <xs:attribute name="TimeUnit" use="required">
                                                      <xs:simpleType>
                                                        <xs:restriction base="xs:string">
                                                          <xs:enumeration value="Day"/>
                                                        </xs:restriction>
                                                      </xs:simpleType>
                                                    </xs:attribute>
                                                    <xs:attribute name="MinMaxMessageType" use="required">
                                                      <xs:simpleType>
                                                        <xs:restriction base="xs:string">
                                                          <xs:enumeration value="SetMinLOS"/>
                                                          <xs:enumeration value="SetMaxLOS"/>
                                                        </xs:restriction>
                                                      </xs:simpleType>
                                                    </xs:attribute>
                                                  </xs:complexType>
                                                </xs:element>

                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>

                                          <xs:element name="DOW_Restrictions" minOccurs="0">
                                            <xs:complexType>
                                              <xs:sequence>
                                                <xs:element name="ArrivalDaysOfWeek" type="def_days_of_week" minOccurs="0"/>
                                                <xs:element name="DepartureDaysOfWeek" type="def_days_of_week" minOccurs="0"/>
                                              </xs:sequence>
                                            </xs:complexType>
                                          </xs:element>

                                          <xs:element name="Occupancy" maxOccurs="5">
                                            <xs:complexType>
                                              <xs:attribute name="AgeQualifyingCode" use="required">
                                                <xs:simpleType>
                                                  <xs:restriction base="xs:string">
                                                    <xs:enumeration value="8"/>
                                                    <xs:enumeration value="10"/>
                                                  </xs:restriction>
                                                </xs:simpleType>
                                              </xs:attribute>
                                              <xs:attribute name="MinAge" type="def_int_1to999"/>
                                              <xs:attribute name="MaxAge" type="def_int_1to999"/>
                                              <xs:attribute name="MinOccupancy" type="def_int_0to99"/>
                                              <xs:attribute name="MaxOccupancy" type="def_int_1to99"/>
                                            </xs:complexType>
                                          </xs:element>

                                        </xs:sequence>

                                        <xs:attribute name="MinAdvancedBookingOffset">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:pattern value="P[0-9]+D"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="MaxAdvancedBookingOffset">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:pattern value="P[0-9]+D"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>

                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="Discount" minOccurs="0">
                                <xs:complexType>
                                  <xs:attribute name="Percent" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="100"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="NightsRequired" type="def_int_gt0"/>
                                  <xs:attribute name="NightsDiscounted" type="def_int_gt0"/>
                                  <xs:attribute name="DiscountPattern">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:pattern value="0*1*"/>
                                        <xs:minLength value="1"/>
                                        <xs:maxLength value="32"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                </xs:complexType>
                              </xs:element>

                              <xs:element name="Guests" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>

                                    <xs:element name="Guest">
                                      <xs:complexType>
                                        <xs:attribute name="AgeQualifyingCode" use="required" type="def_int_1to999"/>
                                        <xs:attribute name="MaxAge" use="required" type="def_int_1to999"/>
                                        <xs:attribute name="MinCount" use="required" type="def_int_ge0"/>
                                        <xs:attribute name="FirstQualifyingPosition" use="required">
                                          <xs:simpleType>
                                            <xs:restriction base="xs:string">
                                              <xs:enumeration value="1"/>
                                            </xs:restriction>
                                          </xs:simpleType>
                                        </xs:attribute>
                                        <xs:attribute name="LastQualifyingPosition" use="required" type="def_int_gt0"/>
                                      </xs:complexType>
                                    </xs:element>

                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>

                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>

                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>

                  <!-- RatePlans > RatePlan > Description {0,5} -->

                  <xs:element name="Description" minOccurs="0" maxOccurs="5">
                    <xs:complexType>
                      <xs:sequence>

                        <xs:choice maxOccurs="unbounded">

                          <xs:element name="ListItem" type="def_nonempty_string"/>

                          <xs:element name="Image" type="def_url_string"/>

                          <xs:element name="Text">
                            <xs:complexType>
                              <xs:simpleContent>
                                <xs:extension base="def_nonempty_string">
                                  <xs:attribute name="TextFormat" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:string">
                                        <xs:enumeration value="PlainText"/>
                                        <xs:enumeration value="HTML"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="Language" type="def_language_string"/>
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>

                          <xs:element name="URL" type="def_url_string"/>

                        </xs:choice>

                      </xs:sequence>

                      <xs:attribute name="Name" use="required">
                        <xs:simpleType>
                          <xs:restriction base="xs:string">
                            <xs:enumeration value="title"/>
                            <xs:enumeration value="intro"/>
                            <xs:enumeration value="description"/>
                            <xs:enumeration value="gallery"/>
                            <xs:enumeration value="codelist"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                    </xs:complexType>
                  </xs:element>

                </xs:sequence>
                <xs:attribute name="Start" type="def_date"/>
                <xs:attribute name="End" type="def_date"/>
                <xs:attribute name="RatePlanNotifType">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="Overlay"/>
                      <xs:enumeration value="New"/>
                      <xs:enumeration value="Remove"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="CurrencyCode" type="def_three_char_string"/>
                <xs:attribute name="RatePlanCode" type="StringLength1to16"/>
                <xs:attribute name="RatePlanType">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="12"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="RatePlanCategory" type="StringLength1to64"/>
                <xs:attribute name="RatePlanID" type="StringLength1to64"/>
                <xs:attribute name="RatePlanQualifier" type="def_bool"/>
              </xs:complexType>
            </xs:element> <!-- close RatePlan -->

          </xs:sequence>
          <xs:attributeGroup ref="def_hotel_reference"/>
        </xs:complexType>

      </xs:element>

    </xs:sequence>

  </xs:group>


  <!-- ******************************************************************************* -->
  <!-- * common definition for success/advisory/warning/error responses                -->
  <!-- ******************************************************************************* -->

  <xs:group name="def_generic_response">
    <xs:choice>

      <!-- choice: Errors {1} -->

      <xs:group ref="def_errors"/>

      <!-- choice: Success {1} + Warnings {0,1} -->

      <xs:sequence>

        <xs:element name="Success"/>
        <xs:group ref="def_warnings"/>

      </xs:sequence>

    </xs:choice>
  </xs:group>


  <xs:group name="def_errors">
    <xs:sequence>
      <xs:element name="Errors">
        <xs:complexType>
          <xs:sequence>

            <!-- Errors > Error {1,} -->

            <xs:element name="Error" maxOccurs="99">
              <xs:complexType mixed="true">
                <xs:attribute name="Type" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="11"/>
                      <xs:enumeration value="13"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
                <xs:attribute name="Code" type="def_int_1to999"/>
                <xs:attribute name="Status" type="def_send_complete"/>
              </xs:complexType>
            </xs:element>

          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:group name="def_warnings">
    <xs:sequence>
      <xs:element name="Warnings" minOccurs="0">
        <xs:complexType>
          <xs:sequence>

            <!-- Warnings > Warning {1,} -->

            <xs:element name="Warning" maxOccurs="unbounded">
              <xs:complexType mixed="true">
                <xs:attribute name="Type" use="required" type="def_int_1to999"/>
                <xs:attribute name="Code" type="def_int_1to999"/>
                <xs:attribute name="RecordID" type="StringLength1to64"/>
                <xs:attribute name="Status" type="def_send_complete"/>
              </xs:complexType>
            </xs:element>

          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>

  <xs:group name="def_detailed_warnings">
    <xs:sequence>
      <xs:element name="Warnings" minOccurs="0">
        <xs:complexType>
          <xs:sequence>

            <!-- Warnings > Warning {1,} -->

            <xs:element name="Warning" maxOccurs="unbounded">
              <xs:complexType mixed="true">
                <xs:attribute name="Type" use="required" type="def_int_1to999"/>
                <xs:attribute name="Code" use="required" type="def_int_1to999"/>
                <xs:attribute name="RecordID" use="required" type="StringLength1to64"/>
                <xs:attribute name="Status" type="def_send_complete"/>
              </xs:complexType>
            </xs:element>

          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>


  <!-- ******************************************************************************* -->
  <!-- * common definition for recurring, complex types                                -->
  <!-- ******************************************************************************* -->

  <!-- A profile info type. -->

  <xs:complexType name="ProfileInfoType">
    <xs:sequence>
      <xs:element name="Profile">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Customer" type="CustomerType" minOccurs="0"/>
            <xs:element name="CompanyInfo" type="CompanyInfoType" minOccurs="0"/>
          </xs:sequence>
          <xs:attribute name="ProfileType" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="1"/>
                <xs:enumeration value="3"/>
                <xs:enumeration value="4"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <!-- A customer type. -->

  <xs:complexType name="CustomerType">
    <xs:sequence>

      <!-- Profile > Customer > PersonName {1} -->

      <xs:element name="PersonName">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="NamePrefix" minOccurs="0" type="StringLength1to16"/>
            <xs:element name="GivenName" type="StringLength1to64"/>
            <xs:element name="Surname" type="StringLength1to64"/>
            <xs:element name="NameTitle"  minOccurs="0" type="StringLength1to16"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- Profile > Customer > Telephone {0,} -->

      <xs:element name="Telephone" type="TelephoneType" minOccurs="0" maxOccurs="99"/>

      <!-- Profile > Customer > Email {0,1} -->

      <xs:element name="Email" minOccurs="0">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="def_email_string">
              <xs:attribute name="Remark">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="newsletter:(no|yes)"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>

      <!-- Profile > Customer > Address {0,1} -->

      <xs:element name="Address" minOccurs="0">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="AddressInfoType">
              <xs:attribute name="Remark">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:pattern value="catalog:(no|yes)"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>

    </xs:sequence>
    <xs:attribute name="Gender">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="(Unknown|Male|Female)"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="BirthDate" type="def_date"/>
    <xs:attribute name="Language" type="def_language_string"/>
  </xs:complexType>

  <!-- A company info type. -->

  <xs:complexType name="CompanyInfoType">
    <xs:sequence>

      <xs:element name="CompanyName">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="def_nonempty_string">
              <xs:attribute name="Code" use="required" type="StringLength1to16"/>
              <xs:attribute name="CodeContext" use="required" type="StringLength1to32"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>

      <xs:element name="AddressInfo" minOccurs="0">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="AddressInfoType">
              <xs:attribute name="Language" type="def_language_string"/>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>

      <xs:element name="TelephoneInfo" type="TelephoneType" minOccurs="0"/>

      <xs:element name="Email" minOccurs="0" type="def_nonempty_string"/>

    </xs:sequence>
  </xs:complexType>

  <!-- An address info type. -->

  <xs:complexType name="AddressInfoType">
    <xs:sequence>
      <xs:element name="AddressLine" type="StringLength1to255"/>
      <xs:element name="CityName" type="StringLength1to64"/>
      <xs:element name="PostalCode" type="StringLength1to16"/>
      <xs:element name="CountryName">
        <xs:complexType>
          <xs:attribute name="Code" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:pattern value="[A-Z][A-Z]"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <!-- A telephone type -->

  <xs:complexType name="TelephoneType">
    <xs:attribute name="PhoneTechType">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="([135])"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="PhoneNumber" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="\+?[0-9]+"/>
          <xs:maxLength value="32"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <!-- A payment card type -->

  <xs:complexType name="PaymentCardType">
    <xs:sequence>
      <xs:element name="CardHolderName" type="StringLength1to64" minOccurs="0"/>

      <xs:element name="CardNumber">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="PlainText" type="def_nonempty_string" minOccurs="0"/>
          </xs:sequence>
          <xs:attribute name="EncryptionMethod" type="def_nonempty_string"/>
          <xs:attribute name="EncryptedValue" type="def_nonempty_string"/>
          <xs:attribute name="Mask">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:pattern value="[0-9a-zA-Z]{1,32}"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="Token">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:pattern value="[0-9a-zA-Z]{1,32}"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="TokenProviderID" type="def_nonempty_string"/>
        </xs:complexType>
      </xs:element>

    </xs:sequence>
    <xs:attribute name="CardCode">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="[A-Z]{1,2}"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="ExpireDate" type="MMYYDate"/>
  </xs:complexType>


  <!-- ******************************************************************************* -->
  <!-- * common definition for recurring types                                         -->
  <!-- ******************************************************************************* -->

  <xs:attributeGroup name="def_hotel_reference">
    <xs:attribute name="HotelCode" use="required" type="def_one_to_sixteen_chars_string"/>
    <xs:attribute name="HotelName" type="StringLength1to128"/>
  </xs:attributeGroup>

  <xs:attributeGroup name="def_version_timestamp">
    <xs:attribute name="Version" use="required"/>
    <xs:attribute name="TimeStamp"/>
  </xs:attributeGroup>

  <xs:complexType name="def_days_of_week">
    <xs:attribute name="Mon" type="def_bool"/>
    <xs:attribute name="Tue" type="def_bool"/>
    <xs:attribute name="Weds" type="def_bool"/>
    <xs:attribute name="Thur" type="def_bool"/>
    <xs:attribute name="Fri" type="def_bool"/>
    <xs:attribute name="Sat" type="def_bool"/>
    <xs:attribute name="Sun" type="def_bool"/>
  </xs:complexType>


  <!-- ******************************************************************************* -->
  <!-- * common definition for recurring, simple types                                 -->
  <!-- ******************************************************************************* -->

  <!-- The status for the handshake. -->

  <xs:simpleType name="def_handshake_status">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ALPINEBITS_HANDSHAKE"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- The keywords to request complete set responses. -->

  <xs:simpleType name="def_send_complete">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ALPINEBITS_SEND_HANDSHAKE"/>
      <xs:enumeration value="ALPINEBITS_SEND_FREEROOMS"/>
      <xs:enumeration value="ALPINEBITS_SEND_RATEPLANS"/>
      <xs:enumeration value="ALPINEBITS_SEND_INVENTORY"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic non-empty string type. -->

  <xs:simpleType name="def_nonempty_string">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic string type. -->

  <xs:simpleType name="def_any_string">
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic non-empty uppercase string type. -->

  <xs:simpleType name="def_uppercase_string">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z]+"/>
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic string type containing an @ char, like an email address -->

  <xs:simpleType name="def_email_string">
    <xs:restriction base="xs:string">
      <xs:pattern value="\S+@\S+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A string that is a valid language identifier -->

  <xs:simpleType name="def_language_string">
    <xs:restriction base="xs:language">
      <xs:pattern value="[a-z][a-z]"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- String type defining room category codes (like InvTypeCode)  -->

  <xs:simpleType name="def_invTypeCode_string">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="8"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic string type starting with http:// or https:// -->

  <xs:simpleType name="def_url_string">
    <xs:restriction base="xs:anyURI">
      <xs:pattern value="https?://.+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic string type with 3 characters. -->

  <xs:simpleType name="def_three_char_string">
    <xs:restriction base="xs:string">
      <xs:minLength value="3"/>
      <xs:maxLength value="3"/>
      <xs:pattern value="[a-zA-Z]{3}"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic string type with 1 to 16 characters (defintion taken from OTA2015A). -->

  <xs:simpleType name="def_one_to_sixteen_chars_string">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="16"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="def_one_to_thirty_two_chars_string">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic integer > 0 type. -->

  <xs:simpleType name="def_int_gt0">
    <xs:restriction base="xs:positiveInteger">
      <xs:pattern value="[0-9]+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic integer >= 0 type. -->

  <xs:simpleType name="def_int_ge0">
    <xs:restriction base="xs:nonNegativeInteger">
      <xs:pattern value="[0-9]+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic decimal >= 0 type. -->

  <xs:simpleType name="def_decimal_ge0">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0.0"/>
      <xs:pattern value="[0-9]*\.?[0-9]*"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic decimal > 0 type. -->

  <xs:simpleType name="def_decimal_gt0">
    <xs:restriction base="xs:decimal">
      <xs:minExclusive value="0.0"/>
      <xs:pattern value="[0-9]*\.?[0-9]*"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic date type. -->

  <xs:simpleType name="def_date">
    <xs:restriction base="xs:date">
      <xs:pattern value="\S+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic datetime type. -->

  <xs:simpleType name="def_datetime">
    <xs:restriction base="xs:dateTime">
      <xs:pattern value="\S+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A generic boolean type (1,true,0,false). -->

  <xs:simpleType name="def_bool">
    <xs:restriction base="xs:boolean">
      <xs:pattern value="\S+"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A code defined in the OpenTravel or AlpineBits Code tables (1,101,101.ABR). -->

  <xs:simpleType name="def_alpinebits_code">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,3}(\.[A-Z]{3})?"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- OTA2015A legacy restrictions -->

  <xs:simpleType name="RPH_Type">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,8}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="ListOfRPH">
    <xs:list itemType="RPH_Type"/>
  </xs:simpleType>

  <xs:simpleType name="TimeUnitType">
    <xs:annotation>
      <xs:documentation xml:lang="en">Defines the unit in which the time is expressed (e.g. year, day, hour).</xs:documentation>
    </xs:annotation>
    <xs:restriction base="StringLength1to16">
      <xs:enumeration value="Year"/>
      <xs:enumeration value="Month"/>
      <xs:enumeration value="Week"/>
      <xs:enumeration value="Day"/>
      <xs:enumeration value="Hour"/>
      <xs:enumeration value="Second"/>
      <xs:enumeration value="FullDuration"/>
      <xs:enumeration value="Minute"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="DateOrTimeOrDateTimeType">
    <xs:annotation>
      <xs:documentation xml:lang="en">A construct to validate either a date or a time or a dateTime value.</xs:documentation>
    </xs:annotation>
    <xs:union memberTypes="xs:date xs:dateTime xs:time"/>
  </xs:simpleType>

  <xs:simpleType name="DateOrDateTimeType">
    <xs:annotation>
      <xs:documentation xml:lang="en">A construct to validate either a date or a dateTime value.</xs:documentation>
    </xs:annotation>
    <xs:union memberTypes="xs:date xs:dateTime"/>
  </xs:simpleType>

  <xs:simpleType name="MMYYDate">
    <xs:restriction base="xs:string">
      <xs:pattern value="(0[1-9]|1[0-2])[0-9][0-9]"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength0to8">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 0 to 8.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="8"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength0to32">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 0 to 32.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength0to64">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 0 to 64.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="64"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength0to128">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 0 to 128.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="128"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to180">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 180.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="180"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength0to255">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 0 to 255.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to8">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 8.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="8"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to16">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 16.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="16"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to32">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 32.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to64">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 64.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="64"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to128">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 128.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="128"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength1to255">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Character Strings, length 1 to 255.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="StringLength3">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Strings, length exactly 3.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:minLength value="3"/>
      <xs:maxLength value="3"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric0to4">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 0 to 4 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="4"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric0to10">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 0 to 10 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="10"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric0to99">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 0 to 99 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="99"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric0to999">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 0 to 999 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="999"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric0to9999">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 0 to 9999 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="9999"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric1to3">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 1 to 3 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="3"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric1to4">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 1 to 4 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="4"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric1to99">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 1 to 99 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="99"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric1to999">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 1 to 999 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="999"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Numeric1to9999">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric values, from 1 to 9999 inclusive.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1"/>
      <xs:maxInclusive value="9999"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength1to16">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric Strings, length 1 to 16.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,16}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength1to19">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric Strings, length 1 to 19.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,19}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength2">
    <xs:annotation>
      <xs:documentation>Used for Numeric Strings, length exactly 2.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{2}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength4">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric Strings, length exactly 4.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{4}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength1to3">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric Strings length 1 to 3.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,3}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength1to5">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric Strings, length 1 to 5.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,5}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength1to8">
    <xs:annotation>
      <xs:documentation xml:lang="en">Used for Numeric Strings, length 1 to 8.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{1,8}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="NumericStringLength15to50">
    <xs:annotation>
      <xs:documentation>Used for Numeric Strings, length 15 to 50.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{15,50}"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A geographic coordinate: a decimal that stays within the 16 characters OTA2015A allows. -->

  <xs:simpleType name="def_coordinate">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="[+-]?[0-9]{1,6}(\.[0-9]{1,8})?"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A rating symbol, as restricted by OTA2015A. -->

  <xs:simpleType name="def_rating_symbol">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Diamond"/>
      <xs:enumeration value="Star"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A deadline offset reference, as restricted by OTA2015A. -->

  <xs:simpleType name="def_offset_drop_time">
    <xs:restriction base="xs:string">
      <xs:enumeration value="BeforeArrival"/>
      <xs:enumeration value="AfterBooking"/>
      <xs:enumeration value="AfterConfirmation"/>
      <xs:enumeration value="AfterArrival"/>
      <xs:enumeration value="AfterDeparture"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A payment card code: the lexical space of the OTA2015A PaymentCardCodeType union. -->

  <xs:simpleType name="def_card_code">
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z]{1,2}"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- An OTA code list value (definition taken from OTA2015A OTA_CodeType). -->

  <xs:simpleType name="def_ota_code">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9A-Z]{1,3}(\.[A-Z]{3}(\.X){0,1}){0,1}"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- A state or province code (definition taken from OTA2015A StateProvCodeType). -->

  <xs:simpleType name="def_state_code">
    <xs:restriction base="xs:string">
      <xs:minLength value="2"/>
      <xs:maxLength value="8"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Integer types bounded as the corresponding OTA2015A types are. -->

  <xs:simpleType name="def_int_1to99">
    <xs:restriction base="def_int_gt0">
      <xs:maxInclusive value="99"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="def_int_1to999">
    <xs:restriction base="def_int_gt0">
      <xs:maxInclusive value="999"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="def_int_0to99">
    <xs:restriction base="def_int_ge0">
      <xs:maxInclusive value="99"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="def_int_0to999">
    <xs:restriction base="def_int_ge0">
      <xs:maxInclusive value="999"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Percentages, capped at 100 as OTA2015A does. -->

  <xs:simpleType name="def_int_0to100">
    <xs:restriction base="def_int_ge0">
      <xs:maxInclusive value="100"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="def_decimal_0to100">
    <xs:restriction base="def_decimal_gt0">
      <xs:maxInclusive value="100"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
