Kevin A. Burton
Latest Version: http://purl.org/rss/1.0/modules/link/
Mon Jul 22 2002 06:15 PM
Thu Aug 27 2002 08:00 PM
added description of functionality.
Thu Aug 27 2002 08:00 PM
migrated relationships to URIs
Thu Sep 13 2002 01:00 PM
added better description of 'source' relationships
Thu Oct 15 2002 01:00 PM
better documentation of ad hoc link relationships for new RSS
modules and additional formats.
Proposed, Mon Jul 22 2002 06:28 PM
Copyright © 2000 by the Authors.
Permission to use, copy, modify and distribute the RDF Site Summary 1.0 Link Module Specification and its accompanying documentation for any purpose and without fee is hereby granted in perpetuity, provided that the above copyright notice and this paragraph appear in all copies. The copyright holders make no representation about the suitability of the specification for any purpose. It is provided "as is" without expressed or implied warranty.
This copyright applies to the RDF Site Summary 1.0 Link Module Specification and accompanying documentation and does not extend to the RSS Module's format itself.
The mod_link module supports the syndication of site link information along with RSS 1.0 XML feeds. The W3C HTML link mechanism provides the original inspiration for this module.
Link information can be used to:
In addition links can be used to provide functionality that would not normally be available if RDF/XML were included inline with the original RSS.
RSS applications generally fall into one of three categories; aggregators, readers, and producers. These generally deal with different use cases when handling RSS. An RSS producer (such as Moveable Type) could export RSS and link to the mod_subscription RDF created from an RSS reader. This allows each application to handle what they do best.
It is recommended that RSS producers enable a mechanism for the user to define links with new relationships so that 3rd party applications and services be integrated into the users RSS feed.
As more modules are developed for RSS the file size of .rss files will grow in proportion. One example is the use of mod_content within existing RSS files. While it is nice to have the content of item within the RSS the file becomes bloated for downlevel user-agents who are unable to use mod_content.
Instead of including the RDF/XML inline the developer can produce RDF for mod_link aware applications. For example the user can define a link with a 'mod_content' relationship which points to an RDF file which includes the content.
Links are implemented as directional edges from the current RSS channel to an external resource. Link relationships are provided so that applications can determine how the given link should be handled.
The following link relationships are defined by this specification.
print - http://purl.org/rss/1.0/modules/proposed/link/#printPrintable version of the current RSS item. For HTML documents this will be a URL without navigation items and other options which can cloud the document when sent to a printer. Print links provide rdf:resource attributes which do not have extra content and have been explicitly formated for a printer.permalink - http://purl.org/rss/1.0/modules/proposed/link/#permalinkPermalink version of the current RSS item. A permalink is defined as a URL for a resource that is always available (similar to a PURL). Some weblogs cycle through articles and a URL may become invalid after a period of time. Permalinks provide a link that is always available to and should be provided within RSS so that clients can use this instead of a temporary link.service - http://purl.org/rss/1.0/modules/proposed/link/#serviceLink to a service or service description (WSDL) file. This can be used for runtime discovery of Web Services within an RSS file.source - http://purl.org/rss/1.0/modules/proposed/link/#sourceInclude source linkage with this RSS item. This can be used for proper attribution of the original version of this RSS item. RSS 0.92 supports a <source> element with mod_link supporting the same concept via the source relationship.RSS aggregators may also choose to use the source URL to specify the resource which was used within an aggregation. This can be used with a URL that was fetched from a cache (possibly locally) or as the result of another URL yet still maintaining the link to the original source.topic - http://purl.org/rss/1.0/modules/proposed/link/#topicProvide a link to the current RSS channel or item by topic. This is generally an HTML or RSS file which contains RSS items on the same topic as the current item.alternate - http://purl.org/rss/1.0/modules/proposed/link/#alternateProvide alternate language, topic, (etc) version of an item or channel.
Vendor specific and additional links can also be defined (as new relationships) ideally being incorporated back into this specification. New relationship are created by using unique URIs for the l:rel attribute value. This can be used with the SRDF spec to enable creation of new RSS modules and define new relationships which point to external resources.
The following URI format should be used:
foo - http://example.org/rss/1.0/modules/proposed/foo/Provide foo linkage from the new example.org RSS module.
The relation l:rel should be a URL which documents the format and how the link element is used. It is also recommended that documentation is provided which includes syntax and a required/optional attribute table.
l:link is a sub-element of the RSS <channel> or <item> element. Note that it may be used with modules but support needs to be explicitly provided for this.
l:link supports the following attributes:
While most attributes are optional, based on the relationship they may become required:
|maximum||unbounded *||unbounded **||unbounded ***||1 per l:type||unbounded ****||1 per l:type|
* specify different content type and title)
** only one permalink per l:type attribute
*** Each service should have separate l:title and l:type attributes
**** Specify l:type and or l:lang attributes
The l:link element is used as follows:
<!-- provide an alternative link for a french RSS file --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#alternate" l:type="application/rss+xml" l:title="French" l:lang="fr" rdf:resource="http://www.peerfear.org/rss/index-fr.rss"/>
This is an example of an RSS channel publishing two subscription channels.
<?xml version="1.0" encoding="utf-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:l="http://purl.org/rss/1.0/modules/link/" xmlns="http://purl.org/rss/1.0/"> <channel rdf:about="http://example.org/rss.rdf"> <title>Example Feed</title> <link>http://www.example.org</link> <description>Simply for the purpose of demonstration.</description> <items> <rdf:Seq> <rdf:li rdf:resource="http://example.org/item/"/> </rdf:Seq> </items> <!-- link to the french version of this website --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#alternate" l:type="application/rss+xml" l:title="French" l:lang="fr" rdf:resource="http://www.example.org/index-fr.rss"/> <!-- alternative RSS channels (dc:subject specific) --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#topic" l:type="application/rss+xml" l:title="Linux" l:lang="en" rdf:resource="http://www.peerfear.org/rss/index-linux.rss"/> <!-- support WSDL service discovery for this channel --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#service" l:type="http://schemas.xmlsoap.org/wsdl/" l:title="urn:reptile-search" l:lang="en" rdf:resource="http://www.peerfear.org/reptile/search/search.wsdl"/> <!-- linkage to additional RDF about this channel. --> <l:link l:rel="http://purl.org/rss/1.0/modules/proposed/subscription/" l:type="application/rdf+xml" l:title="Subscriptions" rdf:resource="http://www.peerfear.org/subscriptions.rdf"/> </channel> <item rdf:about="http://example.org/item/"> <title>The Example Item</title> <link>http://example.org/item/</link> <!-- permalink version of this item --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#permalink" l:type="text/html" rdf:resource="http://example.org/item/permalink"/> <!-- link to the french version of this website --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#alternate" l:type="text/html" l:title="French" l:lang="fr" rdf:resource="http://www.example.org/index-fr"/> <!-- link to the source used to inspire this link --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#source" l:type="text/html" l:title="Example source link" rdf:resource="http://www.cnn.com/2002/TECH/science/example"/> <!-- link to the RSS version of this topic --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#topic" l:type="application/rss+xml" l:title="Example" l:lang="en" rdf:resource="http://www.peerfear.org/rss/index-example.rss"/> <!-- link to the HTML version of this topic --> <l:link l:rel="http://purl.org/rss/1.0/modules/link/#topic" l:type="text/html" l:title="Example" l:lang="en" rdf:resource="http://www.peerfear.org/rss/index-example.html"/> </item> </rdf:RDF>
When rendered as a RDF graph the semantic relationship looks like: