I've been thinking about how tags should work in Dimbola, or in general. Tags are an important tool for managing a large collection of photos, and it's important they work well.

So far, I have a simple hierarchical tag system. Tags have a free-form name, and can be arranged in a tree. The hierarchy is quite important so that one can have things like this:

* Location
  * Europe
    * Finland
      * Espoo
      * Helsinki
      * Vantaa
    * Sweden
      * Stockholm
  * Oceania
    * New Zealand
      * Auckland
      * Wellington
    * Timor-Leste
  * Off-planet
* Animal
  * Invertebrae
  * Mammal

When you add a tag like "Helsinki" to a photo, you implicitly also add all of its parents: "Finland", "Europe", and "Location". This should will reduce the amount of effort it takes to make all photos have extensive tags.

This much already works. I'm wondering what else I could add to the tag system. For example, it would be good to be able to share the tag hierarchy one makes with others, and merge theirs into one's own. This way, photographers could collaborate to create a shared generic tag hierachy, reducing the amount of work they each have to do to get a good one.

There could be several collections of tag hierarchies that could be stacked: a general one, plus ones specific to particular areas. A bird photographer might need to differentiate between very minute variations of a particular species, whereas I might only care between the difference between "big bird" and "small bird".

What can I do to make such collaboration easier? Obviously I need to add export and import of the tag hierarchy to and from files, with automatic merging when importing. But I'm thinking there might be tags one doesn't want to share with others, such as names of people. So, a tag might have a private/public flag.

The private/public flag could be used to control what tags get added to a photo when it is exported, or shown in a web gallery, but it might be necessary to have a different control for that. For example, although "Location" is probably best kept as a public tag, it might be silly to show it on a web gallery.

Sometimes it might be nice to have aliases for a tag. For example, when you're trying to find photos of a particular animal, it might have several names: at least the common name, and the scientific classification in Latin. There might be several common names: donkey and ass.

Should it be possible for two tags to have the same name? For example, two cities in different countries might have the same name, and it would be awkward to have to encode that into the name instead of the hierarchy just for those cities, when everything else has it in the hierarchy. But will the user get confused by this? How will they tell which Paris is being referred to?

Perhaps tags should have descriptions that can be looked up easily? This might be useful for other purposes as well. And if you're getting a tag hierarchy from someone else, they might have added a tag for something you don't know, and would it then be nice to be able to either see the description right there, or at least easily look it up in Wikipedia or (failing that) some search engine?

Should tags have translations to other languages? Possibly, though that's going to get all kinds of tricky.

What else should the perfect tag system for photo management do? Any ideas, anyone?