This blog can't be viewed on LiveJournal. Instead see

We've Opened People Data. Now for everything else...

6th Nov 2008

One thing that's been bothering me of late is while we now have a bunch of open specifications for dealing with person and relationship data in a portable way -- the most notable being XFN for public data and OpenSocial REST APIs for non-public data -- we're still lacking a good way to handle other social objects generically. "Action stream" implementations sites are currently hardcoding lists of specific services so that they can present the stream data in a way suitable for that service: they need to hard-code that Twitter feeds contain status updates, that Flickr feeds contain photos, and so on. Even worse is that each service encodes this information in their feeds in a slightly different way.

I'd like to see a world where, given a "user page" URL on some arbitrary social service, action streaming systems and other kinds of social aggregator will automatically be able to "do the right thing". This allows new services to enter the market without every one of the growing list of streaming products needing to be altered. It also allows those who are publishing their own stuff on self-hosted personal websites to take part in the social web in a much more useful way. While it'll take a while to adapt to completely new concepts, there are plenty of sites out there for publishing photos, videos, events, musical tastes and so forth that are all needlessly publishing this information in non-interoperable ways.

As I've posted previously, I'm quite fond of the approach of using URLs to represent social objects just as we are now using URLs to represent people. URLs make quite good globally-significant identifiers, and when combined with a mechanism like rel="me" multiple URLs can be declared to "represent" the same object. The missing piece is the ability to go from a URL to useful data. We already have standard ways to go from a blog URL to recent entry data. It'd be great if we could standardize on a way to:

  • Take a URL of an HTML page that represents a photograph and discover from that page the URL of the full image, thumbnails of various sizes and so on.
  • Take the URL of an HTML page that represents an event and retrieve crucial information like the name, the date and time and the venue of the event.
  • Publish relationships between social objects and people, such as "Jim is in this Picture", or "Jenny plans to attend this event".
  • Represent the above also in Atom feeds in a standard way so that they can be incorporated into action streams.
  • Do the above both for public data and for data that requires authentication, ideally using the same or a similar mechanism so we don't need two separate implementations.
  • Figure out what other social objects are common between sites and figure something out for these as well.

I previously posted an XFN-like proposal for inter-object relationships (including a more general review of popular social objects) and later a re-casting of it in Atom for action streams. I'm not wedded to these particular approaches. I feel like we have most of the pieces already, we just need to figure out how to fit them together in a way that allows reliable discovery and processing and that can be implemented -- as easily as possible -- by sites that are already out there.

I'm hoping to talk to folks about this at IIW. If you're interested in this too then please let me know.