You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Perry Tew <pe...@yahoo.com> on 2001/11/07 18:07:02 UTC
Cocoon2: Bug in sql transformer?
__________________________________________________
Do You Yahoo!?
Find a job, post your resume.
http://careers.yahoo.com
---------------------------------------------------------------------
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: <co...@xml.apache.org>
For additional commands, e-mail: <co...@xml.apache.org>
RE: Cocoon2: Bug in sql transformer? -repost with missing content
Posted by Perry Tew <pe...@yahoo.com>.
Luca,
Thanks for your response.
Firse, I'm not really using [@*], I'm using [@*='rowset_name']. For
the sake of posting here, I tried to keep it simple, and testing
[@name] versus [@*] seemed less confusing then testing a boolean
condition using both while still illustrating the problem.
The reason I'm doing a boolean test on the 'name' attribute is
because I have several nested queries in my sql xml file, which
creates several rowset elements nested in my tree. I need to treat
each one differently since one is a subtotals query and another is a
detail data query, etc. The name attribute of the rowset element is
the only way I can tell them apart.
Second, I don't want to use [@*='rowset_name'], but whereas
[@name='rowset_name'] works with a static xml file and/or from the
command line, it doesn't work with an xml stream generated by the sql
transformer.
As you've stated, matching based solely on sql:rowset does work, and
quite well, but I was hoping to have several small templates like
this:
<sql:template match="sql:rowset[@name="query1"]"> ...
<sql:template match="sql:rowset[@name="query2"]"> ...
<sql:template match="sql:rowset[@name="query3"]"> ...
rather than having one template match on rowset and do a xsl:choose
within like this:
<sql:template match="sql:rowset">
<xsl:choose>
<xsl:when test="@name='query1'">
etc...
</xsl:when>
</xsl:choose>
etc...
</sql:template>
Using several smaller templates seemed much more elegant and easier
to manage than one big template.
Of course, I just tried to do the above xsl:choose block, and it
wouldn't work either with @name. Only with "@*='query1'".
The more I work with this, them more I'm convinced this is a bug. It
would really be useful if someone could run a sql query and attempt
to transform it based on the name attribute of the rowset.
*** My additional tests ***
I also added some additional elements to the sql transformer. I made
my code this:
<?xml version="1.0"?>
<some_root name="red">
<page xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<execute-query xmlns="http://apache.org/cocoon/SQL/2.0">
<query name="report_date"> SELECT SYSDATE FROM DUAL </query>
</execute-query>
</page>
</some_root>
I then added an additional template to my xsl sheet to search for the
following match and it worked:
<xsl:template match="some_root[@name='red']">
Found a color
<xsl:apply-templates/>
</xsl:template>
I'm so confused why my template will match the name attribute on
elements I create, but not in the sql:rowset element. Could this
have something to do with namespaces? I haven't found anything to
indicate this possible issue. And I still can't reconcile how I can
save the xml output from a sql transform and it will convert to html
correctly, but a straight pipeline won't.
Again, thanks for your response,
Perry Tew
--- Luca Morandini <l....@tin.it> wrote:
> Perry,
>
> there is a thing I don't understand: why are you using
> "sql:rowset[@*]" for
> the matching of a rowset ?
>
> I'm positive "sql:rowset" would work too; moreover, [@*] and
> [@name] are,
> in my eyes, strange XPath predicates, since a predicate is supposed
> to
> return a boolean.
>
> Could you please explain to me why you used them ?
>
> Best regards,
>
>
> ---------------------------------------------
> Luca Morandini
> GIS Consultant
> lmorandini@ieee.org
> http://utenti.tripod.it/lmorandini/index.html
> ---------------------------------------------
>
__________________________________________________
Do You Yahoo!?
Find a job, post your resume.
http://careers.yahoo.com
---------------------------------------------------------------------
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: <co...@xml.apache.org>
For additional commands, e-mail: <co...@xml.apache.org>
RE: Cocoon2: Bug in sql transformer? -repost with missing content
Posted by Luca Morandini <l....@tin.it>.
Perry,
there is a thing I don't understand: why are you using "sql:rowset[@*]" for
the matching of a rowset ?
I'm positive "sql:rowset" would work too; moreover, [@*] and [@name] are,
in my eyes, strange XPath predicates, since a predicate is supposed to
return a boolean.
Could you please explain to me why you used them ?
Best regards,
---------------------------------------------
Luca Morandini
GIS Consultant
lmorandini@ieee.org
http://utenti.tripod.it/lmorandini/index.html
---------------------------------------------
> -----Original Message-----
> From: Perry Tew [mailto:perry_tew@yahoo.com]
> Sent: Wednesday, November 07, 2001 6:30 PM
> To: cocoon-users@xml.apache.org
> Subject: Re: Cocoon2: Bug in sql transformer? -repost with missing
> content
>
>
> Sorry about sending a blank email. Hit the return key by accident.
>
> I'm reposting a previous problem in a more general fashion.
> It's the stangest thing.
> When I use a static xml file as my generate src, this works:
> <template match="rowset[@name]">
> BUT, when I use the sql transformer, and then transform the xml into
> html, it doesn't work and I have to use <template match="rowset[@*]">
> instead. I can't understand why [@name] works for static xml and not
> the sql transformer.
>
> Would somebody please look at this and assure me I'm not going mad?
> I wrote the simplest query and xsl sheet I could, and I've included
> them below. Also, at the end, I've included the raw xml from the sql
> transform. Any help is greatly appreciated.
>
> Thanks,
> Perry Tew
>
> Here's what I've done:
>
> ==========sitemap.xmap==============
> <map:match pattern="short_test.html">
> <map:generate src="atp_short.xml"/>
> <map:transform type="sql">
> <map:parameter name="use-connection" value="orcl"/>
> </map:transform>
> <map:transform src="atp_short.xsl"/>
> <map:serialize type="html"/>
> </map:match>
> =========end sitemap.xmap===========
>
> ==========atp_short.xml==============
> <?xml version="1.0"?>
> <page xmlns:sql="http://apache.org/cocoon/SQL/2.0">
> <execute-query xmlns="http://apache.org/cocoon/SQL/2.0">
> <query name="report_date"> SELECT SYSDATE FROM DUAL </query>
> </execute-query>
> </page>
> ==========end atp_short.xml==========
>
>
> ==========atp_short.xsl that works==============
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:sql="http://apache.org/cocoon/SQL/2.0">
>
> <xsl:template match="/">
> <xsl:apply-templates/>
> </xsl:template>
>
> <xsl:template match="page">
> <html>
> <body>
> <h4>Found page match</h4>
> <xsl:apply-templates/>
> </body>
> </html>
> </xsl:template>
> <!--
> NOTICE the @* instead of the @name???
> -->
> <xsl:template match="sql:rowset[@*]">
> <h4>Found rowset match</h4>
> <xsl:for-each select="@*">
> <h4>
> <xsl:text>attribute=</xsl:text>
> <xsl:value-of select="name()"/><br/>
> <xsl:text>value=</xsl:text>
> <xsl:value-of select="."/>
> </h4>
> </xsl:for-each>
> </xsl:template>
> </xsl:stylesheet>
> ==========end atp_short.xsl that works==========
>
> ==========atp_short.xsl that DOES NOT work==============
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:sql="http://apache.org/cocoon/SQL/2.0">
>
> <xsl:template match="/">
> <xsl:apply-templates/>
> </xsl:template>
>
> <xsl:template match="page">
> <html>
> <body>
> <h4>Found page match</h4>
> <xsl:apply-templates/>
> </body>
> </html>
> </xsl:template>
>
> <!--
> NOTICE THE @name... that's what's not working
> -->
> <xsl:template match="sql:rowset[@name]">
> <h4>Found rowset match</h4>
> <xsl:for-each select="@*">
> <h4>
> <xsl:text>attribute=</xsl:text>
> <xsl:value-of select="name()"/><br/>
> <xsl:text>value=</xsl:text>
> <xsl:value-of select="."/>
> </h4>
> </xsl:for-each>
> </xsl:template>
> </xsl:stylesheet>
> ==========end atp_short.xsl that DOES NOT work==========
>
>
>
> ===========output from the first xsl sheet (that works)======
> <html xmlns:sql="http://apache.org/cocoon/SQL/2.0">
> <body>
> <h4>Found page match</h4>
>
>
>
> <h4>Found rowset match</h4>
> <h4>attribute=name<br>value=report_date</h4>
>
> </body>
> </html>
> ===========end output from the first xsl sheet (that works)======
>
>
>
> ===========output from the second xsl sheet (does not work)======
> <html xmlns:sql="http://apache.org/cocoon/SQL/2.0">
> <body>
> <h4>Found page match</h4>
>
>
> 2001-11-07 12:17:38.0
> </body>
> </html>
> ===========end output from the second xsl sheet (does not work)======
>
>
>
> ==============raw xml from sql transformer========================
> <?xml version="1.0" encoding="UTF-8" ?>
> <page xmlns:sql="http://apache.org/cocoon/SQL/2.0">
> <rowset name="report_date"
> xmlns="http://apache.org/cocoon/SQL/2.0">
> <row>
> <sysdate>2001-11-07 12:23:49.0</sysdate>
> </row>
> </rowset>
> </page>
>
> __________________________________________________
> Do You Yahoo!?
> Find a job, post your resume.
> http://careers.yahoo.com
>
> ---------------------------------------------------------------------
> 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: <co...@xml.apache.org>
> For additional commands, e-mail: <co...@xml.apache.org>
>
---------------------------------------------------------------------
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: <co...@xml.apache.org>
For additional commands, e-mail: <co...@xml.apache.org>
Re: Cocoon2: Bug in sql transformer? -repost with missing content
Posted by Perry Tew <pe...@yahoo.com>.
Sorry about sending a blank email. Hit the return key by accident.
I'm reposting a previous problem in a more general fashion.
It's the stangest thing.
When I use a static xml file as my generate src, this works:
<template match="rowset[@name]">
BUT, when I use the sql transformer, and then transform the xml into
html, it doesn't work and I have to use <template match="rowset[@*]">
instead. I can't understand why [@name] works for static xml and not
the sql transformer.
Would somebody please look at this and assure me I'm not going mad?
I wrote the simplest query and xsl sheet I could, and I've included
them below. Also, at the end, I've included the raw xml from the sql
transform. Any help is greatly appreciated.
Thanks,
Perry Tew
Here's what I've done:
==========sitemap.xmap==============
<map:match pattern="short_test.html">
<map:generate src="atp_short.xml"/>
<map:transform type="sql">
<map:parameter name="use-connection" value="orcl"/>
</map:transform>
<map:transform src="atp_short.xsl"/>
<map:serialize type="html"/>
</map:match>
=========end sitemap.xmap===========
==========atp_short.xml==============
<?xml version="1.0"?>
<page xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<execute-query xmlns="http://apache.org/cocoon/SQL/2.0">
<query name="report_date"> SELECT SYSDATE FROM DUAL </query>
</execute-query>
</page>
==========end atp_short.xml==========
==========atp_short.xsl that works==============
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="page">
<html>
<body>
<h4>Found page match</h4>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!--
NOTICE the @* instead of the @name???
-->
<xsl:template match="sql:rowset[@*]">
<h4>Found rowset match</h4>
<xsl:for-each select="@*">
<h4>
<xsl:text>attribute=</xsl:text>
<xsl:value-of select="name()"/><br/>
<xsl:text>value=</xsl:text>
<xsl:value-of select="."/>
</h4>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
==========end atp_short.xsl that works==========
==========atp_short.xsl that DOES NOT work==============
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="page">
<html>
<body>
<h4>Found page match</h4>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<!--
NOTICE THE @name... that's what's not working
-->
<xsl:template match="sql:rowset[@name]">
<h4>Found rowset match</h4>
<xsl:for-each select="@*">
<h4>
<xsl:text>attribute=</xsl:text>
<xsl:value-of select="name()"/><br/>
<xsl:text>value=</xsl:text>
<xsl:value-of select="."/>
</h4>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
==========end atp_short.xsl that DOES NOT work==========
===========output from the first xsl sheet (that works)======
<html xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<body>
<h4>Found page match</h4>
<h4>Found rowset match</h4>
<h4>attribute=name<br>value=report_date</h4>
</body>
</html>
===========end output from the first xsl sheet (that works)======
===========output from the second xsl sheet (does not work)======
<html xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<body>
<h4>Found page match</h4>
2001-11-07 12:17:38.0
</body>
</html>
===========end output from the second xsl sheet (does not work)======
==============raw xml from sql transformer========================
<?xml version="1.0" encoding="UTF-8" ?>
<page xmlns:sql="http://apache.org/cocoon/SQL/2.0">
<rowset name="report_date"
xmlns="http://apache.org/cocoon/SQL/2.0">
<row>
<sysdate>2001-11-07 12:23:49.0</sysdate>
</row>
</rowset>
</page>
__________________________________________________
Do You Yahoo!?
Find a job, post your resume.
http://careers.yahoo.com
---------------------------------------------------------------------
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: <co...@xml.apache.org>
For additional commands, e-mail: <co...@xml.apache.org>