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.

About Ian Davis

British entrepreneur and CEO of Kasabi. Primary interests are open data, the semantic web and decentralization.
This entry was posted in Uncategorized and tagged , , . Bookmark the permalink.

18 Responses to Tinky and SKOS

  1. Rich says:

    That’s a bloody cool system! I’m sure Danny will join me in not being quite sure of the optimality of a flat namespace system (I’d prefer to have my own tags that are related to other people’s… mine live at http://www.holygoat.co.uk/owl/tag/), but compared to del.icio.us (which, of course, also has a flat namespace) it’s sweet.

  2. Ian Davis says:

    Cheers Rich. Thanks for the nice comment. I bet there’s some way to mediate between tagging systems. Perhaps you could link your tags to tinky tags by linking via tinky, e.g. animals

  3. Rich says:

    Good God, Ian — do you ever stop having genius ideas? :)OK, one loses a little bit of precision — e.g. “skies” for me is different to that of a meteorologist — but intermediating through a tagging service is quite a cool idea!Any thoughts on what is undoubtedly a misunderstanding of mine?Oh, and my Unicode page title doesn’t show up properly — are you reading the referring page’s encoding?

  4. Rich says:

    … though the encoded chars do come out just fine in the RSS feed, which is (IIRC) supposed to be double-encoded. Just take out the double-encoding for the HTML version.

  5. Ian Davis says:

    Rich, the encoding isn’t handled properly yet (as you probably gathered).

  6. Ian Davis says:

    Tinky understands that you want to tag the same page in different ways at different times. Why not link to tinky from holygoat.co.uk multiple times with a choice of tags and let your readers select the ones they think are most appropriate :)

  7. Rich says:

    I was wondering if that was the best approach :DIt just occurred to me that this is a really dangerous opportunity for spam. Thoughts?

  8. Ian Davis says:

    There is a risk of spam, but tinky requires a link to be physically present on a web page somewhere so I think the risk is not that great. Simply accessing the url via a pre-seeded robot does nothing. I may decide to recrawl the database periodically and remove the links where the originating page has disappeared.

  9. Rich says:

    Mm, I’m thinking something along the lines of astroturfing — e.g. you could do something like Richard’s site is amazing. If you start pointing to good stuff, both those sites and your own site gets traffic (rather than some user page on del.icio.us). I.e. the more sites I point to, the more whuffie I get.Certainly an incentive…

  10. Danny says:

    Ooh, what a lot of comments…mine is – very nice indeed!!The intersection of concepts bit sounds spot on.(A maven is a small furry animal, righht?)

  11. Danny says:

    Quick favour? I just had to do a couple of unnecessary clicks to subscribe on bloglines, any chance of adding to the [head] (I think this is the syntax) : [link rel="alternate" type="application/rss+xml" title="RSS" href="http://tinky.org/rss"]

  12. Peter Jones says:

    Very cool. I’ve just been musing as to whether the URI syntax could be made more exciting. I know SKOS does URIs for Booleans, so it occurred to me that you could have something like a NOT operator, e.g.rdf:about=”http://tinky.org/tag/api,blogs,!documentation,geolocation,!webapp,webservice”I haven’t checked whether that is a legal URI, just suggesting the idea. Maybe it messes with skos:broader though.

  13. Jay Fienberg says:

    Brilliant and very inspiring. I love the simplicity of it!!

  14. Richard Newman » holygoat.co.uk » blog says:

    TinkyIan Davis over at Internet Alchemy has written Tinky, a tagging service along the lines of del.icio.us.

  15. tinky ogle says:

    My name is tinky and many people have told me that tinky means tiny but i actually agree that it comes from tinker bell a little fairy or girl.Anyway tinky does not have that much of a meaning.

  16. karl Dubost says:

    Excellent :) That’s very exciting.

  17. Nicolas Hoizey says:

    This is a great idea!When you say that “tinky fetches the page they came from and scrapes the text used in the link [and it] becomes the title of the tagged link in tinky”, does it mean that I can’t put the link only in my RSS feeds? Has it to be on a web page?

  18. Asa Liedholm says:

    abstract rudeTinky and SKOS

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s