- From: Drew McDermott <drew.mcdermott@yale.edu>
- Date: Thu, 30 Dec 2004 19:36:39 -0500
- To: public-sws-ig@w3.org
> [Manshan Lin]
> If the resulting plan is in partial order manner, I'm wondering
> whether we can directly use the constructs (such as Sequence,
> Unordered,Split-join) in OWL-S process model to express the plan.
>
> For example:
> OperationB<OperationEnd,
> OperationC<OperationEnd,
> OperationD<OperationB,
> OperationD<OperationC,
> OperationE<OperationC
> OperationBegin<OperationD
> OperationBegin<OperationE
> (Note: OperationBegin, OperationB, ... mean performs of
> the processes)
>
> If "Unordered" construct allows interleaving,
> can we express the above plan as following ?
Actually, it doesn't. It's been replaced by "Any-order," which
requires its steps to be executed in sequence, without saying _which_
sequence.
But let's say you used Split-Join instead.
> -------------------------------------------------
> X1=(Sequence OperationB OperationEnd)
> X2=(Sequence OperationC OperationEnd)
> ...
> X7=(Sequence OperationBegin OperationE)
> Y=(Unorder X1 X2 X3 X4 X5 X6 X7)
> -------------------------------------------------
So Y would = (Split-Join X1 ... X7)
> ***I don't know whether the same perform instance can appear
> in two or more constructs.***
Syntactically it certainly can, because we routinely use rdf:ID's to
refer to occurrences of performs. You can toss that ID in instead of
the entire description. (In the surface syntax, you would use a tag
as a step; the current grammar might not allow that.)
The question is what the semantics would be. There really isn't any
official semantics. In a denotational framework, the denotation of a
process expression would be the set of all its execution traces. The
control constructs that compose processes would be defined analogous
to this definition for Sequence:
E is an execution of a;b;...;c
if and only if E is a time interval I such that instances of a, b, ...,
c occur in that order in the interval, not overlapping, in the right
order, such that begin(a) coincides with begin(I), etc. etc.
In other words, an occurrence of _a_ in _a;b;...;c_ is interpreted as
a process type. If we give an ID to the defining RDF for _a_, that
makes the ID a synonym for that process type. Hence, there should be
no obstacle to including it in multiple places. Unfortunately, the
meaning comes out wrong. Nothing says that in a particular execution
trace the subtrace corresponding to the occurrence of #a in this
context (say):
<objList:first rdf:resource="#a"/>
(in a Sequence, say) is the same as the subtrace corresponding to 'a'
in this context:
<objList:first>
<perform rdf:ID="a"> ...
<owls:process rdf:resource="examp:a"/>
</perform>
</objList:first>
(in another Sequence, or a Split-Join). The class Perform has
processes as elements, not execution traces. So reusing an ID saves a
bit of typing, but means exactly the same as what you'd get by
retyping the entire Perform description. (Plus, it would mislead the
innocent.)
-- Drew
--
-- Drew McDermott
Yale University
Computer Science Department
Received on Friday, 31 December 2004 00:36:56 UTC