Folksonomizer: generic folksonomy service

Just read a post on Paolo Massa’s Blog, where he requests to add a Flickr/ Technorati style of tagging to Webjay music playlists. In hip speak this practice is called a “folksonomy“.

Folksonomy is a neologism for a practice of collaborative categorization using simple tags. This feature has begun appearing in a variety of social software. At present, the best examples of online folksonomies are social bookmarking sites like, a bookmark sharing site, Flickr, for photo sharing, 43 Things, for goal sharing, and Tagsurf, for tag-based discussions.

Strictly speaking, this would be a 4th way of organising stuff, somewhere between a taxonomy (categorized) and searchable (indexed). It’s not a taxonomy because one item can have multiple free-text tags, and it’s not straightforward indexing, because it is information ‘outside’ the item (meta-information), and not part of it.

When I was thinking about how Lucas should implement this, I found it a pity that Webjay has to re-develop something that already exists in other services. Or, the other way around, it would be great to have a service that does ONLY that: add folksonomy support to just about anything. Let’s call it ‘‘. It would look something like this:

  • the service allows the adding of tags to objects. A ‘tag’ is a string ATOMICS: the atomic operations are
    • write_tags(URI, service, tags): add these tags to the URI, overwriting what existed before, can be used to erase some or all tags
    • add_tags(URI, service, tags): add these tags to the URI, leaving existing tags
    • get_tags_for_uri(URI, service, params): get tags for this URI. Params can be used to influence the maximum number of tags returned (default: 100), the sort order
    • get_uris_for_tag(service, tags, params): get URIs that have this tag. Params can be used to influence # URIs, sort order
    • get_tags_for_service(service, params): get all tags for this service. Params is used for #tags returned and sort order.

    The sort order might be: alphabetically, chronologically (most recent first), by frequency (most used tags), or by some combination (e.g. first the relatively ‘new’ tags with a lot of traffic – the new memes or hypes).

  • SCOPE: A service is public (i.e. the tags are also visible when the service is not specified, tags trickle up) or private (the tags only show up when the correct service is specified).
  • AUTHORISATION: the tagging is ‘narrow’ (i.e. only the author(s) can add tags, like Technorati) or ‘broad’ (i.e. anyone can add tags to a URI, like (terminology from
  • API: the service can be called with SOAP/XML-RPC (within PHP/Perl/ASPX scripts) or Javascript (within HTML pages) links.
  • SIMPLE: To show the tags, all the webmaster should do is add a piece of code in his pages like <script src=”$URI”> </script>. If the folksonomy is broad, the webmaster can throw together a standard HTML FORM that allows users to add tags to a URI via POST or GET.
  • FLEXIBLE: To have more control over the layout and sort order, the webmaster uses the XML-RPC API, which returns a richer XML list. E.g. when he requests the URIs for a certain tag, he gets a list in the format: URI/date added/#tags/#taggers and can use the extra information to make fonts bigger, change sort order, …

Any programmers out there with a lack for a pet project?

Some services that are quite close to this: the API and Flickr API.

Technorati tags:

9 thoughts on “Folksonomizer: generic folksonomy service”

  1. If every URI that belonged to a “service” had a tag associated with it that was the name of that service, wouldn’t that solve the problem?

    So, for every URI to an MP3 on webjay (say it has the tag “webjay” and whatever other descriptive tags (jazz, shank, etc.) you like. A “service” can really just be another tag.

  2. Yes and no. It might be one way to implement it, but you cannot do public/private tags, plus the authorization for narrow folksonomies becomes tricky.

  3. Interesting.

    You could theoretically use something like Freetag to get started. I released it this past weekend so that it could get used to toss up tagging sytems for projects like Webjay in a matter of hours. It’s more of a basic system right now, but a RESTful API based upon my work for is in the pipeline, as well as tag namespaces.

    It’s geared more towards interoperability of multiple object repositories that run the same backend and communicate over the same framework, though. But I suppose you could implement it on a generalized directory of taggable services, and then use URI’s to manage everything. Or maybe I misunderstand your point?

    I’d be happy to help extend Freetag somewhat towards new requirements – take a look at it and let me know if it might be suitable.

  4. one step backwards, two forwards:

    the rusty old annotea project laid the grounds for adding tags to diverse webpages, including a protocol and user authorisation/identification etc.

    Suppose that the protocl of annotea is weird and not as simple as REST, but its a good starter (and has implementations)

  5. “Any programmers out there with a lack for a pet project?”

    …Im building a kind of generic folksonomy API for my organization’s intranet. Something kind of like IBM’s DogEar, but more generic. I’d be interested in collaborating on something public though.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.