On 14.06.2008 09:06, Kamal wrote:

Something I have noticed about the Cocoon documentation is that the terms "pipeline" seems to be used to describe a map:match. For example:

"Sets the generator for the pipeline."[1]

We know what is meant, but this could be very confusing for a newbie. Should we be using the term "match" here, perhaps with a link the description of map:match? I know historically, it is a pipeline.

Cheers.

PS. I have been adding the clearer descriptions to the various sitemap component found in the Cocoon 2.1 documentation. Are there any objections?

Yes, because it's wrong. It is a pipeline, not a match. A match is just similar to an if and has nothing to do with a pipeline as you can see in the following example:

<map:pipeline>
  <map:match>
    <map:generate/>
    <map:transform/>
    <map:match>
      <!-- executes 2nd transform only in certain cases -->
      <map:transform/>
    </map:match>
    <map:serialize/>
  </map:match>
</map:pipeline>

or

<map:pipeline internal-only="true">
  <map:match>
    <map:generate/>
    <map:transform/>
  </map:match>
  <map:match>
    <map:generate/>
  </map:match>
  <!-- ALL internal pipeline use XML serializer -->
  <map:serialize type="xml"/>
</map:pipeline>

The confusion result from 2 facts: In most cases one complete pipeline is wrapped within one map:match statement. There is no obvious wrapping for the actual pipeline, map:pipeline seems to wrap multiple pipelines rather than one. But that's not quite true if you read it differently: A pipeline starts with the first generator that the treeprocessor comes along the path and ends with the first serializer. A map:match (just like an if) excludes a map:generate from certain paths to be found.

Other examples:

<map:pipeline>
  <map:generate/>
  <map:transform/>
  <map:serialize/>

  <map:match>
    <!-- will never be reached -->
  </map:match>
</map:pipeline>

The first combination of map:generate to map:serialize make the pipeline, map:match will never be reached.

<map:pipeline>
  <!-- different generator for different paths -->
  <map:match pattern="path1">
    <map:generate/>
  </map:match>
  <map:match pattern="path2">
    <map:generate/>
  </map:match>
  <!-- same transformation -->
  <map:transform/>
  <map:match pattern="path1">
    <map:serialize/>
  </map:match>
  <!-- "path1" won't reach this, only "path2" -->
  <map:serialize/>
</map:pipeline>

So technically map:pipeline IS the wrapper for a complete pipeline, because always only one pipeline will be constructed within it. It's just not that obvious.

Disclaimer: The above examples should all work in Cocoon, but that does not mean I recommend to use them. The standard case of wrapping a pipeline within a map:match probably makes a sitemap more readable and useful than these examples to outline the concepts.

Joerg

Reply via email to