Commentary by Mark Wahl, CISA
Organizing principles for identity systems:
Extensible Friendly Predicate Notation (20070804)
While it has seen some deployment in applications which can generate these link attributes, there are significant limitations of the XFN 1.1 relationships meta data profile in attempting to categorize links. (Base XHTML includes on the A element a rel= attribute whose values describe relationships between documents, and XFN adds rel= values for describing relationships between people, e.g. <a rel="friend met" href="...">...</a>.)
The background on XFN states that deliberate design limitations included not providing attributes about the person that is the target of an XFN link, e.g., not providing their age or gender.
However, one problem is that the target of the link is not always a most accurate representation of a person. Instead, the target is often a person's blog, or a post on their blog, etc., an account that person has in a particular service, or a persona of that person. None of these are "the person themself", and it is difficult to know what is meant by "coworker" to a blog post (if I say "coworker" to 5 blog posts, do I have 5 coworkers?).
To address this limitation, I have been considering an encoding notation that allows the person making the statement to make a clearer distinction between the different types of web-accessible resources that are related to a "person".
This notation uses a subset of RDFa to describe a connection between two links, a subject and an object, which permits separate statements to be made about relationships between two people and relationships between a person and a web resource. The notation I am currently investigating is a simple pattern of a span element with an about attribute containing an a element with a rel attribute.
<span about="SPAN-URI"><a rel="REL-LIST" href="A-URI">...</a></span>
An empty URI means "the document itself": whatever is the real-world object implied by the XHTML where this element is present (a URI can given by the xml:base attribute of the html itself). A non-empty URI can be the URI of a person's FOAF file, or an XRI, or anything else that is an identifier of the person.
If the SPAN-URI is empty (<span about="">) or the span is absent, then the subject of this statement is the document itself, similar to the XFN scenario.
However, if the SPAN-URI is not empty, then the SPAN-URI is the subject of a statement, which can be different from that of the document itself.
The REL-LIST is a set of CURIEs (as described in RDFa) of predicate URIs; the namespaces are typically defined at the top of the document. Examples of predicates are relations defined in the FOAF specification, such as foaf:holdsAccount and foaf:weblog, to connect a SPAN-URI of a person to a A-URI of an account or a blog.
For example, if Alice uses an i-name =Alice and Bob has an OpenID URI http://bob.example.com/ and a blog http://bob.example.com/blog/rss.xml, Alice can write in her blog a post that "my friend Bob has a blog", using the foaf:knows, foaf:weblog and foaf:openid predicates (and inventing an ontology namespace for XFN to say xfn;friend):
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:xfn="namespace for an XFN ontology">
...
<link rel="xfn:me rdfs:seeAlso" href="xri://=alice">
...
<span about="xri://=alice">
<a rel="foaf:knows xfn:friend" href="http://bob.example.com/">Bob</a>
</span>
<span about="http://bob.example.com/">
<a rel="foaf:openid" href="http://bob.example.com/"></a>
<a rel="foaf:weblog" href="http://bob.example.com/blog/rss.xml">blogs</a>
</span>
If Alice later found Bob's Flickr account, Alice could later mention
<span about="http://bob.example.com/">Bob has pictures on
<a rel="foaf:holdsAccount" href="http://www.flickr.com/bob">Flickr</a>.
</span>
Additional relationships could be defined, such as between a person and a blog post by that person. This enables Alice to refer to
<span about="http://bob.example.com/">Bob's
<a rel="xfpn:blogpost" href="http://bob.example.com/blog/post?id=3">third post</a>.
</span>