Access Keys:
Skip to content (Access Key - 0)

Ponderings on XFN, XPN, XBN

As part of our Bubbles plugin we've been working on the social networking side of things and have recently started adding the ability for users to define relationships to other users. This is a really powerful feature for many of our clients, but XFN doesn't quite cover their needs...

Note: If you want to port this to your own wiki/blog, please feel free although I'd appreciate some attribution and you should also include attribution to the previous discussions, etc., that I've linked to in this post.

What is XFN?

XFN (XHTML Friends Network) is a microformat that defines relationships between people.

The following relationships are currently defined:

friendship (pick at most one)

  • contact – Someone you know how to get in touch with. Often symmetric.
  • acquaintance – Someone who you have exchanged greetings and not much (if any) more — maybe a short conversation or two. Often symmetric.
  • friend – Someone you are a friend to. A compatriot, buddy, home(boy|girl) that you know. Often symmetric.

physical

  • met – Someone who you have actually met in person. Symmetric.

professional

  • co-worker – Someone a person works with, or works at the same organization as. Symmetric. Usually transitive.
  • colleague – Someone in the same field of study/activity. Symmetric. Often transitive.

geographical (pick at most one)

  • co-resident – Someone you share a street address with. Symmetric and transitive.
  • neighbour – Someone who lives nearby, perhaps only at an adjacent street address or doorway. Symmetric. Often transitive.

family (pick at most one)

  • child – A person's genetic offspring, or someone that a person has adopted and takes care of. Inverse is parent.
  • parent – Inverse of child.
  • sibling – Someone a person shares a parent with. Symmetric. Usually transitive.
  • spouse – Someone you are married to. Symmetric. Not transitive.
  • kin – A relative, someone you consider part of your extended family. Symmetric and typically transitive.

romantic

  • muse – Someone who brings you inspiration. No inverse. (this certainly does not belong in the romantic group!)
  • crush – Someone you have a crush on. No inverse.
  • date – Someone you are dating. Symmetric. Not transitive.
  • sweetheart – Someone with whom you are intimate and at least somewhat committed, typically exclusively. Symmetric. Not transitive.

identity

  • me – A link to yourself at a different URL. Exclusive of all other XFN values. Required symmetric. There is an implicit "me" relation from a subdirectory to all of its contents.

So what's the problem?

Well, in a business environment you wouldn't want the litigation risk of the "romantic" category. You would, however, want a lot more relationships for defining boss, employee, line manager, different job roles, etc?

This is where the problem lies at present - there's no defined list of those other things. You can't just allow them to be added ad-hoc, because the whole point of the microformat is to allow software to understand the relationships so that they can be mapped, searched, etc.

There's lots of ideas floating around, some from a recent "XPN" (Professional Network) discussion on microformats.org and some from an earlier discussion but I could not find a compiled list anywhere.

That's what this blog post is for - I'm going to try and compile that list!

XFN, XPN, XBN - bleh!

There is already XFN which is generally targeted at on-line communities. Then there is XPN/XBN ideas which would be more targeted at professional / business networks.

If these things are separate, the markup used in the HTML is going to become increasingly cumbersome and finding out what a particular relationship means is going to become more difficult as the information will be in several places.

The List!

So, here goes... I'm going to try and make a list based on all existing discussions I'm aware of as well as some of my own ideas. Hopefully I'll receive some real-world input from our clients as well and will update this page accordingly.

business

  • client / customer
  • supplier
  • partner
  • reseller
  • vendor

role

Roles should ideally be kept pretty top-level otherwise you could end up with gazillions of job roles being added which would be rather messy.

  • boss
  • employee
  • freelancer
  • contractor
  • manager
  • director
  • assistant

Roles are NOT job descriptions! If you want to define job descriptions you should ideally be using hCard.

learning (for want of a better category name)

  • mentor, mentee
  • trainer, trainee
  • teacher
  • student

The "muse" relationship could be moved here?

tasks (this borders on project management)

  • dependant
  • requirement
  • milestone
  • subtask

