Agree. The taxonomy idea is for locating a relevant
term, but because it places each term at exactly
one place in the hierarchy, it's not necessary to
use the whole hierarchy in names. So for example,
under my category "network/binding" there is a term
"DNS", which is the network binding for the domain
name system. If Ruby were to have an integrated and
definitive DNS API, it could reasonably be called
module DNS, rather than Network::Binding:
NS.
A definitive extension that adds support for DNS
service requests should be called DNS::Service.
The important point is that the library must (aspire
to) completely cover the conceptual space allocated
by that area of the taxonomy. If it doesn't, then
give it a wacky name under the place of best fit.
So if someone then came along and made a nice library
for doing something special like using DNS Service
requests to locate Windows domain controllers, it
would get called DNS::ColorfulName, and required as
"colorfulname". So the taxonomy exists really only
for the "accepted standard" way of doing things,
and as assistance in locating non-standard things.
I've also used what I call "facet naming". For example,
NT is a category under Operating Systems, and Kerberos
is a category under Security, so when I had a module
that did something with Kerberos, but was limited to
NT, the module got a parenthesized qualification added
to its name: "Security/Kerberos (NT)". The parenthetical
qualification identifies this as being top-level Kerberos
functionality, but pertaining only to NT. In this case
a Ruby module name would be Kerberos::NT, and the require
would be "kerberos/nt". The re-use of a term "NT" that's
defined elsewhere in the taxonomy identifies this as a
facet name, rather than a sub-category.
Using facet naming, every object "belongs to" one area
(Kerberos here) but potentially "pertains to" another
one (NT). This allows full aspect-oriented naming of
cross-cutting concerns.