Project

Profile

Help

Bug #1903

closed

saxon:key-map appears to default to open-ended "max" value when no keys satisfy given range.

Added by David Rudel over 10 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Category:
Saxon extensions
Sprint/Milestone:
-
Start date:
2013-09-17
Due date:
% Done:

100%

Estimated time:
Legacy ID:
Applies to branch:
Fix Committed on Branch:
Fixed in Maintenance Release:
Platforms:

Description

Scenario:

$key is a key enabled with saxon:range-key="true", and $key has no entries in the range $min to $max for document $doc

Expected behavior: saxon:key-map($key, $doc, $min, $max) returns an empty map.

Actual behavior: saxon:key-map($key, $doc, $min, $max) returns all entries whose key values are above $min.

Reproducible: The following script, when processed by Saxon 9.5.0.2 returns the output

1 2

9

The "9" is unexpected. I searched saxonica.plan.io for tickets associated to saxon:key-map() and did not find any, so I assumed this has not been resolved.

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

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:fn="http://www.w3.org/2005/xpath-functions"

xmlns:saxon="http://saxon.sf.net/"

xmlns:map="http://www.w3.org/2005/xpath-functions/map"

>

<xsl:key name="key" match="cars/car" use="@id" saxon:range-key="yes"/>

<xsl:variable name="car.doc">

    <cars>

        <car id="1"/>

        <car id="2"/>

        <car id="3"/>

        <car id="9"/>

    </cars>

</xsl:variable>

<xsl:variable name="seq" select="0,1,2,3,4,5"/>


<xsl:template match="/">

    <xsl:text>

</xsl:text>

    <xsl:variable name="map1" select="saxon:key-map('key',$

car.doc,'0','2')"/>

    <xsl:value-of select="map:keys($map1)"/>

    <xsl:text>

</xsl:text>

    <xsl:variable name="map2" select="saxon:key-map('key',$car.doc,'5','8')"/>

    <xsl:value-of select="map:keys($map2)"/>

   
</xsl:template>

</xsl:stylesheet>


Files

keymap.xsl (922 Bytes) keymap.xsl David Rudel, 2013-09-17 15:44
Actions #1

Updated by David Rudel over 10 years ago

XSL script attached.

Actions #2

Updated by O'Neil Delpratt over 10 years ago

  • Status changed from New to In Progress
  • Assignee set to O'Neil Delpratt
  • Priority changed from Low to Normal

Thanks very much for reporting the problem you have discovered. We are investigating it now.

Actions #3

Updated by O'Neil Delpratt over 10 years ago

  • Found in version changed from 9.5.0.2 to 9.5

I have managed to reproduce the bug reported. I also noticed a separate problem. Running the stylesheet under Saxon-EE (i.e. with the option '@-sa@') produces the following error:

Error on line 23 of keymap.xsl:
  Key definition key has non-string key values
Transformation failed: Run-time errors were reported
Actions #4

Updated by O'Neil Delpratt over 10 years ago

  • % Done changed from 0 to 100

Bug fixed and applied to subversion

The fix was made in the next method of the Iterator class RangeKey@. The problem was that we were not checking the next value against the @max key after filtered out values less than the min key.

Fix will appear in the next maintenance release.

The other issue is the error message mentioned in comment #3 which occurs as a result of using the option '-sa'. We believe that this is reasonable outcome because with the '-sa' option we are say to run as schema aware. The type at compile time is @anyAtomicType@, we cannot make any assumptions on the type of the key '@id@' being a string or untypedAtomic, therefore the exception is thrown.

As a workaround when the option '-sa' is required we can do the following:

<xsl:key name="key" match="cars/car" use="xs:string(@id)" saxon:range-key="yes"/>
Actions #5

Updated by O'Neil Delpratt over 10 years ago

  • Status changed from In Progress to Closed
  • Fixed in version set to 9.5.1.3

Bug fix applied in Saxon maintenance release 9.5.1.3

Actions #6

Updated by O'Neil Delpratt over 9 years ago

Bug also fixed in the Saxon9.6 development branch. Test added to Saxon 9.6 JUnit tests

Please register to edit this issue

Also available in: Atom PDF