[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] About position() in xsl:for-each-group
Subject: Re: [xsl] About position() in xsl:for-each-group From: Colin Paul Adams <colin@xxxxxxxxxxxxxxxxxx> Date: Sun, 10 Feb 2008 17:38:31 +0000 |
>>>>> "Christian" == Christian Rinderknecht <rinderkn@xxxxxxxxxxxx> writes: Christian> <xsl:for-each-group select="cities/city" Christian> group-by="@country"> <xsl:value-of select="position()/> Christian> </xsl:for-each-group> Christian> which prints the positions of each group as determined Christian> by the document order of the first item of each group, Christian> and This returns the context position, which is defined as: "the context position is the position of this item within the set of initial items (that is, one item for each group in the population) in population order, " so effectively it is the position of the group within the sequence of groups. Christian> <xsl:for-each-group select="cities/city" Christian> group-by="@country"> <xsl:value-of Christian> select="./position()/> </xsl:for-each-group> Christian> which prints the position of the first item in each Christian> group, i.e., 1. The context item (.) is defined as "the context item is the initial item of the group". This is a sequence of 1 item. So ./position() is giving the context position within a sequence of 1 item, so it will always be 1. Christian> But Christian> <xsl:value-of select="@country"/> Christian> and Christian> <xsl:value-of select="./@country"/> Christian> return the same value. Yes. Because you are asking for the country attribute: a) of the first item in each group, and b) of each item in a sequence of one (the first item in the group) Christian> Does this mean that, in general, an XPath expression Christian> "p" is NOT equivalent to "./p"? (Philip Wadler (2001), The / operator changes the context item, so yes. Christian> in his paper entitled "A formal semantics of patterns Christian> in XSLT" at Christian> http://homepages.inf.ed.ac.uk/wadler/topics/xml.html#xsl-semantics Christian> wrote, about his formalisation of a fragment of XPath Christian> 1.0 that `It follows immediately that the patterns Christian> p/. and p and ./p are all equivalent.') Expressions are not patterns - the latter are syntactically a subset of the former, but the semantics of pattern matching are not those of expression evaluation. Christian> Moreover, you say that "position()" (i.e., the context Christian> position) is not a property of a node, but the XPath Christian> 2.0 standard says that "It changes whenever the context Christian> item changes." The only related standard where I found Christian> the word "iteration" is in 14.1 of the XSLT 2.0 Christian> Standard, about the notion of "Current Group". In Christian> particular, it is not found in XPath nor the Data Christian> Model, so I am not sure what you mean, since position() Christian> can be used as Christian> <xsl:value-of select="cities/city/position()"/> Christian> where I do not see any iteration (in a loopish sense). That is correct. of course, the implementation may well involve a loop, but it does not have to. Christian> Also, the constructor sequence in the Christian> xsl:for-each-group element could be evaluated in Christian> concurrent threads having a different context item, Or concurrent processes. Or for that matter a sequential evaluation in a different order from that of the sequence, results being subsequently re-ordered to preserve the semantics. Christian> that is, there is no sequentiality implied when Christian> evaluating the sequence Correct. That is, there is a sequential ordering of results that must be observed, but no temporal evaluation order. Christian> and the iteration you refer to Christian> seems to me more a concept related to the serialisation Christian> of the output (the side effect of the evaluation). (The Serialization does not necessarily take place. -- Colin Adams Preston Lancashire
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] About position() in xsl:f, Christian Rinderknec | Thread | RE: [xsl] About position() in xsl:f, Michael Kay |
Re: [xsl] Escaping data in XML attr, Anthony B. Coates (X | Date | Re: [xsl] Eliminating duplicate sea, Martin Honnen |
Month |