§ ITPOW >> 文档 >> XML

RSS 2.0 详述

作者: 来源:ITPOW(原创) 日期:2009-1-9

本文由陈梦翻译自 http://www.rssboard.org/rss-specification,并发布于ITPOW

案卷保管人说明:这是 RSS 2.0 的 2.0.10 版本说明书,2007 年 10 月 15 日在 RSS Advisory Board 上发布。最新版本的 RSS 说明将会一直使用这个链接(指原文。译者注),所有的变化都已经被记录,并且其他版本已经归档。

目录

  • 什么是 RSS?
  • 示例文件
  • 关于这个文档
  • channel 必须的元素
  • channel 可选的元素
  • <item> 的元素
  • 注释
  • 扩展 RSS
  • 路径

什么是 RSS?

RSS 是网页内容聚合格式。

它的名字是 Really Simple Syndication 首字母缩写。

RSS 是 XML 的一系。所有的 RSS 文件必须遵从 World Wide Web Consortium (W3C) 网站上发布的 XML 1.0 规范

RSS 版本历史一览。

在 RSS 文档的最高级是 <rss> 元素,具有一个强制属性 version,该属性标识 RSS 文档遵从的标准。如果遵从本说明书,那么 version 属性必须是 2.0。

<rss> 元素下级是单一的 <channel> 元素,它包含了关于 channel (元数据)和其内容的信息。

示例文件

这里有 RSS 0.910.922.0 的 示例文件。

说明:示例文件中指向的文档和服务可能已经不存在。0.91 示例是在 0.91 文档写下的时候创建的。试用一下示例也是个不错的主意。

关于这个文档

这个文档呈现的是在 2002 年秋季时候的状态,版本 2.0.1。

它包含了自 RSS 0.91(2000 年 6 月)的基础说明和 RSS 0.92(2000 年 12 月)、RSS 0.94(2002 年 8 月)引入的新特性的所有变更。

变更说明在这里

首先我们提供了 <channel> 元素的必须和可选子元素;然后提供了 <item> 子元素。最后一节回答了常见问题,提供了将来发展的路径,RSS 扩展的指导方针。

RSS Profile 包含一系列推荐的内容的集合,包括如何创建 RSS 文档,以使其在广泛的不同的客户端软件用户提供编排。

channel 必须的元素

这里是必须的 channel 元素列表,包含简短的描述、一个示例、可用性、详细描述的指向。

元素 描述 示例
title channel 的名称。告诉人们如何引用您的服务。如果您有 HTML 网站,该网站包含了您 RSS 文件的相同信息, channel 的标题应该和您网站的标题相同。 GoUpstate.com 头条新闻
link 和 HTML 网站的 URL 一致。 http://www.goupstate.com/
description 描述 channel 的词组或短句。 GoUpstate.com 的最新新闻, 斯帕坦堡先驱日报网站。

channel 可选的元素

这里是 channel 的可选元素列表。

元素 描述 示例
language channel 是由什么语言写的。比如,允许聚合器在一个页面中组合所有的意大利语网站。 所允许的值在这里。你也可以使用 W3C 定义的值 en-us
copyright channel 内容的版权说明。 Copyright 2002, Spartanburg Herald-Journal
managingEditor 内容责任编辑的 email 地址。 geo@herald.com (George Matesky)
webMaster 和技术内容相关的负责人的 email 地址。 betty@herald.com (Betty Guernsey)
pubDate channel 中内容的发布时间。比如:纽约时报每日发布,发布日期每 24 小时变一次。也就是 channel 中内容发生变化的 pubDate。RSS 中所有日期时间的格式必须遵从 RFC 822 规范,例外是,年可以是两位或四位(四位较好)。 Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate channel 内容发生变化的最近日期。 Sat, 07 Sep 2002 09:42:31 GMT
category 标识 channel 所属的一个或多个目录。和 <item> 级的 category 规则一样。 <category>Newspapers</category>
generator 用于标明产生 channel 的程序的名称。 MightyInHouse Content System v2.3
docs 一个 URL,指向 RSS 使用的格式的文档。可以指向本页。这是为不懂 RSS 的人准备的。 http://www.rssboard.org/rss-specification
cloud 允许注册一个云,然后 channel 更新时会得到通知。为 RSS 实现轻量级的发布订阅协议。 <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>
ttl ttl 表示存活时间。它是指示从源刷新之前可以缓存的分钟数。 <ttl>60</ttl>
image 指定一个可以在 channel 中显示的 GIF、JPEG 或 PNG 图像。
rating channel 的 PICS 速率。
textInput 指定一个可以在 channel 中显示的文本输入框。
skipHours 一个提示,聚合器告诉他们哪些时间是可以跳过的。
skipDays 一个提示,聚合器告诉他们哪些天是可以跳过的。

<channel> 子元素 <image>

