> Logically, it is sufficient to avoid identical pathes in model trees: the same
> tag may appear several times iff different labeled pathes from the root lead to
> every occurence of the tag.
You are correct. We could always use complete paths, and then only
require that tags are unique to the right of any one node, so that
paths are unique. This would be implementable, though it would mean
that all requests to the object package would have to pass a path of
tags, rather than just a single tag as now. It would mean changing a
lot of code.
I suppose I feel that the lack of a requirement for knowledge about
previous layers is part of the philosophy. It certainly allows us to
dump out data, rearrange the inner structure of a model, and read the
data back in again. Also, it allows the map code to refer to the
"Map" subtree for example, without it being necessary for the tag
"Map" to always be in the same place in the complete model.
Of course the correct answer is that you can achieve exactly what you
want with constructed subtypes, i.e. the '#' construction. e.g. the
?Box Forecol #Colour
?Colour UNIQUE Red
?Box Forecol UNIQUE Red
Backcol UNIQUE Red
except that you can obviously not just query on Red for a box, you
must use "Forecol # Red" instead. Subtypes don't get used much, I
suspect because they are a pain.