Difference between revisions of "Syndication"

From Creative Commons
Jump to: navigation, search
(human-visible <copyright> element)
(Licensed Content Discovery)
Line 21: Line 21:
 
== Licensed Content Discovery ==
 
== Licensed Content Discovery ==
  
Not all feeds include license metadata. Heuristics for discovering licensed content. Perhaps useful in particular for aggregators:
+
Not all feeds include license metadata. In psuedocode, here are heuristics for discovering licensed content via feeds, perhaps useful in particular for aggregators.
  
* IF feed item contains license reference or feed contains top level license reference
+
<pre>
** THEN content in feed (including images and enclosures) probably licensed
+
function feedItemLicense(feedItem) {
* Crawl feed item URLs.
+
    # license found for feed item URL (e.g., rel="license")?
** IF license found for feed item URL (e.g., rel="license")
+
    if (feedItem.license() != null) {
*** THEN content at feed item URL probably licensed
+
        return feedItem.license();
** IF license metadata found specifically for media (e.g., about an image or video URL)
+
    }
**** THEN that media is probably licensed
+
    # license found at feed top level?
* Download content referred to (e.g., in enclosure)
+
    if (feedItem.feed().license() != null) {
** IF content contains reference to metadata on the web that says content is licensed, content is probably licensed (see [[Embedded Metadata]]
+
        return feedItem.feed().license();
 +
    }
 +
    # no explicit license in feed, fetch feed item URL
 +
    feedItemContent = httpGet(feedItem.itemURL());
 +
    if (parseLicenseFromHTML(feedItemContent) != null) {
 +
        return parseLicenseFromHTML(feedItemContent);
 +
    }
 +
    # no license found in content at feed item URL, fetch
 +
    # item referred to in enclosure if there is one,
 +
    # look for embedded metadata
 +
    if (feedItem.enclosure() != null) {
 +
        enclosureContent = httpGet(feedItem.enclosure());
 +
        return parseLicenseFromMedia(enclosureContent);
 +
    }
 +
</pre>
  
This is obviously just a sketch. Aggregators may wish to use different heuristics for different feeds.  See [[Content Curators]] for some sites with feeds of CC licensed content.
+
This is obviously just a sketch. Aggregators may wish to use different heuristics for different feeds.  Different aggregators will want to be more or less aggressive -- e.g., many will not want to go through the step of downloading and attempting to parse enclosure content.  See [[Content Curators]] for some sites with feeds of CC licensed content.
  
 
[[Category:Developer]]
 
[[Category:Developer]]
 
[[Category:Metadata]]
 
[[Category:Metadata]]
 
{{stub}}
 
{{stub}}

Revision as of 21:48, 16 May 2006

License statements may be included in various synication formats, generally at the feed and item level, where the latter overrides the former.

RSS 1.0

http://web.resource.org/rss/1.0/modules/cc/

RSS 2.0

http://backend.userland.com/creativeCommonsRssModule

Atom 1.0

http://ietfreport.isoc.org/idref/draft-snell-atompub-feed-license/

Human-visible notice

Some podcast players display the contents of a copyright element found in a feed. Example usage, not really intended to be machine-parsable, customize for communication with human readers, but do include URL of the relevant CC license and most importantly URL where users can get back to your site:

<copyright>All the songs in this podcast, and the podcast itself, are licensed to the public under http://creativecommons.org/licenses/by-nc-sa/1.0/ verify at http://magnatune.com/info/openmusic</copyright>

Licensed Content Discovery

Not all feeds include license metadata. In psuedocode, here are heuristics for discovering licensed content via feeds, perhaps useful in particular for aggregators.

function feedItemLicense(feedItem) {
    # license found for feed item URL (e.g., rel="license")?
    if (feedItem.license() != null) {
        return feedItem.license();
    }
    # license found at feed top level?
    if (feedItem.feed().license() != null) {
        return feedItem.feed().license();
    }
    # no explicit license in feed, fetch feed item URL
    feedItemContent = httpGet(feedItem.itemURL());
    if (parseLicenseFromHTML(feedItemContent) != null) {
        return parseLicenseFromHTML(feedItemContent);
    }
    # no license found in content at feed item URL, fetch
    # item referred to in enclosure if there is one,
    # look for embedded metadata
    if (feedItem.enclosure() != null) {
        enclosureContent = httpGet(feedItem.enclosure());
        return parseLicenseFromMedia(enclosureContent);
    }

This is obviously just a sketch. Aggregators may wish to use different heuristics for different feeds. Different aggregators will want to be more or less aggressive -- e.g., many will not want to go through the step of downloading and attempting to parse enclosure content. See Content Curators for some sites with feeds of CC licensed content.