(翻译)RSS 简介
2008-01-14 – 9:17 pmRSS 简介
面向内容发布者和站长
本文介绍了RSS的功能和优势,并且对RSS技术进行了一个简单的说明。同时本文也涉及了Atom,一个和RSS相似的技术。本文假设读者已经具有一定的XML和其他Web相关技术知识,对于更多的信息请参考“关于RSS的更多信息一节”
RSS 简介
我们每天从Web上访问各种信息,新闻,搜索结果,工作列表等等,很大一部分内容都是以列表形式存在的,即使有些信息没有在HTML的<li>标志内。
大多数人需要定期浏览这些以列表形式存在的信息,但是随着信息量的增加,这变得越来越困难。对于每一个信息来源,需要访问每个页面,记住每个页面的格式,并且记着上次访问的时候哪些信息已经存在。
RSS是一种基于XML的技术,可以提供一个链接的列表,和其他的信息一起(例如Metadata)来帮助访问者决定哪些链接是他们需要的。
这项技术可以帮助用户的计算机来操作并且理解信息,所以用户可以定制和跟踪他感兴趣的信息。这项技术的目的是帮助用户的计算机(上的软件)来理解信息而不是让用户(人工)来读取信息的。这一点和HTML一样的。HTML的目的是让浏览器来显示网页的信息而不是让用户直接来阅读HTML文件的。
为了试用这项技术,网站需要生成种子(Feed)或者频道(Channel),就是服务器上的一个文件。用户端有一个称为RSS阅读器(aggregator)的软件,可以以用户指定的方式定期访问网站的种子文件,将来自不同网站的信息显示在一个统一的界面中。
对于其他类型的基于列表的信息也可以试用种子,例如同类的文章(多用于Blog)。但是本文主要讨论关于链接的RSS技术。
什么是种子?
一个种子文件包括一个Item的列表,每一个Item包含一个链接和用于说明这个链接的其他一些信息。
最基础的信息包含标题(Title)和描述(Description),当一个Item指向一篇新闻的时候,这些信息可以是新闻的标题和新闻的第一段内容。例如:
<item>
<title>RSS 简介</title>
<link> http://www.sitemasterkit.com/archives/50</link>
<description>本文介绍了RSS的功能和优势,并且对RSS技术进行了一个简单的说明。同时本文也涉及了Atom,一个和RSS相似的技术。</description>
</item>
而且,一个种子文件可以有自己的说明,例如“站长工具箱的文章” ,还可以有其他的信息,例如发布者的信息和版权说明等等。
对于种子文件的更详细信息,请参考“RSS 版本和模块”。
如何使用种子文件?
通常我们使用RSS阅读器来访问种子文件。一个基于Web的RSS阅读器(一般称作入口-Portals)使RSS的内容显示在一个网页上,my Yahoo 是一个著名的例子。RSS阅读器也可能被集成到Email客户端,用户的桌面软件,或者是一个独立的软件。
RSS阅读器可以提供很多的功能,例如将多个来源的种子文件在同一个界面显示,隐藏一些已经阅读过的文章等等。
种子文件的另一个用途是可以让搜索引擎更好的访问网站,因为RSS文件是机器可读的,所以搜索引擎可以通过RSS种子文件更好地对网站进行索引。另外我们也可以允许其他用户重发布你的种子文件在他们的网站上,让他们可以显示你网站上的内容。
为什么要使用种子文件?
试用种子文件可以让你的用户以他们熟悉的方式来浏览你网站提供的信息,这可以给他们带来方便。
虽然第一眼看上去可能感觉不好,但是试用种子文件可以提高你的网站的可见度。如果你可以让你的用户更方便地访问你的网站,他们会更乐于访问你的网站,而且你可以让他们在你的网站更新的时候得到自动的通知。
例如,你的公司每一个到两个月会发布一些新产品或新功能。没有种子文件,你的用户需要自己定期来访问你的网站来看看有没有更新-如果他们有时间并且可以想起来的话。但是如果你的网站提供种子文件,他们可以把你的种子文件加到他们的RSS阅读器,这样他们可以自动看到你的网站有了新的内容。
对于新闻也是一样,因为这里有太多的新闻网站,大多数你的访问者不会每天来你的网站。但是如果你提供了种子文件,你的网站就会持续地保持在访问者面前存在,这将大大增加他们访问你的网站的机会。
但是种子文件会带走我的内容吗?
不!你始终保有你的内容的版权(如果你希望那样的话)
你可以控制种子文件中包含的内容,可以是一篇完整的文章或者只是一个摘要。你的内容始终在你的控制之下。如果你希望的话,你也可以通过SSL加密来用用户名和密码来保护你的RSS文件。
在许多方面,种子文件就像新闻邮件里面提供的新闻摘要一样。比较大的区别就是新闻邮件需要用户提供一个邮件地址,这样会带来一些个人隐私的顾虑。另外一个区别是种子文件可以让用户以他们习惯的方式来访问你的内容。
为你的种子文件选择内容
在你的网站任何用户可能感兴趣的基于列表的内容都适合 放到种子文件中。这可以是新闻标题,新闻稿,工作列表,会议日程等等。
例如:
- 新闻和公告 – 大标题, 通知和公告。
- 文章列表 – 增加和改变的页面的列表。
- 书签和外部链接 – 试用种子文件是共享你的网站上的链接的一个常用方法。
- 日历 – 列出计划中的事件,期限和假期等等。
- 邮件列表 – 来实现一个基于Web的邮件列表。
- 搜索结果 – 可以用来跟踪搜索的新结果或改变。
- 数据 – 工作列表,软件版本等等。
对于你的网站建立一个主种子文件是一个好的开始,但是不要只做这些。一般来说,你的网站涉及的每一个主题都需要有一个自己的种子文件,这样用户可以更好地选择他感兴趣的内容。
例如,如果你的新闻网站有国际新闻,国内新闻,本地新闻,商业,体育等等,你需要为每一种内容建立一个种子文件。
如果你的网站提供个性化的数据定制,例如访问者可以通过选择类别来决定在他访问的时候看到什么样的内容,为这样的内容提供一个种子文件,这样访问者看到的内容可以和他定制的内容相吻合。
variety of feeds that Netflix provides 是一个很好的例子。不仅仅提供最新的内容,而且可以个性化地推荐内容,甚至提供一个根据你的查询来定期更新的电影列表。
苹果的 iTunes Music Store RSS feed generator 也是一个很好的例子。你可以根据你的喜好来定制内容。
最后,请记住种子文件在Intranet上和在Internet上一样有用。可以试用种子文件在公司内部很方便地共享信息。
发布你的种子文件
有很多种方法可以根据你的内容生成种子文件。一般来说,如果你使用CMS(Content Management System),多数情况下它已经包含了生成种子文件的功能。
如果你的CMS系统不支持生成种子文件,这里有一些其他的方法:
- 自动抓取 — 这是从现有内容生成种子文件的最简单的方法。抓取工具可以浏览你的网页从中提取合适的信息来生成种子文件。其中一些工具使用了正则表达式或XPath表达式,而另外一些需要你在你的网页中使用一些简单的标志 (通常是<div>或<span>)来提供帮助去决定提取哪些内容。
- 种子集成 — 如果你的网站是动态生成的(Perl, Python 或 PHP等等), 它可能带有RSS生成库,这样你只需要在生成过程中集成种子生成就可以。
- 从种子文件开始 — 这是从另一个方向开始工作,你可以先制作种子文件,决定其中的列表内容,再生成你的网页。这可以确保你总有正确的种子文件。想XSLT这样的工具可以简化这个过程,特别是从空白开始的时候。
- 第三方抓取 — 如果前面这些都不合适,网络上也有一些人可以(收费或免费)为你提供抓取服务。但是需要知道的是,这种服务有时候并不是那么可靠。因为第三方总是不象你自己那么了解你的网站的内容的,他们抓取的信息有时候不那么准确。而且这种服务也增加了风险,因为它们可能由于网络,服务器或业务的原因变得不可用。
可以参考 “种子文件工具”和“更多信息”。
让别人知道你的种子
发布你的种子之后重要的下一步就是让人知道它。网上有成千上万的种子文件,但是很多很少被人使用。
应该用明确的标志来告诉访问者网站有种子文件。例如:
<a type=”application/rss+xml” href=”feed.rss”>RSS feed for this page</a>
这里 ‘feed.rss’是种子文件的URL链接。‘type’ 属性告诉浏览器这是一个RSS种子文件链接。
另外,一些软件可以在网页的 <head> 部分查找种子。我们可以增加下面的说明:
<head>
<title>My Page</title>
<link rel=”alternate” type=”application/rss+xml”
href=”feed.rss” title=”RSS feed for My Page”>
</head>
这些链接应该在你的网页中有明确的显示,这样可以让用户比较容易地发现你的RSS种子文件。
注意Atom种子文件应该用“application/atom+xml”而不是“application/rss+xml”来说明。
最后,有很多方法在网络上注册和发布你的种子文件。Yahoo目录服务是一个好的选择。参见:更多信息。
版本和模块
现在有很多种不同的RSS文件格式版本,最常用的是RSS1.0和RSS2.0。每个版本都有优缺点。RSS2.0以它的简单易用出名,而RSS1.0则以可扩展性和可以提供良好的说明见长。它们都是基于XML而且具有相同的基础结构。
还有一个选择就是Atom,这是IETF (an Internet standards body)提出的一个标准。虽然名字不同,但是和RSS的功能是一样的,而且很多网站把它们都当作RSS来标志。
下面的部分对每一种格式做了简单的介绍,可以参考它们各自的规范来了解更详细的信息。
RSS 2.0
RSS 2.0是UserLand的Dave Winer提出的,这里RSS的含义是 “Really Simple Syndication,”,这个版本关注的是简单易用。
RSS的这个分支源自RSS 0.91,是由documented at Netscape 最先提出的,由Userland 进行了优化和推广.
这个分支的最后的稳定版本是2.0.1。其中包含了一般的信息如link, title, description; image用来显示种子的缩略图; webMaster和managingEditor用来标识谁生成的这个种子文件; lastBuildDate显示这个种子文件最后的修改时间。
Item有一些常见的如Link,Titel和Description等信息,也有一些实验性质的属性,例如enclosure,可以用来自动下载附件。但是不要期望这类功能可以得到所有RSS阅读器的支持。最后,items还有guid属性用来唯一标识每个Item。这可以用来支持RSS阅读器的一些高级功能。
这里是一个RSS2.0种子的例子:
<?xml version=”1.0″?>
<rss version=”2.0″>
<channel>
<title> 站长工具箱</title>
<link> http://www.sitemasterkit.com </link>
<description> 一个站长个人收藏相关文章的网站,也希望能对其他人有所帮助。</description>
<item>
<title> RSS 简介</title>
<link> http://www.sitemasterkit.com/archives/50</link>
<description>本文介绍了RSS的功能和优势,并且对RSS技术进行了一个简单的说明。同时本文也涉及了Atom,一个和RSS相似的技术。</description>
</item>
<item>
<title>Joomla 1.0.X 快速入门指南</title>
<link> http://www.sitemasterkit.com/archives/15 </link>
</item>
</channel>
</rss>
在 RSS 2.0 roadmap 开发路线图上, Winer宣布这个分支已经冻结不会再增加新的功能,只会补充一些对于标准的澄清。
然而,在分离的模块(Module)中对于格式进行扩展是允许的,可以试用XML Namespaces 来避免名字的冲突。例如,如果你有一个ISBN模块用来跟踪图书的信息,它可能是下面的样子:
<item xmlns:book=”http://namespace.example.com/book/1.0″
rdf:about=”http://www.amazon.com/exec/obidos/tg/detail/-/0553575376″>
<title>Excession</link>
<link>http://www.amazon.com/exec/obidos/tg/detail/-/0553575376</link>
<book:isbn>0553575376</book:isbn>
</item>
通常你应该检查一下现有的RSS模块是否可以满足你的需求,尽可能避免创建新的模块,除非你可以确认没有模块可以使用。
RSS 1.0
RSS 1.0 中RSS的含义是 “RDF Site Summary”。它基于RDF标准。所有可以处理RDF的软件都可以处理RSS1.0。这使得基于RSS1.0的种子文件可以很容易地被集成。
和RSS 2.0一样,RSS 1.0 也使用XML Namespaces来扩展。
RSS 1.0 种子文件看起来和RSS2.0的很相似,主要的不同是:
- 整个种子文件被<rdf:RDF> … </rdf:RDF> 标志所包含。
- 每个 <item> 通常有rdf:about属性和Link属性搭配,但是不是全部都有。
- 有一个<items>元素包含了种子文件中全部Item的列表信息,这样RDF处理程序可以跟踪Item之间的联系。
- 一些Item使用rdf:resource attribute来包含链接信息而不是试用独立的元素。
RSS 1.0 由一群志愿者开发和维护,他们的网站在more information about RSS 1.0 and RSS Modules。
下面是一个RSS 1.0的例子:
Dublin Core 模块
最著名的RSS 1.0 Module 的例子在Dublin Core Module。Dublin Core 是一组由管理员和信息专家开发的元数据,用来作为描述文档的通用元数据的标准。Dublin Core 模块使用这些元数据来附加信息到种子文件和每一个Item。
这个模块包含有用的元素象:dc:date, 用来说明项目的日期;dc:subject 用来说明种子文件中的一类项目;dc:rights用来说明项目或种子文件的版权信息。
这是一个使用Dublin Core 模块的最简化的 RSS 1.0 种子文件的例子:
<?xml version=”1.0″?>
<rdf:RDF
xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”
xmlns=”http://purl.org/rss/1.0/”
xmlns:dc=”http://purl.org/dc/elements/1.1/”
>
<channel rdf:about=”http://example.com/news.rss”>
<title>Example Channel</title>
<link>http://example.com/</link>
<description>My example channel</description>
<items>
<rdf:Seq>
<rdf:li resource=”http://example.com/2002/09/01/”/>
<rdf:li resource=”http://example.com/2002/09/02/”/>
</rdf:Seq>
</items>
</channel>
<item rdf:about=”http://example.com/2002/09/01/”>
<title>News for September the First</title>
<link>http://example.com/2002/09/01/</link>
<description>other things happened today</description>
<dc:date>2002-09-01</dc:date>
</item>
<item rdf:about=”http://example.com/2002/09/02/”>
<title>News for September the Second</title>
<link>http://example.com/2002/09/02/</link>
<dc:date>2002-09-02</dc:date>
</item>
</rdf:RDF>
就像你看到的,RSS 1.0比2.0复杂一些,这主要是因为它需要支持更多的标志以和RDF处理程序兼容。
Atom
RSS 1.0和2.0都不是正式的标准。它们不是由标准组织或业界联盟发布的,只是一小组对此感兴趣的人的工作成果。
有些人对此感到不太放心,因为控制这个标准的一小组人可能因为某种原因改变想法而影响大家。标准组织可以提供更稳定的版本,并且有众所周知的可控制的流程来引入改变。为了达到这个目的,一个IETF工作组建立了一个类似的标准, Atom。
Atom可以提供RSS类似的功能,也是一个基于XML的标准。
下面是一个例子:
<?xml version=”1.0″ encoding=”utf-8″?>
<feed xmlns=”http://www.w3.org/2005/Atom”>
<title>站长工具箱</title>
<link href=” http://www.sitemasterkit.com/”/>
<updated>2007-12-13T18:30:02Z</updated>
<author>
<name>站长工具箱</name>
</author>
<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
<entry>
<title> RSS 简介</title>
<link href=” http://www.sitemasterkit.com/archives/50“/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<summary>本文介绍了RSS的功能和优势,并且对RSS技术进行了一个简单的说明。同时本文也涉及了Atom,一个和RSS相似的技术。</summary>
</entry>
</feed>
你可以看到,Atom有种子元素,包含了种子文件基本的元数据和每一个Entry(和RSS中的项目Item类似), entry可以包含相似的元数据,例如title, link, id (类似与RSS 1.0的rdf:about或RSS 2.0的guid),还有一个短的内容说明 (类似RSS的description).
实际上,因为Atom是一个比较新的标准,它的使用还不象RSS 1.0或RSS 2.0那么广泛。然后,它会得到比较快的发展,因为很多业界比较大的厂商对于制定这个标准化作出了很大的努力,所以他们都会尽可能地支持它。
我应该使用哪个标准?
现在大家会面临的一个共通的问题是有太多的标准,除了我们前面说过的,实际上还有一些其它的标准,例如RSS 0.9, 0.91, 0.92同时在网络上存在。
很难说是好还是坏,决定使用哪个标准不象你想的那么重要。因为现在大多数RSS阅读器可以同时支持上面全部的标准。造成的结果就是很多情况下,选择哪个标准完全是看你一时的喜好。RSS 1.0扩展性好,如果你希望将它与Semantic Web系统进行集成。RSS 2.0很简单,易用试用。Atom 现在是IETF标准,比较稳定而且有广泛的支持。
生成好的种子文件的技巧
RSS和Atom都很易用,但是和其他新的格式一样,你可能在开始使用的时候遇到一些问题。下面都是一些常用的技巧:
- 清楚的项目区分 — 确保RSS阅读器可以正确地区分文件中的每一个项目,通过rdf:about (RSS 1.0), guid (RSS 2.0)或id (Atom)。
- 意义清楚的元数据 — 尽可能使每一个元数据有清楚的含义。例如,如果你只有一个非常简单的<title>,你的用户可能没法通过这个<title>来了解你的链接的内容。但是如果你把整篇文章都放到<description>中, 它们会堆积在用户的视窗里面,用户可能再也不会对你的网站有兴趣。
- 不要使用 HTML — 虽然诱惑很大,但是不要在种子文件中使用HTML。因为你不知道用户如何设置他们的RSS阅读器,所以你不知道它们将如何在用户那里被显示,这样它们可能带来不必要的麻烦。
- XML实体 — 记住XML没有预定义的元素。因此你不要试用任何 ?等你在HTML中很熟悉的标志。
- 字符编码 — 有些种子生成软件使用Windows缺省的字符集,但是有时候会造成错误。最保险的方法是一直使用UTF-8编码来生成你的种子文件,并且试用XML解释器来检查。
- 和阅读器的兼容性 — 使用通常定义的属性来传送信息。例如,有些常见的错误是使用<description>来记录版权信息,这样阅读器不会正确地显示它们。
- 和机器的兼容 — 同样地,使用常用的HTTP状态来说明你的种子文件的情况,例如301- 位置改变, 404-文件不存在。
- 易用Cache — 一个成功的种子文件会经常被访问(很多用户订阅这个种子)。这样如果种子文件被WebServer所Cache,那样可以减少很大的负载。参考 面向站长和网站管理员的Web缓存加速指南.
- 有效性 — 使用Feed Validator 来检查你的种子文件。而且要经常检查确保你的文件在增加新的内容以后一直正确。
种子工具
这里有一个可能对你有帮助的工具列表。
- xpath2rss — 一个利用XPath表达式来抓取网站信息的工具。
- Site Summaries in XHTML — 在线服务,利用你的HTML中的提示信息来生成种子。
- myRSS — 一个第三方的在线抓取工具。
- RSS.py — 一个生成和处理RSS种子的Python库。
- ROME — 生成和处理RSS和Atom种子的Java库,也可以进行格式转换。
- XML::RSS —一个生成和处理RSS种子的Perl库
- Online Validator – 检查你的RSS 1.0, 2.0和Atom种子的正确性。
更多信息
- Syndicated content — 一个关于RSS种子的例子列表。
- Syndic8 — 一个关于种子文件的社区。
- RSS Workshop — 一个著名的RSS介绍的网站。
- RSS Devcenter — O’reilly的关于RSS的网络门户。
关于本文档
本文版权属于Mark Nottingham <mnot@pobox.com>,本作品遵循创作共用版权。
如果你镜像本文,请通过以上邮件告知,这样你可以在更新时被通知;
所有的商标属于其所有人。
虽然作者确信内容在发布时的正确性,但不保证其应用或引申应用的正确性,如有误传,错误或其他需要澄清的问题请尽快告知作者;
本文最新版本(英文)可以从http://www.mnot.net/rss/tutorial/ 获得;
翻译版本包括:巴西(葡萄牙)语
Popularity: 18% [?]