[pmwiki-users] hierarchical groups, revisited

Patrick R. Michaud pmichaud at pobox.com
Wed May 24 22:01:44 CDT 2006

On Thu, May 25, 2006 at 12:32:38AM +0200, Joachim Durchholz wrote:
> For links that use slashes, it's far simpler: [[Canine/StBernard]] would 
> now be a relative link, while [[/Canine/StBernard]] would be an absolute 
> one.

Jo's comments on hierarchical groups are very helpful. 

For (1) completeness in the discussion, (2) the possibility of being
able to add more details to the HierarchicalGroups page, and (3) to
preserve my sanity against people who might look at this and say 
"what's the big deal here, I do want to point out that relative
links are not "far simpler".  For example, [[Canine/StBernard]]
may be a relative link, but the question becomes "relative to what?"

Let me digress to say that I'm very hesitant add much more on 
this topic, because past experience on this mailing list has shown 
that the discussion often degenerates rapidly, with lots of
contributors offering "easy" surface-level solutions that don't
hold up under detailed analysis.  But I also know that the
community has expanded quite a bit since the last time this
discussion was aired (2004, I believe), and there's not really
a good detailed illustration of the problem.  So, I'll go ahead
and try to offer a summary and illustration here, for those
who are curious about it.

HOWEVER, to allay any fears people might have about radical changes
appearing in PmWiki, let me say up-front that there is ZERO
chance that PmWiki's existing Group.Name scheme will change in
the PmWiki core in 2006.  At most we might develop a Cookbook
recipe to support hierarchical groups -- but even *that* assumes
that the issues of relative links can be resolved somehow
(of which I'm highly doubtful).

Let me also say up-front that because the discussions on
hierarchical naming schemes tend to degenerate so rapidly,
there can come a point at which I'll simply declare the topic
"closed" again (at least for me) and not worth further discussion.

Bottom line:  It's perfectly okay to ignore this post and this
thread.  I'm only posting it now to give further explanation to
those who might be wondering more about the details of why we 
don't have hierarchical groups in PmWiki.

Okay, let's start with the [[Canine/StBernard]] example.  Bear with
me as I set up some background.

Let's suppose we have hierarchical groups, and that we're in the
Animal.Canine.Beagle page.  Now then, in that page we have links
that look like [[Terrier]] and [[Bulldog]].  It's pretty clear that 
this should link to Terrier and Bulldog in the same group -- i.e., 
to pages called Animal.Canine.Terrier and Animal.Canine.Bulldog.  
No problem so far.

Now then, what about links like [[Terrier/Fox]] and 
[[Bulldog/Australian]]?  Well, Terrier and Bulldog are in 
the Animal.Canine group, so it seems like these ought to be 
links to pages called Animal.Canine.Terrier.Fox and 
Animal.Canine.Bulldog.Australian.  Still no problem.

But let's go back to the original example of a "relative link" --
[[Canine/StBernard]].  In fact, let's just look at a link called
[[Canine]] from within the Animal.Canine.Beagle page.  If 
we _strictly_ follow the pattern above, then [[Canine]] within
the Animal.Canine.Beagle page ought to link to Animal.Canine.Canine.
And [[Canine/StBernard]] looks just like [[Terrier/Fox]] (which is 
Fox within the Terrier subgroup of the current Animal.Canine group), 
so that would indicate that [[Canine/StBernard]] is StBernard 
within the Canine subgroup of the current group, or
Animal.Canine.Canine.StBernard.  Oops.

But it gets worse.  Now let's ask ourselves, "What's the home page for
the group of canines -- i.e., the group that contains 'Terrier' and
'Bulldog'?  The most commonly held expectation is that the home
page for the "group" should be Animal.Canine, with Beagle, Terrier 
and Bulldog being pages within the Animal.Canine group.  
In other words, we have these pages:


Okay, follow carefully:
   Q: What's the "home page" for canines?  
   A: Animal.Canine

   Q: What group is Animal.Canine in?
   A: Animal

   Q: How does one link from the home page for canines (Animal.Canine)
      to one of the canine pages such as Terrier or Bulldog?

Well, we can't just do the natural thing here and use [[Terrier]] or 
[[Bulldog]] in Animal.Canine, because those are relative links and 
therefore they ought to mean "Terrier and Bulldog in the same group 
as the current page", which would result in Animal.Terrier and 

So, in order to link from the group's home page to a page within
the group, we have to preface the link with the name of the current
page (or a special "shortcut" symbol of some sort).  In other words,
the link from the home page of a group to a page within the group
must somehow be different from the links between pages of the same
group.  Looking at it a different way--in a scheme like this one
the "natural" home page of a group cannot itself be in the same 
group as the other pages of the group.

All of the approaches I've seen to try to work around this
difficulty end up making things even *more* confusing to work
with.  If we try to designate a special page within the
group to act as the "home" page-- e.g., Animal.Canine.HomePage.
But then we have to ask ourselves where a link of [[Canine]]
from the Animal.Feline page will lead.  

At this point I'll spare the list (and myself) the tedium
of going through each of the common responses and the conflicts 
that result; suffice it to say that I've gone down the various 
paths many times before.  

Hope this helps to make it clear that hierarchical groups are
anything but clear, and that relative page links really are 
the crux of the problem.


More information about the pmwiki-users mailing list