[xsl] Union of XPath sequences and the meaning of the uniqueness constraint

Subject: [xsl] Union of XPath sequences and the meaning of the uniqueness constraint
From: Kenneth Stephen <marvin.the.cynical.robot@xxxxxxxxx>
Date: Sun, 10 Oct 2004 13:00:37 -0500
Hi,

    The union operator in XPath 2.0 is described as eliminating
duplicates from the two sequences that it is combining. What is the
criterion used for determining if two nodes in the resulting sequence
are unique? The following code :

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

        <xsl:output omit-xml-declaration="yes" />

        <xsl:template match="/">
                <xsl:variable name="a">
                        <xsl:sequence select="2" />
                </xsl:variable>
                <xsl:variable name="b">
                        <xsl:sequence select="2" />
                </xsl:variable>
                <xsl:copy-of select="$a | $a" />
        </xsl:template>

</xsl:stylesheet>

....produces "2", which is what I would expect, but the following code :

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

        <xsl:output omit-xml-declaration="yes" />

        <xsl:template match="/">
                <xsl:variable name="a">
                        <xsl:sequence select="2" />
                </xsl:variable>
                <xsl:variable name="b">
                        <xsl:sequence select="2" />
                </xsl:variable>
                <xsl:copy-of select="$a | $b" />
        </xsl:template>

</xsl:stylesheet>

....produces "22"... which seems to indicate that even atomic values
in sequences are assigned unique node ids, and the uniqueness is
maintained across all sequences within the XSL program. Am I right?

Thanks,
Kenneth

Current Thread