Tinky and SKOS

I'm trying out some ideas with tagging and folksonomies. I want to represent them using <a href="http://tinky.org/tag/rdf,knowledge,thesaurus,classification?http://www.w3.org/2004/02/skos/">SKOS. There has been some exploration of this recently by <a href="http://tinky.org/tag/folksonomy,tagging,rdf?http://lists.w3.org/Archives/Public/semantic-web/2005Apr/0157.html">Karl Dubost and <a href="http://tinky.org/tag/folksonomy,tagging,rdf?http://www.holygoat.co.uk/projects/tags/">Richard Newman helped along by that maven Danny. I couldn't change the output of any existing tagging systems so I did the next best thing and wrote my own: <a href="http://tinky.org/tag/folksonomy,tagging,rdf?http://tinky.org">tinky.org

Tinky is a simple tagging system that works using standard HTML style links. To tag a site you add a link on a webpage somewhere like this:

your text

When someone clicks on the link they're taken to the target site via tinky.org. If they're the first to access the link then tinky fetches the page they came from and scrapes the text used in the link. That text becomes the title of the tagged link in tinky. Anything between the 'tag/' and a slash (/) or question mark is assumed to be the tagging desired. Tinky splits this up and assigns each tag to the link. This all happens transparently: the user clicking on the link is sent straight to the target site without seeing tinky.org. Subsequent users of the link simply add to the popularity stats for that link and are sent along on their way.

To see what's been tagged, just leave off the question mark and the url, i.e. go to http://tinky.org/tag/yourtag

Each tagging group is available as RSS of course by accessing a uri like: http://tinky.org/rss/geolocation,webservice and the most recent taggings added are available at http://tinky.org/rss

Now that I had the source of data I could start on the SKOS. My first thought was to simply use skos:subject tags pointing to the individual tinky.org tag URIs, i.e.:

<item rdf:about="http://www.feedmap.net/BlogMap/Services/">
  ...
  <skos:subject rdf:resource="http://tinky.org/tag/geolocation"/>
  <skos:subject rdf:resource="http://tinky.org/tag/api"/>
  <skos:subject rdf:resource="http://tinky.org/tag/blogs"/>
  <skos:subject rdf:resource="http://tinky.org/tag/documentation"/>
  <skos:subject rdf:resource="http://tinky.org/tag/geolocation"/>
  <skos:subject rdf:resource="http://tinky.org/tag/webapp"/>
  <skos:subject rdf:resource="http://tinky.org/tag/webservice"/>
 ...
</item>

This fels unsatisfactory for a number of reasons, primary because I felt I was losing information such as the original tagging group. Philosophically, people tag with multiple tags because they are trying to represent a composite concept, some kind of combination of all those tags. I replaced the multiple subjects with a single subject refering to a skos:Concept representing the group of tags as a whole.

<item rdf:about="http://www.feedmap.net/BlogMap/Services/">
  ...
  <skos:subject>
    <skos:Concept rdf:about="http://tinky.org/tag/api,blogs,documentation,geolocation,webapp,webservice">
      <skos:prefLabel>api,blogs,documentation,geolocation,webapp,webservice</skos:prefLabel>
    </skos:Concept>
  </skos:subject>
  ...
</item>

This wasn't enough: I still wanted to represent the individual components of the composite concept. My first attempt was to use the SKOS extension property relatedHasPart which looks like it is intended to represent something that is a part of another concept:

<item rdf:about="http://www.feedmap.net/BlogMap/Services/">
  ...
  <skos:subject>
    <skos:Concept rdf:about="http://tinky.org/tag/api,blogs,documentation,geolocation,webapp,webservice">
      <skos:prefLabel>api,blogs,documentation,geolocation,webapp,webservice</skos:prefLabel>
      <skose:relatedHasPart rdf:resource="http://tinky.org/tag/api"/>
      <skose:relatedHasPart rdf:resource="http://tinky.org/tag/blogs"/>
      <skose:relatedHasPart rdf:resource="http://tinky.org/tag/documentation"/>
      <skose:relatedHasPart rdf:resource="http://tinky.org/tag/geolocation"/>
      <skose:relatedHasPart rdf:resource="http://tinky.org/tag/webapp"/>
      <skose:relatedHasPart rdf:resource="http://tinky.org/tag/webservice"/>
    </skos:Concept>
  </skos:subject>
  ...
</item>

I still wasn't happy. The problem is that relatedHasPart feels like a pretty weak property. I think it's semantically poor, barely a step up from skos:related which just asserts some kind of relationship between two concepts. I reasoned that a set of tags specifies an intersection of the individual tags. When you tag something as 'free,cool' you're trying to define a concept for things that are both 'free' and 'cool'. Some things that are tagged as 'cool' aren't 'free' and vice versa. The tag group defines a concept that is a subset of all the seperate tag concepts. Each individual tag must therefore represent a broader concept. I changed the RSS to use the skos:broader property:

<item rdf:about="http://www.feedmap.net/BlogMap/Services/">
  ...
  <skos:subject>
    <skos:Concept rdf:about="http://tinky.org/tag/api,blogs,documentation,geolocation,webapp,webservice">
      <skos:prefLabel>api,blogs,documentation,geolocation,webapp,webservice</skos:prefLabel>
      <skos:broader rdf:resource="http://tinky.org/tag/api"/>
      <skos:broader rdf:resource="http://tinky.org/tag/blogs"/>
      <skos:broader rdf:resource="http://tinky.org/tag/documentation"/>
      <skos:broader rdf:resource="http://tinky.org/tag/geolocation"/>
      <skos:broader rdf:resource="http://tinky.org/tag/webapp"/>
      <skos:broader rdf:resource="http://tinky.org/tag/webservice"/>
    </skos:Concept>
  </skos:subject>
  ...
</item>

This is a lot better I think. Theoretically I could include all possible combinations of the tags since they're all broader than the tagging group - that would be overkill though since it would bloat the RSS enormously. Probably the next steps are to define a skos:ConceptScheme for tinky.org and ground these concepts in that scheme. There may be some other relations I can infer from clusters of tags which I'd like to represent somehow in the future.

Permalink: http://blog.iandavis.com/2005/05/tinky-and-skos/

Other posts tagged as classification, general, projects, rdf

Earlier Posts