<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE uridef[
  <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns">
  <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema">
  <!ENTITY daml "http://www.daml.org/2001/03/daml+oil">
  <!ENTITY xsd "http://www.w3.org/2001/XMLSchema">
  <!ENTITY service "http://www.daml.org/services/daml-s/0.9/Service.daml">
  <!ENTITY process "http://www.daml.org/services/daml-s/0.9/Process.daml">
  <!ENTITY profile "http://www.daml.org/services/daml-s/0.9/Profile.daml">
  <!ENTITY ba_service "http://www.daml.org/services/daml-s/0.9/BravoAirService.daml">
  <!ENTITY concepts "http://www.daml.ri.cmu.edu/ont/DAML-S/concepts.daml">
  <!ENTITY DEFAULT "http://www.daml.org/services/daml-s/0.9/BravoAirProcess.daml">
]>
    
 
<rdf:RDF
  xmlns:rdf=     "&rdf;#"
  xmlns:rdfs=    "&rdfs;#"
  xmlns:daml=    "&daml;#"
  xmlns:xsd=     "&xsd;#"
  xmlns:service= "&service;#"
  xmlns:process= "&process;#"
  xmlns:profile= "&profile;#"
  xmlns=         "&DEFAULT;#">
 
  <daml:Ontology rdf:about="">
    <daml:versionInfo>
      $Id: BravoAirProcess.daml,v 1.11 2003/09/19 05:00:18 martin Exp $
    </daml:versionInfo>
    <rdfs:comment>
      DAML-S Coalition: BravoAir Example for DAML-S release 0.9 Process Model
 
    </rdfs:comment>
    <daml:imports rdf:resource="&rdf;" />
    <daml:imports rdf:resource="&rdfs;" />
    <daml:imports rdf:resource="&daml;" />
    <daml:imports rdf:resource="&service;" />
    <daml:imports rdf:resource="&process;" />
    <daml:imports rdf:resource="&profile;" />
    <daml:imports rdf:resource="&concepts;" />
  </daml:Ontology>

  <!-- ################################################################### -->
  <!-- Instance Definition of BravoAir Reservation Agent Process Model -->

  <process:ProcessModel rdf:ID="BravoAir_ReservationAgent_ProcessModel">
    <process:hasProcess rdf:resource="#BravoAir_Process" />
    <service:describes rdf:resource="&ba_service;#BravoAir_ReservationAgent"/>
  </process:ProcessModel>


  <!-- ########################################################################## -->
  <!-- Definition of top level Process as a composite process -->

  <daml:Class rdf:ID="BravoAir_Process">
    <daml:subClassOf rdf:resource="&process;#CompositeProcess" />
    <rdfs:label> This is the top level process for BravoAir </rdfs:label>
  </daml:Class>


<!-- There is no need of expand or collapse BravoAir_Process because
it is already a Composite Process and there are no Simple processes to
deal with -->

<!-- 
BravoAir_Process is a composite process.

It is composed of a sequence whose components are 2 atomic
processes, GetDesiredFlightDetails and SelectAvailableFlight,
and a composite process, BookFlight.

-->

  <daml:Class rdf:about="#BravoAir_Process">   
    <daml:subClassOf rdf:resource="&process;#CompositeProcess"/>
    <daml:subClassOf>
      <daml:Restriction> 
        <daml:onProperty rdf:resource="&process;#composedOf"/>
        <daml:toClass>
          <daml:Class>
            <daml:intersectionOf rdf:parseType="daml:collection">
              <daml:Class rdf:about="&process;#Sequence"/>
              <daml:Restriction> 
                <daml:onProperty rdf:resource="&process;#components"/>
                <daml:toClass>
                  <daml:Class>
                    <process:listOfInstancesOf rdf:parseType="daml:collection">
                      <daml:Class rdf:about="#GetDesiredFlightDetails"/>
                      <daml:Class rdf:about="#SelectAvailableFlight"/>
                      <daml:Class rdf:about="#BookFlight"/>
                    </process:listOfInstancesOf>
                  </daml:Class>
                </daml:toClass>
              </daml:Restriction>
            </daml:intersectionOf>
          </daml:Class>
        </daml:toClass>
      </daml:Restriction>
    </daml:subClassOf>
  </daml:Class>

<!-- ########################################################################## -->
<!-- BookFlight (Composite)
     Log into account and confirm reservation
  -->

<!-- 
BookFlight is a composite process.

It is composed of a sequence whose components are 2 atomic
processes, LogIn and ConfirmReservation.

-->

  <daml:Class rdf:ID="BookFlight">   
    <daml:subClassOf rdf:resource="&process;#CompositeProcess"/>
    <daml:subClassOf>
      <daml:Restriction> 
        <daml:onProperty rdf:resource="&process;#composedOf"/>
        <daml:toClass>
          <daml:Class>
            <daml:intersectionOf rdf:parseType="daml:collection">
              <daml:Class rdf:about="&process;#Sequence"/>
              <daml:Restriction> 
                <daml:onProperty rdf:resource="&process;#components"/>
                <daml:toClass>
                  <daml:Class>
                    <process:listOfInstancesOf rdf:parseType="daml:collection">
	              <daml:Class rdf:about="#LogIn"/>
	              <daml:Class rdf:about="#ConfirmReservation"/>
                    </process:listOfInstancesOf>
                  </daml:Class>
                </daml:toClass>
              </daml:Restriction>
            </daml:intersectionOf>
          </daml:Class>
        </daml:toClass>
      </daml:Restriction>
    </daml:subClassOf>
  </daml:Class>

  <!-- No specification of inputs or outputs are generated here -->


