cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jan-Willem Boer" <>
Subject Re: catalog and xslt document() function
Date Fri, 22 Jun 2007 09:20:46 GMT
Alexander Daniel schreef:
> I don't know direct answers to your questions but I can recommend a 
> different approach:
> Instead of using the XSLT document() function you could use the 
> Include transformer 
> (org.apache.cocoon.transformation.IncludeTransformer) which also 
> supports caching. We use it successfully in our project.
> Alex
We do use the cinclude transformer in the same project. But in this case 
i need to check the contents of the document before it can be included. 
This would require a few extra steps if we would use the cinclude 
transformer so that option is not preferable over the xpath document 

For example:
<xsl:variable name="doc" select="document(@path)"/>
<xsl:if test="$doc/some-element">
  <xsl:copy-of select="$doc"/>

I think the XSLT processor should be aware of the catalog file in this 

Jan Willem

> On Jun 21, 2007, at 1:21 PM, Jan-Willem Boer wrote:
>> Jan Willem Boer schreef:
>>> Hi,
>>> I ran into a problem with the catalog file and the xslt document() 
>>> function.
>>> To include a document into the XML that flows through a Cocoon 
>>> pipeline, I am using the document() function in an XSLT stylesheet:
>>>    <xsl:copy-of select="document(@path)"/>
>>> The document-to-include contains a DOCTYPE declaration referring to 
>>> an external entity:
>>>    <!DOCTYPE something PUBLIC "-//Company//DTD SOMETHING-XML//NL" 
>>> "something.dtd">
>>> I added the DTD-file to the directory WEB-INF/entities and added a 
>>> line to the catalog file containing the PUBLIC and SYSTEM identifiers.
>>> The problem occurs when i use the document function to include the 
>>> document directly with an absolute path, the catalog file is 
>>> ignored, and the DTD is not found.
>>> To circumvent this, I was forced to redirect the document() function 
>>> to a cocoon pipeline like this:
>>>    <xsl:copy-of select="document('cocoon://get-file/' + @path)"/>
>> this should of course be
>> <xsl:copy-of select="document(concat('cocoon://get-file/', @path))"/>
>>> instead of
>>>    <xsl:copy-of select="document(@path)"/>
>>> Cocoon reads the catalog and does not complain, so at least I have 
>>> it working now.
>>> I was wondering (1) if this is expected behaviour (2) if there is 
>>> another, more elegant way to solve this: can the XSLT processor be 
>>> instructed to read the catalog somehow?
>>> Jan Willem Boer
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

View raw message