A simple data portability project or is it

As stated in my last post Storm in a teapot, DataPortability.org has started a DIY project of the month on rel=me.

First off, a bit of background about rel=me (rel is short for relationship), XFN, and microformats. rel=me is merely one piece of XFN (XHTML Friends Network) microformat standard. XFN is a format to depict social relationships, i.e., friends, family, lovers, co-workers, etc. For a quick introduction to XFN, check out this page – assumes basic HTML knowledge.

What are microformats you ask. According to microformats.org about page, microformats are designed for humans first and machines second. Well not really, especially for humans that are non-techies. It should have said that microformats are designed for humans with at least a basic knowledge of HTML otherwise it is just gibberish. HTML knowledge is primarily a domain expertise of web developers and designers which are a subset of developers. For example, I met with a friend of mine yesterday who is a software professional for over 20 years with extensive experience in Java / J2EE, security appliances, etc and he has never heard of any of the data portability technologies or even FriendFeed or Twitter for that matter. He is just as clueless as the non-techie users in terms of knowing what XFN is though he has the ability to learn about it far more quickly than a non-techie user.

XFN is only one microformat standard, other microformat standards are

  • hAtom – for marking up Atom feeds from within standard HTML
  • hCalendar – for events
  • hCard – for contact information; includes adr – for postal addresses, geo – for geographical coordinates (latitude, longitude)
  • hReview – for reviews
  • hResume – for resumes or CVs
  • rel-directory – for distributed directory creation and inclusion
  • rel-nofollow, an attempt to discourage 3rd party content spam (e.g. spam in blogs).
  • rel-tag – for decentralized tagging (Folksonomy)
  • xFolk – for tagged links
  • XOXO – for lists and outlines

Getting back to DataPortability.org DIY rel=me project. For those of you that understand HTML, rel=me is an HTML attribute you can add to href link tags to describe your various online identities. For a full list of other rel values, check out this page. For example, here are some of my online identities in XFN rel=me format

<a href="http://twitter.com/bobngu/" rel="me">Bob Ngu's Twitter profile</a>
<a href="http://www.linkedin.com/in/bobngu/" rel="me">Bob Ngu's LinkedIn profile</a>
<a href="http://friendfeed.com/bngu" rel="me">Bob Ngu's FriendFeed profile</a>
<a href="https://ungeekdapo.wordpress.com" rel="me">Bob Ngu's Data Portability Blog</a>

Note that I did some HTML tricks to not display the above information as regular links, otherwise it would look like this normally

As you can see, the actual HTML output has no visual difference as far as a user is concerned, they are simply regular links. But to a XFN capable reader or browser, it can understand the rel=me attribute as semantically meaning “you”. Note that there are many different forms of online identity, not just profiles at popular social sites but also any blogs you own, etc. This is not immediately obvious to a regular user so it’s worth pointing out.

So assuming that you went through the trouble to write up your HTML with rel=me, what next, where is that information actually consumed. I don’t think the 2 most popular browsers (IE 7 and Firefox 2) at this time have native support for XFN, I hear Firefox 3 is suppose to have native microformat support but I haven’t looked for it and if it is there, it isn’t immediately obvious to me. The closest thing I can find is a Firefox plugin called Operator. Operator is a microformat capable reader and for the most part seems to be able to consume most of the above microformat standards except rel=me, kind of odd but kind of understandable.

Here’s an example of a microformat capable page, and this is the microformat information that the Operator (installed on Firefox 2) plugin extracted from the page. For example, there are 3 contacts information: deBurca Ltd, James Burke, Joscelyn Upendran. For all 3 contacts, you can export the contact information in vcard format, just select “Export Contact”.

If you want to test out microformats, you can also use tools like lab.backnetwork.com ufXtract – Microformats Parser (Beta 0.2.2) to read a microformat capable page. I don’t recommend nor expect a non-techie to use that tool though. If you are technically inclined, go ahead and plug in this post URL in the ufXtract tool and select “me” for format, click submit, and you will see the rel=me information extracted.


text: Bob Ngu’s Twitter profile
link: http://twitter.com/bobngu/

text: Bob Ngu’s LinkedIn profile
link: http://www.linkedin.com/in/bobngu/

text: Bob Ngu’s FriendFeed profile
link: http://friendfeed.com/bngu