<image> 是 <channel> 的一个可选子元素,它又包含三个必须和三个可选的子元素。

<url> 是在 channel 中呈现的 GIF、JPEG、PNG 图像的 URL。

<title> 描述图像,当 channel 在 HTML 中表现时,它就是 HTML <img> 标签中使用的是 ALT 属性。

<link> 网站的 URL,当 channel 呈现时,图像链接到网站。(说明,在实践中,图像的 <title> 和 <link> 应该和 channel 的 <title> 和 <link> 相同。

可选元素包括 <width> 和 <height>,数字类型,以像素为单位指示图像的宽和高。<description> 包含在 HTML 中呈现时图像的 TITLE 属性文字。

宽度的最大值是 144,默认是 88。

高度的最大值是 400,默认是 31。

<channel> 子元素 <cloud>

<cloud> 是 <channel> 的一个可选子元素。

它标识一个提供执行 HTTP-POST, XML-RPC or SOAP 1.1. 的 rssCloud 接口的 web service。

它的目的是允许执行注册一个云,然后 channel 更新时得到通知,执行 RSS 源的轻量级的发布订阅协议。

<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />

在这个示例中, channel 中有一个请求通知,你可以在 80 端口发送 XML-RPC 信息到 rpc.sys.com,路径是 /RPC2。处理程序是 myCloud.rssPleaseNotify。

这个元素和 rssCloud 接口的解释在这里

<channel> 子元素 <ttl>

<ttl> 是 <channel> 的一个可选子元素。

ttl 表示存活期,它是指示从源刷新之前可以缓存的分钟数。这使得 RSS 源被像 Gnutella 这样的文件共享网络管理成为可能。

示例

<ttl>60</ttl>

<channel> 子元素 <textInput>

一个 channel 可能包含一个 <textInput> 子元素,它又有四个必须子元素。

<title> -- 文本输入区的提交按钮文字。

<description> -- 文本输入区的说明。

<name> -- 文本输入区文本对象的名称。

<link> -- 处理文字输入提交的 CGI 脚本的 URL。

<textInput> 元素的目的是一些神秘的东西。你可以用它标识搜索引擎框,或者允许读者反馈。许多聚合器忽略它。

<item> 元素

一个 channel 可以包含任意数量的 <item>。一个 item 可能呈现一个“故事”——就像报纸或杂志上的故事;此时,它描述的是故事的摘要,链接指向故事的全文。
一个 item 也可以靠自身完成,此时,包含文字的描述(允许包含 HTML,见示例)、链接和标题都可以省略。 item 所有的元素都是可选的,但是 title 和 description 至少要使用一个。

元素 描述 示例
title item 的标题。 Venice Film Festival Tries to Quit Sinking
link item 的 URL。 http://nytimes.com/2004/12/07FEST.html
description item 摘要。 <description>Some of the most heated chatter at the Venice Film Festival this week was about the way that the arrival of the stars at the Palazzo del Cinema was being staged.</description>
author item 作者的 email。
category item 中的一个或多个目录。
comments item 相关评论页的 URL。
enclosure 描述附加在 item 上的一个多媒体对象。
guid 一个唯一性地标识 item 的字符串。
pubDate 标明 item 是什么时候发布的。
source item 来源的 RSS channel。

<item> 子元素 <source>

<source> 是 <item> 的一个可选子元素

它的值是 RSS channel 的名称,标明 item 来源,衍生自 <title>。它有一个必须的属性,url,链接到来源的 XML 地址。

<source url="http://www.tomalak.org/links2.xml">Tomalak's Realm</source>

这个元素的目的是传播链接,宣传新闻 item 的来源。它可以在聚合器的 Post 命令中使用。从聚合器到博客记录工具,它都应该自动产生。

<item> 子元素 <enclosure>

<enclosure> 是 <item> 的一个可选子元素。

它有三个必须属性,url 表明附件的位置,length 表示附件有多少字节,type 表示它是什么类型,标准 MIME 类型。

url 必须是一个 http url。

<enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3" length="12216320" type="audio/mpeg" />

这个元素的用例描述在这里

<item> 子元素 <category>

<category> 是 <item> 的一个可选子元素。

它有一个可选属性,domain,一个标识目录分类的字符串。

这个元素的值是前斜杠分隔的字符串,标识目录分类的层次位置。制造者可以建立目录描述的约定。提供两个示例:

<category>Grateful Dead</category>
<category domain="http://www.fool.com/cusips">MSFT</category>

你想要多少 category 元素,就可以使用多少,每一个使用不同的 domain,在同一个域名中使用不同方面的交叉引用。

<item> 子元素 <pubDate>

<pubDate> 是 <item> 的一个可选子元素。

它的值是 date,指明 item 是什么时间发布的。如果它的值是将来,聚合器会选择在指定日期到来之前隐藏它。

<pubDate>Sun, 19 May 2002 15:21:36 GMT</pubDate>

<item> 子元素 <guid>

<guid> 是 <item> 的一个可选子元素。

guid 代表全局唯一标识符。它是一个唯一地标识 item 的字符串。呈现时,聚合器可能依靠它来判断 item 是不是新的。

<guid>http://some.server.com/weblogItem3207</guid>

guid 没有任何语法规则。聚合器必须把它们当作字符串对待。它取决于 feed 源建立的唯一性字符串。

如果 guid 元素使用了 isPermaLink 属性,必须其值是 true,阅读器会认为它是 item 的永久链接,也就是说,在浏览器中,可以当作一个 url 打开,并且链接到 <item> 元素的全部描述。一个示例:

<guid isPermaLink="true">http://inessential.com/2002/09/01.php#a2</guid>

isPermaLink 是可选的,它的默认值是 true。如果这个值是 false,guid 可能不代表一个 url,或者是一个其他特定内容的 url。

<item> 子元素 <comments>

<comments> 是 <item> 的一个可选子元素。

呈现时,它是 item 的评论页。

<comments>http://ekzemplo.com/entry/4403/comments</comments>

关于 comments 的更多内容在这里

<item> 子元素 <author>

<author> 是 <item> 的一个可选子元素。

它是 item 作者的 email 地址。对于报纸、杂志通过 RSS 的供稿,author 是谁写了 <item> 描述的内容。对于协作的博客,item 的作者可能是来自不同杂志编辑或网络管理员。对于个人写的博客一般省略 <author> 元素。

<author>lawyer@boyer.net (Lawyer Boyer)</author>

注释

RSS 对 <link> 和 <url> 元素的第一个非空白字符有限制。这些元素的开头必须是 IANA 注册的 URI 体系,比如:http://、https://、news://、mailto 和 ftp://。在 RSS 2.0 以前,只允许使用 http:// 和 ftp://,但是在实际中,其它 URI 也被内容开发者使用,并且得到聚合器的支持。聚合器也可能仅支持有限的 URI 体系。内容开发者不应该假定聚合器支持所有的 URI 体系。

在 RSS 0.91 中,许多元素被限制在 500 或 100 字符。在 0.91 的 <channel> 中不能超过 15 个 <item>。在 RSS 0.92 或更高版本中不再有字符长度限制和 XML 层次限制。处理器实现他们自己的限制,产生者更喜欢的是:channel 中使用了特定数量的 <item>,或者字符串超过特定长度省略了。

在 RSS 2.0 中,提供了一个链接指向 channel 的目录系统标识,如上描述的使用 channel 级目录特性。比如,链接到 Syndic8 标识,包括 <channel> 的子元素 category 元素,使用 domain “Syndic8”,并且为你在 Syndic8 数据库中的 channel 评估标识。适当的目录元素应该是 <category domain="Syndic8">1765</category>。

最常问到的一个问题是 <guid> 与 <link> 区别。他们是相同的东西吗?是的,在某些内容系统中,<link> 是博客 item 的永久链接。但是在其它一些系统中,每一个 <item> 是一篇长文章的摘要,<link> 指向文章,<guid> 是博客入口的永久链接。任何情况下,建议您提供一个 guid,尽可能的使用永久链接。这样,即使在编辑了内容的情况,聚合器不会重复 item。

如果你有关于 RSS 2.0 格式的问题,请投递到 RSS-Public 列出的邮件地址。这个列表中,由 RSS Advisory Board 维护,为用户、作者、开发者提供创建、使用格式内容的资源支持。

扩展 RSS

RSS 产生于 1999 年,致力于简单、轻松易懂的格式,目标相对低调。当它变成一种流行的格式后,开发者想要使用名称空间模块定义来扩展它,如 W3C 所记录的。

RSS 2.0 利用简单的规则添加了一些功能。RSS 源可能使用了本页没有包含的元素和属性,但这些元素和属性都是定义在名称空间中的。

本文档定义的元素并不是他们名称空间的成员,因此 RSS 2.0 可以保持和先前的版本兼容——0.91 或 0.92 文件版本仍然是一个 2.0 文件。如果 RSS 2.0 的名称空间中有元素,那么这个约束将被打破,0.9x 文件版本将不再是有效的 2.0 文件。

路径

RSS 不意味着是完美的格式,但它被普遍和广泛地支持。拥有一个稳定的格式是 RSS 在很长一段时间内必须的。本工作的目的就是让它变成一个不变的东西,在市场上让它发展就是不停地开发它,为新的聚合格式革新扫清障碍。因此,RSS 规则是,对所有的实践目的,在 2.0.1 中冻结。我们期望可能的 2.0.2 或 2.0.3 版本等等,只是让本说明更清晰,并不是要在格式上添加新的特性。随后的工作应该发生在 module 中,使用名称空间,形成完全新的聚合格式,新的名称。

相关文章