RE: [xsl] effective boolean value of the result of an extension instruction

Subject: RE: [xsl] effective boolean value of the result of an extension instruction
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 7 Mar 2005 22:43:19 -0000
The <xsl:variable> is either going to give you a run-time error, or it's
going to set the variable to a value of type java:java.sql.Connection.

The xsl:fallback gives fallback behavior if the sql:connect instruction
isn't recognized. If you want to handle a failure reported by the JDBC
database connection, you'll have to use saxon:try() (which is a Saxon-SA
extension function). Alternatively you could of course modify the
sql:connect source code - it's only really intended as a specimen
implementation.

Michael Kay
Saxonica Limited 

> -----Original Message-----
> From: Kevin Rodgers [mailto:kevin.rodgers@xxxxxxx] 
> Sent: 07 March 2005 22:25
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] effective boolean value of the result of an 
> extension instruction
> 
> I'm using Saxon's SQL extension in an XSLT 2.0 stylesheet.  
> First I set
> a variable to the JDBC connection, like this:
> 
>       <xsl:variable name="mb3-connection" 
> as="java:java.sql.Connection"
>          xmlns:java="http://saxon.sf.net/java-type";>
>         <xsl:choose>
>           <xsl:when test="element-available('sql:connect')">
>             <sql:connect driver="{$sql-driver}" database="{$sql-url}"
>                          user="{$sql-user}" 
> password="{$sql-password}">
>               <xsl:fallback>
>                 <xsl:message select="'SQL extension is not installed'"
>                              terminate="yes"/>
>               </xsl:fallback>
>             </sql:connect>
>           </xsl:when>
>           <xsl:otherwise>
>             <xsl:message select="'&lt;sql:connect&gt; is not 
> available'"
>                          terminate="yes"/>
>           </xsl:otherwise>
>         </xsl:choose>
>       </xsl:variable>
> 
> According to the documentation, the result is a value of type 
> "external
> object".  Later, when I reference it in a conditional expression:
> 
>   <xsl:value-of select="if ($mb3-connection)
>                         then 
> esd:curr-doc-num($mb3-connection, $relation)
>                         else $relation"/>
> 
> Saxon reports:
> 
>   net.sf.saxon.trans.DynamicError: Effective boolean value is 
> not defined for a sequence
>   starting with an atomic value other than a boolean, number, 
> or string
> 
> Is there a way to test the mb3-connection variable, or do the
> <xsl:message terminate="yes"/> instructions in its declaration already
> ensure that processing doesn't continue unless it was set 
> successfully?
> 
> Thanks,
> -- 
> Kevin Rodgers

Current Thread