關于RSS 2.0的規范實例
RSS的歷史
那么RSS究竟代表什么呢?比較普遍的有兩種說法,一種是“Rich Site Summary”或“RDF Site Summary”,另一種是“Really Simple Syndication”,之所以有這些分歧,需要從RSS發展的歷史說起。
最初的0.90版本RSS是由Netscape公司設計的,目的是用來建立一個整合了各主要新聞站點內容的門戶,但是0.90版本的RSS規范過于復雜,而一個簡化的RSS 0.91版本也隨著Netscape公司對該項目的放棄而于2000年暫停。
不久,一家專門從事博客寫作軟件開發的公司UserLand接手了RSS 0.91版本的發展,并把它作為其博客寫作軟件的基礎功能之一繼續開發,逐步推出了0.92、0.93和0.94版本。隨著網絡博客的流行,RSS作為一種基本的功能也被越來越多的網站和博客軟件支持。
在UserLand公司接手并不斷開發RSS的同時,很多的專業人士認識到需要通過一個第三方、非商業的組織,把RSS發展成為一個通用的規范,并進一步標準化。于是2001年一個聯合小組在0.90版本RSS的開發原則下,以W3C新一代的語義網技術RDF(Resource Description Framework)為基礎,對RSS進行了重新定義,發布RSS1.0,并將RSS定義為“RDF Site Summary”。但是這項工作沒有與UserLand公司進行有效的溝通,UserLand公司也不承認RSS 1.0的有效性,并堅持按照自己的設想進一步開發出RSS的后續版本,到2002年9月發布了最新版本RSS 2.0,UserLand公司將RSS定義為“Really Simple Syndication”。
目前RSS已經分化為RSS 0.9x/2.0和RSS 1.0兩個陣營,由于分歧的存在和RSS 0.9x/2.0的廣泛應用現狀,RSS 1.0還沒有成為標準化組織的真正標準。
什么是RSS?
RSS是一種網頁內容聯合格式(web content sydication format)。
它的名字是Really Simple Syndication的縮寫。
RSS是XML的一種。所有的RSS文檔都遵循XML 1.0規范,該規范發布在W3C網站上。
在一個RSS文檔的開頭是一個<rss>節點和一個規定的屬性version,該屬性規定了該文檔將以RSS的哪個版本表示。如果該文檔以這個規范來表示,那么它的version屬性就必須等于2.0。
在<rss>節點的下一級是一個獨立的<channel>節點,該節點包含關于channel的信息和內容。
關于本文檔
該文檔是在2002年秋天撰寫的,當時的RSS版本為2.0.1。
它包含從RSS 0.91規范(2000年)開始的所有的修改和添加,以及包含在RSS 0.92(2000年12月)和RSS 0.94(2002年8月)中的新的特性。
必需的頻道節點
下面有一份必須包含的頻道(channel)節點的列表,每一個都有一個簡單的描述、一個例子、應該出現的位置和更詳細描述的超鏈接。
元素 | 描述 | 范例 |
title | 頻道(channel)名稱。它可以告訴別人如何訪問你的服務。如果你有一個與你的RSS文件內容一致的HTML網站,你的title元素值應該與你的網站的標題相同。 | GoUpstate.com News Headings |
link | 響應該頻道的網站的URL | http://www.goupstate.com/ |
description | 關于該頻道的描述 | The latest news from GoUpstate.com, a Spartanburg Herald-Joural Web Site |
可選的頻道元素
下面是可選的頻道元素列表
節點 | 描述 | 范例 |
language | 使用的語言。這允許聚合器對所有的意大利語站點分組。 | en-us |
copyright | 版權聲明 | Copyright 2002, Spartanburg Herald-Journal |
managingEditor | 內容負責人的Email | geo@herald.com (George Matesky) |
webMaster | 技術人員的Email | betty@herald.com (Betty Guernsey) |
pubDate | 內容的發布時間 | Sat, 07 Sep 2002 00:00:01 GMT |
lastBuildDate | 最后更新時間 | Sat, 07 Sep 2002 09:42:31 GMT |
category | 指定該頻道所屬的一個或多個分類。遵循與item級category元素相同的規則。 | <category>Newspapers</category> |
generator | 生成該頻道的程序名稱 | MightyInHouse Content System v2.3 |
docs | 指向rss格式文檔的url地址? | http://blogs.law.harvard.edu/tech/rss |
cloud | 允許所有進程注冊一個cloud用于獲得頻道的更新通知,并為rss種子實現一個輕量級的發布訂閱協議。 | <cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/> |
ttl | ttl是Time to live的縮寫。它指示cache的有效保存時間。 | <ttl>60</ttl> |
image | 與頻道一起顯示的圖片地址 | |
rating | 該頻道的統計圖片地址 | |
textInput | 指定一個textbox與該頻道一起顯示 | |
skipHours | 告訴使用者哪些時段是可以忽略的 | |
skipDays | 告訴使用著哪些天是可以忽略的 |
<channel>子節點<image>
<image>是一個可選的<channel>子節點,該節點包含三個必需的子元素和三個可選的子元素。
<url>是GIF、JPEG或PNG圖像文件的URL地址,該圖像代表整個頻道
<title>用于描述上面的圖像,等同于HTML語言中的<img>的alt屬性
<link>是要連接的站點的url,當顯示頻道時,圖像的連接指向該站點。
<title>和<link>應該與頻道的<title>和<link>有相同的值
可選的節點包括<width>和<height>,它們是數字類型,指定圖像的寬度和高度,單位為像素
<description>就是link的TITLE屬性中文本,它將在調用網頁時顯示出來。
圖像寬度的最大值為144,默認值為88
圖像高度的最大值為400,默認值為31
<channel>子節點<cloud>
<cloud>是一個可選的<channel>子節點。
它指定一個可以支持rssCloud接口的web服務,rssCloud接口可以用HTTP-POST,XML-RPC或SOAP1.1實現。
它的目的是允許通知注冊為cloud的進程頻道被更新,從而實現一個輕量級的發布訂閱協議。

