Re: p:for-each

Hi Alessandro,

Alessandro Vernet wrote:
> On 7/24/06, Norman Walsh <Norman.Walsh@sun.com> wrote:
>> Yikes! You're suggesting that if there are three documents on 
>> #pipe/document
>> (a, b, and c) and two stylesheets on #pipe/stylesheets (x and y), that
>> the step gets evaluated (a, x), (a, y), (b, x), (b, y), (c, x), (c, y) 
>> times?
>> I think that's *way* too confusing.
> 
> Jeni,
> 
> Do you have a use case in mind where this type of combination would be
> useful? For now, like Norm, I find this somewhat confusing. However I
> agree with you on allowing multiple outputs for the <p:for-each>; it
> definitely makes sense.

Yep: generation of conference proceedings for a CD. Each paper is a 
separate XML file, and we want to generate from each of them: (a) an 
abstract, (b) a table of contents, (c) HTML, (d) PDF.

But I'm fairly happy with *not* being able to do a join (iterating over 
multiple inputs at the same time), since anything you can do with a join 
  you can do with nested for-eaches, and to be honest, for reusability, 
I think you'd code the above use-case with something like:

<p:pipelines>

<p:pipeline name="process-paper">
   <p:declare-input name="paper" />
   <p:declare-output name="abstract" />
   <p:declare-output name="ToC" />
   <p:declare-output name="HTML" />
   <p:declare-output name="PDF" />
   <p:step kind="xslt">
     <p:input port="document" ref="#process-paper/paper" />
     <p:input port="stylesheet" href="abstract.xsl" />
     <p:output port="result" ref="#process-paper/abstract" />
   </p:step>
   <p:step kind="xslt">
     <p:input port="document" ref="#process-paper/paper" />
     <p:input port="stylesheet" href="ToC.xsl" />
     <p:output port="result" ref="#process-paper/ToC" />
   </p:step>
   <p:step kind="xslt">
     <p:input port="document" ref="#process-paper/paper" />
     <p:input port="stylesheet" href="HTML.xsl" />
     <p:output port="result" ref="#process-paper/HTML" />
   </p:step>
   <p:step kind="xslt">
     <p:input port="document" ref="#process-paper/paper" />
     <p:input port="stylesheet" href="PDF.xsl" />
     <p:output port="result" ref="#process-paper/PDF" />
   </p:step>
</p:pipeline>

<p:pipeline name="process-papers">
   <p:declare-input port="papers" />
   <p:declare-output name="abstracts" />
   <p:declare-output name="ToCs" />
   <p:declare-output name="HTMLs" />
   <p:declare-output name="PDFs" />
   <p:for-each name="iter">
     <p:declare-input port="paper" ref-each="papers" />
     <p:declare-output name="abstract" />
     <p:declare-output name="ToC" />
     <p:declare-output name="HTML" />
     <p:declare-output name="PDF" />
     <p:step kind="process-paper">
       <p:input port="paper" ref="#iter/paper" />
       <p:output port="abstract" ref="#iter/abstract" />
       <p:output port="ToC" ref="#iter/ToC" />
       <p:output port="HTML" ref="#iter/HTML" />
       <p:output port="PDF" ref="#iter/PDF" />
     </p:step>
   </p:for-each>
</p:pipeline>

</p:pipelines>

Cheers,

Jeni
-- 
Jeni Tennison
http://www.jenitennison.com

Received on Wednesday, 26 July 2006 08:20:30 UTC