text: Bob Ngu’s Data Portability Blog
link: https://ungeekdapo.wordpress.com/

Another service capable of consuming XFN, including rel=me, is Google Social Graph APIs but again this is only for techies, specifically web developers. Non-web developers and even web designers might not be well suited to understand the APIs. I heard that Google Social Graph APIs came about after this excellent article Thoughts on the Social Graph by Brad Fitzpatrick (since hired by Google and is responsible for delivering Google Social Graph APIs) and
David Recordon (Six Apart).

Note that Googe Social Graph APIs only work on data after Googlebot has crawled it, so for real-time testing, Google created a test parser URL at
You can see the Google test parser documentation here. Anyone can send a HTTP POST request to the test parser URL and see the Google Social Graph API results. One of DataPortability.org contributor, Julian Bond, implemented a simple wrapper page around the test parser URL. If you go to the wrapper page and enter this post URL, you will get the following results

SG Test Parser http response: 200
List of outgoing "me" edges
...the rest of the output deleted for brevity

Basically the list of outgoing “me” edges is the Google Social Graph output for the rel=me links I added in this post.

Final Thoughts
When I started looking at rel=me, my initial thought was, quoting Sherlock Holmes, “It’s elementary, my dear Watson” but it’s far from elementary as you can see. XFN and microformats are talked about way more in blogs than actually being practiced in the wild. I first started to check for XFN capable sites off this page and a lot of the XFN capable site links are broken, either the site no longer exists or the information is incomplete. It is definitely not a page for non-techies. I did find the one (as mentioned above) site that provided readable microformat information. I also know that Mahalo (a new search engine) also now supports microformat in their results.

At this time, I can honestly say that XFN rel=me proliferation is limited and experimental at best. It would take a while for mass adoption to happen and requires a lot of user education, adoption by popular social sites like Facebook, MySpace, etc, and native browser support.