Atlassian's JIRA defines all kinds of "link types" that could possibly used as a basis for task relationships and reciprocal relationships. We've recently been updating our support system so I'll check out what we're using there at some point.

Network Types

I think there should be some form of network type aspect, for example:

  • people - a network focussing on people
  • group - a network focussing on groups of people
  • department - a department within an organisation
  • project - a network focussing on projects
  • product / service - networks focussing on products / services
  • organisation - a network focussing on organisations

There would obviously be a few more, but those will do for starters.

You would need to be able to define relationships between the network, eg. what relationship does a specific person have to a specific group, etc.

Obviously, there would need to be some way of defining what sort of network an entity is in - eg. how do you know a person is a person and not a group?

It might be that a microformat is required for network types, and then XFN be re-purposed to allow it to work for any of those network types and somehow interlink between them?

Also, you don't necessarily want to follow the relationship link just to find out what sort of network the link goes to (personal, project, etc) - it might be worth postfixing the relationship with the network type as this would reduce the amount of trawling required when you just want to see basic information, for example:

  • task-project - the current entity is a "task" relation to a "project" network entity
  • manager-group - the current entity is a "manager" for a "group" network entity

Needs lots more ponderance!

See also: Group Brainstorming

Time modifiers

There should ideally be some macroscopic way of defining when a relationship existed, for example:

  • past / ex / former
  • present / current
  • future / prospective
  • first
  • last
  • next
  • previous

It's important to note that these time modifiers really are very general/macroscopic to keep things simple. For more specific time context it might be worth finding a way to relate to the hCalendar microformat?

Could it be that these modifiers could be prefixed on to the normal relationships, for example:

  • ex-boss
  • prospective-client
  • current-crush (synonymous with "crush")

No time prefix indicates a relationship that does not have any specific time factor, and is generally considered to be "current". For compatibility (to some extent) with existing uF (microformat) tools it's likely that the present/current times would never be included - they'd be the default "time" for a relationship.

I think this would allow a very simple way to filter relationships based on time - eg. I might want to know which managers someone has worked for, I might want to know which clients someone is currently working for, etc.

Putting it all together

Still lots of pondering to do, but here's some examples of relationships:

  • manager - the entity is the manager of the linked entity and both entities are the same type
  • manager-group - the entity (how do we know what type it is?) is the manager of a group entity
  • past-director-organisation - the entity used to be the director of the linked organisation entity

Custom relationships

One other thing that was mentioned was the idea of custom relationships - these would allow a level of free-form tagging of relationships which would fit well with many Web 2.0 uses.

<a rel="custom:xyz" href="...">John Smith</a> 

The "xyz" would be user-defined. Obviously, this could add a whole new layer of complexity, but it would be really useful to many people who want to define more descriptive relationships for their own use.

Obviously, you can define any relationship in the HTML, but it would be useful if computers had at least some idea as to whether that relationship is something to do with XFN. I'd propose changing the prefix to something like "xfn-custom:xyz", then at least you know it's something to do with social networking.

Comments?

If you sign-up for an account you should hopefully now be able to comment on my blog posts! Alternatively, drop me an email to gfraser@adaptavist.com or find me on the #microformats IRC channel (where I'm known as Aubergine10).

Toggle Sidebar

Author

Selected Month

<< April 2007 >>
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Archives

  1. 2009
    1. June
    2. May
    3. April
    4. February
  2. 2008
    1. November
    2. October
    3. September
    4. August
    5. July
    6. June
    7. May
    8. April
    9. March
    10. February
    11. January
  3. 2007
    1. December
    2. November
    3. October
    4. September
    5. June
    6. May
    7. April
    8. March
    9. February
    10. January
  4. 2006
    1. December
    2. November
    3. October
    4. September

Blogroll

Social Networks

Labels

xfn xfn Delete
xbn xbn Delete
xpn xpn Delete
microformat microformat Delete
social social Delete
network network Delete
relatioship relatioship Delete
friends friends Delete
business business Delete
professional professional Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
Adaptavist Theme Builder Powered by Atlassian Confluence