Re: 2 questions about perform, data-flow, and OWL-S 1.0

> [Jeff Dalton]
> Suppose there's a text-translation service T that has process T#P,
> and I want to translate a document that's in English to French and
> back again, as a test of the translator.
> 
> I might try to use a process like this:
> 
>   (sequence (perform T#P) (perform T#P))
> 
> "Perform" helps make it clear that I and running the same process,
> T#P, twice.  (More, of course, if someone puts my process in a loop.)
> 
> Question 1: How do I express such a process in OWL-S 1.0, where
> there doesn't seem to be anything named "perform"?

There will be in 1.1.  The syntax will look like this:

      <owls:Perform>
         <owls:process rdf:result="http://.../T#P"/>
      </olws:Perform>

in the simplest case, but we're also introducing flexible notations
for binding the inputs and outputs of a performed process.  (See
below.) 

> Perhaps naively, I'd use something like this:
> 
>   <process:Sequence>
>     <process:Process rdf:resource="T#P" />
>     <process:Process rdf:resource="T#P" />
>   </process:Sequence>
> 
> But does that have the right semantics?  I can't figure it out
> from the OWL-S 1.0 Technical Overview or from Process.owl,
> and I don't know of any more complete reference.

The problem with putting in a reference to the process directly is
that you have no place to hang the descriptions of input and outputs
parameter bindings.

If 'P' takes two inputs, named 'Doc' and 'TargetLang', we can bind to
them thus:

   <owls:Perform rdf:ID="firstCallTP">
      <owls:process rdf:resource="T#P"/>
      <owls:hasBinding>
	 <owls:InputBinding>
	    <owls:theParam rdf:resource="T#Doc"/>
	    <owls:valueForm rdf:resource="http://www.eurodisney.fr/MickeyLeMouse.doc" />
	 </owls:InputBinding>
	 <owls:InputBinding>
	    <owls:theParam rdf:resource="T#TargetLang"/>
	    <owls:valueForm rdf:datatype="&xsd;#string">en</owls:valueForm>
	 </owls:InputBinding>
      </owls:hasBinding>
   </owls:Perform>

If 'hasBinding' were a property of a process, then there would be no
way to distinguish the bindings on one occurrence from the bindings on another.

> Question 2: How to I specify the data-flow?

Oops, I seem to have answered this question already, at least for the inputs.

  ...

> Let's say that T#P has inputs T#inText and T#inLang,
> outputs T#outText and T#outLang.

It seems to me that 'outLang' should be an input (what I called
TargetLang), unless it represents T#P's best guess about what the
target is.

> But I'd still have the problem of saying, for instance,
> that P1#intext at P1 and T#inText at T#P had the same value.
> Since I still have two occurrences of T#P, how do I say which
> one I mean?  It's looks like there's probably a scope rule,
> so that if I attach the sameValues to P1, I'm referring to
> the T#P in P, but I can't tell for sure from the Technical
> Overview or Process.owl.

I assume that T#outText is actually a bunch of text.  Or it might be
the URL where the translator put the answer.  Either way, we refer to
it later by making reference to the same Perform

    <owls:valueForm rdf:parsetype="Literal">
       <owls:ValueOf>
	  <owls:theVar rdf:resource="T#outText"/>
	  <owls:fromProcess ref:resource="#firstCallTP"/>
       </owls:ValueOf>
    </owls:valueForm>

This 'valueForm' property might occur inside the input binding for a
subsequent step.   Note that the 'fromProcess' property has as value
the ID of a Perform.

> Also, this all seems excessively complicated, which makes me
> unsure that this approach (using P1 and P2 etc) is the right
> one.  Perhaps there's an RDF trick, or something, that I've
> overlooked.

The main trick is to supply a concise surface representation plus a
program to translate in and out of RDF.

                                             -- Drew

-- 
                                   -- Drew McDermott
                                      Yale Computer Science Department

Received on Thursday, 20 May 2004 15:42:59 UTC