Subject: RE: [xsl] surprised about the results of a filter expression in XSLT2.0 From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 11 May 2006 19:12:06 +0100 |
It's actually giving different results under Saxon-B and Saxon-SA (the join optimizer in Saxon-SA is kicking in and getting something wrong). I'll look into it. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: alan.painter@xxxxxxxxx [mailto:alan.painter@xxxxxxxxx] > Sent: 11 May 2006 17:30 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] surprised about the results of a filter > expression in XSLT2.0 > > I'm surprised to see that a filter expression, applied in > this case to a variable, produces more elements in the result > than there are elements in the variable. In this case, it > produces the cartesian product of the number of elements in > the variable and the number of combinations in the list that > comprises the predicate. I'm assuming that this is normal. > Where can I find this behavio(u)r described in the XSLT spec? > Thanks for any pointers. > > In Saxon 8.7.1 (perhaps elsewhere but haven't tested), in the > below stylesheet, the instruction > > <xsl:copy-of select="$idElements[@id=$hrefs]"/> > > produces > > <idElement id="_123"/> > <idElement id="_123"/> > <idElement id="_123"/> > <idElement id="_456"/> > <idElement id="_456"/> > <idElement id="_456"/> > > whereas the instruction > > <xsl:copy-of select="$idElements[@id=distinct-values($hrefs)]"/> > > produces > > <idElement id="_123"/> > <idElement id="_456"/> > > Here's the stylesheet > > <?xml version="1.0" encoding="UTF-8"?> > > <xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > version="2.0"> > > <xsl:output method="xml" encoding="ISO-8859-1" indent="yes"/> > > <xsl:variable name="testdoc"> > <root> > <refElement name="element1"> <ref > href="_123"/> </refElement> > <refElement name="element2"> <ref > href="_123"/> </refElement> > <refElement name="element3"> <ref > href="_123"/> </refElement> > <refElement name="element4"> <ref > href="_456"/> </refElement> > <refElement name="element5"> <ref > href="_456"/> </refElement> > <refElement name="element6"> <ref > href="_456"/> </refElement> > <idElement id="_123"/> > <idElement id="_456"/> > <idElement id="_789"/> > </root> > </xsl:variable> > > <xsl:variable name="idElements" select="$testdoc//idElement"/> > > <xsl:template match="/"> > <xsl:apply-templates select="$testdoc" mode="inTestDoc"/> > </xsl:template> > > <xsl:template match="*" mode="inTestDoc"> > <xsl:variable name="hrefs" as="xs:string*" > select="$testdoc//@href"/> > <xsl:copy> > <!-- Case 1 --> > <xsl:copy-of select="$idElements[@id=$hrefs]"/> > <!-- Case 2 --> > <!-- <xsl:copy-of > select="$idElements[@id=distinct-values($hrefs)]"/> --> > </xsl:copy> > </xsl:template> > > </xsl:stylesheet> > > Output of case 1: > > <?xml version="1.0" encoding="ISO-8859-1"?> <root > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > <idElement id="_123"/> > <idElement id="_123"/> > <idElement id="_123"/> > <idElement id="_456"/> > <idElement id="_456"/> > <idElement id="_456"/> > </root> > > Output of case 2: > > <?xml version="1.0" encoding="ISO-8859-1"?> <root > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > <idElement id="_123"/> > <idElement id="_456"/> > </root> > > -alan > ************************************************************** > *********** > This message and any attachments (the "message") are > confidential and intended solely for the addressee(s). > Any unauthorised use or dissemination is prohibited. E-mails > are susceptible to alteration. > Neither SOCIETE GENERALE nor any of its subsidiaries or > affiliates shall be liable for the message if altered, > changed or falsified. > ************ Ce message et > toutes les pieces jointes (ci-apres le "message") sont > confidentiels et etablis a l'intention exclusive de ses > destinataires. Toute utilisation ou diffusion non autorisee > est interdite. Tout message electronique est susceptible > d'alteration. > La SOCIETE GENERALE et ses filiales declinent toute > responsabilite au titre de ce message s'il a ete altere, > deforme ou falsifie. > ************************************************************** > ***********
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] surprised about the results o, alan . painter | Thread | RE: [xsl] surprised about the resul, Michael Kay |
Re: [xsl] XSLT 2.0 Vs XSLT 1.0, Tech Savvy | Date | RE: [xsl] surprised about the resul, Michael Kay |
Month |