RE: Web Service Composition using OWL-S

Chris - are Marco and I answering the original question or going way off
beam?
Comments inline..

> -----Original Message-----
> From: Sbodio, Marco Luca 
> Sent: 08 January 2006 15:16
> To: Battle, Steven Andrew
> Cc: Chris Parish; public-sws-ig@w3.org
> Subject: RE: Web Service Composition using OWL-S
> 
> On Thu, January 5, 2006 9:28, Battle, Steven Andrew said:
...
> >> -----Original Message-----
> >> From: public-sws-ig-request@w3.org
> >> [mailto:public-sws-ig-request@w3.org] On Behalf Of Chris Parish
> >> Sent: 04 January 2006 13:20
> >> To: public-sws-ig@w3.org
> >> Subject: Web Service Composition using OWL-S

> >> 	(?person hasData ID1) -> (?person hasData ID2)
> >> 	(?person hasData ID2) -> (?person hasData Name)
> >>
> >
> > I assume that ID1, ID2, Name here aren't variables but a convention 
> > for asserting that fact that you have ID1, ID2...
> > You probably need to quote those values and place hasData in a 
> > suitable namespace. :) Incidentally, you really only need to make a 
> > unary assertion about person here eg. (?person rdf:type eg:hasID1).
> 
> I think that things are slightly different. Chris writes that 
> he has an Ontology defining Person:
> [[
> Ontology has a class Person with properties ID1, ID2, Name, 
> where ID1/ID2 are integer values and Name is a string.
> ]]
> 

Yes, you're right, but then why are the rules above are expressed the
way they are using 'hasData'? What they appear to let you do is infer
that the composition works prior to runtime, ie. without specific values
for ID1, ID2 and Name. I admit I was sticking to the rules as stated.
Maybe they could be expressed differently. The knowledge (epistemic)
precondition of an input, say ID1in, has been described as knows(ID1).
Similarly, for an output we would have eg. knows(ID2). I think 'hasData'
may be used in the same sense as 'knows' here. In that case, these
preconditions and effects are implicit in the (proposed) semantics. But,
as you say, this has little to do with the ontology of Personhood.

There's a neat idea in your OWL-S that's a bit camouflaged. The way that
conditions are being used to create a connection between OWL-S bindings
and an OWL/RDF model being maintained by the client. What you seem to be
doing with the preconditions and conditional result below is to bind
ID1in to the ID1 property of a person on the way in, and to bind ID2out
to the conditional ID2 property of the same person (it's scope is the
atomic process). I agree this is better expressed as a result condition
than an effect, which really should be reserved for world-changing
events.

Something that perplexes me is the evaluation of these result
conditions. They're normally explained as "if the result condition is
true then the associated outputs and effects are obtained". However,
this is typically useless to a client who isn't in a position to
evaluate the condition directly (eg. Is the book in stock). What the
client receives is a set of outputs that normally tell them what
happened (eg. The book you ordered was out of stock). So at runtime we
have to infer the condition from the outputs.

Should we assume that the relationship between a condition and
output/effect is 'iff'? eg. Knows(ID2out) iff ID2(Person, ID2out)
>From this I can bind ID2out in the output and assert ID2(Person,ID2out)
as a logical consequence. However, this gets a bit hairy if the value of
the output is important (eg. output="out of stock" iff outOfStock(book),
output="in stock" iff not(outOfStock(book)))If we only have an
implication from left to right, knows(ID2out) if ID2(Person, ID2out),
then we can't do the inference from the output alone and we can't assert
the ID2 property.

Alternatively, can we assume a (disjunctive) closure over the
alternative results, in this case ID2(Person, ID2out) would be trivially
true. I'd like to hear how people are using and interpresting OWL-S in
practice.

Steve.

> My attempt for WS1 is the following:
> 
> [[
> <process:hasInput>
>   <process:Input rdf:ID="ID1in">
>     <process:parameterType
> rdf:datatype="&xsd;#anyURI">&xsd;#int</process:parameterType>
>   </process:Input>
> </process:hasInput>
> 
> <process:hasLocal>
>   <process:Local rdf:ID="Person">
>     <process:parameterType
> rdf:datatype="&xsd;#anyURI">&ex;#Person</process:parameterType>
>   </process:Local>
> </process:hasLocal>
> 
> <process:hasPrecondition>
>   <expr:SWRL-Condition>
>     <rdfs:label>ID1(Person, ID1in)</rdfs:label>
>     <expr:expressionLanguage rdf:resource="&expr;#SWRL"/>
>     <expr:expressionBody rdf:parseType="Literal">
>       <ruleml:_body>
>         <swrlx:datavaluedPropertyAtom swrlx:property="ID1">
>           <ruleml:var>&thisNamespace;#Person</ruleml:var>
>           <ruleml:var>&thisNamespace;#ID1in</ruleml:var>
>         </swrlx:datavaluedPropertyAtom>
>       </ruleml:_body>
>     </expr:expressionBody>
>   </expr:SWRL-Condition>
> </process:hasPrecondition>
> 
> <process:hasOutput>
>   <process:Output rdf:ID="ID2out">
>     <process:parameterType
> rdf:datatype="&xsd;#anyURI">&xsd;#int</process:parameterType>
>   </process:Output>
> </process:hasOutput>
> 
> <process:hasResult>
>   <process:Result rdf:ID="SuccessfulResult">
>     <process:inCondition>
>       <expr:SWRL-Condition>
>         <rdfs:label>ID2(Person, ID2out)</rdfs:label>
>         <expr:expressionLanguage rdf:resource="&expr;#SWRL"/>
>         <expr:expressionBody rdf:parseType="Literal">
>           <ruleml:_body>
>             <swrlx:datavaluedPropertyAtom swrlx:property="ID2">
>               <ruleml:var>&thisNamespace;#Person</ruleml:var>
>               <ruleml:var>&thisNamespace;#ID2out</ruleml:var>
>             </swrlx:datavaluedPropertyAtom>
>           </ruleml:_body>
>         </expr:expressionBody>
>       </expr:SWRL-Condition>
>     </process:inCondition>
>     <process:withOutput>
>       <process:OutputBinding>
>         <process:toParam rdf:resource="#ID2out"/>
>         <process:valueSource>
>           <process:ValueOf>
>             <process:theVar rdf:resource="#ID2out"/>
>           </process:ValueOf>
>         </process:valueSource>
>       </process:OutputBinding>
>     </process:withOutput>
>     <!-- IMHO there is no effect, so I skip process:hasEffect -->
>   </process:Result>
> </process:hasResult>
> ]]
> 
> What do you think?
> 
> 
> 

Received on Monday, 9 January 2006 13:24:10 UTC