i already suggested this here but i think this suggestion deserves it's own "question".
this suggestion tries to solve the problem highlighted here
synonyms are an answer to different tags which mean the same ([oop] and [object-oriented]), but there tags which are strongly related but do not mean the same ([php5] to [php]). this is where tag inheritance comes in.
here is a copy of my "answer" to the php5 "question":
i suggest tag inheritance.
php5 extends php and
php4 extends php
this means everything tagged as [php5] is automatically also tagged [php], but a question tagged as [php] will not automatically get tagged as [php5].
people interested only in php5 questions can follow only the [php5] tag. people interested in php in generall need to follow only [php] and will automatically also follow [php5] and [php4]
having [php] and [php5] as synonyms will not allow this differentiation.
note: tag inheritance will not solve the problem of people tagging their question wrong ([php5] when it is not php5 specific), that can only be solved by educating and retagging.
toying around with the tag inheritance idea a bit further, using python as example:
python2x extends python python3x extends python python-old extends python python-current extends python python-future extends python
currently python 2.7 and python 3.1 are both stable releases.
python26 extends python2x, python-old python27 extends python2x, python-current python30 extends python3x, python-old python31 extends python3x, python-current python32 extends python3x, python-future
eventually python 2.x will be declared dead, python 3.2 will be released, and maybe they will start working on python 4. then the inheritance tree can be changed to look like this.
python26 extends python2x, python-old python27 extends python2x, python-old python30 extends python3x, python-old python31 extends python3x, python-old python32 extends python3x, python-current python33 extends python3x, python-future python40 extends python4x, python-future
this will allow following scenarios:
- searching for [python] will find all question tagged with any of the python tags
- searching for [python3x] will find [python30], [python31] and [python32]
- searching for [python3x] and [python-current] will find only [python31] (in the future it will find [python32])
- searching for [python-current] will find [python27] and [python31] (in the future it will find [python32])
- searching for [python-old] will find [python26] and [python30]
- searching for [python-old] and [python2x] will find only [python26] (in the future it will find [python26] and [python27])
there is nothing principally new in tag inheritance. tag inheritance can be done today when everyone (EVERYONE) who tags a specific tag ([php5]) always (ALWAYS) also tags the more general tag ([php]). the problem is people don't do that.
the advantage of tag inheritance is that it is done automatically. furthermore, like the python example shows, we can do easy mass retagging by changing the inheritance tree.