This page explores the use of FOAF's 'Group' mechanism to describe and exchange lists of people.

FOAF is structured around various kinds of 'Agent'; 'Person' most obviously, but also we might describe an 'Organization' or a 'Group'. The definition of 'Group' in FOAF is quite flexible; in particular it allows for self-aware groups and arbitrary groups who are defined either by their characteristics (eg. W3C staff who live in Europe) or simply by assertion.

This last case is worth exploring; let's call it a 'FOAF List'. A FOAF list is simply a list of people who fall into a FOAF-described group. You might get such a list from a public Web page, from a piece of software, from a private contacts list, or from running database queries against some combination of these.

Over the years people have periodically called for FOAF to encode more specific relationship types than 'foaf:knows'. Other vocabularies exist for this now, including the relationship vocab, and the by now famous microformat, XFN (see RDFization proposal).

The general FOAF approach to describing relationships is something like "don't say it, show it"; a focus on the evidence friendship leaves in the world, rather than on simply encouraging people to make explicit statements about levels of friendship. Some things are not easy to quantify.

A lists mechanism is an interesting halfway house. We allow end users and groups to divide the world however they like, to share and remix their data, without forcing a single set of relationship categories on the world. This has many of the 'pave the cowpaths' values shared by grassroots semweb / linked data and microformat enthusiasts, while still being amenable to mechanisation.

@@todo :)

See for a possible microformat scaffolding for this

XFN and other relationships as lists

These are the relationship types enumerated by XFN. In mainstream microformat deployment, they are used as annotations on hyperlinks between pages that somehow indicate the relevant party (eg. blog, homepage, profile page etc).

  • xfn:contact
  • xfn:acquaintance
  • xfn:friend
  • xfn:met
  • xfn:co-worker
  • xfn:colleague
  • xfn:co-resident
  • xfn:neighbor
  • xfn:child
  • xfn:parent
  • xfn:sibling
  • xfn:spouse
  • xfn:kin
  • xfn:muse
  • xfn:crush
  • xfn:date
  • xfn:sweetheart
  • xfn:me
  • xfn:human-relationship

How might these work out as groups / lists instead, rather than interpersonal relationship types?

Ok maybe I keep a list of people I have 'met'. Or a list of neighbours; or a list of neighbo[u]rs from Bristol when I used to live there. Or people I want to meet, or old school friends. Such a list could be similiar to, inspired by, and mapped with the core XFN list, but tuned to the needs of my own life and concerns. This removes some consensus-building pressure from the Microformats community, since they don't need to serve the life-describing needs of all of humanity simultaneously. And it suggests a way in which these broad labels can be refined and used in simple database systems, eg. computing subset / subsets and overlaps.

So let's go with "met". How might this look as a list/group. We can use FOAF to model this, or a microformat for groups @@ref. The principle is similar in either case. How explicit do we want to be about the relationship between the author and the group described? the person didn't create the group 'as a group'; only perhaps enumerated it.

Here in FOAF/RDF first, ... to sketch

(brain storming only here, nothing fixed yet)

eg. danbri.org/groups might list some groups, so they are all implicitly associated with me as creator of the page

#danbri-met a :Group; :member <http://alice.example.com/#alice>; :member <http://bob.example.com/#bob>; 

OK, that's straightforward enough assuming we can hold our tongues about the eternal "URIs for people versus their accounts / pages" debate for a little while.

Here's an idiom that distinguishes the person from their indicative URI a bit more explicitly:

#danbri :homepage <http://danbri.org/>; :openid <http://danbri.org/>; :made #danbri-wouldliketoknowbetter .
#danbri-wouldliketoknowbetter a :Group; 
  :member [ a :Person; 
              :homepage <http://tantek.com/>; 
              :account <http://twitter.com/t> ] .

How else might we use this?

#rocketscientists a :Group; :member <http://charlie.example.com/#me>; :member <http://dave.example.com/#xyz>; 

OK, so danbri has posted a list of rocket scientists. That's great. How might we express this in a way that can be linked to other information about rocket science? For example, let's use Wikipedia and Library of Congress as complementary, Web-friendly classifications:

#rocketscientists :interest <http://en.wikipedia.org/wiki/Rocket_science> .
#rocketscientists :interest <http://id.loc.gov/authorities/sh95007821> .

(again, assuming we can contain ourselves from making a big debate about URIs for concepts vs things about them, for now, please!)

Now why is this interesting? Because we've gone from a world in which we're just putting one of a (relatively-)fixed set of labels on an interpersonal relationship, to a similar model in which those labels can themselves be identified using URIs and described in more detail, for example by linking to controlled library vocabulary (and therefore 100s of years of literature), or to Wikipedia (and hence to everything else).

Consider a Rocket Science Institute, for example; they might publish an alumni list this way, and include OpenID information for their alumni. What could you do with that? (eg. imagine you are a news site and might want to know the credentials of the people leaving comments or blog edits...)