- 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