<channel>子節點<ttl>
<ttl>是一個可選的<channel>子節點。
ttl是time to live的縮寫。它表示頻道在被刷新前應該被緩存的時間。這使得rss源可以被一個支持文件共享的網絡所管理,例如Gnutella
例如:<ttl>60</ttl>
<channel>子節點<textInput>
<textInput>是<channel>的可選的子節點,<textInput>包含四個子節點。
<title>--提交按鈕的標簽
<description>--該文本輸入區的描述
<name>--文本輸入區的名稱
<link>--處理文本輸入的CGI腳本的URL
使用<textInput>的目的有些神秘(?)。你可以用它提供一個搜索引擎輸入框,或讓讀者提供反饋信息。許多聚合器忽略該節點。
<item>的節點
一個頻道可以包含許多項目(item)節點。一個項目可以代表一個故事——比如說一份報紙或雜志上的故事,如果是這樣的話,那么項目的描述則是故事的概要,項目的鏈接則指向整個故事的存放位置。項目的所有節點都是可選的,但是至少要包含至少一個標題(title)和描述(description)。
節點 | 描述 | 范例 |
title | item的標題 | Venice Film Festival Tries to Quit Sinking |
link | item的URL | http://www.nytimes.com/2002/09/07/movies/07FEST.html |
description | item概要 | 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. |
author | 作者的email地址 | oprah@oxygen.net |
category | item可以包含在一個或多個分類中 | Simpsons Characters |
comments | 與item相關的評論的地址 | http://www.myblog.org/cgi-local/mt/mt-comments.cgi?entry_id=290 |
enclosure | 附加的媒體對象 | |
guid | 可以唯一確定item的字符串 | http://inessential.com/2002/09/01.php#a2 |
pubDate | item發布的時間 | Sun, 19 May 2002 15:21:36 GMT |
source | rss頻道來源 | Quotes of the Day |
<item>子節點<source>
<source>是<item>的可選節點。
它的值是item來自的rss頻道的名稱,從item的title衍生而來。它有一個必須包含的屬性url, 該屬性鏈接到XML序列化源。

<item>子節點<enclosure>
<enclosure>是<item>的可選節點。
它有三個必要的屬性。url屬性指示enclosure的位置,length指出它的字節大小,type屬性指出它的標準MIME類型
url必須為一個http url。

<item>子節點<category>
<category>是<item>的可選節點。
它有一個可選屬性或域,該屬性是一個用來定義分類法的字符串。
該節點的值是一個正斜杠分割的字符串,它用來在指定的分類法中識別一個分級位置(hierarchic location)。處理器可以為分類的識別建立會話。(Processors may establish conventions for the interpretation of categories)下面有兩個例子:


<item>子節點<pubDate>
<pubDate>是<item>的可選節點。
它的值是item發布的日期。如果它是一個沒有到達的日期,聚合器在日期到達之前可以選擇不顯示該item。

<item>子節點<guid>
<guid>是<item>的可選節點。
guid是globally unique identifier的縮寫。它是一個可以唯一識別item的字符串。當item發布之后,聚合器可以選擇使用該字符串判斷該item是否是新的。
<guid>http://some.server.com/weblogItem3207</guid>
guid沒有特定的語法規則,聚合器必須將他們看作一個字符串。生成具有唯一性的字符串guid取決于種子的源頭。
如果guid節點有isPermaLink屬性,并且值為真,讀取器就會認為它是item的permalink。permalink是一個可在web瀏覽器中打開的url鏈接,它指向<item>節點所描述的全部item。
<guid isPermaLink="true">http://inessential.com/2002/09/01.php#a2</guid>
isPermaLink是可選屬性,默認值為真。如果值為假,guid將不會被認為是一個url或指向任何對象的url。
<item>子節點<comment>
<comment>是<item>的可選節點。
如果出現,它指向該item評論的url
<comments>http://rateyourmusic.com/yaccs/commentsn/blogId=705245&itemId=271</comments>
<item>子節點<author>
<author>是<item>的可選節點。
它是item的作者的email。對于通過rss傳播的報紙和雜志,作者可能是寫該item所描述的文章的人。對于聚集型webblogs,作者可能不是責任編輯或站長。對于個人維護的webblog,忽略<author>節點是有意義的。
<author>lawyer@boyer.net (Lawyer Boyer)</author>