- From: <vojtech.toman@emc.com>
- Date: Mon, 1 Nov 2010 10:06:06 -0400
- To: <xproc-dev@w3.org>
- Message-ID: <997C307BEB90984EBE935699389EC41C029E1626@CORPUSMX70C.corp.emc.com>
Not necessarily. Depending on how the XProc processor works internally, the steps B and C can be executed at any time. The only restriction is that B must run before the first p:identity step, and C before the second p:identity step. So C can run between my:step and the second p:identity step.
To make it even more interesting, if you look at the pipeline more closely, you’ll see that my:step can be executed at any time inside p:group. It does not depend on the preceding p:sink, and the following two steps do not depend on it either. Given that, both B and C can run *after* my:step.
To put it short, the pipeline does not say that the p:group A depends on B and C. It says that certain parts of the pipeline (the two p:identity steps) depend on B and C, respectively.
Regards,
Vojtech
--
Vojtech Toman
Consultant Software Engineer
EMC | Information Intelligence Group
vojtech.toman@emc.com
http://developer.emc.com/xmltech
From: xproc-dev-request@w3.org [mailto:xproc-dev-request@w3.org] On Behalf Of Jostein Austvik Jacobsen
Sent: Monday, November 01, 2010 2:36 PM
To: Toman, Vojtech
Cc: xproc-dev@w3.org
Subject: Re: How to run unconnected steps in sequence?
Ah, that makes things simpler. So just to be sure:
<p:group name="A">
<p:identity>
<p:input port="source">
<p:pipe port="result" step="B"/>
</p:input>
</p:identity>
<p:sink/>
<my:step/>
<p:identity>
<p:input port="source">
<p:pipe port="result" step="C"/>
</p:input>
</p:identity>
<p:sink/>
</p:group>
In this case, both B and C must complete before before my:step gets to run? (opposite to what I assumed at first)
Regards
Jostein
2010/11/1 <vojtech.toman@emc.com>
Ad 1. The p:pipe element creates a connection – and a dependency – between steps. If the step A contains a p:pipe that points to the step B, it means that A must be executed *after* B. It does not matter if the p:pipe is in p:input, p:with-option, p:with-param, or p:variable. All p:pipe elements contained in the step contribute edges to the dependency graph.
Ad 2: There is no guarantee; but you don’t care in this case. The p:load does not depend on p:sink being executed first. I used p:sink just to introduce a side effect-free dependency on p:store. (You can also use other steps than p:sink, provided they don’t introduce side effects that would change the result of your pipeline.)
Regards,
Vojtech
--
Vojtech Toman
Consultant Software Engineer
EMC | Information Intelligence Group
vojtech.toman@emc.com
http://developer.emc.com/xmltech
From: Jostein Austvik Jacobsen [mailto:josteinaj@gmail.com]
Sent: Monday, November 01, 2010 1:46 PM
To: Toman, Vojtech
Cc: xproc-dev@w3.org
Subject: Re: How to run unconnected steps in sequence?
1. Thanks. I didn't know dependencies could be introduced that way. Is this similar to what happens when you have multiple p:pipes in a p:input?
2. and 3.: How am I guaranteed that p:load won't run before the p:sink?
Regards
Jostein
2010/11/1 <vojtech.toman@emc.com>
The solution is to introduce the dependency explicitly. Here are some examples (all are variations on the same theme, but some may be more applicable to your use case):
1.
<p:store href=”file.xml” name=”store”/>
<p:load>
<p:with-option name=”href” select=”’file.xml’”>
<p:pipe step=”store” port=”result”/>
</p:with-option>
</p:load>
2.
<p:store href=”file.xml” name=”store”/>
<p:group>
<p:sink>
<p:input port=”source”>
<p:pipe step=”store” port=”result”/>
</p:input>
</p:sink>
<p:load href=”file.xml”/>
</p:group>
3.
<p:group>
<p:store href=”file.xml”/>
<p:identity>
<p:input port="source">
<p:empty/>
</p:input>
</p:identity>
<p:group>
<p:group>
<p:sink/>
<p:load href=”file.xml”/>
</p:group>
Some processors also support extension attributes to control dependencies between steps, but I would recommend to avoid this unless absolutely necessary.
Regards,
Vojtech
--
Vojtech Toman
Consultant Software Engineer
EMC | Information Intelligence Group
vojtech.toman@emc.com
http://developer.emc.com/xmltech
From: xproc-dev-request@w3.org [mailto:xproc-dev-request@w3.org] On Behalf Of Jostein Austvik Jacobsen
Sent: Monday, November 01, 2010 1:01 PM
To: xproc-dev@w3.org
Subject: How to run unconnected steps in sequence?
I remember seeing a note on this problem somewhere, but I can't find it. Say I want to run these two steps in sequence:
<p:store href="file.xml"/>
<p:load href="file.xml"/>
p:load would have to run after p:store, or the file wouldn't be there yet. Since p:store has no primary output and p:load has no primary input, the processor may choose the order they are run in.
Is there a standard pattern for solving such issues? Something general, not just for the store/load use-case?
Regards
Jostein Austvik Jacobsen
Received on Monday, 1 November 2010 14:07:42 UTC