[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Keys and select distinct - is that the solution ?


Subject: Re: [xsl] Keys and select distinct - is that the solution ?
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Mon, 05 Jun 2006 12:30:29 -0400

Hi,

Personally I think the "Muenchian method" is only difficult because we treat it as if it were difficult.

All it does is

* select one representative node from each group (usually the first
  in document order)
* iterate over this set
  * with each representative, process the rest of its group

The only reason it's hard at all is that in order to do these things efficiently in XSLT 1.0 we have to do things like node-identity tests (are you the first node in the group to which you belong?), which are just a bit tricky. Steve's particular contribution was to use keys for indexing, making expensive tree-traversals unnecessary when doing this. The basic algorithm might be clearer and easier to understand if we did it without keys -- but the efficiency gains are so enormous that we almost always have to use them. Hence the Muenchian method becomes "standard" even while it is somewhat more opaque (beginners often find keys a bit much to take in), and looks more complicated than it actually is.

It may be worth $45 to learn, but that's hardly the going market rate. Many many people have learned it for free.

As for "the man himself", Steve is nothing but gracious, and would probably be first to acknowledge that although he conceived the solution (or rather, imaginatively applied it from another domain: see http://www.biglist.com/lists/xsl-list/archives/200005/msg00270.html), it also emerged from within the context of a community-wide effort to address a number of variously-related transformation requirements including grouping, in which many other people played significant roles (including several still active here such as Mike Kay, David Carlisle, Ken Holman -- read the archives and FAQ to see who).

The first three or four years of XSLT were lots of fun, and a very impressive demonstration of how much more powerful than one mind (even one mind like those mentioned above) can be many working cooperatively.

Cheers,
Wendell

At 07:29 PM 6/2/2006, you wrote:
Christian Rasmussen <christiankrasmussen@xxxxxxxxx> writes:

> These are grouped in elements of ManureTypeCodes and ManureTypeNames

sounds like some projects I've worked on ...

I have nothing really substantial to offer here, except to emphasize
that in XSLT2 this becomes extremely simple.  so my advice is to
very seriously consider using XSLT2.

that is, for various reasons, sometimes not an option.  in that case
you probably need to understand the so-called muenchian method, since
that technique is the only general purpose grouping method I know of
in XSLT1.  it's certainly not beginner level XSLT, but given a
moderate investment in puzzling it out, is not as they say rocket
science.

in fact, I learned the method from (indirectly) the man himself:

  Building Oracle XML Applications
  Steve Muench

At $44USD, it's not cheap, but it contains a section on the eponymous
method, with nice pictures and a thorough walk through.  it still took
me several tries before I really felt comfortable with the idea, but
if you're going to be doing any serious XSLT1 work, it's something you
pretty much need to understand.


Current Thread
Keywords