Hi all, 

I have a recurring theme in a few of my sitemaps and, although I
have solved the problem, I'm not particularly happy with the solution.
Here's the problem in pseudo-sitemapese: 

  <map:match pattern="*.html">
    <map:act desc="an action to be applied to all xhtml">
    
      <map:match pattern="a*.html" desc="source A-prefixed xhtml">
         <map:generate/>
         <map:transform/>
      </map:match>

      <map:match pattern="b*.html" desc="source B-prefixed xhtml">
         <map:generate/>
         <map:transform/>
      </map:match>

      <map:match pattern="*.html" desc="source of all other xhtml">
         <map:generate/>
         <map:transform/>
      </map:match>

      <map:transform desc="a common template to apply regardless of source"/>
      <map:serialize/>
    </map:act>
  </map:match>

The above doesn't work when coded with matchers.  C2 falls through
the nested matches, hits the generic case and obviously throws 
an exception because it tries to call a second generator.

There are some obvious solutions to this problem.  One is to copy
the common transform and serialize stages into each of the 
nested matches, forcing C2 to stop processing in the individual
nested matches.  Slightly cleaner is to put the final transform/
serialize step in a resource and have each of the nested matches
call the resource.  I really don't like the finality of resources,
however - they feel too much like goto statements.  

What I think I want to do here is use the "if-then-else" processing
model of selectors.  Choose only one of the a*, b* or * patterns,
generate the xhtml, and finish by applying the final transform/
serialization regardless of source.  

However, the documentation states that selectors were designed with
the intent of choosing between well-defined values.  Indeed, none
of the shipped selectors use patterns or regexps.  I'm crafty enough
at writing my own components that I can easily write a selector that 
takes a regular expression as a test argument instead of a constant. 
I would rather not go against design philosophy, however, if there
is a better way to solve this class of problem.

Does anyone have thoughts on refactoring this class of problem?

Thanks, Jonathan


---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>

Reply via email to