|
名譽(yù)和巨大的財富
設(shè)想一個從最熱門的門戶網(wǎng)站獲得最新的新聞的站點(diǎn)。股票價格,天氣信息,新聞故事,線式討論組,軟件發(fā)布……所有這一切都將被動態(tài)更新,每小時一次,不需要任何手工干預(yù)。我們可以想象這隨之而來的站點(diǎn)訪問量,源源不斷的廣告收入以及網(wǎng)管大人所受到的“阿諛奉承”。
但是現(xiàn)在,停止幻想,開始閱讀,因?yàn)橹灰忝芮嘘P(guān)注此項(xiàng)技術(shù),說不定你就能成為站點(diǎn)的主人。 對你的要求也只是稍許的想象力,一些聰明的PHP編碼和幾個免費(fèi)的RSS文件。另外,很明顯還包括這篇文章剩下的九個部分。
有內(nèi)容,就聯(lián)合成辛迪加(Have Content, Will Syndicate) 我們從最基本的開始——那么RSS究竟是什么鬼東西呢?
RSS(即RDF Site Summary)是一種格式,最早由Netscape公司設(shè)計,用于分發(fā)其門戶站點(diǎn)My.Netscape.Com上的內(nèi)容的描述信息。自1997年被提出以來,幾經(jīng)沉浮——可以點(diǎn)擊文章末尾的鏈接,了解一下RSS悠久復(fù)雜的歷史,F(xiàn)在的穩(wěn)定的版本是RSS1.0,符合RDF規(guī)范。這一版本可以說即輕便又功能齊全。
RSS使得網(wǎng)管及時公布和分發(fā)某一特定站點(diǎn)的特定位置的最新最有趣的內(nèi)容的描述信息變的可能。 從新聞文章列表到股票市場數(shù)據(jù)或著是天氣預(yù)報,所有這些信息都可以通過結(jié)構(gòu)良好的XML文檔來發(fā)布,從而也可以被任何XML分析器進(jìn)行分析,處理和翻譯。
網(wǎng)站上最新信息的列表是經(jīng)常更新的,而RSS使得這一列表的分發(fā)成為可能,也就為Web上簡易的內(nèi)容辛迪加聯(lián)合打開了大門。想了解這其中的道理,請看下面這個簡單的例子:
站點(diǎn)A,屬新聞?wù)军c(diǎn)(“內(nèi)容辛迪加組織者”),能夠每小時發(fā)布一個包含最新新聞列表以及相應(yīng)鏈接的RSS文檔。 而這一RSS文檔可以被其它站點(diǎn)獲。ㄈ缯军c(diǎn)B,“內(nèi)容收集者”),分析并顯示在站點(diǎn)B的索引頁面上。 每次站點(diǎn)A發(fā)布一個新的RSS文檔,站點(diǎn)B的索引頁面都可以自動更新,以獲取最新的新聞。
這種方案對交易中的雙方機(jī)構(gòu)都有效。 既然RSS文檔中的鏈接都指向站點(diǎn)A上相應(yīng)的文章,那么站點(diǎn)A將迅速體驗(yàn)到訪問量的增加。 而站點(diǎn)B的網(wǎng)管可以休假一個星期,因?yàn)樗修k法自動更新其站點(diǎn)上的索引頁面,而這一方法僅僅是把索引頁面與站點(diǎn)A發(fā)布的動態(tài)內(nèi)容相連接而已。
有許多受歡迎的站點(diǎn)向公眾提供詳細(xì)的RSS或RDF新聞,如Freshmeat(http://www.freshmeat.net)和Slashdot(http://www.slashdot.org),當(dāng)然還有其它許多站點(diǎn)。在這篇文章當(dāng)中,我將廣泛的使用Freshmeat網(wǎng)站的RDF文件。需要說明的一點(diǎn)是,這里所談到的技術(shù)也可以應(yīng)用于其它任何RSS1.0或RDF文件。
交換頻道(Switching Channels)
典型的RSS文檔包含一個由描述性元數(shù)據(jù)標(biāo)記出來的資源列表(URLs),請看下面的例子:
<?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> <channel rdf:about="http://www.melonfire.com/"> <title>Trog</title> <description>Well-written technical articles and tutorials on Web technologies</description> <link>http://www.melonfire.com/community/columns/trog/</link> <items> <rdf:Seq> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =100" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =71" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =62" /> </rdf:Seq> </items> </channel> <item rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i d=10 0"> <title>Building A PHP-Based Mail Client (part 1)</title> <link>http://www.melonfire.com/community/columns/trog/article.php?id=100 </li nk> <description>Ever wondered how Web-based mail clients work? Find out here.</description> </item> <item rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i d=71"> <title>Using PHP With XML (part 1)</title> <link>http://www.melonfire.com/community/columns/trog/article.php?id=71< /link> <description>Use PHP's SAX parser to parse XML data and generate HTML pages.</description> </item> <item rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i d=62"> <title>Access Granted</title> <link>http://www.melonfire.com/community/columns/trog/article.php?id=62< /link> <description>Precisely control access to information with the mySQL grant tables.</description> </item> 你可以看到,RDF文件由幾個界限分明的部分組成。首先是文檔序碼(prolog), <?xml version="1.0" encoding="UTF-8"?>
然后是根元素中的名稱空間聲明。
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/"> 接著是<channel>部分,這部分包含了RDF所要描述的頻道的一般信息。在上面的例子中,頻道是Melonfire網(wǎng)站的Trog專欄,專欄內(nèi)容是新的技術(shù)文章和指南,每星期更新一次。
<channel rdf:about="http://www.melonfire.com/"> <title>Trog</title> <description>Well-written technical articles and tutorials on Web technologies</description> <link>http://www.melonfire.com/community/columns/trog/</link> <items> <rdf:Seq> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =100" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =71" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =62" /> </rdf:Seq> </items> </channel> <channel>區(qū)包含了一個<items>區(qū)塊,<items>區(qū)塊又包含了文檔中描述的所有資源的一個順序列表。該列表通過一系列的<li />元素來表示。區(qū)塊中每一個資源都在后面的<item>區(qū)塊中有更詳細(xì)的描述。
<items> <rdf:Seq> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =100" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =71" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =62" /> </rdf:Seq> </items> 還可以在其中放置一個<image>區(qū)塊,這樣你就可以發(fā)布頻道標(biāo)志的URL。
所以為了肉,RSS1.0文檔中的每一個<item>區(qū)塊都更詳細(xì)地描述一個單獨(dú)的資源,包括標(biāo)題,URL和資源描述。
<items> <rdf:Seq> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =100" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =71" /> <li rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph p?id =62" /> </rdf:Seq> </items> 在這個例子里,<item>區(qū)塊描述了Ttrog“頻道”中單獨(dú)的一篇文章,并為這篇文章提供了描述和標(biāo)題,以及URL。內(nèi)容收集者可以利用URL創(chuàng)建“向后”鏈接。
你看得到,RSS1.0文件相當(dāng)?shù)刂庇^明了,不管是手工,還是通過編程,都非常容易創(chuàng)建。上面的例子和解釋僅僅是說明性質(zhì)的,通常,你可以用RSS1.0和RDF做更多的事情。你最好看一下文章末尾提供的鏈接,以獲取更多的信息。不過在這之前,我們再花幾分鐘討論一如何將RSS1.0文檔插入到你自己的Web站點(diǎn)之中。
|