關於Blog和RSS 的全面介紹

關於 Blog 和 RSS 的全面介紹

關於 Blog 和 RSS 的全面介紹
原著:Aaron Skonnard
翻譯:NorthTibet
原文出處:MSDN Magazine Apr. 2004(The XML Files)
什麼是 Blog?

"Blog"是 Web Log 的簡稱(譯者注:也就是網誌(中國大陸也叫博客))。它是一種作者與讀者以日誌風格進行交互的中介。在軟件社區,人們以網誌形式來共享觀念與思想變得越來越流行。如:http://blogs.msdn.com/ 就是 MSDN 上的一個 blogging。


建立網誌最輕鬆的方法是什麼?

要想建立自己的網誌,最容易的方法是到類似 blogger.com 這樣的站點註冊一個新用戶,它提供一個創建自定義網誌的 Web 界面,並且可以立即使用所創建的網誌。類似 blogger.com 的站點有很多,它們都提供對網誌特性的支持。 如果你想更多地控制網誌的基礎結構或者想要在自己的服務器上建立網誌服務系統。你可在以下最流行的幾種網誌應用商業產品中選擇其一:Radio Userland、Manila 和 Movable Type。還有些易用的免費 .NET 網誌應用可以使用,最流行的有:.TEXT 和 dasBlog。只要把它們下載下來,然後按照安裝說明進行安裝與設置,分分鐘便可建立起一個可運行的網誌服務系統。
  從功能上講,這兩個基於 .NET 的網誌應用系統不相上下。其主要區別在於 .TEXT 需要數據庫,SQL Server 或者 MSDE,而dasBlog 將所有信息都存儲在 XML 文件中(它基於原來一些微軟公司開發人員創建的 BlogX 框架),另一個差別是 .TEXT 在單個安裝配置中可支持多個網誌(比如現在的 http://blogs.msdn.com/ 就是如此),而 dasBlog 要支持多個網誌,必須進行多次安裝。但 dasBlog 有一個很突出的特性,那就是“Mail to Weblog”,它允許你通過郵件來發布新信息。
  新的 MSDN 網誌服務站點和 PDC Bloggers 都是開始查找關於軟件開發主題的很好去處。只要瀏覽這些站點之一便可閱讀其經過聚合的預定內容。其預定的摘要會向你公開許多個人網誌,漸漸的你會自然而然地發現一些你比較喜歡閱讀的內容。這樣,你便可以直接預定你最喜歡的個人網誌摘要。
  對於專門討論 XML 和 Web 服務的網誌,請查看 MSDN Web Services Developer Center 上的清單,我個人要花很多時間上這些網誌站點。

什麼是 Feed(以下稱爲提要),如何預定它?

網誌以 RSS 文檔形式爲其內容提供一個提要,該 RSS 文檔可以通過衆所周知 URL 獲得。RSS 文檔是一個 XML 文件,它包含大量離散的新聞項,如某個網誌中的入口項(RSS 提要的例子參見 Figure 1)。由於 RSS 是 XML 格式文件,所以它很容易被其它程序所使用。
  RSS 聚合器是一個讀取 RSS 文檔並顯示新聞項的程序。大多數聚合器只要輸入 RSS 的 URL,使得預定提要成爲可能。
  RSS 使閱讀網誌便得容易。大多數經常閱讀網誌的開發人員都使用某種類型的聚合器來幫助他們有效地篩選提要內容。聚合器使得閱讀網誌的感覺就象是在閱讀電子郵件,因爲它們突出新聞項並將新聞項進行緩衝處理以便離線閱讀(參見 Figure 2)。
  還有一些在線 RSS 聚合器將 RSS 提要捆綁到某個單獨的網站。其優點是易於設置並且可以從任何計算機存取你的提要內容。當然,其缺點也是顯而易見的,那就是在閱讀時必須始終保持連接。
  RSS 是網誌成爲一種強大的新型信息交流形式之根本所在。在網誌出現之前,大多數開發人員爲了要查找到需要的內容,通常要花大量時間來篩選掉那些令人討厭的無關的信息。
  網誌通過讓讀者選擇所要閱讀的提要,將控制權交給讀者,從而有效地構建自己的個性化內容流。
  其它類型的站點也能利用 RSS 的優點來聚合內容。例如,多數主流的新聞站點包括 Wired、CNet、Yahoo 和 NPR News 都提供 RSS 提要。訪問 Blogdigger 和 Syndic8,你可以找到一些支持 RSS 的站點。
  微軟的 MSDN 提供 RSS 提要(RSS feeds)來聚合新添加到站點的技術內容。MSDN 的 Just Published提要是一種保持 MSDN 新文章和下載的主要方式。甚至 MSDN Magazine(MSDN 雜誌)都有其自己的 RSS 提要!可以預定:http://msdn.microsoft.com/msdnmag/rss/recent.xml 獲得每月的更新以便查看本期有何內容?目前有許多種 RSS 聚合器可供選擇,在 http://blogs.law.harvard.edu/tech/directory/5/aggregators 上可以找到一個相當完整的列表。其中一些是在線聚合器,而另外一些是桌面應用程序。有些是免費的,另外一些需要付費才能使用。

哪個 RSS 版本是最通用的?

這個問題的答案要看你問的是誰,RSS 的版本有好多個,0.90、0.91、0.92、0.93、0.94、1.0 和 2.0。要弄清楚這些版本之間的差別是巨大的挑戰之一。理解它們需要了解一些有關它們的歷史背景。Netscape 創建了 RSS 的最初版本 0.90,起初的名字是“RDF Site Summary”或者“Rich Site Summary”(規範中說前者是正式名稱)。Netscape 創建 RSS 0.90 用於其 Web 門戶,這個時候,其他人看到了 RSS 的使用潛力。Userland Software 是第一個開始將 RSS 用於其網誌商業產品者之一。
  版本 0.90 在很大程度上基於 W3C 的 Resource Description Framework (RDF)。許多人都認爲 RDF 過於複雜,因此都建議出一個免費的簡化版本 0.91。這個任務恰好就給了 Userland Software。Userland Software 便繼續發展 RSS 的簡化版本,隨後出臺的版本包括:0.92、0.93 和 0.94。爲了強調其所做的簡化工作,他們將 RSS 的全稱定爲“Really Simple Syndication”。
  正當 Userland Software 繼續專注於其簡化工作時,另外一組開發人員在復興最初的 RDF 版本(0.90),因爲 RSS 號稱自己更靈活。他們最終發佈了一個 RSS 1.0 的版本,其正式名稱還是“RDF Site Summary”。由於使用 RDF,這個版本完全不同於 Userland Software 所控制的版本。Userland Software 當然不太願意看到 RSS 1.0 似乎要取代其 0.94 版本的事實,於是出了一個新版本,並將版本號一下子跳到了 2.0。
  這就是今天的這種局面,形成了兩個主要的競爭版本:一個基於 RDF 1.0,而另一個則不是(2.0),但它們兩個都共用相同的名字。這是一種可怕的混亂,因爲版本號導致人們誤認爲 2.0 是 1.0 的改進版本,而實際上它們是兩個目標完全不同的規範。另一組開發人員已經下狠心着手解決這種混亂問題,通過定義新的摘要(syndication)規範來與 RSS 名字的隨意性決裂。這個解決方案稱爲 Atom(原子)項目。本文稍後將會詳細討論。
  使用哪個版本其實是無關痛癢的,大多數 RSS 聚合機制支持所有的 RSS 版本(有些甚至支持 Atom)。最終的決定取決於你是否想使用 RDF,可謂蘿蔔白菜,各有所愛,它完全要看某人所信奉的 Semantic Web 概念而定。

RSS 1.0 和 RSS 2.0 各是什麼樣子?

RSS 1.0 和 2.0 格式所包含的核心信息相同,但其結構不一樣。我提供了一個 RSS 1.0 文檔(參見 Figure 1)以及一個同等的 RSS 2.0(參見 Figure 2)用於對照。
你會注意到頂行右邊開始的根元素的差異,RSS 1.0 的根元素是 rdf:RDF,而 RSS 2.0 的根元素是 rss。rss 還包含一個強制版本屬性用以表示所用的RSS的準確格式(可能的值包括:0.91, 0.94 等)。另一個主要差別是 RSS 1.0 文檔有名字空間限定,RSS 2.0 的文檔就沒有。不管怎樣,包含在兩個文檔中的信息本質上是一樣的。
  兩個版本都包含 channel 元素,而 channel 元素又包含三個必須的元素:title、description 和 link,其代碼如下:

<channel>
 <title><!-- channel 的標題 --></title>
 <description><!-- 簡要描述 --></description>
 <link><!-- channel 的 URL --></link>
 <!-- 可選/可擴展元素 -->
</channel>      
  除了這些必須的元素外,RSS 1.0 還定義了三個附加元素:image、items 和 textinput,其中,image 和 textinput 是可選的。另一方面,RSS 2.0 提供了 16 個附加元素,其中也包括 image、items 和 textinput,此外還有 language、copyright、managingEditor、pubDate 和 category。RSS 1.0 允許通過定義在單獨的 XML 名字空間中的可擴展元素來創建這種類型的元數據。
  這兩種格式在結構上的主要區別必須要看其 item、image 和 textinput 節點的表示形式。RSS 1.0 中,channel 元素包含對 item、image 和 textinput 節點的引用,這些節點存在於 channel 節點本身之外。這樣在 channel 和 所引用的節點之間建立了一種 RDF 關聯。如 Figure 1 所示,channel 元素與一個 image 元素以及兩個 item 元素關聯。RSS 2.0 中,item 元素只是在 channel 元素中連續排放(如 Figure 2 所示)。item 元素包含實際的新聞項信息。item 的結構在兩個版本中是相同的。item 元素通常包含 title、link 和 description 元素,如下代碼所示:

<item>
 <title><!-- 項標題 --></title>
 <link><!-- 項 URL --></link>
 <description><!-- 簡要描述 --></description>
 <!-- 可選的/可擴展的元素 -->
</item>
  在 RSS 1.0 中,title 和 link 是必須的,description 是可選的。而在 RSS 2.0 中,title 或 description 必須提供其中的一個;其它均可選。這些只是定義在 RSS 1.0 中的 item 元素。RSS 2.0 提供幾個其它可選元素,其中有 author、category、comments、enclosure、guid、pubDate 和 source。RSS 1.0 獲取這樣的元數據是通過定義在單獨的 XML 名字空間中稱爲 RSS 模塊的可擴展元素來實現的。例如,在 Figure 1 中,item 的日期是用 Dublic Core 模塊的 <dc:date> 元素表示的。

有關不同格式的完整信息請參考 RSS 1.0 和 2.0 規範。


那麼,何爲 Atom?

前面我提到過,Atom 乃一項目的名字,主要是開發一個新的網誌摘要格式以解決目前 RSS 存在的問題(混亂的版本號,不是一個真正的開放標準,表示方法的不一致,定義貧乏等等)。Atom 希望提供一個清晰的版本以解決每個人的需要,其設計完全不依賴於供貨商,任何人都可以對之進行自由擴展,完整詳細說明。
  當今許多 Blog 引擎已經支持當前的摘要格式。Figure 3 是一個Atom 0.3 提要例子,它與前述 Figure 1 及 Figure 2 RSS 提要等同。注意 Atom 提要用名字空間限定的,但它不使用 RDF。這使得 Atom 和 RSS 1.0 及 RSS 2.0 在某些地方有相似之處。Atom 在未來是否能被接受,人們拭目以待。
  除了定義新的摘要格式之外,Atom 還希望定義一個標準的檔案文件格式和一個標準的網誌編輯 API(Atom API)。有關 Atom 詳細規範以及其它 Atom 資源請訪問 The Atom Project。

什麼是 blogroll?

blogroll 是網誌提要的集合,大多數 blogger(博客)在其個人網誌上都提供 blogroll。這就允許讀者連接到其他趣味和寫作風格相投的人的網誌上。Blogroll 方便了網絡上的溝通。通過使用Outline Processor Markup Language (OPML),人們可以用 XML 格式文件交換 blogroll。Figure 4 是 blogroll 的一個例子。
  大多數網誌引擎都自己管理 blogroll,每當讀者請求 blogroll 時都自己產生相應的 XML 格式。同樣,大多數聚合器都能導入 blogroll 並自動預定所包含的摘要。有關 OPML 更多的信息參見 http://opml.scripting.com/



能解釋 referrers、trackbacks 和 pingbacks 是什麼嗎?

大多數網誌軟件都能讓讀者添加網誌評論。但更常見的做法是讓讀者在其自己的網誌添加一個入口回鏈到原來的帖子。博客們(Bloggers)都樂於跟蹤連接發生的時間以便新讀者能理解整個會話內容。
  所謂 referrer 是一個外部站點,用戶單擊該站點上一個超鏈接便可以到達你的網站。許多網誌引擎當讀者導航到你的網誌的某個入口時都能自動保持跟蹤。大多數引擎都會在網誌入口底部顯示一個 referrers 清單,以便讀者能往回導航到 referrer 的站點,並清楚他們關於該入口要說些什麼,這基於一個假設,那就是如果他們鏈接到它,可能就此會寫些什麼。referrer 存在的問題是必須要有這個假設才成立——沒有足夠的信息說明是否引用的頁面事實上包含有關信息。實際上,垃圾信息的發佈者爲了營銷企圖已經利用了這個漏洞來重定向讀者。
  Trackback 和 pingback 同一個規範,被用來彌補上述問題的方案。使用 trackback 和 pingback,其他博客們能自動發送一個 ping 到你的網誌以明確表示他們已經寫了一個引用特定帖子的入口。
  這種類型的反鏈允許你的網誌以更明顯的方式顯示所有評論的清單。當今大多數網誌軟件支持所有這些技術。參見 TrackBack Technical Specification 和 Pingback 1.0。


如何爲我的站點產生 RSS 提要?

Figure 5 舉例說明了如何用 asp:Repeater 控件在 .aspx 頁面中生成 RSS 2.0 提要。該頁面假設你已經在後端代碼文件中將控件的 DataSource 屬性設置成對應的數據庫結果集。


我想聚合幾個 RSS 提要並將信息顯示在個人網站上,能解釋一下如何實現嗎?

因爲 RSS 提要是 XML 文件,作爲練習,你可以用自己最擅長的 XML API,比如,Microsoft .NET Framework 中的 System.Xml,Figure 6 中包含 ASP.NET Web 用戶控件代碼,它是我編寫用來聚合 blogroll 文件中(.opml)所列出的 RSS 提要的一段代碼。這段代碼假設 opml 元素包含 numberToDisplay 屬性,以表示你打算顯示的每個提要有多少項。

Figure 7 ASP.NET Web 用戶控件

你可以將控件拖到任何 .aspx 頁面中,它將顯示 blogroll 文件中列出的不同提要的項,Figure 7 顯示了 Utah .NET User Group 網站使用這個控件的效果畫面。


有沒有與網誌交互的 Web Services APIs?

許多網誌引擎都提供屬於自己的 Web service 接口,通過編程與網誌交互,但目前還沒有出現一種標準化的東西。
.Text 和 dasBlog 兩者都提供某些 .asmx 端點,可以通過 SOAP 來實現編輯功能,但其接口是不同的。Blogger.com 提供基於 XML-RPC 的交互式 API (Blogger API)。Userland Software 對Blogger API 的功能進行了增強,並把它叫做 MetaWeblog API。這些可能是當今公認的網誌 APIs,但仍然不是所有網誌引擎都支持的。還有一個用於添加評論的獨力的 API 叫做 Comment API,同樣,它也不是被普遍支持。
  Atom 組正在努力解決這些問題,Atom API 定義了一個標準的網誌 API 用於發佈和編輯網誌內容。有關信息請參考 The Atom Project 網站。

發送問題和評論給 Aaron:xmlfiles at microsoft dot com。
 
作者簡介
  Aaron Skonnard 在鹽湖城 Northface 大學授課。與人合著有《Essential XML Quick Reference》(Addison-Wesley, 2001)以及《Essential XML》(Addison-Wesley, 2000),經常在會議上演講。在 http://www.skonnard.com/ 可以聯繫上他。
本文出自 MSDN Magazine 的 April 2004 期刊,可通過當地報攤獲得,或其最好是 訂閱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章