Click here to show or hide the menubar.

SOPML Namespace v1

By davejones. Posted Wednesday, June 20, 2012 at 2:28 PM.

What is it?

The following describes an XML namespace extension for OPML and RSS. It is designed to enable OPML outlines and RSS feeds to carry the necessary bits of information to allow them to be followed and identified in a social networking context. We're calling the namespace SOPML, for Social OPML, but we refer to any outline containing the namespace as a "social outline".

What does it do?

It turns a standard OPML subscription/reading list into a "social graph", whereby it becomes a way of quickly following all of the feeds published by a particular individual. The feeds in the list are designated as being either "pub" (published by) the owner or "sub" (subscribed to) by the owner. The owner's personal characterization of each particular feed is also indicated by certain keywords("sticky", "hidden", "fulltext") that describe how the owner treats that feed.

What does it NOT do?

Break your OPML file. It's just a namespace, so you can take your "social outline" and import it into any feed aggregator that supports OPML. It remains a standard OPML subscription list to aggregators that don't parse our namespace. But, for those that do, it will recognize it as belonging to a certain person and bring in all of that info.

What does it look like?

Required Head elements:

<sopml:url>

The world accessible, canonical url for this social outline. If this is a feed, then this value indicates the url of the social outline that publishes it.

<sopml:avatar>

The world accessible url for an avatar to associate with this social outline or feed.

Optional Head elements:

<sopml:server>

The fully qualified domain name of the server that is responsible for generating this outline. If you maintain your social outline by hand, you can leave this out or point it to whatever makes sense in that context.

This value is used primarily for p2p-style discovery. Whenever someone subscribes to a social outline, this element can be used as a reference to ping asking for other social outlines that server may know about. This slow crawling can build a decentralized directory of outlines.

<sopml:guid>

A globally unique id for this social outline, that would be suitable for registering with a central directory lookup server. This value would normally be obtained by combining a unique guid for the generating server with the unique guid for the particular outline/feed within that server's database. For instance, a value of "YDYLMYBX2szLhSa5qzNJQG6ECMpTWLEfx96ccQdvHVz2CgbWdyZfB9gWEnFMkfYR::666" may indicate that this is user "666" on server "YDYLMYBX2szLhSa5qzNJQG6ECMpTWLEfx96ccQdvHVz2CgbWdyZfB9gWEnFMkfYR". There are no strict requirements for the format of this value, as long as it is globally unique.

The main use of this value is to be able to track a particular outline across change. Even if the url of the outline changes, or the user changes servers, this value should persist so that followers can track those changes without losing their connection to the outline.

<sopml:luid>

A locally unique id for this user on the generating system. A system that generates a social outline for a user may also provide a locally unique id for that user within it's system.

<sopml:updates>

This value indicates how followers should register for update notifications. There are 4 required properties:

host - The hostname of the server providing notifications for this social outline or feed.

port - The port of the notification service on the host.

type - This can be either "http" or "udp".

value - If the type is set to "http", then this value indicates a GET request url. If the type is set to "udp", then this value indicates the content of the packet to send.

While HTTP may be easier to code, UDP is far superior for speed and scalability. A feed or outline with 25,000 followers would crush a typical server trying to send out that many GET requests. There is far too much overhead. A UDP update protocol will be provided in a separate spec paper.

Required OPML element attributes:

sopml:disposition

Indicates the outline owner's relationship to this feed. The value must be one of the following:

"pub" - an outline element containing a disposition attribute of "pub" means that the xmlUrl attribute of this element points to a feed that the owner of the outline publishes.

"sub" - an outline element containing a disposition attribute of "sub" means that the xmlUrl attribute of this element points to a feed that the owner of the outline subscribes to.

Optional OPML element attributes:

sopml:contains

This value gives the aggregator a hint as to what type of content to expect from this feed. Must be one of the following:

"mixed" - The feed contains a mix of different types of content. **most common

"text" - The feed contains primarily textual content, like a microblog feed.

"html" - The feed contains primarily html content, like a blog feed.

"image" - The feed contains primarily image content, like a photostream feed.

"audio" - The feed contains primarily audio content, like a podcast feed.

"video" - The feed contains primarily video content, like a videocast feed.

sopml:attention

This must be a value between "0" and "100": 0 indicating that the owner pays no attention to this feed whatsoever by never clicking on any of it's items(maybe it is hidden) and 100 indicating that the owner frequently clicks on this feed's items. This is a relative value that only has meaning in the context of the entire group of feeds this owner subscribes to.

sopml:lastupdate

For a disposition=pub feed, this value must indicate the timestamp (in RFC822 format) of the last time this feed had new content posted to it.

For a disposition=sub feed, this value must indicate the timestamp (in RFC822 format) of the last time this feed was scanned by the aggregator.

sopml:sticky

A boolean value ("true" or "false") indicating whether the owner of the social outline has marked this feed "sticky" - meaning he/she never wants to miss any of the posts from this feed.

sopml:hidden

A boolean value ("true" or "false") indicating whether the owner of the social outline has marked this feed "hidden" - meaning he/she never wants to see any of the posts from this feed.

sopml:fulltext

A boolean value ("true" or "false") indicating whether the owner of the social outline has marked this feed as "full text" - meaning he/she wants to see the entire content in any of the posts from this feed.

Optional RSS elements:

<sopml:origin>

When present as a sub-element in an RSS item element, this specifies a unique value indicating where this item originated from. For web pages, this would normally be the original full url (not shortened).

When the originating source is an RSS feed item, the value should be one of these, in order of precedence:

<sopml:origin>

<microblog:linkFull>

[feed url]|<guid> [or id if atom]

<link>

The origin is useful to aggregators for the purpose of collapsing multiple items that refer to the same origin into a threaded or otherwise grouped view.

FAQ:

Q: How would I move my social outline to a new URL?

A: The value of the <sopml:url> element should be considered canonical. That means, if it's value is different than the current url, the application reading the outline should update any pointers it has to point to the url given in the element. In this way, a person can move the location of their social outline by modifying this element to point to the new location. This behaviour is to be considered required for sopml-compliant applications.

XML
Stats & Atts.

You should never argue with a crazy man.