xsl-list
[Top] [All Lists]

Re: A sequence of more than one item is not allowed as the [nth] argument of [function]

2005-03-06 04:16:54
This is well explained in Mike's book, page 126 - 129.

Running an XSLT 2.0 processor in backwards-compatibility mode is not
the same as running an XSLT 1.0 processor.

This is due to the fact that some parts of the stylesheet may will
generally use 2.0 facilities while others will have specified
backwards compatibility (version="1.0").

This means that the data model to be used cannot be the 1.0 data model
-- therefore the 2.0 data model is used.

So, running this transformation with Saxon 8.3:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";

  <xsl:output method="text"/>
  
 <xsl:template match="/">
   <xsl:value-of select="1 to 5" version="1.0"/>
 </xsl:template>
</xsl:stylesheet>

produces the result:
   1

according to the rules of XPath 1.0 and there's no error due to a
sequence of xs:decimal (an unknown type for XPath 1.0) being specified
in the "select" attribute.


Running this transformation:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";

  <xsl:output method="text"/>
  
 <xsl:template match="/">
   <xsl:value-of select="1 to 5"/>
 </xsl:template>
</xsl:stylesheet>

produces this result:
   1 2 3 4 5
as this is "pure XSLT 2.0"

However, I cannot understand the result of running this transformation
with Saxon 8.3:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";

  <xsl:output method="text"/>
 <xsl:template match="/">
   <xsl:value-of select="1 to 5" version="1.0" separator=", "/>
 </xsl:template>
</xsl:stylesheet>

The version specified is "1.0" and one would expect the single result "1"

However, the result is:
    1, 2, 3, 4, 5

Probably this is just a bug, or are the rules more complex than I thought?


Cheers,
Dimitre Novatchev.



On Sat, 5 Mar 2005 21:16:31 -0800 (PST), Mukul Gandhi
<mukul_gandhi(_at_)yahoo(_dot_)com> wrote:
Hello Mr. Kay,

You are saying..
"With XSLT 1.0, and with a 2.0 processor in 1.0 mode,
when you pass a sequence to concat() or string() it
will use the first item in the sequence and ignore the
rest".

IMHO, in XSLT 1.0 mode using sequence as argument to
concat() or string() should give an *error*.. As
argument of type sequence is not allowed on concat()
and string() in XPath 1.0 ..

The new string-join() function is great!

Regards,
Mukul

--- Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:

With XSLT 1.0, and with a 2.0 processor in 1.0 mode,
when you pass a
sequence to concat() or string() it will use the
first item in the sequence
and ignore the rest.

With XSLT 2.0 "we" decided that was a bad idea, so
it's now an error.

The way to concatenate all the strings in a sequence
into a single string is
the new string-join() function.

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

__________________________________
Celebrate Yahoo!'s 10th Birthday!
Yahoo! Netrospective: 100 Moments of the Web
http://birthday.yahoo.com/netrospective/

--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>
--~--