key() on xsl:key with literal @use returns too many nodes
---------------------------------------------------------

                 Key: XALANJ-2399
                 URL: https://issues.apache.org/jira/browse/XALANJ-2399
             Project: XalanJ2
          Issue Type: Bug
    Affects Versions: 2.7
         Environment: Windows XP Pro x64; JRE 1.5.0_12
            Reporter: Deborah Pickett


Using a literal* string value for @use in an xsl:key causes key() to return too 
many nodes in the node-set for that key.

I define a key in a couple of places (same stylesheet or different, seems to 
behave the same):
  <xsl:key name="name" match="foo" use="'string'"/>
  <xsl:key name="name" match="bar" use="..."/>
  <xsl:key name="name" match="baz" use="..."/>
It does not seem to matter what the "..." are.

Calls to key('name', 'string') should give a node-set only of <foo> elements, 
but I also get <bar> and <baz> elements, essentially every node that has a 
presence in the "name" key.

Calls to key('name', 'never-seen-before-string') return an empty node-set.

* Or, it seems, an expression that can be optimized into a literal.  This makes 
the bug go away:
    <xsl:key name="group" match="[EMAIL PROTECTED] = 'concept']" 
use="concat(substring(@type, 1, 1), 'oncept')"/>
but this still has the bug:
    <xsl:key name="group" match="[EMAIL PROTECTED] = 'concept']" 
use="concat(substring(@type, 1, 0), 'concept')"/>

Small test case follows.

Source document:
<root>
    <link href="somewhere.xml" type="concept"><linktext>C1</linktext></link>
    <link href="somewhere.xml" type="concept"><linktext>C1</linktext></link>
    <link href="somewhere.xml" type="concept" 
importance="required"><linktext>C1 Prereq</linktext></link>
    <link href="somewhere.xml" type="reference" 
role="cousin"><linktext>R2</linktext></link>
    <link href="somewhere.xml" type="reference" 
role="sibling"><linktext>R1</linktext></link>
    <link href="somewhere.xml" type="reference" 
role="sibling"><linktext>R1</linktext></link>
    <link href="somewhere.xml" type="task"><linktext>T1</linktext></link>
    <link href="somewhere.xml" type="topic"><linktext>X1</linktext></link>
    <link href="somewhere.xml"><linktext>X0</linktext></link>
    <link href="somewhere.xml" type="unknown-thing" 
role="sibling"><linktext>X2</linktext></link>
    <link href="somewhere.xml" type="concept"><linktext>C1</linktext></link>
</root>

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

    <xsl:key name="group" match="[EMAIL PROTECTED] = 'concept']" 
use="'concept'"/>
    <xsl:key name="group" match="[EMAIL PROTECTED] = 'task']" use="'task'"/>
    <xsl:key name="group" match="[EMAIL PROTECTED] = 'reference']" 
use="'reference'"/>
    
    <xsl:template match="/">
        <xsl:apply-templates select="key('group', 'concept')"/>
    </xsl:template>
</xsl:stylesheet>

Expected output:
C1C1C1 PrereqC1

Output with Xalan-J 2.7.0:
C1C1C1 PrereqR2R1R1T1C1

$ java -cp c:/Program\ Files\ \(x86\)/Oxygen\ XML\ Editor\ 8.2/lib/xalan.jar 
org.apache.xalan.xslt.EnvironmentCheck
#---- BEGIN writeEnvironmentReport($Revision: 1.29 $): Useful stuff found: ----
version.DOM.draftlevel=2.0fd
java.class.path=c:/Program Files (x86)/Oxygen XML Editor 8.2/lib/xalan.jar
version.JAXP=1.1 or higher
java.ext.dirs=C:\Program Files (x86)\Java\jre1.5.0_12\lib\ext
version.xerces2=Xerces-J 2.9.0
version.xerces1=not-present
version.xalan2_2=Xalan Java 2.7.0
version.xalan1=not-present
version.ant=not-present
java.version=1.5.0_12
version.DOM=2.0
version.crimson=not-present
sun.boot.class.path=C:\Program Files 
(x86)\Java\jre1.5.0_12\lib\rt.jar;C:\Program Files 
(x86)\Java\jre1.5.0_12\lib\i18n.jar;C:\Progr
am Files (x86)\Java\jre1.5.0_12\lib\sunrsasign.jar;C:\Program Files 
(x86)\Java\jre1.5.0_12\lib\jsse.jar;C:\Program Files (x86)\Java\
jre1.5.0_12\lib\jce.jar;C:\Program Files 
(x86)\Java\jre1.5.0_12\lib\charsets.jar;C:\Program Files 
(x86)\Java\jre1.5.0_12\classes
#---- BEGIN Listing XML-related jars in: foundclasses.java.class.path ----
xalan.jar-path=c:\Program Files (x86)\Oxygen XML Editor 8.2\lib\xalan.jar
#----- END Listing XML-related jars in: foundclasses.java.class.path -----
version.SAX=2.0
version.xalan2x=Xalan Java 2.7.0
#----- END writeEnvironmentReport: Useful properties found: -----
# YAHOO! Your environment seems to be OK.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to