14 Responses to “A simple data portability project or is it”

  1. 1 Drummond Reed April 30, 2008 at 12:24 am

    Bob, best writeup on the state-of-the-art of rel=me I have seen. Good job.


  2. 2 Bob Ngu April 30, 2008 at 1:57 am

    Dru, glad you like 🙂

  3. 3 Julian Bond April 30, 2008 at 6:51 am

    Like a lot of the microformats, the problem with rel=me is as much about a lack of applications that read it as websites that post it. There’s actually quite a lot of rel=me marked up html out there such as from Mybloglog and Twitter but there’s very very few applications that do anything with it.

  4. 4 J. Trent Adams April 30, 2008 at 12:20 pm

    Bob –

    Most excellent one-page summary I’ve seen. And thanks for the link to Julian’s wrapper. It was useful to test the rel=me links embedded in my page:


    To that point, I wonder how hard it will be to get all the DataPortability Project contributors to me-ify their own pages. It’s not a big step, but any step is better than none.


  5. 5 Bob Ngu April 30, 2008 at 3:48 pm

    @Julian, agreed, I think there are more rel=me producers than consumers. Thanks for the tips on MyBlogLog and Twitter, I know that MyBlogLog now supports FOAF but didn’t know they also support rel=me. I took a quick peek at Twitter and believe they only support XFN but not rel=me? Which makes sense because they aren’t designed to be profiles aggregator like MyBlogLog. I think the lack of rel=me/XFN consumers is a problem DataPortability.org can tackle as we can publish best practices on how to be effective rel=me/XFN consumers. Actually Phil and I are having a conversation about this exactly in the DIY group/room, so we are off to a good start.

    @Trent, thanks for your kind words 🙂 I think it is a good idea to get the DataPortability contributors to me-ify their own pages.

  6. 6 Brady Brim-DeForest May 2, 2008 at 4:29 am

    Bob, excellent work. Now I can send inquiries about rel=me straight to your blog.

    Keep it up,

  7. 7 Bob Ngu May 2, 2008 at 4:32 am

    Thanks Brady by all means do so, I plan on writing about FOAF next, oh what fun 🙂

  8. 9 Andrew A. Peterson May 14, 2008 at 9:07 am

    Thanks for this post.

    I felt like I had to chime in and point out that the point of MicroFormats or RDFa isn’t really to make an overnight change in how we use the Web. It’s to create a backbone of linked data so that as Search Engines and other “Libraries” begin to have stores of these relationships between documents and other resources available to work with, they can begin to improve their services. It will be nice when Search is only partly based on scanning for text-strings or combinations of words.

    If you were looking for Andrew in Sebastopol, CA, how would you do it? Perhaps you’d google “Andrew Sebastopol CA…”
    But what if you could specify that you are looking for a person?
    What if you could specify geocoding info or otherwise specify that Sebastopol is a town in Northern California?
    What if you could filter your results by the time web-pages were created or filter by domain specifications (like show me wiki articles first or show me all MySpace profiles) or filter by type of site like say, show me blogs only, and finally, and this is where rel=”me” comes in, what if you could specify in your search results that you want to see every other document that is an expression of the same person, once you have selected from your query, a person named Andrew who lives in Sebastopol, CA? This is what it’s all about. It works because links work backward. In other words, you can already say “show me all the pages that link to this thing…” but what about being able to say “show me all the pages linking to this Twitter page that link using rel=”me” or better yet, show me all the pages linked to with rel=”me” from any page that links to this twitter page with rel=”me” …And so on…

    The Web is becoming a library. By adding microformats and other semantic markup to our documents, we are making it possible for decent “card-catalogues” to be built, whether they’re being built by google, yahoo! or the guy down the street.

  9. 10 Chris Messina May 18, 2008 at 9:09 pm

    Well, you’re missing a little bit of the story here.

    I wrote up some of my issues with the complete set of XFN values, and basically came down to proposing that the most valuable takeaway from XFN is the ability for a profile to point to other webpages and say one of three things:

    1. this is an additional profile/webpage related to the author of this page (rel-me)
    2. this is a contact of the person represented on this page (rel-contact)
    3. this link is neither another profile or a contact of the person on this page (no XFN rel value)

    With only rel-me and rel-contact, we can quickly, and very simply, construct a distributed social mesh. If we get a few of the primary social networking sites to support these two attributes, we can start to make a lot of progress… Oh! And whaddya know, Digg, Pownce, Flickr, Twitter, ClaimID and WordPress and numerous other sites already support these two!

    So okay, that’s not terribly useful without consumers… fair enough.

    However, a core tenant of DiSo is to be able to point to your other services and have “magic” just happen. Though we have the classic chicken and egg problem, we’re aiming to build both sides of the equation (producer and consumer) at the same time to demonstrate the value of implementing this format. So, beyond just indicating where other profiles exist, you’ll be able to point to your other services in a uniform way and then allow for a remote service or consumer to request permission to private or protected data on one of those endpoints.

    For example, if you link to your Twitter account from your blog (and use rel-me), but it’s private, my web-agent could hit that Twitter account, see that I don’t have proper privileges to access your account, I could then authenticate, say with OpenID, and if you’ve previously whitelisted my OpenID, I’d be able to see your private account. And this could all happen automatically because you’ve properly marked up the links to your accounts, and my web-agent knows how to crawl rel-me, and then how to ask me to authenticate when it hits an authorization wall.

    This is, admittedly, a bit of hand-waving, but it’s where we’re headed, and rel-me happens to be one of the simplest way of moving forward without requiring the publishing of a new document or format (i.e. FOAF).

  10. 11 Bob Ngu May 18, 2008 at 9:42 pm


    Fair and valid point, especially your point about using rel=me and rel=contact to point to your other services in a uniform way and then allow for a remote service or consumer to request permission to private or protected data on one of those endpoints.

    This intended association is not clear to me as a relatively newcomer to XFN/microformats. It is an important thing to know though but somehow I think it is not front and center on most XFN producers mind, I wonder if most XFN producers simply put out the information and say here it is for crawling and not giving further thoughts to how the information can be consumed. Obviously, I came up with a different use case for XFN as you did, so both are valid and there are probably many other use cases out there that we aren’t aware of.

    I also think there is room for mixing XFN and FOAF but that’s another discussion.

  1. 1 A real life use case of Microformat hCard in action « Ungeek DaPo Trackback on April 30, 2008 at 9:58 pm
  2. 2 DataPortability.org’s Rel=Me project « Andrew A. Peterson and Ramping Up Trackback on May 14, 2008 at 9:23 pm
  3. 3 In the wild snapshot#1: Lessons from my XFN coding experiment « Ungeek DaPo Trackback on May 18, 2008 at 6:58 pm

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

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

Google photo

You are commenting using your Google 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

%d bloggers like this: