内容


Atom 1.0 扩展,第 2 部分

版权许可、链接的自动化处理和联合线程

关于 Atom 1.0 Syndication Format 提议扩展的概述

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: Atom 1.0 扩展,第 2 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:Atom 1.0 扩展,第 2 部分

敬请期待该系列的后续内容。

在这第二篇文章中,我们会探讨很多未完成的 Atom 1.0 Syndication format 扩展,重点是版权许可、控制自动化的下载和联合线程讨论等主题。

本文假设您至少基本了解 Atom 1.0 syndication format 和内容联合的一般知识。在您阅读本文时,我建议您在手头保留 Atom 1.0 规范的一份副本,作为所讨论的各种元素的交叉引用(参见 参考资料)。

请注意,应该将这里讨论的所有扩展都看成是未完成的,因为它们将随着 IETF Internet Standards 的发展而不断演变。大多数都相当稳定,但是如果您选择现在就实现其中的任何一个,那么您应该随着最后的细节的讨论和确定而在未来看到一些更改。

授权提要(feed)

在联合领域,将版权许可与内容相关联已成为一个常见作法,最流行的用例是 Creative Commons 许可的关联。

RSS 1.0 和 RSS 2.0 这两种流行的联合格式都有其自己的方式来将这些许可与提要(feed)相关联。清单 1 演示了一个简短的具有 Creative Commons 许可的 RSS 1.0 提要(feed)。

清单 1. 具有 Creative Commons 许可的 RSS 1.0
<rdf:RDF xmlns:rdf="..." 
         xmlns:cc="http://web.resource.org/cc/"
         xmlns="http://purl.org/rss/1.0">
  <channel rdf:about="...">
    ...
    <cc:license 
     rdf:resource="http://creativecommons.org/licenses/by/2.5/" />
    ...
  </channel>
</rdf:RDF>

为了促进这些许可与 Atom 1.0 提要(feed)和元素的关联,一个题为 “Feed License Link Relation” 的 IETF Internet Draft(参见 参考资料)提出了一个新的 Atom 链接关系扩展。该机制利用 Atom 富有表现力和可扩展的链接元素。清单 2 展示了一个具有 Creative Commons 许可的 Atom 1.0 提要(feed)。

清单 2. 具有 Creative Commons 许可的 Atom 1.0 提要(feed)
<feed xmlns="http://www.w3.org/2005/Atom">
  ...
  <link rel="license" 
        type="application/rdf+xml"
        href="http://creativecommons.org/licenses/by/2.5/rdf" />
  ...
  <entry>
    ...
    <link rel="license" 
          type="application/rdf+xml"
          href="http://creativecommons.org/licenses/by/2.5/rdf" />
    ...
  </entry>
</feed>

尽管在表面上,许可链接关系的外观和行为非常类似于基于 RSS 1.0 和基于 RSS 2.0 的同类东西,但是 Atom 有一个显著的不同之处,即提要(feed)中条目继承许可的方式不同。

在 RSS 1.0 和 RSS 2.0 许可模块中,在提要(feed)级别指定的许可关联自动应用于所有包含的条目。在 Atom 中,提要(feed)和条目元素是独立进行许可的,也就是说,包含在 atom:feed 元素中的许可链接关系不会自动应用于包含的 atom:entry 元素集合。希望将许可与独立的 atom:entry 元素相关联的发布者必须包含一个许可链接关系作为每个这些条目的子元素。

这一更改的原因很简单:与 RSS 不同,Atom 中的提要(feed)和条目都被看成是一类实体,每个实体都具有其自己的元数据集合。提要(feed)的版权拥有者可能不同于条目的版权拥有者。例如,最初发布为具有禁止复制限制的著作应该包含在聚合提要(feed)中吗?尽管聚合服务产生提要(feed),但是条目本身实际上来自许多其他来源,每个来源都有其各自的初始版权。通过要求提要(feed)和条目分别指定它们自己的许可,Atom 阻止了一些人产生的提要(feed)包含其他人产生的条目。

顺便说一下,这一要求为生成聚合提要(feed)带来了重要的问题,这些提要(feed)的许可与单独条目指定的许可相冲突。例如,最初发布为具有禁止复制限制的条目应该包含在聚合提要(feed)中吗?必须只有被发布为具有不允许商业用途的共享许可的条目才能聚合在以相同条款发布的提要(feed)中?

与 RSS 1.0 和 RSS 2.0 模块一样,可以在一个提要(feed)或条目上指定多个许可链接关系,表示内容是在多个版权许可下发布的。

您将跟随我吗?

通过将版权许可与提要(feed)或条目相关联,提要(feed)发布者可以控制他们的内容如何被发布、重用、修改、显示,等等。指定如何处理该内容还需要附加的控制。例如,podcast 提要(feed)通过使用一个 enclosure 元素将音频内容的 URL 与 RSS 条目相关联而发布音频内容。大多数设计成读取 podcast 提要(feed)的应用程序(非正式地叫做 podcatchers)每当在访问和处理 podcast 提要(feed)时自动地下载此类音频文件。此类自动化的下载会导致大大加重保存有该内容的服务器的负担,并消耗主机的大量带宽。

为了让内容发布者可以指定他们的首选项,即用户代理不试图自动地下载与 Atom 提要(feed)或条目相关联的链接,已经提出了一个扩展,即题为 “Atom Link No Follow” 的 IETF Internet Draft(参见 参考资料)。

Atom no follow 扩展引入了三个新的属性,您可以为 atom:linkatom:content 元素指定这些属性,以便控制提要(feed)阅读器应该执行哪些形式的自动化处理:

  • follow:该属性指定阅读器是否应该试图自动地跟随提要(feed)文档中包含的链接。
  • index:该属性指定阅读器是否应该试图给链接指定的资源加索引。这里的 “Index” 与查询引擎用于相同的目的,即为搜索和剖析目的而对内容进行索引。
  • archive:该属性指定阅读器是否应该试图对链接指定的资源进行归档。

您将如何使用该机制的一个例子是 podcast 提要(feed),其中最近的 podcast 被自动地下载,而较老的则不被自动下载。清单 3 演示了如何指定该选项。

清单 3. 指定哪些闭包不应该被自动下载
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:nf="http://purl.org/atompub/nofollow/1.0">
  ...
  <entry>
    ...
    <link rel="enclosure" 
          href="http://www.example.com/todayspodcast.mp3"
          nf:follow="yes" />
    ...
  </entry>
  <entry>
    ...
    <link rel="enclosure" 
          href="http://www.example.com/yesterdayspodcast.mp3"
          nf:follow="no" />
    ...
  </entry>
  <entry>
    ...
    <link rel="enclosure" 
          href="http://www.example.com/oldpodcast.mp3"
          nf:follow="no" />
    ...
  </entry>
</feed>

您喜欢发表评论吗?

Web 上大量的联合内容来自 weblogs 和类似的对话媒体,在这些地方,一部分人创建帖子,另一些人则对之进行评论。在 RSS 联合领域,很多提要(feed)阅读器现在都包含一个基本的机制,用于将一个条目链接到包含响应该条目的评论的提要(feed)(参见 清单 4)。这些阅读器可以使用该扩展来将条目的评论显示为线程的讨论。

清单 4. RSS Comments 扩展
<rss version="2.0"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/">
  <channel>
    ...
    <item>
      ...
      <wfw:commentRss>http://www.example.com/comments.rss</wfw:commentRss>
    </item>
  </channel>
</rss>

该方法适用于一些简单的情况,比如一些个人 weblogs 需要让阅读者能够订阅 blog 的主提要(feed) 以及对该 blog 上各个条目所做的评论。然而,在有些场景则不适用,比如涉及复杂对话线程和分布式对话的场景(来自内容发布者未知成员的提要(feed))。

例如,如果我的一个同事在他的个人 blog 上贴出一个条目,而我想要通过在自己的个人 blog 上贴出一个条目来作出响应,那么 commentsRss 扩展没有办法将这些条目相关联。提要(feed)阅读器将需要求助于一个非常低效的处理,即传送 TrackBacks(参见 参考资料)或者考察条目的内容,以确定我的条目是否真正与同事的相关联。尽管只是能够将一个条目链接到包含对该条目的响应的 提要(feed)已经很不错了,但是真正需要的能力是,以 e-mail 中消息头构建线程讨论的相同方式,显式地将一个条目标志为对另一个条目的响应。

题为 “Feed Thread: Enabling Threaded Entries in Atom” 的 IETF Internet Draft(参见 参考资料)引入了这样一个机制,以便与 Atom 1.0 一起使用,参见 清单 5

清单 5. Atom 1.0 Comments 扩展
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:ft="http://purl.org/syndication/thread/1.0">
  ...
  <link rel="replies" 
        type="application/atom+xml"
        href="http://www.example.com/commentsfeed.xml" />
  <entry>
    <id>tag:example.com,2005/entries/1</td>
    ...
  </entry>
  <entry>
    <id>tag:example.com,2005/entries/1/1</td>
    <ft:in-reply-to idref="tag:example.com,2005/entries/1" />
    ...
  </entry>
