Mailing List Archive

Rendering XML transformed from aggregated content
Hello,
I have a problem rendering the Forrest site from two XML files
aggregated in a pipeline from the Sitemap.xmap file.

I am using Forrest 8.0. I created an XSL stylesheet to format the
combined XML files wih "document" root tags as per v-13 DTD.

However this is not displayed with the Forrest skin but as raw HTML.

How can I apply the default Forrest skin to this XML output?

I have searched the Forrest FAQ and the mail Archives without finding
a solution. Please help.

sitemap.xmap insert :

<map:pipelines>
<map:pipeline>

<map:match pattern="**index.html">
<map:aggregate element="site">
<map:part src="{properties:content.xdocs}index.xml"/>

<map:part src="{properties:content.xdocs}index-two.xml"/>

</map:aggregate>

<map:transform
src="{properties:resources.stylesheets}/docs-to-document.xsl"/>
<map:serialize type="xml-document"/>
</map:match>

</map:pipeline>


My "docs-to-document.xsl" transform :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="/site">
<xsl:element name="document">
<xsl:element name="header">
<xsl:element name="title">
<xsl:value-of select="/site/document/header/title"/>
</xsl:element>
</xsl:element>
<xsl:element name="body">
<xsl:for-each select="//section">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Re: Rendering XML transformed from aggregated content [ In reply to ]
Phillip Hall wrote:
>
> I have a problem rendering the Forrest site from two XML files
> aggregated in a pipeline from the Sitemap.xmap file.
>
> I am using Forrest 8.0. I created an XSL stylesheet to format the
> combined XML files wih "document" root tags as per v-13 DTD.
>
> However this is not displayed with the Forrest skin but as raw HTML.
>
> How can I apply the default Forrest skin to this XML output?
>
> I have searched the Forrest FAQ and the mail Archives without finding
> a solution. Please help.
>
> sitemap.xmap insert :
>
> <map:pipelines>
> <map:pipeline>
>
> <map:match pattern="**index.html">

Not 100% sure of my answer, but i reckon that should be
<map:match pattern="**index.xml">
i.e. the internal request for the content xml.

With the match as you have it, it is intercepting the "output"
html request and finalising (i.e. map:serialize) the output
to xml.

> <map:aggregate element="site">
> <map:part src="{properties:content.xdocs}index.xml"/>
> <map:part src="{properties:content.xdocs}index-two.xml"/>

Also to match sources in sub-directories you will need:
<map:part src="{properties:content.xdocs}{1}index.xml"/>
etc.

There is a document explaining the "**" and "*" pattern matching
and token usage.

> </map:aggregate>
>
> <map:transform
> src="{properties:resources.stylesheets}/docs-to-document.xsl"/>
> <map:serialize type="xml-document"/>
> </map:match>
>
> </map:pipeline>
>
>
> My "docs-to-document.xsl" transform :
>
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="xml"/>

This output method has no effect in a Cocoon-based app.
The "map:serialize" in the sitemaps does that job.

-David

> <xsl:template match="/site">
> <xsl:element name="document">
> <xsl:element name="header">
> <xsl:element name="title">
> <xsl:value-of select="/site/document/header/title"/>
> </xsl:element>
> </xsl:element>
> <xsl:element name="body">
> <xsl:for-each select="//section">
> <xsl:copy-of select="."/>
> </xsl:for-each>
> </xsl:element>
> </xsl:element>
> </xsl:template>
> </xsl:stylesheet>
Re: Rendering XML transformed from aggregated content [ In reply to ]
On Wed, Jan 6, 2010 at 1:25 AM, Phillip Hall <panthonyhall@gmail.com> wrote:
> Hello,
> I have a problem rendering the Forrest site from two XML files
> aggregated in a pipeline from the Sitemap.xmap file.
>
Thanks David,
I needed to match the request for the XML content instead of the HTML.

That solves my problem.