RE: [xsl] function-available() problem while using Saxon

Subject: RE: [xsl] function-available() problem while using Saxon
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 21 Jun 2005 22:13:23 +0100
Curious.

Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";  
version="2.0">
<xsl:template match="/">     
      <ans><xsl:value-of select="function-available('saxon:evaluate-node')" 
                    xmlns:saxon="http://saxon.sf.net/"/></ans>
</xsl:template>
</xsl:stylesheet>

Command:

java -jar c:\saxon-build\saxon8.3\saxon-b\saxon8.jar -t test.xsl test.xsl

Result:

Saxon 8.3 from Saxonica
Java version 1.5.0
Stylesheet compilation time: 641 milliseconds
Processing file:/c:/temp/test.xsl
Building tree for file:/c:/temp/test.xsl using class
net.sf.saxon.tinytree.TinyBuilder
Tree built in 0 milliseconds
Tree size: 9 nodes, 21 characters, 3 attributes
<?xml version="1.0" encoding="UTF-8"?><ans>true</ans>
Execution time: 70 milliseconds

A possible explanation is that you are running with extension functions
disabled: how is Saxon being invoked? Another possibility is that you aren't
actually running Saxon at all - add a call on system-property('xsl:vendor')
to the stylesheet to check.

Michael Kay
http://www.saxonica.com/

 

> -----Original Message-----
> From: Arian Hojat [mailto:arianhojat2000@xxxxxxxxx] 
> Sent: 21 June 2005 21:18
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] function-available() problem while using Saxon
> 
> Hey,
> 
> > What namespace URI is bound to the prefix "saxon"
> 
> I bind http://saxon.sf.net/ to saxon
> ...
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> xmlns:dyn="http://exslt.org/dynamic";
> xmlns:saxon="http://saxon.sf.net/";>
> 
> > Which version of
> > Saxon are you using? 
> "Saxon 8.3 from Saxonica"
> 
> Thanks,
> Arian
> 
> 
> 
> 
> --- Michael Kay <mike@xxxxxxxxxxxx> wrote:
> 
> > What namespace URI is bound to the prefix "saxon",
> > and which version of
> > Saxon are you using? (You can find out using the -t
> > option).
> > 
> > Michael Kay
> > http://www.saxonica.com/ 
> > 
> > > -----Original Message-----
> > > From: Arian Hojat
> > [mailto:arianhojat2000@xxxxxxxxx] 
> > > Sent: 21 June 2005 20:15
> > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > > Subject: [xsl] function-available() problem while
> > using Saxon
> > > 
> > > Hello all,
> > > One last question for the day hopefully.
> > > 
> > > I deciding since I might be using FOP(which uses
> > > Xalan) and at some points be using Saxon to see
> > whats
> > > wrong in my .fo output, that I would see which
> > > extension function is available and use it
> > > accordingly.
> > > Xalan checks to see if saxon:evaluate-node is
> > > available 1st and fails. Then dyn:evaluate is
> > > available and correctly used.
> > > 
> > > In Saxon, it checks to see if saxon:evaluate-node
> > is
> > > available and FAILS?, then I believe tries to USE
> > > dyn:evaluate and errors? It shouldn't even get to
> > the
> > > point of using dyn:evaluate since it isn't
> > available
> > > right? (i am prob doing something very wrong). I
> > > should mention I do put saxon: and dyn: namespaces
> > in
> > > the top of the xsl I am using, so thats not the
> > > problem.
> > > 
> > > XP0003: XPath syntax error at char 18 on line 200
> > in
> > > {dyn:evaluate($exp)}:
> > >   Cannot find a matching 1-argument function named
> > > {http://exslt.org/dynamic}evaluate()
> > > 
> > > 
> > > ###part that selects what function to use
> > > <xsl:choose>
> > >   <xsl:when
> > >
> >
> test="function-available('saxon:evaluate-node')"><xsl:for-each
> > > select="document(@href)/Document">
> > > <xsl:apply-templates
> > > select="saxon:evaluate-node($exp)"/>
> > > </xsl:for-each></xsl:when>
> > >   <xsl:when
> > >
> >
> test="function-available('dyn:evaluate')"><xsl:for-each
> > > select="document(@href)/Document">
> > > <xsl:apply-templates select="dyn:evaluate($exp)"/>
> > > </xsl:for-each></xsl:when>
> > >   <xsl:otherwise><xsl:message>EXSLT:EVALUATE() OR
> > > SAXON:EVALUATE-NODE() NOT FOUND IN YOUR XSL
> > > PROCESSOR</xsl:message></xsl:otherwise>
> > > </xsl:choose>
> > > 
> > > 
> > > Thanx again to the xsl list and Michael Kay
> > > 
> > > 
> > > Unrelated Note if someone notices I could use a
> > > simpler template for Saxon: I dont use that simple
> > > template like below because if Xalan is being
> > used, it
> > > will not like the 'function call as a step in the
> > > xpath' as it parses beforehand, so i keep it as
> > is.
> > > <xsl:apply-templates
> > >
> >
> select="document(@href)/Document/saxon:evaluate-node(current()
> > > /@nodes))"/>
> > > 
> > > 
> > > 
> > > 		
> > > __________________________________ 
> > > Discover Yahoo! 
> > > Have fun online with music videos, cool games, IM
> > and more. 
> > > Check it out! 
> > > http://discover.yahoo.com/online.html
> > 
> > 
> 
> 
> 
> 		
> ____________________________________________________ 
> Yahoo! Sports 
> Rekindle the Rivalries. Sign up for Fantasy Football 
> http://football.fantasysports.yahoo.com

Current Thread