xsl-list
[Top] [All Lists]

Re: Possible to pass 'empty sequence' to function?

2005-03-31 05:13:40
On Thu, 31 Mar 2005 12:48:22 +0100, Andrew Welch
<ajwelch(_at_)piper-group(_dot_)com> 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.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--