<?xml version='1.0' encoding='UTF-8' ?>

<!--
======================================================================================
   Project               Standard XML messageservice for Travel Organisations
   Titel                 Travmessage.dtd
   Description           Contains contentmodels for messages to and from touroperators
                         concerning the availability check, assignment and the final
                         booking
   Version               1.7, 13 april 2007
   Auteur                Stipp bv

======================================================================================

   History
   Construction phase:   (details on modifications are not included in this file)

   0.1                   First draft made by july 26th 2001 (discussion version)

   0.2                   Modifications made on august 1st 2001 as an result of the
                         meeting of the projectteam

   0.3                   Cleaned-up version for presentation to the G7-delegates
                         during the kick-off meeting on august 6th 2001

   0.4                   Modifications made as an result of the intermediate meeting
                         of the projectteam on august 13th

   0.5                   Modifications made as an result of the meeting
                         of the projectteam on august 21th discussing the remarks of
                         the G7-delegates

   Release phase:
   1.0                   First release

   1.1                   FacilityType added to PackageDetails
                         Element Status optional within Transport
                         From and To elements added to Extras containing Date and Time
                         Element Status added to TransportRental
   1.2                   Added functionallity for:
                         - components
                         - cancellationrequests
                         - retrieving invoice information
                         - expanded use of recaprequests
   1.3                   Added functionallity for:
                         - roundtrips
                         - cruises
                         - multi media
                         - modifications based on 1.2 implementations
   1.4                   Added functionallity for:
                         - alternatives
                         - ChangeBookRequest
                         - supplyinformation
                         - prebooking
   1.5                   Added functionallity for:
                         - travel by car
                         - ANVR complaint message structure
                         - resolving several change requests to version 1.4
                           from implementors of the standard
   1.6                   Added functionallity for:
                         - searching and refining the results
                         - components
                         - PaxDetails
   1.7                   Added functionallity for:
                         - FulfilmentComponent and PaymentComponent
                         - Commission information added to PriceInfo and Price
                         - Supply and SearchDetailsResponse are extended with the possibility to get detailed
                           description on accommodations and transport


======================================================================================
 -->
<!-- =================================
     =    Root element               =
     ================================= -->
<!ELEMENT TravelMessage (Control , (TRequest | TResponse)?)>

<!ATTLIST TravelMessage  VersionID  (1.7)  #REQUIRED >
<!ELEMENT TRequest ((AvailabilityRequest | SellRequest | AssignRequest | BookRequest | ChangeBookRequest | SupplyRequest | PreBookRequest | RemoveComponentRequest | ComplaintRequest | SearchRequest | SearchDetailsRequest)? , SecurityInfo?)>

<!ELEMENT TResponse (PackageDetails? , PreBookDetails? , Transport* , Accommodation* , RoundTrip* , Cruise* , AdditionalProducts? , PaxDetails? , PaxAssignment? , PriceInfo? , BookResponse? , InvoiceResponse* , SupplyResponse* , PreBookResponse? , AvailabilityAlternative* , ChangeBookResponse? , RemoveComponentResponse* , FulfilmentComponent? , PaymentComponent? , Messages* , SearchResponse? , SearchDetailsResponse?)>

<!ELEMENT AvailabilityRequest ((PackageDetails | (TransportComponent | AccommodationComponent | TransportRentalComponent | ExtrasComponent | CruiseComponent | RoundTripComponent)+) , AdditionalProducts?)>

<!ELEMENT SellRequest ((PackageDetails | ComponentDetails+) , Transport* , Accommodation* , RoundTrip* , Cruise* , AdditionalProducts?)>

<!ELEMENT AssignRequest (PaxDetails , PaxAssignment)>

<!ELEMENT BookRequest (PaxDetails , PaxAssignment , FulfilmentComponent?)>

<!ELEMENT SecurityInfo (BookID , DepartureDate? , NumberOfAdults? , ContactName? , SenderID?)>

<!ELEMENT AvailabilityAlternative (PackageDetails? , Transport* , Accommodation* , RoundTrip* , Cruise* , Messages*)>

