W3C home > Mailing lists > Public > xproc-dev@w3.org > November 2010

RE: How to run unconnected steps in sequence?

From: <vojtech.toman@emc.com>
Date: Mon, 1 Nov 2010 09:04:32 -0400
Message-ID: <997C307BEB90984EBE935699389EC41C029E15F7@CORPUSMX70C.corp.emc.com>
To: <xproc-dev@w3.org>
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 13:06:40 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 1 November 2010 13:06:40 GMT