off: Difference between revisions
No edit summary |
m (Reverted edits by DomtaMonou (Talk) to last version by AmeerDawood) |
||
(14 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
<h1>OFF - OpenFriendFormat | <h1>OFF - OpenFriendFormat Draft</h1> | ||
OFF (OpenFriendFormat) is an extension of the [[XFN]] (XHTML Friends Network) [[microformat]] | OFF (OpenFriendFormat) is an extension of the [[XFN]] (XHTML Friends Network) [[microformat]] | ||
Line 23: | Line 23: | ||
== Abstract == | == 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 | 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 == | == Consuming == | ||
Line 30: | Line 30: | ||
== Generating == | == 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 | 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 | ||
Line 57: | Line 51: | ||
=== Required Properties === | === Required Properties === | ||
All ul elements should have a class " | 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 === | === Adding an OpenID === | ||
Line 67: | Line 63: | ||
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. | 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 === | === Aggregation Example with One Group === | ||
<pre><nowiki><ul class=' | <pre><nowiki><ul class='openfriendformat' id='group0'> | ||
<li><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li> | <li class='twitter'><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li> | ||
<li><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | ||
<li><a href='http://twitter.com/nodono01' rel='contact'>nodono01</a></li> | <li class='twitter'><a href='http://twitter.com/nodono01' rel='contact'>nodono01</a></li> | ||
<li><a href='http://del.icio.us/dominatus' rel='me'>dominatus</a></li> | <li class='delicious'><a href='http://del.icio.us/dominatus' rel='me'>dominatus</a></li> | ||
<li><a href='http://del.icio.us/ashafer' rel='contact'>ashafer</a></li> | <li class='delicious'><a href='http://del.icio.us/ashafer' rel='contact'>ashafer</a></li> | ||
<li><a href='http://del.icio.us/minamhere' rel='contact'>minamhere</a></li> | <li class='delicious'><a href='http://del.icio.us/minamhere' rel='contact'>minamhere</a></li> | ||
<li><a href='http://digg.com/users/dominatus/profile' rel='me'>dominatus</a></li> | <li class='digg'><a href='http://digg.com/users/dominatus/profile' rel='me'>dominatus</a></li> | ||
<li><a href='http://digg.com/users/bonzodurer3/profile' rel='contact'>bonzodurer3</a></li> | <li class='digg'><a href='http://digg.com/users/bonzodurer3/profile' rel='contact'>bonzodurer3</a></li> | ||
<li><a href='http://digg.com/users/dmar875/profile' rel='contact'>dmar875</a></li> | <li class='digg'><a href='http://digg.com/users/dmar875/profile' rel='contact'>dmar875</a></li> | ||
<li><a href='http://myspace.com/dominatusx' rel='me'>dominatusx</a></li> | <li class='myspace'><a href='http://myspace.com/dominatusx' rel='me'>dominatusx</a></li> | ||
<li><a href='http://www.myspace.com/16867710' rel='contact'>rhiannon </a></li> | <li class='myspace'><a href='http://www.myspace.com/16867710' rel='contact'>rhiannon </a></li> | ||
<li><a href='http://www.myspace.com/134345434' rel='contact'>Dana</a></li> | <li class='myspace'><a href='http://www.myspace.com/134345434' rel='contact'>Dana</a></li> | ||
</ul> | </ul> | ||
</nowiki></pre> | </nowiki></pre> | ||
Line 98: | Line 117: | ||
=== Aggregation Example with Multiple Groups === | === Aggregation Example with Multiple Groups === | ||
<pre><nowiki><ul class=' | <pre><nowiki><ul class='openfriendformat' id='group0'> | ||
<li><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li> | <li class='twitter'><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li> | ||
<li><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | ||
<li><a href='http://twitter.com/nodono01' rel='contact'>nodono01</a></li> | <li class='twitter'><a href='http://twitter.com/nodono01' rel='contact'>nodono01</a></li> | ||
<li><a href='http://del.icio.us/dominatus' rel='me'>dominatus</a></li> | <li class='delicious'><a href='http://del.icio.us/dominatus' rel='me'>dominatus</a></li> | ||
<li><a href='http://del.icio.us/ashafer' rel='contact'>ashafer</a></li> | <li class='delicious'><a href='http://del.icio.us/ashafer' rel='contact'>ashafer</a></li> | ||
<li><a href='http://del.icio.us/minamhere' rel='contact'>minamhere</a></li> | <li class='delicious'><a href='http://del.icio.us/minamhere' rel='contact'>minamhere</a></li> | ||
<li><a href='http://digg.com/users/dominatus/profile' rel='me'>dominatus</a></li> | <li class='digg'><a href='http://digg.com/users/dominatus/profile' rel='me'>dominatus</a></li> | ||
<li><a href='http://digg.com/users/ | <li class='digg'><a href='http://digg.com/users/bonzodurer3/profile' rel='contact'>bonzodurer3</a></li> | ||
<li><a href='http://digg.com/users/dmar875/profile' rel='contact'>dmar875</a></li> | <li class='digg'><a href='http://digg.com/users/dmar875/profile' rel='contact'>dmar875</a></li> | ||
</ul> | </ul> | ||
<ul class=' | <ul class='openfriendformat' id='group1'> | ||
<li><a href='http://myspace.com/dominatusx' rel='me'>dominatusx</a></li> | <li class='myspace'><a href='http://myspace.com/dominatusx' rel='me'>dominatusx</a></li> | ||
<li><a href='http://www.myspace.com/16867710' rel='contact'>rhiannon </a></li> | <li class='myspace'><a href='http://www.myspace.com/16867710' rel='contact'>rhiannon </a></li> | ||
<li><a href='http://www.myspace.com/134345434' rel='contact'>Dana</a></li> | <li class='myspace'><a href='http://www.myspace.com/134345434' rel='contact'>Dana</a></li> | ||
</ul> | </ul> | ||
<ul class=' | <ul class='openfriendformat' id='group2'> | ||
<li><a href='http://www.last.fm/user/dominatus' rel='me'>dominatus</a></li> | <li class='lastfm'><a href='http://www.last.fm/user/dominatus' rel='me'>dominatus</a></li> | ||
<li><a href='http://www.last.fm/user/scottso' rel='contact'>scottso</a></li> | <li class='lastfm'><a href='http://www.last.fm/user/scottso' rel='contact'>scottso</a></li> | ||
</ul> | </ul> | ||
</nowiki></pre> | </nowiki></pre> | ||
Line 122: | Line 141: | ||
=== Example with OpenID === | === Example with OpenID === | ||
<pre><nowiki><ul class=' | <pre><nowiki><ul class='openfriendformat' id='group0'> | ||
<li class='openid'><a href='http://dominatus.myopenid.com' rel='me'>Anthony Romano</a></li> | <li class='openid'><a href='http://dominatus.myopenid.com' rel='me'>Anthony Romano</a></li> | ||
<li><a href='http://twitter.com/dominatus' rel='me | <li class='twitter'><a href='http://twitter.com/dominatus' rel='me'>dominatus</a></li> | ||
<li><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | ||
</ul> | </ul> | ||
</nowiki></pre> | </nowiki></pre> | ||
Line 131: | Line 150: | ||
=== Example with Avatar === | === Example with Avatar === | ||
<pre><nowiki><ul class=' | <pre><nowiki><ul class='openfriendformat' id='group0'> | ||
<li | <li class='twitter'> | ||
<img class='avatar' src='http://assets3.twitter.com/images/default_profile_image_normal.gif?1187395531'> | |||
<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> | ||
<li><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | <li class='twitter'><a href='http://twitter.com/minamhere' rel='contact'>minamhere</a></li> | ||
</ul> | </ul> | ||
</nowiki></pre> | </nowiki></pre> | ||
== Implementations == | == Implementations == | ||
Line 174: | Line 175: | ||
* [http://openfriendformat.com/ OpenFriendFormat Home Page] | * [http://openfriendformat.com/ OpenFriendFormat Home Page] | ||
== Related Pages == | |||
{{off-related-pages}} |
Latest revision as of 22:07, 20 December 2008
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.
body, head, html, title
ul, li
a
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:
- myspace
- digg
- 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
- XHTML 1.0 SE
- FOO Camp 2004 Simple Semantic Formats presentation, 2004-09-10
- HTML reformatted version of RFC2426
- CSS1
- XHTML 1.1