At 2009-02-26 10:21 -0800, Dick Penny wrote:
I am a newbie at XSLT,
Welcome!
have only written 1 identity transform that took me 2
weeks to get working. I have a grouping task for some xml data and plan to
follow either post 49748 by: Martin Honnen
or 49749 by: G. Ken Holman in the 2/24/09 Forum Digest even though I only have
a single group and do not want any item output, just summaries for each
group.
Sounds straightforward. And it sounds like you are dealing with
document-wide context. So it sounds to me like using keys would be
best. Using the variable-based method of grouping is appropriate
when dealing with a sub-document context or a multiple-document context.
I have been scanning/reading the books by Jen Tennison and Mangamo but I guess
I don't understand the use of
<xsl:key name=.........> by Honnen and the
lack of <xsl:key....> by Holman.
In both approaches note the use of the following expression:
generate-id(.)=
generate-id( (... some expression...)[1] )
A property of generate-id() is that for every node of every source
tree in a given transformation, the string value returned for that
node is persistent for the duration of the transform and unique for all nodes.
These properties allow one to confirm that the current node "." is or
is not the first node in document order of those nodes addressed by
"(...some expression...)[1]".
Such a test is only ever true once for each unique value of nodes
being inspected ... that being for the first in document order ...
and there is always guaranteed to be at least one such node for each
value found in the nodes.
The principle applied in grouping is to do all the heavy lifting only
one time for each unique value in the instance, regardless of how
many times that value is found in the instance. The above test is
only true for the first time that value is found in the instance, not
for other times the value is found in the instance.
This gives the stylesheet the opportunity to do the heavy lifting
only once for each value and not repeat the heavy lifting at other
times for the same value.
I think of <xsl:key......> as a declaration,
It is declaring a property of identified items in the instance that
the processor can take advantage of when the stylesheet uses key() to
access those items.
similar to "new" in some OO languages.
I don't think of it as such. I think of it as simply a two column
table, where the left column has a node and the right column has a
corresponding lookup value.
It is either mandatory
It is optional and only added by the stylesheet writer if they wish
to take advantage of the key() function to access the identified
items. Using key() one supplies the lookup value and gets back the
corresponding nodes with that value, in document order.
or not needed. How can Holman's work with such a declaration?
The <xsl:key> table is not needed in my approach because my approach
doesn't involve the use of the key() function.
I'm using the principle described above to find the first item in
document order found in a variable for each given value, not in a key table.
When using the key table approach the same principle is being
applied, but for all values found document wide.
Note that this principle of doing the heavy lifting for the first in
document order of the items with the grouping criteria is inherent in
the XSLT 2 grouping facility:
<xsl:for-each-group ....grouping-criteria...>
I tell my students to read that as if it were written:
<xsl:for-the-first-in-document-order-of-each-group ...grouping criteria...>
because that is where the current context is at at the time you are
building the result tree from inside the instruction. It takes some
of the mystery away from the instruction.
Note there is yet another approach in XSLT 1, that of using axes, but
it is likely the slowest of the approaches available. I cover that,
but I show how the other approaches in XSLT 1 are superior, and how
the approaches in XSLT 2 are superior to those of XSLT 1.
I hope this has distinguished how there can be multiple differing
approaches to the original grouping question.
. . . . . . . . . . . . Ken
--
XQuery/XSLT training in Prague, CZ 2009-03 http://www.xmlprague.cz
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--