Conditions in a DAML-S process

Hi,

I really appreciate the feedback to my previous question.  I hope that
my questions are not too simple...

I have another question regarding conditions in a DAML-S process (an
IF-THEN-ELSE condition or a Repeat-While condition).
Since they are specified as a type rather than an instance they seem
somewhat vague to me.
For instance, if I want to specify which process branch to take based on
the type of the output of a process, how does that differ if I want to
make the decision based on the value of the output?

From the Yahoo example on the DAML-S page:
...

<rdfs:Class rdf:ID="TripType">
  <daml:oneOf rdf:parseType="daml:collection">
    <TripType rdf:ID="RoundTrip"/>
    <TripType rdf:ID="OneWayTrip"/>
  </daml:oneOf>
</rdfs:Class>

<rdf:Property rdf:ID="selectTripType">
  <rdfs:subPropertyOf rdf:resource="process:input"/>
  <rdfs:range rdf:resource="#TripType"/>
</rdf:Property>

...

<!-- determine the trip is one-way or two-way. -->

<rdfs:Class rdf:ID="DetermineTripType">
  <rdfs:subClassOf rdf:resource="process:Condition"/>
  <rdfs:subClassOf>
      <daml:Restriction>
        <daml:onProperty rdf:about="#DetermineTripTypeInput" />
        <daml:hasValue rdf:resource="#OneWayTrip"/>
      </daml:Restriction>
  </rdfs:subClassOf>
</rdfs:Class>


...
<rdfs:Class rdf:ID="BookFlight">
  <rdfs:subClassOf rdf:resource="process:CompositeProcess"/>
  <daml:sameClassAs>
    <process:Sequence>
      <daml:item>
        <rdfs:Class rdfs:about="#LocateAirportCode"/>
      </daml:item>
      <daml:item>
        <process:If-Then-Else>
          <process:IfCondition>
            <rdfs:Class rdfs:about="#DetermineTripType"/>
          </process:IfCondition>
          <process:ThenCondition>
            <rdfs:Class rdfs:about="#SearchFlightOneWay"/>
          </process:ThenCondition>
          <process:ElseCondition>
            <rdfs:Class rdfs:about="#SearchFlightTwoWay"/>
          </process:ElseCondition>
        </process:If-Then-Else>

...

Besides being extremely verbose, it is not quite clear to me if the
condition is on a value or on a type.  It looks like a value, but an
object value rather than a data value.  How would the condition be
specified over a type?  What about a data value (is this equivalent to
an object value)?
For example, if there are two types: ResultType, and WaitType and I want
the process to loop on the Wait type but continue on a Result type, how
would this be specified?

To me it seems like it should look something like:
<rdfs:Class rdf:ID="BookFlight">
  <rdfs:subClassOf rdf:resource="process:CompositeProcess"/>
  <daml:sameClassAs>
    <process:Sequence>
      <daml:item>
        <rdfs:Class rdfs:about="#Request"/>
      </daml:item>
      <daml:item>
        <process:Repeat-Until>
          <process:UntilCondition>
            <rdfs:Class rdfs:about="#DetermineResultType"/>
          </process:UntilCondition>
          <process:untilProcess>
            <rdfs:Class rdfs:about="#Request"/>
          </process:untilProcess>
        </process:Repeat-Until>
      </daml:item>
    </process:Sequence>
  </daml:sameClassAs>
</rdfs:Class>

However, I am not sure how DetermineResultType should be defined.

Thank you for any light you might shed on this for me,

David Buttler

Received on Friday, 22 June 2001 20:47:18 UTC