off

From Microformats Wiki
Jump to navigation Jump to search

OFF - OpenFriendFormat Draft

OFF (OpenFriendFormat) is an extension of the XFN (XHTML Friends Network) microformat

Draft Specification

Authors

Editors

Copyright

Public Domain Contribution Requirement. Since the author(s) released this work into the public domain, in order to maintain this work's public domain status, all contributors to this page agree to release their contributions to this page to the public domain as well. Contributors may indicate their agreement by adding the public domain release template to their user page per the Voluntary Public Domain Declarations instructions. Unreleased contributions may be reverted/removed.

Patents

This specification is subject to a royalty free patent policy, e.g. per the W3C Patent Policy, and IETF RFC3667 & RFC3668.

Abstract

OFF allows for the standardization and transparency of the user experience between importation and exportation of contacts from various social networks. OFF allows for social network to implement a standardized way of importing contacts and discovering new relationships between new and existing users. It also allows for sites to generate documents detailing the relationship between people on different social networks

Consuming

To consume OFF parse it as standard XHTML. A FOSS PHP library is in the works in order to facilitate parsing.

Generating

The point of an aggregate generator is that given, for example, user dominatus on Digg, returns a list of all other known profiles and friends that exist for this user. In this way, developers of new social networks can use aggregate generators in order to discover friendships for people signing up and suggest new relationships when possible. Aggregate generators should also be able to support the ability to search all networks given a particular handle.

Format

OFF consists of an unordered list with embedded XFN (XHTML Friends Network) links. It also allows for embedded avatars inside the list items as well. Any valid XFN links are also valid in OFF.

Structure Module

 body, head, html, title

List Module

 ul, li

Hypertext Module

 a

Image Module

 img

Properties on Elements

Required Properties

All ul elements should have a class "openfriendformat" to allow for styling of the microformat. Furthermore, all ul's should have an id that is in the format group# and counts up starting at 0 (i.e. group0, group1, group2).

All li elements must have a class equal to the network name. For guidelines on what the network name is, see the section #Network Names.

Adding an OpenID

To add an OpenID add an XFN link inside an li element and give the li element a class name of openid

Adding an Avatar

To add an avatar for a user put an img tag with a source to the avatar and a class name of avatar inside the li element after the XFN.

Parameters to Generate OFF

  • account : This is the account name of the user in question.
  • network : The network parameter specifies which network the account name is associated with. We will provide a list of recommended network names for popular networks so that switching between different aggregators is seamless for developers. The network parameter also supports an "all" value, which should search all indexed networks for that handle. The network parameter is not necessary for single instance generators, since they should always return the same set of results; however, if a network value is provided the aggregate should not error.
  • scope : The scope parameter specifies what should be returned. It can be set to self to return just the users other online profiles, friends to return just the users online contacts, or all to provide both.
  • avatars : Set this parameter to true to return avatars if the generator supports that. Set to false to prevent avatars from being returned.

Network Names

The network name is a class inside each li element. It is also used in the query string to generate an OFF. If you are a social network creating a single instance generator, you may use any name you want for your network, but it should be logical and must be lowercase (so Twitter should use twitter, since that is the most logical name). For OpenID's a network of "openid" must be used.

The network query term is only necessary for aggregate generators. The "all" term must return all social networks aggregated. When a query requests "all" networks, the results must be grouped logically. (See #Grouping for more details). Single instance generators should treat the network term as if it was always "all". If the network is specified, (e.g. &network=digg) then only results from the Digg network and OpenID should be returned. When indexing sites, if the sites use OFF, use the network name they have in their OFF document. If they do not, and you are manually indexing them, use your best judgment. A list of recommended network names for popular networks not currently using OFF will be provided below:

  • facebook
  • myspace
  • digg
  • twitter
  • magnolia
  • delicious
  • flickr
  • tabber
  • socialthing
  • brightkite
  • livejournal
  • blogger
  • wordpress

Grouping

When an aggregate site receives an "all" network parameter then the results it sends back must be grouped logically. That is, if the aggregate site knows that accounts on two different networks are the same person then they should be in the same ul group. If they do not know if the accounts are the same person then they should be separated into different groups.


Examples

Aggregation Example with One Group

<ul class='openfriendformat' id='group0'>
    <li class='twitter'><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li>
    <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li>
    <li class='twitter'><a href='http://twitter.com/nodono01' rel='contact'>nodono01</a></li>
    <li class='delicious'><a href='http://del.icio.us/dominatus' rel='me'>dominatus</a></li>
    <li class='delicious'><a href='http://del.icio.us/ashafer' rel='contact'>ashafer</a></li>
    <li class='delicious'><a href='http://del.icio.us/minamhere' rel='contact'>minamhere</a></li>
    <li class='digg'><a href='http://digg.com/users/dominatus/profile' rel='me'>dominatus</a></li>
    <li class='digg'><a href='http://digg.com/users/bonzodurer3/profile' rel='contact'>bonzodurer3</a></li>
    <li class='digg'><a href='http://digg.com/users/dmar875/profile' rel='contact'>dmar875</a></li>
    <li class='myspace'><a href='http://myspace.com/dominatusx' rel='me'>dominatusx</a></li>
    <li class='myspace'><a href='http://www.myspace.com/16867710' rel='contact'>rhiannon </a></li>
    <li class='myspace'><a href='http://www.myspace.com/134345434' rel='contact'>Dana</a></li>
</ul>

Aggregation Example with Multiple Groups

<ul class='openfriendformat' id='group0'>
    <li class='twitter'><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li>
    <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li>
    <li class='twitter'><a href='http://twitter.com/nodono01' rel='contact'>nodono01</a></li>
    <li class='delicious'><a href='http://del.icio.us/dominatus' rel='me'>dominatus</a></li>
    <li class='delicious'><a href='http://del.icio.us/ashafer' rel='contact'>ashafer</a></li>
    <li class='delicious'><a href='http://del.icio.us/minamhere' rel='contact'>minamhere</a></li>
    <li class='digg'><a href='http://digg.com/users/dominatus/profile' rel='me'>dominatus</a></li>
    <li class='digg'><a href='http://digg.com/users/bonzodurer3/profile' rel='contact'>bonzodurer3</a></li>
    <li class='digg'><a href='http://digg.com/users/dmar875/profile' rel='contact'>dmar875</a></li>
</ul>
<ul class='openfriendformat' id='group1'>
    <li class='myspace'><a href='http://myspace.com/dominatusx' rel='me'>dominatusx</a></li>
    <li class='myspace'><a href='http://www.myspace.com/16867710' rel='contact'>rhiannon </a></li>
    <li class='myspace'><a href='http://www.myspace.com/134345434' rel='contact'>Dana</a></li>
</ul>
<ul class='openfriendformat' id='group2'>
    <li class='lastfm'><a href='http://www.last.fm/user/dominatus' rel='me'>dominatus</a></li>
    <li class='lastfm'><a href='http://www.last.fm/user/scottso' rel='contact'>scottso</a></li>
</ul>

Example with OpenID

<ul class='openfriendformat' id='group0'>
    <li class='openid'><a href='http://dominatus.myopenid.com' rel='me'>Anthony Romano</a></li>
    <li class='twitter'><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li>
    <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li>
</ul>

Example with Avatar

<ul class='openfriendformat' id='group0'>
    <li class='twitter'>
        <img class='avatar' src='http://assets3.twitter.com/images/default_profile_image_normal.gif?1187395531'>
        <a href='http://twitter.com/dominatus' rel='me'>dominatus</a>
    </li>
    <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li>
</ul>

Implementations

This section is informative.

References

External Links

Related Pages