forrest-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Crossley <cross...@apache.org>
Subject Re: Custom XSL pipeline in sitemap.xmap causes build error
Date Thu, 07 Jun 2007 01:02:44 GMT
Ross Gardler wrote:
> Steve Odlind wrote:
> >
> >I have added a custom DTD, which seems to be working fine. I would like
> >all the files with the md-v1.0 DTD declared in the DOCTYPE to use a
> >custom XSL.
> >
> >I have the following in my local sitemap.xmap:
> >
> >  <map:pipelines>
> >    <map:pipeline>
> >        <map:match pattern="**.xml">
> >          <map:generate src="{properties:content.xdocs}{1}{2}.xml" />
> 
> [...]
> 
> >When I run Forrest, I get the following:
> >
> >"linkmap.html  BROKEN: C:\Forrest0_8\apache-forrest-0.8\main\webapp\.
> >(Access is denied)"
> 
> (I've not reproduced your error, I'm working from what I think is the
> problem so tread carefully and come back if my assumptions appear
> incorrect)
> 
> The problem is that you pattern is way too general. It will match all
> requests for an xml document. It is failing on linkmap.xml as this is
> the first page processed with a linkmap.xml request.
> 
> The issue arises because a pipeline is considered to have been
> processed if the generator is fired up. In this case there is no test
> to see if the generator in this match should be fired or not.
> Therefore it will always fire.
> 
> There are two (easy) solutions to your problem:
> 
> a) use a narrower match that will only work when you know the custom
> DTD is to be used
> b) don't worry about the match, just redefine the sourcetype action
> that does the processing
> 
> Advantages of a) are that it is faster and easier to maintain. The
> disadvantage is that you have to have all your custom DTD documents in
> a single path and this may not be possible. You could use a regular
> expression in the match to get around this problem, but you are still
> limited.
> 
> Advantages of b) are that it will work with any file in any location.
> Disadvantages include it is less efficient as the file type needs to
> be tested before it is processed and it is harder to maintain when you
> upgrade Forrest.

If you use DTDs then the DTD files need to be located
and the input documents need to be validated.
However those can be declared to be excluded
via the forrest.properties file.

As Ross says below, this uses the SourceTypeAction, i.e.
Content Aware Pipelines
http://forrest.apache.org/docs/dev/cap.html

That describes an alternative to DTDs. Use the namespace method
(and perhaps RELAX NG if you want external validation).
Caveat: I have not yet tried this.

-David

> If you go for a) then simply change your match to something like:
> 
> <map:match pattern="myCustomDocs/**.xml">
> 
> If you go for b) then copy the following elements from forrest.xmap
> and add your custom DTD and transformation to them:
> 
> <map:action logger="sitemap.action.sourcetype" name="sourcetype"
> src="org.apache.forrest.sourcetype.SourceTypeAction">
> 
> ...
> 
> <map:resource name="transform-to-document">
> 
> Interestingly, your question gives me an idea of how we can make this
> easier in the next version of Forrest. But I'll take that to the dev
> list when I get time.
> 
> Ross

Mime
View raw message