Martin Honnen created XALANJ-2716:
-------------------------------------

             Summary: XSLT 3 for-each-group group-by and group-adjacent should 
support XSLT 3 feature of composite grouping key
                 Key: XALANJ-2716
                 URL: https://issues.apache.org/jira/browse/XALANJ-2716
             Project: XalanJ2
          Issue Type: Wish
      Security Level: No security risk; visible to anyone (Ordinary problems in 
Xalan projects.  Anybody can view the issue.)
          Components: transformation, Xalan, Xalan-CmdLine
    Affects Versions: The Latest Development Code
            Reporter: Martin Honnen
            Assignee: Gary D. Gregory
         Attachments: cities2.xml, composite-grouping-key1.xsl

This is a suggestion/feature request for the XSLT 3.0 development branch of 
XalanJ at [https://github.com/apache/xalan-java/tree/xalan-j_xslt3.0.]



The XSLT 3 spec introduced a new feature of a "composite" grouping key for 
group-by and group-adjacent of the XSLT 3 for-each-group instruction.

[Definition: If either of the {{group-by}} or {{group-adjacent}} attributes is 
present, then for each item in the 
[population|https://www.w3.org/TR/xslt-30/#dt-population] a set of *grouping 
keys* is calculated, as follows: the expression contained in the {{group-by}} 
or {{group-adjacent}} attribute is evaluated; the result is atomized; and any 
{{xs:untypedAtomic}} values are cast to {{{}xs:string{}}}. If 
{{composite="yes"}} is specified, there is a single grouping key whose value is 
the resulting sequence;

 

So far it seems Xalan's XSLT 3.0 branch doesn't support that as I get an error 
trying it.

 

Test case:

Input sample:
{code:java}
<cities>
  <city name="Milano"  country="Italia"  year="1950"   pop="5.23"/>
  <city name="Milano"  country="Italia"  year="1960"   pop="5.29"/>  
  <city name="Padova"  country="Italia"  year="1950"   pop="0.69"/>
  <city name="Padova"  country="Italia"  year="1960"   pop="0.93"/>    
  <city name="Paris"   country="France"  year="1951"   pop="7.2"/>
  <city name="Paris"   country="France"  year="1961"   pop="7.6"/>
</cities>{code}
XSLT sample:

 
{code:java}
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema";
  exclude-result-prefixes="xs">
  <xsl:template match="/">
    <html>
      <head>
        <title>XSLT 3.0 composite grouping key example</title>
      </head>
      <body>
        <xsl:for-each-group select="cities/city" group-by="@name, @country" 
composite="yes">
          <p>
            <xsl:value-of select="current-grouping-key()[1] || ', ' ||
                          current-grouping-key()[2] || ': ' || 
                          avg(current-group()/@pop)"/>
          </p>
        </xsl:for-each-group>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>
{code}
 

 

Error from Xalan:

 
{code:java}
file:///C:/Users/foo/xslt30-spec-examples/composite-grouping-key1.xsl; 
Zeilennummer13; Spaltennummer93; Zusõtzliche nicht zulõssige Token: ',', '@', 
'country'
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>XSLT 3.0 composite grouping key example</title>
</head>
<body>file:///C:/Users/foo/xslt30-spec-examples/composite-grouping-key1.xsl; 
Zeilennummer17; Spaltennumme
r56; java.lang.ClassCastException: class org.apache.xpath.objects.XString 
cannot be cast to class org.apache.xpath.objects.XNodeSet 
(org.apache.xpath.objects.XString and org.apache.xpath.objects.XNodeSet are in 
unnamed module of loader 'app'){code}
Expected output:
{code:java}
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>XSLT 3.0 composite grouping key example</title>
   </head>
   <body>
      <p>Milano, Italia: 5.26</p>
      <p>Padova, Italia: 0.81</p>
      <p>Paris, France: 7.4</p>
   </body>
</html>{code}
 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xalan.apache.org
For additional commands, e-mail: dev-h...@xalan.apache.org

Reply via email to