<!ELEMENT ContactName (#PCDATA)>

<!-- =================================
     =    module Control             =
     ================================= -->
<!ELEMENT Control (SenderSessionID , ReceiverSessionID , Date , Time , MessageSequence , SenderID , ReceiverID , EmployeeID? , RequestID , ResponseID , ResponseStatus?)>

<!ATTLIST Control  Language  (NL )  #REQUIRED
                     Test      (ja | nee )  'nee' >
<!ELEMENT Date (#PCDATA)>

<!ELEMENT MessageSequence (#PCDATA)>

<!ELEMENT ReceiverSessionID (#PCDATA)>

<!ELEMENT RequestID (#PCDATA)>

<!ELEMENT ResponseID (#PCDATA)>

<!ELEMENT ResponseStatus (#PCDATA)>

<!ELEMENT SenderID (#PCDATA)>

<!ELEMENT ReceiverID (#PCDATA)>

<!ELEMENT EmployeeID (#PCDATA)>

<!ELEMENT SenderSessionID (#PCDATA)>

<!ELEMENT Time (#PCDATA)>

<!ATTLIST Time  Reliability  (zeker | voorbehoud )  'voorbehoud' >
<!-- =================================
     =    module PackageDetails      =
     ================================= -->
<!ELEMENT PackageDetails (PackageID , Description? , NumberOfAdults , NumberOfChildren , NumberOfBabies , DepartureDate , DeparturePoint? , AccommodationType? , BoardType? , UnitType? , FacilityType* , Duration , Alternative* , MultiMedia*)>

<!ATTLIST PackageDetails  WaitListCheck         (ja | nee )  'ja'
                            NumberOfAlternatives CDATA  #IMPLIED >
<!ELEMENT DeparturePoint (#PCDATA)>

<!ELEMENT Duration (#PCDATA)>

<!ATTLIST Duration  DurationType  (dagen | nachten )  'dagen' >
<!ELEMENT NumberOfAdults (#PCDATA)>

<!ELEMENT NumberOfBabies (#PCDATA)>

<!ELEMENT NumberOfChildren (#PCDATA)>

<!ELEMENT PackageID (#PCDATA)>

<!ELEMENT Alternative ((RangeFrom , RangeTo) | AlternativeTypeList+)?>

<!ATTLIST Alternative  ElementName CDATA  #REQUIRED
                         Ranking     CDATA  #IMPLIED >
<!ELEMENT RangeFrom (#PCDATA)>

<!ELEMENT RangeTo (#PCDATA)>

<!ELEMENT AlternativeTypeList (#PCDATA)>

<!ELEMENT MultiMedia (#PCDATA)>

<!ATTLIST MultiMedia  Description CDATA  #IMPLIED
                        Format      CDATA  #REQUIRED
                        Size        CDATA  #REQUIRED
                        ReleaseDate CDATA  #IMPLIED
                        Source      CDATA  #IMPLIED
                        Type        CDATA  #IMPLIED
                        View        CDATA  #IMPLIED
                        Heigth      CDATA  #IMPLIED
                        Width       CDATA  #IMPLIED
                        Length      CDATA  #IMPLIED >
<!-- ============================================
     =    modules for Components  (availability)=
     ============================================ -->
<!ELEMENT TransportComponent (TransportType , Departure , Destination , NumberOfAdults , NumberOfChildren? , NumberOfBabies? , Duration)>

<!ELEMENT Destination (#PCDATA | DestinationID | DestinationDesc)*>

<!ELEMENT DestinationID (#PCDATA)>

<!ELEMENT DestinationDesc (#PCDATA)>

<!ELEMENT AccommodationComponent ((Destination | AccommodationID) , AccommodationType? , BoardType? , UnitType? , FacilityType* , ArrivalDate , (Duration | DepartureDate) , NumberOfAdults? , NumberOfChildren? , NumberOfBabies? , NumberOfUnits?)>

<!ELEMENT NumberOfUnits (#PCDATA)>

<!ELEMENT TransportRentalComponent (TransportRentalID , Description? , Location? , Category? , PickUp , DropOff)>

<!ELEMENT ExtrasComponent (ExtraID , Description? , Location?)>

<!ELEMENT CruiseComponent (CruiseID? , TransportComponent* , AccommodationComponent*)>

<!ELEMENT RoundTripComponent (RoundTripID? , TransportComponent* , AccommodationComponent*)>

<!-- ============================================
     =    modules for Components  (sellrequest) =
     ============================================ -->
<!ELEMENT ComponentDetails (ComponentID , Sequence , ComponentType , NumberOfAdults , NumberOfChildren , NumberOfBabies , ArrivalDate , (DepartureDate | Duration))>

<!ELEMENT ComponentID (#PCDATA)>

<!ELEMENT ComponentType (#PCDATA)>

<!-- ============================================
     =    module Transport                      =
     ============================================ -->
<!ELEMENT Transport (TransportTo+ , TransportFrom* , PriceNotes*)>

<!ELEMENT TransportTo ((TransportID | ComponentID) , Sequence? , TransportType , Carrier? , Departure , Arrival , Status? , Class* , MultiMedia*)>

<!ELEMENT TransportFrom ((TransportID | ComponentID) , Sequence? , TransportType , Carrier? , Departure , Arrival , Status? , Class* , MultiMedia*)>

<!ELEMENT Departure (Point , Date , Time? , PickUp*)>

<!ELEMENT Arrival (Point , Date , Time? , DropOff*)>

<!ELEMENT Class (ClassID , Description? , Seats , RequiredSeats? , PriceNotes*)>

<!ELEMENT Carrier (CarrierID , Description? , FlightNumber?)>

<!ELEMENT ClassID (#PCDATA)>

<!ELEMENT Point (PointID , Description?)>

<!ATTLIST Point  PointType  (IATAcode | Postcode | Internal | ANVRLandStreek )  #REQUIRED >
<!ELEMENT Seats (#PCDATA)>

<!ELEMENT RequiredSeats (#PCDATA)>

<!ELEMENT TransportID (#PCDATA)>

<!ELEMENT TransportType (#PCDATA)>

<!ELEMENT CarrierID (#PCDATA)>

<!ELEMENT FlightNumber (#PCDATA)>

<!ATTLIST FlightNumber  Charter  (Yes | No )  'Yes' >
<!ELEMENT PointID (#PCDATA)>

<!-- ============================================
     =    module Accommodation                  =
     ============================================ -->
<!ELEMENT Accommodation ((AccommodationID | ComponentID) , Sequence? , AccommodationType? , Name? , Address? , Zipcode? , Place? , Country? , Telephone? , ArrivalDate , (DepartureDate | Duration) , Unit+ , Arrangement* , Extras* , MultiMedia*)>

<!ELEMENT Unit (UnitID , UnitType? , UnitDif? , Description? , RoomNumber* , Board* , MinOccupancy? , MaxOccupancy? , Allotment? , RequiredNumber? , Status? , UnitPrice* , PriceNotes* , Facility* , MultiMedia*)>

<!ELEMENT Board (BoardType , Description? , PriceNotes*)>

<!ELEMENT UnitPrice (RecomPrice , Occupancy?)>

<!ELEMENT Facility (FacilityType , Description? , MultiMedia*)>

<!ELEMENT Arrangement (ArrangementID , Sequence , Description? , ArrivalDate , Duration , Allotment)>

<!ELEMENT AccommodationID (#PCDATA)>

<!ELEMENT AccommodationType (#PCDATA)>

<!ELEMENT Allotment (#PCDATA)>

<!ELEMENT ArrivalDate (#PCDATA)>

<!ELEMENT BoardType (#PCDATA)>

<!ELEMENT Country (#PCDATA)>

<!ELEMENT DepartureDate (#PCDATA)>

<!ELEMENT Description (#PCDATA)>

<!ELEMENT FacilityType (#PCDATA)>

<!ELEMENT MaxOccupancy (#PCDATA | Occupation)*>

<!ELEMENT MinOccupancy (#PCDATA | Occupation)*>

<!ELEMENT Occupation (Quantity , Condition*)>

<!ELEMENT Condition (NumberOfPersons | AgeCondition?)>

<!ELEMENT AgeCondition (#PCDATA)>

<!ATTLIST AgeCondition  AgeType CDATA  #REQUIRED >
<!ELEMENT NumberOfPersons (#PCDATA)>

<!ELEMENT Name (#PCDATA)>

<!ELEMENT Occupancy (#PCDATA)>

<!ELEMENT Place (#PCDATA)>

<!ELEMENT PriceNotes (#PCDATA)>

<!ELEMENT Quantity (#PCDATA)>

<!ELEMENT RecomPrice (#PCDATA)>

<!ATTLIST RecomPrice  Currency  (EUR )  #REQUIRED
                        PricePer CDATA  #REQUIRED >
<!ELEMENT RequiredNumber (#PCDATA)>

<!ELEMENT RoomNumber (#PCDATA)>

<!ELEMENT Status (#PCDATA)>

<!ELEMENT Telephone (#PCDATA)>

<!ELEMENT UnitID (#PCDATA)>

<!ELEMENT UnitType (#PCDATA)>

<!ELEMENT UnitDif (#PCDATA)>

<!ELEMENT ArrangementID (#PCDATA)>

<!-- ============================================
     =    module RoundTrip                      =
     ============================================ -->
<!ELEMENT RoundTrip (RoundTripID? , Sequence? , RoundTripTransport* , Accommodation*)>

<!ELEMENT RoundTripID (#PCDATA)>

<!ELEMENT RoundTripTransport (TransportID? , TransportType? , Carrier? , Departure , Arrival , Status? , Class* , MultiMedia*)>

<!-- ============================================
     =    module Cruise                         =
     ============================================ -->
<!ELEMENT Cruise (CruiseID? , Sequence? , CruiseTransport* , Accommodation*)>

<!ELEMENT CruiseID (#PCDATA)>

<!ELEMENT CruiseTransport (TransportID? , Carrier? , Departure , Arrival , Status? , Class* , MultiMedia*)>

<!-- ============================================
     =    module AdditionalProducts             =
     ============================================ -->
<!ELEMENT AdditionalProducts (Extras* , TransportRental*)>

<!ELEMENT Extras (ExtraID , Sequence? , Description , ExtendedDescription? , Category? , From? , To? , Allotment? , Status? , MinQuantity? , MaxQuantity? , RecomPrice* , PriceNotes* , MinChildAge? , MaxChildAge? , ChildPrice? , MultiMedia*)>

<!ELEMENT TransportRental (TransportRentalID , Sequence? , Description , ExtendedDescription? , Category? , Status? , PickUp* , DropOff* , RecomPrice* , PriceNotes* , Insurance? , MultiMedia*)>

<!ELEMENT Insurance (InsuranceID , Description , ExtendedDescription? , Category? , RecomPrice* , PriceNotes* , PriceType? , PriceDescription? , PolicyCosts? , Coverage? , Risk?)>

<!ELEMENT PickUp (Point , Date? , Time?)>

<!ELEMENT DropOff (Point , Date? , Time?)>

<!ELEMENT From (Date , Time?)>

<!ELEMENT To (Date , Time?)>

<!ELEMENT Category (#PCDATA)>

<!ELEMENT ChildPrice (#PCDATA)>

<!ELEMENT Coverage (#PCDATA)>

<!ELEMENT ExtendedDescription (#PCDATA)>

<!ELEMENT ExtraID (#PCDATA)>

<!ELEMENT InsuranceID (#PCDATA)>

<!ELEMENT MaxChildAge (#PCDATA)>

<!ELEMENT MaxQuantity (#PCDATA)>

<!ELEMENT MinChildAge (#PCDATA)>

<!ELEMENT MinQuantity (#PCDATA)>

<!ELEMENT PolicyCosts (#PCDATA)>

<!ELEMENT PriceDescription (#PCDATA)>

<!ELEMENT PriceType (#PCDATA)>

<!ELEMENT Risk (#PCDATA)>

<!ELEMENT TransportRentalID (#PCDATA)>

<!-- ============================================
     =    module PaxDetails                     =
     ============================================ -->
<!ELEMENT PaxDetails (PaxDescription+ , Contact? , HomeStay)>

<!ELEMENT PaxDescription (PaxID , GivenNames? , Initials , Infix? , Name , (DateOfBirth | Age)? , Gender , Nationality? , PassportNumber?)>

<!ELEMENT Contact (PaxID? , Initials , Infix? , Name , Gender , Address? , Zipcode? , Place? , Country? , TelHome , TelWork? , TelMobile? , Email? , BankAccount?)>

<!ELEMENT HomeStay (Initials? , Infix? , Name , TelHome , TelWork? , TelMobile? , Email?)>

<!ELEMENT Initials (#PCDATA)>

<!ELEMENT GivenNames (#PCDATA)>

<!ELEMENT Infix (#PCDATA)>

<!ELEMENT DateOfBirth (#PCDATA)>

<!ELEMENT Age (#PCDATA)>

<!ELEMENT Gender (#PCDATA)>

<!ELEMENT Nationality (#PCDATA)>

<!ELEMENT PaxID (#PCDATA)>

<!ELEMENT Address (#PCDATA)>

<!ELEMENT Zipcode (#PCDATA)>

<!ELEMENT TelHome (#PCDATA)>

<!ELEMENT TelMobile (#PCDATA)>

<!ELEMENT TelWork (#PCDATA)>

<!ELEMENT Email (#PCDATA)>

<!ELEMENT BankAccount (#PCDATA)>

<!ELEMENT PassportNumber (#PCDATA)>

<!-- ============================================
     =    module PaxAssignment                  =
     ============================================ -->
<!ELEMENT PaxAssignment (TransportAssignment* , AccoAssignment* , RoundTripAssignment* , CruiseAssignment* , PreferencesAndEssentials* , APAssignment?)>

<!ELEMENT TransportAssignment ((TransportID | ComponentID) , Sequence? , ClassID , PickUp? , DropOff? , PaxID*)>

<!ELEMENT AccoAssignment ((AccommodationID | ComponentID) , Sequence? , ArrivalDate , (Duration | DepartureDate) , BoardAssignment* , UnitAssignment+ , ArrangementAssignment* , ExtrasAssignment*)>

<!ELEMENT RoundTripAssignment (RoundTripID? , TransportAssignment* , AccoAssignment*)>

<!ELEMENT CruiseAssignment (CruiseID? , TransportAssignment* , AccoAssignment*)>

<!ELEMENT PreferencesAndEssentials (PECode , ObjectID? , Sequence? , PaxID*)>

<!ATTLIST PreferencesAndEssentials  PEType  (E | M | P )  #REQUIRED >
<!ELEMENT APAssignment (ExtrasAssignment* , TRentalAssignment*)>

<!ELEMENT UnitAssignment (UnitID , Quantity , RoomAssignment+)>

<!ELEMENT BoardAssignment (BoardType , PaxID*)>

<!ELEMENT RoomAssignment (Sequence , RoomNumber? , PaxID+)>

<!ELEMENT ArrangementAssignment (ArrangementID , Sequence , PaxID*)>

<!ELEMENT ExtrasAssignment (ExtraID , Sequence , From? , To? , Quantity? , ExtrasPax*)>

<!ELEMENT TRentalAssignment (TransportRentalID , Sequence , PickUp* , DropOff* , InsuranceAssignment? , PaxID+)>

<!ELEMENT InsuranceAssignment (InsuranceID , PaxID* , Quantity)>

<!ELEMENT ExtrasPax (PaxID+ , Quantity)>

<!ELEMENT PECode (#PCDATA)>

<!ELEMENT ObjectID (#PCDATA)>

<!ELEMENT Sequence (#PCDATA)>

<!-- ============================================
     =    module PriceInfo                      =
     ============================================ -->
<!ELEMENT PriceInfo (Price , TotalCommission? , PriceDetails+)>

<!ELEMENT PriceDetails (PriceDescription , PriceCode? , Price , PaxID? , Quantity?)>

<!ELEMENT Price (#PCDATA)>

<!ATTLIST Price  Currency              (EUR )  #REQUIRED
                   PricePer             CDATA  #REQUIRED
                   Sign                  (- )  #IMPLIED
                   CommissionPercentage CDATA  #IMPLIED
                   CommissionAmount     CDATA  #IMPLIED >
<!ELEMENT TotalCommission (#PCDATA)>

<!ELEMENT PriceCode (#PCDATA)>

<!-- ============================================
     =    module BookResponse                   =
     ============================================ -->
<!ELEMENT BookResponse (BookID , BookEmployeeID? , Date , Time , OptionDate? , Status , BookInfo?)>

<!ELEMENT BookID (#PCDATA)>

<!ELEMENT BookEmployeeID (#PCDATA)>

<!ELEMENT OptionDate (#PCDATA)>

<!ELEMENT BookInfo (InvoiceID? , InvoiceDate? , InvoiceStatus? , TravelDocumentsStatus?)>

<!ELEMENT InvoiceStatus (#PCDATA)>

<!ELEMENT TravelDocumentsStatus (#PCDATA)>

<!-- ============================================
     =    module PreBookResponse                   =
     ============================================ -->
<!ELEMENT PreBookResponse (PreBookID , BookEmployeeID? , Date , Time , Status)>

<!ELEMENT PreBookID (#PCDATA)>

<!-- ============================================
     =    module InvoiceResponse                =
     ============================================ -->
<!ELEMENT InvoiceResponse (BookID , InvoiceID , BookDate , InvoiceDate , GrossPrice , Commission , VATCommission , NetPrice , CollectiveAccountID? , DepartureDate , Initials , Infix? , Name , (DownPayment , ExpiryDateDownPayment)? , ExpiryDateInvoice , VATPrice , TransactionTO?)>

<!ELEMENT InvoiceID (#PCDATA)>

<!ELEMENT BookDate (#PCDATA)>

<!ELEMENT InvoiceDate (#PCDATA)>

<!ELEMENT GrossPrice (#PCDATA)>

<!ATTLIST GrossPrice  Currency  (EUR )  #REQUIRED >
<!ELEMENT Commission (#PCDATA)>

<!ELEMENT VATCommission (#PCDATA)>

<!ELEMENT NetPrice (#PCDATA)>

<!ELEMENT CollectiveAccountID (#PCDATA)>

<!ELEMENT DownPayment (#PCDATA)>

<!ELEMENT ExpiryDateDownPayment (#PCDATA)>

<!ELEMENT ExpiryDateInvoice (#PCDATA)>

<!ELEMENT VATPrice (#PCDATA)>

<!ELEMENT TransactionTO (#PCDATA)>

<!-- ============================================
     =    module Direct incasso                 =
     ============================================ -->
<!ELEMENT FulfilmentComponent (Document+)>

<!ELEMENT Document (DocumentType , DocumentDelivery , DocumentAddressType+)>

<!ELEMENT DocumentType (DocumentTypeID , Description?)>

<!ELEMENT DocumentDelivery (DocumentDeliveryID , Description?)>

<!ELEMENT DocumentAddressType (DocumentAddressTypeID , Description?)>

<!ELEMENT DocumentTypeID (#PCDATA)>

<!ELEMENT DocumentDeliveryID (#PCDATA)>

<!ELEMENT DocumentAddressTypeID (#PCDATA)>

<!ELEMENT PaymentComponent (PaymentItem+)>

<!ELEMENT PaymentItem (FormOfPayment , InvoiceTo? , RelationID?)>

<!ELEMENT FormOfPayment (#PCDATA)>

<!ELEMENT InvoiceTo (#PCDATA)>

<!ELEMENT RelationID (#PCDATA)>

<!-- ============================================
     =    module Messages                       =
     ============================================ -->
<!ELEMENT Messages (MessageID , MessageType , MessageOn? , Description , Date?)>

<!ELEMENT MessageID (#PCDATA)>

<!ELEMENT MessageType (#PCDATA)>

<!ELEMENT MessageOn (#PCDATA)>

<!-- ============================================
     =    module SupplyRequest                    =
     ============================================ -->
<!ELEMENT SupplyRequest ((AccommodationID* | TransportType? | OfferType? | Brand? | Location?) , DateSince?)>

<!ELEMENT DateSince (#PCDATA)>

<!-- ============================================
     =    module SupplyResponse                     =
     ============================================ -->
<!ELEMENT SupplyResponse ((Brand? , PackageID , Description? , MutationType , OfferType , Category? , PublicationPeriod? , PriceNotes? , Reference* , SupplyTransportInfo* , SupplyAccoInfo?) | AccommodationContent+ | TransportContent+)>

<!ELEMENT Reference (ReferenceID , Description? , Page+ , Sequence?)>

<!ELEMENT SupplyTransportInfo (TransportType , CarrierInfo* , DepartureInfo* , ArrivalInfo* , ClassInfo* , PriceNotes*)>

<!ELEMENT PublicationPeriod (StartDate , EndDate)>

<!ELEMENT DepartureInfo (Point , PriceNotes* , DepartureDay*)>

<!ELEMENT ArrivalInfo (Point , PriceNotes* , ArrivalDay*)>

<!ELEMENT CarrierInfo (CarrierID , Description? , PriceNotes* , DepartureDay*)>

<!ELEMENT ClassInfo (ClassID , Description? , PriceNotes*)>

<!ELEMENT SupplyAccoInfo (AccommodationID , AccommodationType , Location? , Name , PriceNotes* , SupplyUnitInfo*)>

<!ELEMENT Location ((CountryID , AreaID? , PlaceID , AccommodationID?) | (Country , Area? , Place))>

<!ELEMENT SupplyUnitInfo (UnitID , UnitType , UnitDif? , Description? , MinOccupancy? , MaxOccupancy? , FacilityInfo* , BoardInfo* , SupplyPriceInfo* , PriceNotes*)>

<!ELEMENT FacilityInfo (FacilityType , Description?)>

<!ELEMENT BoardInfo (BoardType , Description? , PriceNotes*)>

<!ELEMENT SupplyPriceInfo (((SeasonStart? , SeasonEnd?) | DepartureDate*) , (Duration? | (DurationMin? , DurationMax?) | DurationCode?) , PaxMin , PaxMax , Price)>

<!ELEMENT Area (#PCDATA)>

<!ELEMENT Brand (#PCDATA)>

<!ELEMENT MutationType (#PCDATA)>

<!ELEMENT OfferType (#PCDATA)>

<!ELEMENT StartDate (#PCDATA)>

<!ELEMENT EndDate (#PCDATA)>

<!ELEMENT DepartureDay (#PCDATA)>

<!ELEMENT ArrivalDay (#PCDATA)>

<!ELEMENT ReferenceID (#PCDATA)>

<!ELEMENT Page (#PCDATA)>

<!ATTLIST Page  Brochure      CDATA  #IMPLIED
                  PriceAppendix CDATA  #IMPLIED >
<!ELEMENT SeasonStart (#PCDATA)>

<!ELEMENT SeasonEnd (#PCDATA)>

<!ELEMENT DurationMin (#PCDATA)>

<!ATTLIST DurationMin  DurationType  (dagen | nachten )  'dagen' >
<!ELEMENT DurationMax (#PCDATA)>

<!ATTLIST DurationMax  DurationType  (dagen | nachten )  'dagen' >
<!ELEMENT DurationCode (DurationCodeType , ArrivalDay+)>

<!ELEMENT DurationCodeType (#PCDATA)>

<!ELEMENT PaxMin (#PCDATA)>

<!ELEMENT PaxMax (#PCDATA)>

<!-- ============================================
     =    module PreBookRequest                 =
     ============================================ -->
<!ELEMENT PreBookRequest (PreBookDetails? , PaxDetails? , PreferencesAndEssentials*)>

<!ELEMENT PreBookDetails (PackageID? , BookID? , Reference? , TransportType , CountryID? , CountryDescription? , AreaID? , AreaDescription? , PlaceID? , PlaceDescription? , PackageDescription? , PreBookAccommodation? , PreBookAlternativeAccommodation? , NumberOfAdults , NumberOfChildren , NumberOfBabies , DepartureDate , AlternativeDepartureDate? , DeparturePoint? , Duration? , PreBookNotes?)>

<!ELEMENT PreBookAccommodation (AccommodationID? , AccommodationDescription? , AccommodationType? , BoardType? , UnitType? , FacilityType*)>

<!ELEMENT PreBookAlternativeAccommodation (AccommodationID? , AccommodationDescription? , AccommodationType? , BoardType? , UnitType? , FacilityType*)>

<!ELEMENT CountryID (#PCDATA)>

<!ELEMENT AreaID (#PCDATA)>

<!ELEMENT PlaceID (#PCDATA)>

<!ELEMENT CountryDescription (#PCDATA)>

<!ELEMENT AreaDescription (#PCDATA)>

<!ELEMENT PlaceDescription (#PCDATA)>

<!ELEMENT PackageDescription (#PCDATA)>

<!ELEMENT AlternativeDepartureDate (#PCDATA)>

<!ELEMENT AccommodationDescription (#PCDATA)>

<!ATTLIST AccommodationDescription  code   CDATA  #IMPLIED
                                      summer CDATA  #IMPLIED
                                      winter CDATA  #IMPLIED >
<!ELEMENT PreBookNotes (#PCDATA)>

<!-- ============================================
     =    module ChangeBookRequest              =
     ============================================ -->
<!ELEMENT ChangeBookRequest (PackageDetails? | Transport* | Accommodation* | RoundTrip* | Cruise* | AdditionalProducts? | PaxDetails? | PreferencesAndEssentials*)>

<!-- ============================================
     =    module ChangeBookResponse             =
     ============================================ -->
<!ELEMENT ChangeBookResponse (PackageDetails? , Transport* , Accommodation* , RoundTrip* , Cruise* , AdditionalProducts? , PaxDetails? , PaxAssignment? , PriceInfo? , Messages*)>

<!ATTLIST ChangeBookResponse  ChangePackageDetails            (ja | nee )  #REQUIRED
                                ChangeTransport                 (ja | nee )  #REQUIRED
                                ChangeAccommodation             (ja | nee )  #REQUIRED
                                ChangeRoundtrip                 (ja | nee )  #REQUIRED
                                ChangeCruise                    (ja | nee )  #REQUIRED
                                ChangeAdditionalProducts        (ja | nee )  #REQUIRED
                                ChangePaxDetails                (ja | nee )  #REQUIRED
                                ChangePreferencesAndEssentials  (ja | nee )  #REQUIRED >
<!-- ============================================
     =    module RemoveComponent                =
     ============================================ -->
<!ELEMENT RemoveComponentRequest ((ComponentID , Sequence)+)>

<!ELEMENT RemoveComponentResponse (ComponentID , Sequence , Status)>

<!-- ============================================
     =    ANVR Complaint message structure      =
     ============================================ -->
<!ELEMENT ComplaintRequest (ComplaintDetails , Complaint , ComplaintSettlement)>

<!-- ======================================================================================
     =    module ComplaintDetails                                                                                                                                =
     ======================================================================================   -->
<!ELEMENT ComplaintDetails (SenderEmail , SenderTelephone , SenderFax? , SenderOnBehalfOfID? , TourOperator , BookID , DossierTravelAgent , Destination , ClientName , Price)>

<!ELEMENT SenderEmail (#PCDATA)>

<!ELEMENT SenderTelephone (#PCDATA)>

<!ELEMENT SenderFax (#PCDATA)>

<!ELEMENT SenderOnBehalfOfID (#PCDATA)>

<!ELEMENT TourOperator (#PCDATA)>

<!ELEMENT DossierTravelAgent (#PCDATA)>

<!ELEMENT ClientName (#PCDATA)>

<!-- ======================================================================================
     =    module Complaint                                                                =
     ======================================================================================   -->
<!ELEMENT Complaint (ComplaintID , Description , ComplaintType , ComplaintReport , Deviation , LocallyContact , TravelAgencyContact? , EvidenceDescription , Payment)>

<!ELEMENT ComplaintID (#PCDATA)>

<!ELEMENT ComplaintType (#PCDATA)>

<!ELEMENT ComplaintReport (#PCDATA)>

<!ELEMENT Deviation (#PCDATA)>

<!ELEMENT LocallyContact (Name , Date , ActionDescription)>

<!ELEMENT TravelAgencyContact (Name , Date , ActionDescription)>

<!ELEMENT ActionDescription (#PCDATA)>

<!ELEMENT EvidenceDescription (#PCDATA)>

<!ELEMENT Payment (#PCDATA)>

<!ATTLIST Payment  Currency  (FL | EUR )  #REQUIRED >
<!-- ======================================================================================
     =    module ComplaintSettlement                                                                  =
     ======================================================================================   -->
<!ELEMENT ComplaintSettlement (Settlement , RecomPrice? , Response? , Beneficiary)>

<!ATTLIST ComplaintSettlement  Type  (Afhankelijk | Onafhankelijk )  #REQUIRED >
<!ELEMENT Settlement (#PCDATA)>

<!ELEMENT Response (#PCDATA)>

<!ELEMENT Beneficiary (Initials , Infix? , Name , Gender? , Address? , Zipcode? , Place , Country? , BankAccount?)>

<!-- ======================================================================================
     =    module Search                                                                   =
     ======================================================================================   -->
<!ELEMENT SearchRequest (SearchDestinations? , SearchDeparturePeriods? , SearchPaxDetails? , SearchDurations? , SearchTransports? , SearchAccommodations? , SearchHolidayType? , SearchPrice? , SearchBrand?)>

<!ATTLIST SearchRequest  MaxResults    CDATA  #IMPLIED
                           WaitListCheck  (ja | nee )  #IMPLIED >
<!ELEMENT SearchDestinations (Destination)+>

<!ELEMENT SearchDeparturePeriods (SearchDeparturePeriod+)>

<!ELEMENT SearchDeparturePeriod ((Date , Period?) | (Period))>

<!ELEMENT Period (StartDate , EndDate)>

<!ELEMENT SearchPaxDetails ((NumberOfAdults , NumberOfChildren? , NumberOfBabies?) | (SearchPaxDescription+))>

<!ELEMENT SearchPaxDescription (PaxID , (DateOfBirth | Age)?)>

<!ELEMENT SearchDurations ((Duration)+ , (RangeFrom , RangeTo)?)>

<!ELEMENT SearchTransports (SearchTransport+)>

<!ELEMENT SearchTransport (SearchTransportType , SearchDeparture? , SearchArrival?)>

<!ELEMENT SearchTransportType (#PCDATA)>

<!ELEMENT SearchDeparture (Point? , Date , Time? , PickUp*)>

<!ELEMENT SearchArrival (Point? , Date , Time? , DropOff*)>

<!ELEMENT SearchAccommodations (SearchAccommodation+)>

<!ELEMENT SearchAccommodation (AccommodationType? , UnitType? , BoardType? , NumberOfUnits?)>

<!ELEMENT SearchHolidayType (#PCDATA)>

<!ELEMENT SearchPrice (PriceMin? , PriceMax)>

<!ELEMENT PriceMin (#PCDATA)>

<!ATTLIST PriceMin  Currency  (EUR )  #REQUIRED
                      PricePer CDATA  #REQUIRED >
<!ELEMENT PriceMax (#PCDATA)>

<!ATTLIST PriceMax  Currency  (EUR )  #REQUIRED
                      PricePer CDATA  #REQUIRED >
<!ELEMENT SearchBrand (#PCDATA)>

<!ELEMENT SearchDetailsRequest (SearchDetailsID)>

<!ELEMENT SearchDetailsID (#PCDATA)>

<!ATTLIST SearchDetailsID  DetailIDType  (Pack | Acco | Trans )  #REQUIRED >
<!ELEMENT SearchResponse (SearchRecap , SearchResults)>

<!ELEMENT SearchRecap (SearchRequest)>

<!ELEMENT SearchResults (SearchResult+ | SearchRefineResult+)>

<!ELEMENT SearchResult (PackageID , Destination , Transport? , Accommodation? , RoundTrip? , Cruise?)>

<!ELEMENT SearchRefineResult (DestinationListItem* , TransportListItem* , AccommodationListItem* , HolidayTypeListItem* , BrandListItem*)>

<!ELEMENT DestinationListItem (DestinationID , DestinationDesc)>

<!ELEMENT TransportListItem (SearchTransportType , SearchDeparture , SearchArrival)>

<!ELEMENT AccommodationListItem (AccommodationType , UnitType , BoardType)>

<!ELEMENT HolidayTypeListItem (#PCDATA)>

<!ELEMENT BrandListItem (#PCDATA)>

<!ELEMENT SearchDetailsResponse (SearchDetailsID , (MultiMedia* | (AccommodationContent | TransportContent)*))>

<!-- ======================================================================================
     =    module AccommodationContent                                                     =
     ======================================================================================   -->
<!ELEMENT AccommodationContent (AccommodationID , PublicationPeriod? , Location , AccommodationDescription , Attribute* , ShortDescription? , Text* , Image* , Reference* , UnitInfo*)>

<!ELEMENT Attribute (Description , Value)>

<!ATTLIST Attribute  code CDATA  #IMPLIED >
<!ELEMENT Value (#PCDATA)>

<!ATTLIST Value  type CDATA  #IMPLIED >
<!ELEMENT ShortDescription (Title? , P+)>

<!ELEMENT Text (Title? , Sequence? , TextContent)>

<!ATTLIST Text  type   CDATA  #IMPLIED
                  summer  (ja | nee )  'ja'
                  winter  (ja | nee )  'ja' >
<!ELEMENT Image (Title? , Sequence? , Url)>

<!ATTLIST Image  imagetype CDATA  #IMPLIED
                   summer    CDATA  #IMPLIED
                   winter    CDATA  #IMPLIED >
<!ELEMENT Url (#PCDATA)>

<!ELEMENT Title (#PCDATA)>

<!ELEMENT TextContent (#PCDATA | Text | P | Ref)*>

<!ELEMENT P (#PCDATA | List | Table | B | I | U | Ref)*>

<!ELEMENT List (Li+)>

<!ATTLIST List  type  (a | 1 | bull | dash )  'bull' >
<!ELEMENT Li (#PCDATA)>

<!ELEMENT B (#PCDATA)>

<!ELEMENT U (#PCDATA)>

<!ELEMENT I (#PCDATA)>

<!ELEMENT Ref (#PCDATA)>

<!ATTLIST Ref  href   CDATA  #IMPLIED
                 target CDATA  #IMPLIED >
<!ELEMENT UnitInfo (UnitID , UnitType , UnitDif? , Description? , Text* , MinOccupancy? , MaxOccupancy? , FacilityInfo* , BoardInfo* , PriceInfo* , PriceNotes*)>

<!-- ======================================================================================
     =    module TransportContent                                                     =
     ======================================================================================   -->
<!ELEMENT TransportContent (TransportID , PublicationPeriod? , TransportType , CarrierInfo* , Location , TransportDescription , Attribute* , ShortDescription? , Text* , Image* , Reference* , TransportInfo?)>

<!ELEMENT TransportDescription (#PCDATA)>

<!ELEMENT TransportInfo (DepartureInfo* , ArrivalInfo* , ClassInfo* , PriceNotes*)>

<!--
     ======================================================================================
     = Table                                                                              =
     = 'table' contains the CALS definition of tables                                     =
     ======================================================================================
-->
<!ELEMENT Table (tgroup+)>

<!ATTLIST Table  tabstyle   CDATA  #IMPLIED
                   tocentry   CDATA  '1'
                   shortentry CDATA  #IMPLIED
                   frame       (top | bottom | topbot | all | sides | none )  #IMPLIED
                   colsep     CDATA  #IMPLIED
                   rowsep     CDATA  #IMPLIED
                   orient      (port | land )  #IMPLIED
                   pgwide     CDATA  #IMPLIED >
<!ELEMENT tgroup (colspec* , spanspec* , thead? , tfoot? , tbody)>

<!ATTLIST tgroup  cols        CDATA  #REQUIRED
                    tgroupstyle CDATA  #IMPLIED
                    colsep      CDATA  #IMPLIED
                    rowsep      CDATA  #IMPLIED
                    align        (left | right | center | justify | char )  'left'
                    charoff     CDATA  '50'
                    char        CDATA  '' >
<!ELEMENT colspec EMPTY>

<!ATTLIST colspec  colnum   CDATA  #IMPLIED
                     colname  CDATA  #IMPLIED
                     align     (left | right | center | justify | char )  #IMPLIED
                     charoff  CDATA  #IMPLIED
                     char     CDATA  #IMPLIED
                     colwidth CDATA  #IMPLIED
                     colsep   CDATA  #IMPLIED
                     rowsep   CDATA  #IMPLIED >
<!ELEMENT spanspec EMPTY>

<!ATTLIST spanspec  namest   CDATA  #REQUIRED
                      nameend  CDATA  #REQUIRED
                      spanname CDATA  #REQUIRED
                      align     (left | right | center | justify | char )  'center'
                      charoff  CDATA  #IMPLIED
                      char     CDATA  #IMPLIED
                      colsep   CDATA  #IMPLIED
                      rowsep   CDATA  #IMPLIED >
<!ELEMENT thead (colspec* , row+)>

<!ATTLIST thead  valign  (top | middle | bottom )  'bottom' >
<!ELEMENT tfoot (colspec* , row+)>

<!ATTLIST tfoot  valign  (top | middle | bottom )  'top' >
<!ELEMENT tbody (row+)>

<!ATTLIST tbody  valign  (top | middle | bottom )  'top' >
<!ELEMENT row (entry)+>

<!ATTLIST row  rowsep CDATA  #IMPLIED >
<!ELEMENT entry (#PCDATA | P)*>

<!ATTLIST entry  colname  CDATA  #IMPLIED
                   namest   CDATA  #IMPLIED
                   nameend  CDATA  #IMPLIED
                   spanname CDATA  #IMPLIED
                   morerows CDATA  '0'
                   colsep   CDATA  #IMPLIED
                   rowsep   CDATA  #IMPLIED
                   rotate   CDATA  '0'
                   valign    (top | bottom | middle )  #IMPLIED
                   align     (left | right | center | justify | char )  #IMPLIED
                   charoff  CDATA  #IMPLIED
                   char     CDATA  #IMPLIED >
