Re: [xsl] Possible to pass 'empty sequence' to function?

Subject: Re: [xsl] Possible to pass 'empty sequence' to function?
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Thu, 31 Mar 2005 22:13:40 +1000
On Thu, 31 Mar 2005 12:48:22 +0100, Andrew Welch
<ajwelch@xxxxxxxxxxxxxxx> wrote:
> 
> > > > <xsl:variable name="y" as="string?">hello</xsl:variable>
> > > >
> > > > $x is (a sequence of one) string with value "hello"
> > >
> > >
> > > Is this really the case?  Does it really mean that the
> > > processor doesn't
> > > construct the temporary tree (and then atomise it?) - if so
> > then it's
> > > really useful.
> >
> > The semantics are that the processor creates a text node and
> > then atomizes it to a string.
> >
> > What happens internally is of course up to the optimizer.
> 
> So, just to be clear about this:
> 
> <xsl:variable name="foo" as="xs:string?">Hello</xsl:variable>
> <xsl:variable name="bar">World</xsl:variable>
> 
> <xsl:value-of select="concat($foo,' ',$bar)"/>
> 
> Here at the point of the concat() $foo is -already- a string and $bar is
> a nodeset?  That is, $foo is never a nodeset and $bar is nodeset that
> gets implicitly cast to a string?

Yes, but more precisely, we can say that $foo is not a node (it is a
value of simple type) and $bar is a document node (temporary tree).

> 
> If so, this would mean it's possible to make a choice between long
> if-then-elses in the select attribute and choose/whens in the body based
> on readability/maintainability etc and not on performance.

defining $foo as xs:string is both: more readable/maintainable and
more efficient.


Cheers,
Dimitre Novatchev.

Current Thread