RSS 无处不在!
今天,您可以发现成千上万的 RSS 提要。Weblog 用户、新闻出版商、政府代理以及许多个人和商业 Web 站点都支持这种格式。Java 技术、PERL、PHP、Python 和其他主要编程语言,都为开发人员提供了处理 RSS 的工具。许多阅读器和聚集器都工作在 Web、桌面甚至 e-mail 客户程序中。RSS 已成为 Internet 上连锁内容和元数据事实上的标准。
本文将观察现行的 RSS 2.0 规范。我不准备讨论格式上丰富多彩的特征以及围绕它的争论,否则就无法讨论其他内容了。
相反,本文将为您提供少量背景知识,考察这种格式的用法,并列出一些比较流行的处理这种格式的工具。文中将讨论这种格式的具体细节,给您一些例子,并说明在开始之前您需要了解哪些东西。最后,本文将涉及到 RSS 2.0 的一些新特性。在文章的最后,您将找到丰富的矿藏 —— 一份长长的、带有注释的 RSS 参考资料列表。
“RSS”究竟代表什么? 和许多标准一样,即使最基本的方面也很难让人们达成一致。有人说它表示 “RDF Site Summary(RDF 站点摘要)”,其他人则说是“Really Simple Syndication(真正简单的连锁)”,还有人相信它代表 “Rich Site Summary(丰富站点摘要)”。 根据 Dave Winer(他是现行规范的作者)的观点,“关于 RSS 代表什么没有一致的看法,它不是一个首字母缩写词,而是一个名称。规范的最新版本可能称它是缩写词,但愿不会影响到太多应用程序。” 无论如何,RSS 都代表一件事 —— 在 Internet 上连锁内容的一种格式。 |
什么是 RSS?
RSS 是 Internet 上连锁内容和元数据的一种格式。通常用于共享标题和到新闻文章的链接。对于新闻文章,真正的文章不一定是共享的,但是关于文章的元数据通常是共享的;这种元数据可以包含标题、URL或者摘要。对于出版商而言,RSS 是一种重要的工具,因为提要可用于连锁内容,并把第三方的内容集成到您的站点中。
RSS 是一种 XML 方言。所有的 RSS 文件必须符合万维网联盟(World Wide Web Consortium,W3C)Web 站点上发布的 XML 1.0 规范。
下面是一个典型的例子,说明了如何使用 RSS:
- 一个出版商有一些希望发布的内容。
- 他们为这些内容创建了一个 RSS 频道。
- 在这个频道中包含了关于希望宣传的网页的一些项。
- 这个频道可以被远程应用程序读取并转换成标题和链接。这些链接可以加入到新的 Web 页中或者供专门的读者阅读。
- 人们从不同的站点看到这个链接,单击连接进入最初出版商的网站。
尽管标题连锁是最常见的 RSS 用法,但也可用于其他目的。RSS 在 weblog 社区中是一种非常流行的格式。它也被用于照片簿、分类广告列表、食谱、评论以及跟踪软件包的状态。
RSS 提要在电子商务中用作一种传递信息的方式。比如,Amazon 根据其 Web 服务平台向客户提供新闻提要。从而使您能够在新闻阅读器中了解最畅销的图书,或者在您的 Web 站点中包括关于 Amazon 销售的相关图书的信息。
过去几年中,RSS 在普及性方面有了惊人的增长。Syndic8.com 维护了一个 RSS 频道索引,它的提要列表在两年中加长了大约 1400%。Yahoo 新闻、BBC、Slashdot、LockerGnome、Amazon、CNN、Wired、Rolling Stone 和 Apple Computer 都位于许多最普及的 RSS 提要来源之列。
新闻阅读器
随着新闻提要数量的增加,出现了一种新的软件类型:新闻阅读器。新闻阅读器是个人聚集器 —— 帮助您发现和组织感兴趣的频道列表。一旦选择了频道,您就可以使用阅读器一致的界面查看这些频道。新闻阅读器检查您所感兴趣的频道的更新,并转化成可以浏览的 HTML。
一种流行的新闻阅读器是 BlogExpress:
图 1. 在 BlogExpress 中查看 alphaWorks
BlogExpress 是所谓的“匹萨软件”—— 意思是说,如果您喜欢这个软件,您可以寄给作者一些买匹萨饼的钱。
定制频道
在 BlogExpress 中增加一个频道很容易。比方说,您对追踪 IBM alphaWorks 站点上的活动感兴趣。您要做的第一件事是,取一个要增加的提要:
增加一个提要很容易,桔黄色的“XML”标志常用于链接公共 RSS 提要。在多数 Web 浏览器中,您都可以右击“XML”标志复制链接并粘贴到您的新闻阅读器中。
其他常见的新闻阅读器包括 BlogStreet、FeedReader、AmphetaDesk 和 NewsGator (请参阅 参考资料)。
发现 RSS 提要
可以使用搜索引擎查找 RSS 格式的内容。比方说使用 Google 时,您可以在查找中增加“filetype:rss”以搜索 .rss 文件中的查找项。
专门的搜索引擎使内容搜索更加容易。Feedster 监视 weblog 并允许您通过一个日志项索引查找,按照相关性、日期、等级(logrank)查看。当您在搜索时,Feedster 按照您的要求创建一个 RSS 提要。这个提要可以增加到您的新闻阅读器中,以便您能够看到所有与搜索请求有关的最新活动,您甚至不需要离开新闻阅读器。
DayPop 搜索新闻、blog 和 RSS 提要。它让您在 weblog 世界跟踪流行的新闻。它提供了目前最流行的 40 个 weblog 链接。这是全世界最流行文章的链接。它创建了一个 weblog 中所用最热门词汇的列表。它还根据引用对 weblog 评级,提供最受其他 weblogger 欢迎的 weblog 列表。您也可以自定义搜索。评级列表和自定义搜索都有 RSS 提要形式,可以导入您的新闻阅读器。
RSS 2.0 的新特性
RSS 2.0 建立在 RSS 0.91 规范的基础上。它是向后兼容的,因此任何处理 RSS 2.0 的工具应该也能够处理 0.91 提要。升级后的规范增加了少量元素,比如 <cloud>
和 <guid>
。
它也去掉了一些限制。在过去,<link>
和 <url>
元素只能是 http 或 ftp,现在可以使用任何有效的 URI。在 RSS 0.91 中,每个频道只能包含 15 个项,而且元素的长度也有限制,现在这些限制都取消了。不过仍然应该小心使用较大的值,因为它们可能对老的应用程序造成问题。
不过更大的变化是能够使用名称空间扩展这种格式。RSS 2.0 支持名称空间,一种增加规范中没有的元素的标准方法。只要定义在一个名称空间中,提要可以包含新的元素。
RSS 2.0 概述
RSS 是一种 XML 方言,用于连锁 Web 内容和元数据。RSS 0.91 是几种可用版本中最常用的一种。对于新的 RSS 提要,更好的办法是使用 2.0 版,因为这是现行的规范,而且如前所述,它与 0.91 向后兼容。
Dave Winer 编写了规范的 2.0 版。规范的修改可能变得难以使用,或者损害已有的应用程序,他有意识地避免了这种情况。Winer 总结了他的思想:“保持简单。这就是 RSS 的价值所在。任何稍微了解 HTML 的人都能够理解 RSS。这一点极其重要!”
该规范在 Creative Commons 许可下发布(请参阅参考资料)。这意味着您可以免费复制和分发该规范,并进行衍生工作,而且可以自由地用于商业工作。一个咨询委员会负责更新规范、推广规范和编写文档。
RSS 文件形式
RSS 文件由一个 <channel>
元素及其子元素组成。除了频道内容本身之外,<channel>
还以项的形式包含表示频道元数据的元素 —— 比如 <title>
、<link>
和 <description>
。项通常是频道的主要部分,包含经常变化的内容。
频道
频道一般有三个元素,提供关于频道本身的信息:
<title>
:频道或提要的名称。<link>
:与该频道关联的 Web 站点或者站点区域的 URL。<description>
:简要介绍该频道是做什么的。
许多频道子元素都是可选的。常用的 <image>
元素包含三个必需的子元素:
<url>
:表示该频道的 GIF、JPEG 或 PNG 图像的 URL。<title>
:图象的描述。当频道以 HTML 呈现时,用作 HTML<image>
标签的ALT
属性。<link>
:站点的 URL。如果频道以 HTML 呈现,该图像作为到这个站点的链接。
<image>
还有三个可选的子元素:
<width>
:数字,表示图象的像素宽度,最大值是 188,默认值为 88。<height>
:数字,表示图象的像素高度。最大值是 400,默认值为 31。<description>
:包含文本,在呈现时可以作为围绕着该图像形成的链接元素的title
属性。
此外还可以使用许多其他可选的频道元素。多数都是不言自明的:
<language>
:en-us<copyright>
:Copyright 2003, James Lewin<managingEditor>
:dan@spam_me.com (Dan Deletekey)<webMaster>
:dan@spam_me.com (Dan Deletekey)<pubDate>
:Sat, 15 Nov 2003 0:00:01 GMT<lastBuildDate>
:Sat, 15 Nov 2003 0:00:01 GMT<category>
:ebusiness<generator>
:Your CMS 2.0<docs>
:http://blogs.law.harvard.edu/tech/rss<cloud>
:允许进程注册为“cloud”,频道更新时通知它,为 RSS 提要实现了一种轻量级的发布-订阅协议。<ttl>
:存活时间 是一个数字,表示提要在刷新之前缓冲的分钟数。<rating>
:关于该频道的 PICS 评价。<textInput>
:定义可与频道一起显示的输入框。<skipHours>
:告诉聚集器哪些小时的更新可以忽略。<skipDays>
:告诉聚集器那一天的更新可以忽略。
项
项通常是提要中最重要的部分。每个项都可以关于某个 weblog、完整文档、电影评论、分类广告或者任何希望与频道连锁的内容的记录。频道中的其他元素可能不变,但项经常发生变化。
您可以有任意多个项。以前的规范限值为 15 个项,如果要保持向后兼容这仍然是一个很好的上限。
新闻项的元素
每个项通常包含三个元素:
<title>
:这是项的名称,在标准应用中被转换成 HTML 中的标题。<link>
:这是该项的 URL。title 通常作为一个链接,指向包含在<link>
元素中的 URL。<description>
:通常作为 link 中所指向的 URL 的摘要或者补充。
所有的元素都是可选的,但是一个项至少要么 包含一个 <title>
,要么包含一个 <description>
。
项还有其他一些可选的元素:
<author>
:作者的 e-mail 地址。<category>
:支持有组织的记录。<comments>:
关于项的注释页的 URL。<enclosure>
:支持和该项有关的媒体对象。<guid>
:唯一与该项联系在一起的永久性链接。<pubDate>:
该项是什么时候发布的。<source>
:该项来自哪个 RSS 频道,当把项聚合在一起时非常有用。
清单 1 是一个 RSS 2.0 文件的例子。注意,频道包含在 <rss version="2.0">
中。这是一个非常基本的例子,说明了项和图像如何包含在频道中。所示的元素都是最常用的频道子元素。
|
相关工具
由于 RSS 的普及,出现了许多工具,使您能够基本上在任何环境中使用这些文件:
- Java 技术:可在 Sun 站点上找到的一个 RSS Utilities Package,支持在 JavaServer Pages 中使用 Tag Library。它还包括一个 RSS 解析器。
- Perl:已经有几种 Perl 工具处理 RSS。XML::RSS 提供了创建和维护 RSS 文件的一个框架。它支持在常用版本之间的转换。
- Python:RSS.py 是一组通过 Python 使用 RSS 频道的类。
此外,许多内容管理和 weblog 工具也直接支持 RSS。多数 weblog 工具,包括 Movable Type、Blogger 和 Radio Userland 都支持 RSS。一些内容管理系统,包括 Zope 和 CityDesk 现在也支持它了。
扩展 RSS
RSS 2.0 有许多可选元素,包括多数频道都需要的那些元素。但是它还支持扩展性,因此您可以使用规范中没有的元素。不过,RSS 2.0 规范并没有花费多少时间定义如何实现扩展。关于扩展性,规范中总结为:“RSS 提要可以包含本页中没有描述的元素,只要这些元素定义在一个名称空间中。”
这就留下了很大的想像空间!所幸的是,规范中包含一个例子,您可以参考目前使用的几个例子。
基本的思想是您可以增加需要的标签 —— 但是,增加带有多种含义的元素太容易了。使用您的频道的人们可能并不知道某个标签是什么含义。比如,如果我要在一个频道中使用 <analog>
标签,它的含义就不很清楚。Web 专家可能认为这个标签指的是 Analog,它是最流行的 Web log 文件分析器。科幻迷可能认为这个标签是关于 Analog 的,一本经典的科幻杂志。音乐家可能认为它指的是流行的合成器类型,生物学家认为这是一种器官,电子工程师认为是一种电路。含糊性使人们很难理解标签的含义。
因此,RSS 允许您增加所喜欢的任何标签,但是要求必须和名称空间一起使用。这样有助于澄清标签的含义。
再回到 <analog>
的例子,我可能希望创建一组关于电子商务的标签,并让 <analog>
标签作为一个“e-business”元素。为此,我增加如下的名称空间:
|
这就创建了一个名为“ebusiness”的名称空间,并表明这个名称空间的文档在我的站点上。为了使用 <analog>
标签,我可以使用这种格式:<ebusiness:analog>
。这样就能与其他类似的含义中区分开来,比如 <sciencefiction:analog>
或 <synthesizers:analog>
。
关于扩展性,一个更实际的例子可以在 RSS 2.0 规范的示例文件中找到:
清单 2. RSS 2.0 规范示例文件中的名称空间
|
在这个例子中,定义了一个称为 blogChannel
的名称空间。它指向一个文档,该文档解释了几种常见于 weblog 的新元素的用法。其中之一是 <blogroll>
。文档说明,blogroll 是 weblog 中的一个链接集合,指向与您的 weblog 内容相关的站点。
<blogChannel:blogRoll>
标签提供了用户或软件所需要的信息,知道 blogRoll
是一个定义在 blogChannel
名称空间中的元素,而且可以找到这个文档的位置。
同样,RSS 2.0 只对不 属于规范的元素要求名称空间。所有的基本标签都假定在 RSS 2.0 名称空间中。这使得这种格式更容易使用,因为除非需要扩展 RSS,否则您完全不需要知道名称空间。
结束语
本文考察了 RSS 在内容连锁和聚合领域的重要性。文章主要讨论 RSS 2.0,因为这是最新的规范版本,而且正在迅速普及。本文也考察了处理 RSS 可以使用的工具,包括集聚器、验证程序和解析器。更多信息请参阅参考资料。
- 阅读作者关于 RSS 的上一篇 developerWorks 文章,“An introduction to RSS news feeds”(developerWorks, 2000 年 11 月),该文讨论的是 0.91 版。
- 看看常见的新闻阅读器:
- 试一试以下建立 weblog 和新闻提要的流行工具:
- 使用两种 RSS 验证程序,Userland 和 FeedValidator。
- 在 Harvard Law School 技术站点阅读 RSS 2.0 规范。
- 需要关于 RSS 不同版本的解释,请阅读 Mark Pilgrim 的 XML.com 文章“What is RSS?”。
- 可以在 OASIS RSS 页面上找到关于这个主题的更多文章和资源。
- 通过 Sun 的开发人员网站了解如何通过 Java 技术使用 RSS。
- 查看 WirelessDevNet 文章,“Parsing XML With PHP”,作者是 Marc Robards。
- 了解如何开发一个 RSS Viewer Applet ,以用于导航与查看 RSS 频道。
- 阅读 Uche Ogbuji “Thinking XML”专栏中关于 Creative Commons 项目 (developerWorks, 2003 年 5 月)的讨论。RSS 规范在 Creative Commons 许可下发布。
- developerWorks 提供了自己的 RSS 提要,详见 http://www-106.ibm.com/developerworks/rss/。
- 连接到 alphaWorks 上的几种技术分类提要。
- 更多的技术内容提要,尝试 O'Reilly Network。
- 访问 Sun Developer Network Content Syndication Program。不要让这个长长的名字令您远离它的 RSS 提要。
- 从 InfoWorld 获得 RSS 形式的 IT 新闻。
- 看看 LockerGnome —— 它对 RSS 持严肃的态度。
- 访问 Wired 的连锁新闻。
- 要查找最流行的 weblog 吗?您可以在 DayPop 和 Feedster 得到所需的帮助。
- 尝试 Syndic8 上多种搜索新闻提要的方式。
- 加拿大喜欢 RSS!访问 Government of Canada Web site,这是公众使用 RSS 的一个好例子。
- 在 Yahoo 上查看各种不同的新闻提要。
关于作者 James Lewin 从 1995 年就开始使用 Internet。他是 The Lewin Group 的总裁和所有者,撰写过大量关于电子商务和 Web 的文章。他的专栏 Ecommerce in Action 由 ITWorld 出版。他的兴趣包括电子音乐、模拟电路和科幻小说。可以通过 jim@lewingroup.com 与他联系。 |