<!-- ########################################################################## -->
<!-- GetDesiredFlightDetails (ATOMIC)
     Get details such as airports, prefered time, roundtrip etc
  -->

  <daml:Class rdf:ID="GetDesiredFlightDetails">
    <daml:subClassOf rdf:resource="&process;#AtomicProcess" />
  </daml:Class>

    <!-- GetDesiredFlightDetails IOPEs -->

  <daml:Property rdf:ID="departureAirport_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#GetDesiredFlightDetails"/>
    <daml:range rdf:resource="&concepts;#Airport"/>
  </daml:Property>

  <daml:Property rdf:ID="arrivalAirport_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#GetDesiredFlightDetails"/>
    <daml:range rdf:resource="&concepts;#Airport"/>
  </daml:Property>

  <daml:Property rdf:ID="outboundDate_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#GetDesiredFlightDetails"/>
    <daml:range rdf:resource="&concepts;#FlightDate"/>
  </daml:Property>

  <daml:Property rdf:ID="inboundDate_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#GetDesiredFlightDetails"/>
    <daml:range rdf:resource="&concepts;#FlightDate"/>
  </daml:Property>

  <daml:Property rdf:ID="roundTrip_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#GetDesiredFlightDetails"/>
    <daml:range rdf:resource="&concepts;#RoundTrip"/>
  </daml:Property>

  <!-- ########################################################################## -->
  <!-- SelectAvailableFlight (ATOMIC)
       Get users prefered flight choice from available itineraries
    -->

  <daml:Class rdf:ID="SelectAvailableFlight">
    <daml:subClassOf rdf:resource="&process;#AtomicProcess" />
  </daml:Class>

    <!-- SelectAvailableFlight IOPEs -->

  <daml:Property rdf:ID="preferredFlightItinerary_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#SelectAvailableFlight"/>
    <daml:range rdf:resource="&concepts;#FlightItinerary"/>
  </daml:Property>

  <daml:Property rdf:ID="availableFlightItineraryList_Out">
    <daml:subPropertyOf rdf:resource="&process;#output"/>
    <daml:domain rdf:resource="#SelectAvailableFlight"/>
    <daml:range rdf:resource="&concepts;#FlightItineraryList"/>
  </daml:Property>


<!-- ########################################################################## -->
<!-- LogIn (ATOMIC)
     Get user details
  -->

  <daml:Class rdf:ID="LogIn">
    <daml:subClassOf rdf:resource="&process;#AtomicProcess" />
  </daml:Class>


    <!-- LogIn IOPE -->

  <daml:Property rdf:ID="acctName_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#LogIn"/>
    <daml:range rdf:resource="&concepts;#AcctName"/>
  </daml:Property>

  <daml:Property rdf:ID="password_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#LogIn"/>
    <daml:range rdf:resource="&concepts;#Password"/>
  </daml:Property>

<!-- ########################################################################## -->
<!-- ConfirmReservation (ATOMIC)
     Confirm selected reservation
  -->

  <daml:Class rdf:ID="ConfirmReservation">
    <daml:subClassOf rdf:resource="&process;#AtomicProcess" />
  </daml:Class>

    <!-- ConfirmReservation IOPE -->

  <daml:Property rdf:ID="reservationID_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#ConfirmReservation"/>
    <daml:range rdf:resource="&concepts;#ReservationNumber"/>
  </daml:Property>

  <daml:Property rdf:ID="confirm_In">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#ConfirmReservation"/>
    <daml:range rdf:resource="&concepts;#Confirmation"/>
  </daml:Property>

  <daml:Property rdf:ID="preferredFlightItinerary_Out">
    <daml:subPropertyOf rdf:resource="&process;#output"/>
    <daml:domain rdf:resource="#ConfirmReservation"/>
    <daml:range rdf:resource="&concepts;#FlightItinerary"/>
  </daml:Property>

  <daml:Property rdf:ID="acctName_Out">
    <daml:subPropertyOf rdf:resource="&process;#input"/>
    <daml:domain rdf:resource="#ConfirmReservation"/>
    <daml:range rdf:resource="&concepts;#AcctName"/>
  </daml:Property>

  <daml:Property rdf:ID="reservationID_Out">
    <daml:subPropertyOf rdf:resource="&process;#output"/>
    <daml:domain rdf:resource="#ConfirmReservation"/>
    <daml:range rdf:resource="&concepts;#ReservationNumber"/>
  </daml:Property>

  <daml:Property rdf:ID="haveSeat">
    <daml:subPropertyOf rdf:resource="&process;#effect"/>
    <daml:domain rdf:resource="#ConfirmReservation"/>
    <daml:range rdf:resource="&concepts;#HaveFlightSeat"/>
  </daml:Property>

</rdf:RDF>