</feed>

replies 链接关系与清单 4 中展示的 wfw:commentRss 元素用于相同的基本目的,也就是说,它指定一个外部位置,在这里,人们可以找到对该提要(feed)中条目的评论。

in-reply-to 元素明确地表明包含的条目是对所识别的资源的响应。该元素有两种形式:一种使用 idref 属性来指定一个可以用于识别被响应的资源的非解除参考的 URI,另一种使用 href 属性来指定一个可以用于定位被响应的资源的解除参考的 URI。

注意,指向 Atom 文档不需要 replies 链接关系和 in-reply-to 元素的 href 属性,这意味着 Atom 提要(feed)可以包含对诸如 Web 页面、文档以及 e-mail 和新闻组消息之类的资源的响应。

Feed Thread 扩展的另一个优点是,条目的响应可以与初始条目包含在同一提要(feed)中,因而在使用 replies 链接关系相关联的单独提要(feed)中,或者在完全不相关的提要(feed)中,可以具有对话的真正分散的线程。

综合

清单 6 演示了一个提要(feed),它使用了这个两部分的系列中讨论的每个扩展。作为一个整体,这些扩展支持很多强大的特性,可以扩展基本联合格式标准的功能和价值。

清单 6. 一个综合例子
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:fh="http://purl.org/syndication/history/1.0"
      xmlns:fr="http://purl.org/syndication/index/1.0"
      xmlns:fa="http://purl.org/atompub/age/1.0"
      xmlns:fh="http://purl.org/syndication/thread/1.0"
      xmlns:nf="http://purl.org/atompub/nofollow/1.0">
  <title>My Movie Queue</title>
  <link href="http://www.example.com/movies"/>
  <link rel="self" href="http://www.example.com/movies/feed" />
  <link rel="license" 
        href="http://creativecommons.org/licenses/by/2.5/rdf" />
  <updated>2005-12-12T12:00:00Z</updated>
  <author><name>James Snell</name></author>
  <id>tag:example.com,2005:movies</id>
  <fh:incremental>false</fh:incremental>
  <fr:ranking-scheme
    domain="http://www.example.com/movies/queue"
    label="Queue"
    significance="descending"
    precision="0"
    min-value="1" />
  <fr:ranking-scheme
    domain="http://www.example.com/movies/ratings"
    label="Ratings"
    significance="ascending"
    precision="1"
    min-value="0"
    max-value="5" />
  <fa:expires>2005-12-22T12:00:00Z</fa:expires>
  <entry>
  <title>Hitchhikers Guide to the Galaxy</title>
  <link href="..." />
  <link rel="replies" 
        href="http://www.example.com/movies/comments/hhgg.xml" />
  <link rel="enclosure"
        title="Preview"
        href="http://www.example.com/movies/hhgg.mpeg" 
        nf:follow="no" />
  <r:rank 
  domain="http://www.example.com/movies/queue">1</r:rank>
  <r:rank 
  domain="http://www.example.com/movies/ratings">5.0</r:rank>
  ...
  </entry>
  <entry>
  <title>Charlie Chaplin - City Lights</title>
  <link href="..." />
  <link rel="replies" 
        href="http://www.example.com/movies/comments/cccl.xml" />
  <link rel="enclosure"
        title="Preview"
        href="http://www.example.com/movies/cccl.mpeg" 
        nf:follow="no" />
  <r:rank 
  domain="http://www.example.com/movies/queue">3</r:rank>
  <r:rank 
  domain="http://www.example.com/movies/ratings">4.5</r:rank>
  ...
  </entry>
  <entry>
  <title>Buster Keaton - College</title>
  <link href="..." />
  <link rel="replies" 
        href="http://www.example.com/movies/comments/bkc.xml" />
  <link rel="enclosure"
        title="Preview"
        href="http://www.example.com/movies/bkc.mpeg" 
        nf:follow="no" />
  <r:rank 
  domain="http://www.example.com/movies/queue">2</r:rank>
  <r:rank 
  domain="http://www.example.com/movies/ratings">3.5</r:rank>
    ...
  </entry>
</feed>

这里讨论的所有 Atom 1.0 扩展都设计用于提供非常特定而专用的功能,超出了联合格式的核心能力。通过把这些扩展创造性地组合起来,提要(feed)消费者和生产者可创建各种各样支持各种需求和用例的应用程序。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML, Web development
ArticleID=99079
ArticleTitle=Atom 1.0 扩展,第 2 部分: 版权许可、链接的自动化处理和联合线程
publish-date=11212005