November 3, 2007
鼓勵此網誌:0
在看到PTT部落格板有人提出的一些疑問後,基於自己曾有過研究,本文是給那些對RSS等網站聯合化技術沒有或僅有少數概念的網友,作為原理、介紹與發展方面的一個入門。

什麼是網站聯合化?
網站聯合化(Web syndication)或內容聯合化(content syndication)是一種新型態的網站內容傳播方式。它的基本概念是發佈(publish)和訂閱(subscribe)──使用者無須主動造訪網站,就可以得知各網站的更新內容為何,以及內容在哪裡。
那麼,這跟email的訂閱有什麼不同?
網站聯合化的方式是透過「Web feed」,讓所謂的閱讀器(Reader)讀取資料。一些人以為Web feed是像電視和收音機一樣把資料送過來;但事實上,Web feed只是一個類似網頁的檔案,從頭到尾都放在來源網站上,但會定期把網站的更新內容寫進去。等使用者打開閱讀器時,閱讀器便會讀取feed的內容,再判斷有哪些新的東西存在。
許多關於聯合化技術的介紹會說這是一種推送技術(push technology);也就是網站主動把資料傳給訂閱者,而不是由使用者去尋找資料。不過,網站實際上雖然發佈的文章,卻並不把資料丟給他們,而是讓閱讀器去讀取Web feed。訂閱者所要做的就是記住feed網址就行了。

