[Pmwiki-users] Hierarchical groups

Patrick R. Michaud pmichaud
Tue Jun 8 18:52:14 CDT 2004


On Wed, Jun 09, 2004 at 12:04:23PM +1200, Britta wrote:
> The problems I see are from a user point: how difficult this gets for
> non-techie/inexperienced users and how much of a muddle they're therefore
> likely to make of it <g>.

Exactly.  I try (and sometimes succeed) to keep the non-techie perspective
paramount.

> > The first is to only allow absolute group names--i.e., all group names
> > start from the top.  I personally don't have a problem with this, but
> > I suspect people will have issues with the lack of a way to do relative
> > group references...
> 
> and I guess inexperienced users might get frustrated at having to check and
> re-trace the group/page paths ...?

No, I just think that authors would get annoyed at having to retype
full group names--they'll think there ought to be a shorter mechanism.
But see "A Possible Solution" below...

> > The other approach is to use the first component as a relative anchor
> > if it occurs in the current group name.  Thus, in the page Alpha.Beta.Gamma,
> > the link [[Beta.Zeta]] would refer to Alpha.Beta.Zeta,
> 
> I really like this one ... I think it might be easy/transparent enough even
> for inexperienced users ...
> 
> > But this can also get confusing, because [[Alpha.Delta.Epsilon]]
> > and [[Delta.Epsilon]] refer to different pages,
> 
> you've lost me here :0
> Why do they refer to different pages?
> I thought it would be the same as :
> >  even though
> > [[Alpha.Beta.Zeta]] and [[Beta.Zeta]] refer to the same page.
> 
> I obviously missed something! LOL

Thanks for proving my point about it being confusing!  It's worth a
bit of a better explanation...

If one starts from the page Alpha.Beta.Gamma, and uses the link
reference [[Beta.Zeta]], then the system sees that "Beta" is a parent of
Alpha.Beta.Gamma and so it uses Alpha.Beta as the common reference point,
thus Alpha.Beta.Zeta.  

Starting from Alpha.Beta.Gamma again, and using a link [[Alpha.Beta.Zeta]],
"Alpha" becomes the common reference point, and again we have a link
to Alpha.Beta.Zeta.  So [[Beta.Zeta]] and [[Alpha.Beta.Zeta]] both
refer to Alpha.Beta.Zeta.

The same is true for Alpha.Beta.Gamma and a link of [[Alpha.Delta.Epsilon]]:
"Alpha" is the common reference point, so the link would go to
Alpha.Delta.Epsilon.

But if the page Alpha.Beta.Gamma has a link reference of 
[[Delta.Epsilon]], "Delta" isn't any part of the current page name, 
so we start at the top and end up with a reference to "Delta.Epsilon".

Thus, inside of Alpha.Beta.Gamma, [[Alpha.Beta.Zeta]] and [[Beta.Zeta]]
both refer to Alpha.Beta.Zeta, but [[Delta.Epsilon]] and 
[[Alpha.Delta.Epsilon]] differ.  Note that the situation is reversed
if we happen to be in a page called Alpha.Delta.Mu (why is left
as an exercise for the reader... :-)

How often is this likely to occur or conflict in practice?  Probably 
not often.  But when/if it does occur, it's likely to be *very* confusing.

For those who might propose that a link [[Delta.Epsilon]] should search
each parent group for a page named "Delta" and start from there to resolve
the link--just don't go there.  This would have the very undesirable effect
that simply adding a page into a hierarchy could change the target of
large numbers of links.

A Possible Solution
-------------------
One solution might be to introduce a markup (I suggest "...") that says
to use the first element of the link as an ancestor group instead of
a top-level group.  I.e., in Alpha.Beta.Gamma one would use [[...Beta.Zeta]]
as a relative link to Alpha.Beta.Zeta, while [[Beta.Zeta]] would always be
an absolute link to Beta.Zeta.  In this sense the "..." acts as a
"wildcard prefix", saying to use all of the current group name up to 
the "Beta" portion.  

And yes, I did consider the possibility of using an asterisk, as in
[[*.Beta.Zeta]], but I think this also implies that one could write
something like [[Alpha.*.Zeta]], and I really don't want to go there.  :-)

Pm



More information about the pmwiki-users mailing list