[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
On 10 Feb 2008, Michael Kay wrote:
[Sorry if I look like nit-picking, but I have a theoretical streak and I do not use XSLT for making a living but as a pet project of mine. I have a background in functional programming and compilers, and XSLT looks like quite a challenge.]
Ah! There is indeed a difference between
which prints the positions of each group as determined by the document order of the first item of each group, and
which prints the position of the first item in each group, i.e., 1.
But
<xsl:value-of select="@country"/>
and
<xsl:value-of select="./@country"/>
return the same value.
Does this mean that, in general, an XPath expression "p" is NOT equivalent to "./p"? (Philip Wadler (2001), in his paper entitled "A formal semantics of patterns in XSLT" at http://homepages.inf.ed.ac.uk/wadler/topics/xml.html#xsl-semantics wrote, about his formalisation of a fragment of XPath 1.0 that `It follows immediately that the patterns p/. and p and ./p are all equivalent.')
Moreover, you say that "position()" (i.e., the context position) is not a property of a node, but the XPath 2.0 standard says that "It changes whenever the context item changes." The only related standard where I found the word "iteration" is in 14.1 of the XSLT 2.0 Standard, about the notion of "Current Group". In particular, it is not found in XPath nor the Data Model, so I am not sure what you mean, since position() can be used as
<xsl:value-of select="cities/city/position()"/>
where I do not see any iteration (in a loopish sense).
Also, the constructor sequence in the xsl:for-each-group element could be evaluated in concurrent threads having a different context item, that is, there is no sequentiality implied when evaluating the sequence and the iteration you refer to seems to me more a concept related to the serialisation of the output (the side effect of the evaluation). (The verb "to change" above supposes a state, though. Mmmm...)
In other words, I was expecting either a kind of "current-group-position()", if the context item is a "city" element, or else ".[1]/@country", if the context item is a group.
Best regards,
Christian
RE: [xsl] About position() in xsl:for-each-group
Subject: RE: [xsl] About position() in xsl:for-each-group From: Christian Rinderknecht <rinderkn@xxxxxxxxxxxx> Date: Mon, 11 Feb 2008 00:35:19 +0900 |
On 10 Feb 2008, Michael Kay wrote:
@country is a property of a node. position() is not a property of a node, it
is a property of an iteration over a sequence. So it's reasonable that they
should behave differently [in a xsl:for-each-group element].
[Sorry if I look like nit-picking, but I have a theoretical streak and I do not use XSLT for making a living but as a pet project of mine. I have a background in functional programming and compilers, and XSLT looks like quite a challenge.]
Ah! There is indeed a difference between
<xsl:for-each-group select="cities/city" group-by="@country"> <xsl:value-of select="position()/> </xsl:for-each-group>
which prints the positions of each group as determined by the document order of the first item of each group, and
<xsl:for-each-group select="cities/city" group-by="@country"> <xsl:value-of select="./position()/> </xsl:for-each-group>
which prints the position of the first item in each group, i.e., 1.
But
<xsl:value-of select="@country"/>
and
<xsl:value-of select="./@country"/>
return the same value.
Does this mean that, in general, an XPath expression "p" is NOT equivalent to "./p"? (Philip Wadler (2001), in his paper entitled "A formal semantics of patterns in XSLT" at http://homepages.inf.ed.ac.uk/wadler/topics/xml.html#xsl-semantics wrote, about his formalisation of a fragment of XPath 1.0 that `It follows immediately that the patterns p/. and p and ./p are all equivalent.')
Moreover, you say that "position()" (i.e., the context position) is not a property of a node, but the XPath 2.0 standard says that "It changes whenever the context item changes." The only related standard where I found the word "iteration" is in 14.1 of the XSLT 2.0 Standard, about the notion of "Current Group". In particular, it is not found in XPath nor the Data Model, so I am not sure what you mean, since position() can be used as
<xsl:value-of select="cities/city/position()"/>
where I do not see any iteration (in a loopish sense).
Also, the constructor sequence in the xsl:for-each-group element could be evaluated in concurrent threads having a different context item, that is, there is no sequentiality implied when evaluating the sequence and the iteration you refer to seems to me more a concept related to the serialisation of the output (the side effect of the evaluation). (The verb "to change" above supposes a state, though. Mmmm...)
In other words, I was expecting either a kind of "current-group-position()", if the context item is a "city" element, or else ".[1]/@country", if the context item is a group.
Best regards,
Christian
---------------------------------------------------------------------- Christian Rinderknecht +82 2 450-4058 Assistant Professor http://konkuk.ac.kr/~rinderkn Konkuk University Seoul Gwanjin-gu Hwayang-dong 143-701 South Korea
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] About position() in xsl:f, Michael Kay | Thread | Re: [xsl] About position() in xsl:f, Colin Paul Adams |
Re: [xsl] Escaping data in XML attr, Robert La Ferla | Date | [xsl] Eliminating duplicate search , Kafai Publishing |
Month |