RE: How to run unconnected steps in sequence?

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