網站內容發佈,然後輸出XML檔案形式的摘要;訂閱者的閱讀器,也就是資料的整合點再取得這些摘要並顯示給訂閱者看
網站聯合化的好處
透過Web feed訂閱網站的使用者,不需如email般提供自己的位址,免除垃圾與廣告信件的困擾;對內容發佈者而言,feed既然會自動產生,亦無須多花時間把內容主動丟給訂閱者。閱讀器並能按來源網站以一目瞭然的方式列出內容,不想看的大可跳過。若不想再訂閱,只須從閱讀器刪除feed的網址即可。
多方便啊!所有的部落格、線上新聞瞬間一把抓,花更少的時間就能輕易追蹤各站台的動態,減少遺漏任何訊息的機會。
聯合化的更新通知不是自動的
是半自動的。等你登入、打開閱讀器或按下更新(refresh),閱讀器才會抓取可能存在的新內容,所以不能保證資料發佈對你有及時性,除非你隨時都開著並檢查閱讀器的動態。
這也會造成一個潛在的問題:使用者若太久不用閱讀器,就會錯過較早發佈的文章,因為feed的更新範圍有限。見後進一步說明。
Web feed如何讓閱讀器得知網站的內容
目前主要的聯合化規格,包括RSS 2.0、Atom 1.0等,都使用了XML(Extensible Markup Language,延伸標記語言)技術。簡單的說,XML是一種很像HTML的標記語言,用標籤(tag)作為文字資料的解釋性資料。
本質為文字檔案的網頁,之所以能顯示出不同的格式與效果,正是因為瀏覽器解讀了網頁中的HTML標籤所致;XML基本上也是如此,只不過它並不用來顯示網頁,而可用於各種不同的文件,提供遵循特定規格的程式進行解讀、提高資料交換的便利性與效率。
舉例來說,下面這是一本書的標題:
2001: Space Odyssey
可是接收的程式不能直接曉得這幾個字代表著什麼。但是若是這樣:
<booktitle>2001: Space Odyssey</booktitle>
只要閱讀器的程式事先曉得「booktitle」標籤的意義,它便能知道夾在這標籤內的文字指的是一本書的標題。進一步地,標籤可以用更複雜的巢狀形式組合:
<book>
<title>2001: Space Odyssey</title>
<arthur>Arthur C. Clarke</arthur>
<publishyear>1968</publishyear>
<type>science fiction</type>
</book>
在「book」的標籤裡面,包含了一本書的標題、作者、出版年與類型的子標籤。
RSS 2.0與Atom 1.0都使用XML標籤來指示網站內容的各項資料,方法相當類似,只不過在標籤的定義上有所差異。我們在後面會以最普遍的RSS 2.0為例解說。
網站聯合化技術與規格簡史
聯合化技術的前身源自1996年,Ramanathan Guha在蘋果電腦公司發展了後設內容架構(Meta Content Framework,MCF)。1997年Guha轉到網景(Netscape)任職後,他將之發展為資源描述架構(Resource Description Framework,RDF);而網景的Dan Libby便以RDF為基礎,於1999年推出了第一代使用XML的RSS──RDF Site Summary,版本編號RSS 0.9。
UserLand公司的Dave Winer曾發展了類似頻道定義格式(Channel Definition Format,CDF)的scriptingNews發佈技術;CDF由微軟在97年發展,但從未推廣起來。隨RSS 0.9的推出,Dave Winer向網景提出了多次建議;Dan Libby於是參考這些建議與scriptingNews的部分特色,推出更簡潔的RSS 0.91,縮寫也改名為豐富站台摘要(Rich Site Summary)。
網景逐漸對網站聯合化失去了興趣,不過RSS的發展大戰才正要開打。2000年,一個名為RSS-DEV的小組制定了RSS 1.0;問題是,這個技術延續的不是RSS 0.91,而是較早的RSS 0.9。認為對方破壞版本演進的Dave Winer不甘示弱,繼續以RSS 0.91改良出RSS 0.92──以及今日廣為使用的,2002年的RSS 2.0。
2003年,有鑑於RSS版本的混亂,以及UserLand公司對RSS 2.0的著作權控制,一群網路使用者合作發展了開放性的Atom 0.3規格;這項規格於05年改良為Atom 1.0,並被納入為網際網路工程工作特別小組(Internet Engineering Task Force,IETF)的標準之一。同樣在2005年,RSS 1.0也升級成RSS 1.1,延續其有別於RSS 2.0的路線。
Google自己發展了一種稱為GData的東西,合併了RSS 2.0以及Atom 1.0的特色,用於自己提供之服務的對外應用。
RSS 2.0 vs. Atom 1.0
其實這兩種規格大同小異,只不過Atom 1.0在部分功能上比RSS 2.0更豐富、延伸性更強。儘管如此,RSS 2.0的使用仍更普遍,一部分或許和出現的時間較早有關;它也足以滿足一般部落格、新聞的基本需求。
有些人以為Atom是RSS的一種;這點是錯誤的。
RSS 2.0規格簡介
你可以從你自己的部落格打開RSS 2.0的文件,或者觀看官方的範例。下面我以敝人的部落格為例說明。
第一行告訴瀏覽器這是個XML文件,編碼為utf-8:(所以你會看到瀏覽器以顏色顯示標籤)
<?xml version="1.0" encoding="utf-8" ?>
第二行指出這個XML文件使用RSS 2.0的規格:(後面通常有一串網址,那是給設計者參考規格之來源文件用的)
<rss version="2.0">
接下來的「channel」標籤指出來源站台的基本資料:
<channel>
<title>卡蘭坦斯蓋普恩基地</title>
<link>http://blog.yam.com/krantas</link>
<description>Blog of Alan Krantas - SW‧SF‧Reading‧Travel‧Life</description>
<language>zh-tw</language>
<generator>blog.yam.com</generator>
<copyright>All Rights Reserved</copyright>
...
</channel>
如果你了解之前的例子,應該可以看出這部分指出了站台標題、網址、描述(介紹或副標題)、文件產生者等資訊。
緊接著基本資訊、也包含在「channel」標籤內的則是「item」項目:
<item>
<title>丹‧西蒙斯:海柏利昂(與試閱)</title>
<description>
丹‧西蒙斯(Dan Simmons)的1989年重量級作品《海柏利昂》(Hyperion),中文版即將於11/1問世。<br />
<br />
<img src="http://pics5.blog.yam.com/4/userfile/k/krantas/blog/1472190211b827.jpg" alt="" style="border-width: 0; float: left; margin: 0.7em 1.4em 0.7em 0;" /><br />
</description>
<link>http://blog.yam.com/krantas/article/12289931</link>
<category>中譯科奇幻出版報導</category>
<pubDate>Fri, 26 Oct 2007 15:06:34 +0800</pubDate>
</item>
以部落格來說,一個「項目」就是一篇文章、一項資料內容,有標題、描述、分類、網址、發佈日期等等。閱讀器抓的就是這些東西,程式遵循RSS 2.0文件的格式解讀對應的標籤,然後排列顯示給使用者看。
有興趣的人可從官方的RSS 2.0定義文件找到進一步的說明。除了既有的標籤種類不得更改外,RSS 2.0允許設計者加上額外的標籤以提供額外資訊。
Web feed的更新與輸出方式
Web feed文件的產生方式大致有三種,一種是來源網站定期地讀取資料庫後產生一份新的文件;二是這個文件本身就是個程式(如ASP、JSP等),在使用者讀取時才動態地抓取最新的文章。第三種是feed並不由來源網站提供,而是如Feedburner等第三方以其它方式抓取(「燒」)而產生的,讓本身沒提供feed的網站(如Blogger)也能提供訂閱。
不過,雖然之前我提到Web feed能顯示網站更新,feed文件顯示的其實只是「本文件更新時該站最新的N篇文章」。閱讀器之所以能指出哪些文章是新的,或者你尚未瀏覽過,是因為閱讀器幫你記錄了站台的閱讀歷程;天空部落內建的陽春型RSS閱讀器,或是嵌在部落格邊欄的聯播列表等,就能原封不動地顯示feed的目前所有內容。
我可以選擇Web feed輸出符合想要條件的內容嗎?
不行,因為feed文件的產生,以及會抓哪些文章是事先設計好的。一個Web feed通常會包含十到三十篇最新的內容,而這和在某些欄位會丟什麼樣的資料,都由文件的產生網站或程式設計者決定;例如,文章的描述欄可能是整篇文章的內容,也可能只是一部份的摘要。
只顯示摘要是比較合理的,因為這能減少閱讀器顯示的資訊,也能避免網站失去該有的點閱量。不過目前為止,RSS等技術本身仍缺乏針對個別訂閱者需求調整的能力,多半還是得倚賴閱讀器。
Web feed與email的再次比較
由於Web feed包含的篇幅數量有限,過舊的文章會從來源站台的feed文件裡消失;訂閱者若太久不開閱讀器,就會因而錯過了內容。相反的,email就算沒有收取,也會儲存在使用者於郵件伺服器的空間內,直到空間被塞滿為止。
一般來說,網路聯合化適用於尋常性、經常性、非對象性的網站更新:email則適合作為緊急性、高時效性,以及有對象性的通知。
如何知道一個站台有沒有提供RSS或Atom?
在站台中尋找例如
、
、
或
等類似的連結圖案。一些瀏覽器如Internet Explorer 7與Firefox也擁有內建偵測Web feed是否存在的功能。某些閱讀器也會提供搜尋功能,這對尋找未顯示出來或不屬於來源站台的第三方feed(如Feedburner)尤其好用。
如何訂閱RSS或Atom
網路上的教學文章很多,在此便不多介紹;基本上只要找個閱讀器,例如Google Reader,把要看的站台的feed網址丟進去就行了。現在許多閱讀器都支援多種聯合化輸出規格,而且可以對feed進行分類、標記等,還有分析、追蹤等額外功能。
訂閱前請先注意feed的內容:現在除了部落格、新聞等本文之外,連迴響、相簿、播客(podcast)等都可能有獨立的feed。網路書櫃aNobii甚至可提供全站推薦書籍資訊的feed。
天空部落一陣子前開啟的Bloglive!也是閱讀器的一種。差別只在於,它提供了圖形化介面、交友和訊息流通的功能。
閱讀器間的訂閱清單轉移
大多閱讀器可以用OPML檔案格式輸出/輸入訂閱清單,很輕鬆地便能轉移,不必再花時間重複設定訂閱站台。
為什麼有時候閱讀器會抓到重複的文章?
可能是原作者對文章事後作了修改,或者Web feed在重新產生時修改了某些資訊,以致閱讀器認為那是不同的文章。這種情況是沒辦法處理的,除非你能說服網站管理者修改feed文件的產生程式。
閱讀器可以備份他人的文章嗎?
如Google Reader等的閱讀器會紀錄你瀏覽過的所有摘要,但並不會保存原始的來源文章。
RSS可以用來備份自己的網站?可以但不實際
有些部落格、像天空可以用RSS的格式輸出站台內容,並儲存XML文件在使用者的電腦上。事實上,XML的用途本來就使用在文件與資料上,能當作某種資料庫使用,也已有許多用於商業自動化資料交換的例子,如電子企業延伸標記語言(Electronic Business using eXtensible Markup Language,ebXML)與延伸商務報告語言(Extensible Business Reporting Language,XBRL)等。
從天空的情況來看,RSS備份只不過是讓你把目前的Web feed產出文件存起來而已,本質上沒什麼備份的效果;尤其,這份文件涵蓋的文章數有限,也只包含了文章的摘要。這樣的話,用別種形式的XML格式來備份(若網站能夠支援),大概還比較有用吧。
暫時先寫到這裡,有想到別的再補充吧。


















