2008 年 12 月 09 日
您一定聽說過 Wikipedia(維基百科全書),但是您是否知道還有一些與 Wikipedia 相關的站點,它們可以提供同樣有價值的由用戶生成的內容?大量隸屬于Wikipedia 的相關站點對 Web 開發人員非常有用。了解如何通過 Wikipedia以外的資源豐富您的信息空間,包括應用這些站點的數據的小部件示例。
Wikipedia一直被認為是最流行的和最知名的 Web 站點之一。從想要完成家庭作業的學生,到希望利用用戶生成內容的 Web 開發人員等等,都可以通過Wikipedia 滿足需求。但是就提供有用信息而言,Wikipedia 僅僅是一個更龐大資源的一部分。WikimediaFoundation (維基媒體基金會)組織不僅運營Wikipedia,并且還運行很多其他站點。它在主頁中這樣聲明:“想像這樣一個世界,它讓每個人都可以自由分享所有的知識。這就是我們的承諾?!边@是一個偉大的宣言,它不是一個龐大的百科全書就可以實現的。您可能已經了解到 Wikipedia擁有大量不同語言的版本。(令我感到吃驚和欣慰的是,我發現了大量有關 Igbo 語的 Wikipedia文章,這是我的母語)。但是您是否知道多長時間才會出現使用其他語言表示的有用信息(未翻譯為英語)?您以前是否聽說過Wiktionary、Wikinews、Wikibooks、Wikisource、Wikiversity以及類似內容?您是否知道可以通過利用這個龐大的信息源為您的 Web 項目獲得一些好處?我將在本文中向您展示更優秀的Wikimedia,并給出一些代碼幫助您的站點的用戶 “自由地分享所有知識”。
下面將簡單介紹除知名的 Wikipedia 以外,Wikipedia 家族中涵蓋的其他一些站點。
Wiktionary是與 Wikipedia相對應的字典站點。很多人對這個開放內容的百科全書的實用性表示懷疑,并且不受關注的字典編纂工作似乎是一項更加艱難的任務。在 “有效”條目的數量方面,法語版本的站點規模最大,緊隨其后的是英語版本的站點,后者擁有目前為止最全面的條目和編輯。排在第三位的土耳其語版本與前兩者差距比較大,但是有 9 個語言版本的站點至少具有 1000,000 個“有效條目”,大量其他語言版本也接近這個規模,這些站點聯合起來就形成了一個令人吃驚的規模。其中一些站點通過使用自動程序從一些免費的信息源導入條目來進行擴展。例如 French Wiktionary,它包括大量來自 Dictionnaire de l'Académie fran?aise這種舊式的、免費的字典的條目。很多 Wiktionary條目包括到其他語言的翻譯,因此另一個特性就是大量導入其他語言版本中列出的翻譯。條目類型眾多,從無實際內容的存根(尤其是那些沒有被分類為“有效”條目的內容),到包含豐富內容的條目,比如詞源、用例、發音(包含音標字母和聲音文件)、交叉參考、不同語法形式、翻譯,甚至包含對重要文本(例如Project Gutenberg)的外形分析。
Wikinews是獲得有關新聞和時事文章的站點,它的理念是具有某些知識或參與某些事件的人士可以幫助填充相關頁面的內容。其原則是必須秉持中立的觀點撰寫文章。Wikinews 可以包含新聞報道、多媒體報道、采訪等內容。隨后出現了 WikimediaRadio,并最終發展為一個固定的流式音頻廣播站點,包括各種節目和新聞,并且這些內容大部分來自 Wikinews 和其他 Wikimedia項目。通常,Wikinews 覆蓋范圍往往傾向于那些擁有大量貢獻者的地區和主題,這限制站點本身發展為綜合性站點。此外,Wikipedia的流行意味著它經常及時地更新站點的文章,甚至按照匹配新聞報道的速度進行更新,因為它經常從 Wikinews 項目獲得內容。
對百科全書文章進行的最大擴展就是將它的主題變成一本完整的書籍,而這正是 Wikibooks 的領域。它包含了Wikijunior,一個面向兒童和兒童教育的文本集合,它可能很快將成為獨立的完整項目。Wikiversity 曾經也是 Wikibooks的一部分,它成為了一個完整的 Wikimedia 站點。Wikiversity鼓勵以小組或社區的方式進行學習,參與者編輯學習項目頁面并進行有助于理解的實踐。它被編排成各種學科,主要側重于所有結合了教科書的支持資源。Wikibooks 托管教科書并且還支持協作式社區開發,Wiki頁面將擴充后的零碎內容并入到完整的書籍中。書籍和學科涵蓋了各種內容,包括學習語言、計算機科學、有機化學和法律等。從事生物科學的教育者還應關注Wikispecies,這是一個有關生命形式的分類字典,類似于一個有關生物學的、具有適當結構的 Wikipedia。
Wikisource(也稱為 The Free Library)將所有這些二次信息處理為原始文檔,用于收集源文本、注釋、翻譯和輔助材料。文本可以是小說或非小說作品、歷史記載、公共文檔或任何重要的并且不受版權限制的內容。
Wikiquote是一個開放的參考資料站點,包括各種語言的引用自歷史和文化方面的語錄。對于 Wikiquote最近存在爭議,一些人考慮到內容的合適性和版權侵犯,認為應該撤銷這個網站。有人認為應該將語錄添加到 Wikisource中。然而,還有很多人認為如果 Wikisource 存在任何內容問題,社區在采取關閉 wiki這種過激舉措之前,首先應該嘗試解決這些問題。當然,這種行為在短時間內是不可能發生的。
WikimediaCommons 是 Wikimedia家族的姊妹站點,托管圖像、視頻、音頻和其他任何免費的媒體文件。它是一個非常大型的資源庫,包含數百萬個文件。它的目標是成為這類媒體文件的文化資源庫,并試圖通過對重要的圖像進行分類和認定進一步實現這個目標。
Wikimedia 空間的行為的廣度和高度為相互交流和 Wikimedia 以外的有用應用程序提供了眾多機遇。這就是 Web 2.0 的精髓。用戶可以獲取目前尚未集成的開放數據流,并超越原始發布者的最初意圖,將它們轉換為全新的應用程序。
目前,有關如何跨各種 Wikimedia屬性進行搜索并不明確。一些獨立的項目提供了一種聚合搜索,但是其實用性分為多個級別,因此,完全有理由實現自己的搜索。Google 的其中一個計劃Google Co-op提供了一個自定義搜索引擎(CSE)工具,它允許您根據自己的規范定義并創建搜索工具,甚至可以通過詳細的注釋維護。我創建了一個自定義搜索“Wikimedia plus”,包含了所有受支持的語言,以及其他一些有趣的相關站點。清單 1 顯示了搜索的主要條件。
*.wikipedia.org/* *.wiktionary.org/* *.wikibooks.org/* *.wikiversity.org/* *.wikinews.org/* *.wikimedia.org/* *.wikiquote.org/* *.wikisource.org/* *.wikia.com/* *.uncyclopedia.org/* |
注意通配符形式,這是 CSE 的特性之一。Google 為 CSE 提供了一個小部件表單。清單 2 展示了用例。
清單 2. “Wikimedia plus” 搜索引擎部件的用法示例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" > <head> <title>Hello Wikimedia world</title> </head> <body> <p>Use the following gadget to search Wikimedia and selected Wikia sites.</p> <hr/> <!-- Remove line breaks in the following script element before using --> <script src="http://www.gmodules.com/ig/ifr?url= http://www.google.com/coop/api/016404950850373629424/cse/1bius8lhc7g/gadget &synd=open&w=320&h=75&title=Wikimedia+plus &border=%23ffffff%7C3px%2C1px+solid+%23999999&output=js"></script> </body> </html> |
為了進行格式化,我將 Google 的長 URL 分解為多個行。在試用或修改該清單前,只需刪除
script
元素中的換行符。圖 1 展示了結果頁面的截圖。Google 的 JavaScript 使用包含搜索表單的 iframe 替換了該元素。當輸入搜索時,將在一個獨立的窗口打開結果頁面。
圖 1. 使用 Google Wikimedia plus 部件的示例頁面
在第二個示例中,我將展示如何使用 Wiktionary 中的 word-of-the-day提要創建自己的小部件。編輯每天都要使用一個有趣的詞作為當天的特色內容。這個小部件將選中的詞與該詞在 Wikimedia commons上的搜索結果(圖像、聲音文件、視頻等等)結合在一起。清單 3(wotd.js)展示了部件的 JavaScript 代碼。
清單 3(wotd.js)JavaScript word-of-the-day 小部件
/* Word of the day widget code. Requires jQuery: http://www.jquery.com (tested with version 1.2.6) */ var wotd = { //Some variavles global to the wotd namespace wotdfeedurl: "wotd_feed_proxy", commonssearch: "commons_search_proxy/", commonsbase: "http://commons.wikimedia.org", mediatargetid: "target", wotdtargetid: "wotd", word: "", worddesc: "", wiktionarylink: "", //Invoked once the main HTML DOM is ready loadPage: function() { wotd.medianode = $("#" + wotd.mediatargetid); wotd.wotdnode = $("#" + wotd.wotdtargetid); $.get(wotd.wotdfeedurl, wotd.processFeed); }, //Invoked with the result of the AJAX call to the Wiktionary feed processFeed: function(feed) { var item = $("item:first", feed); var title = item.find("title").text(); wotd.word = title.substring(title.indexOf(':')+2); wotd.wikionarylink = item.find("link").text(); //Update the target spot on the main page with the word of the day link wotd.wotdnode.append(wotd.word); wotd.wotdnode.attr("href", wotd.wikionarylink); $.get(wotd.commonssearch + wotd.word, wotd.processSearch); }, //Invoked with the result of the AJAX call to the Wikimedia commons search processSearch: function(result) { //Narrow in on the search results page narrowed = $(result).find(".mw-search-results"); //Fix up relative link and image URLs narrowed.find("a, link").attr("href", function (arr) { return wotd.commonsbase + $(this).attr("href"); }); narrowed.find("img").attr("src", function (arr) { return wotd.commonsbase + $(this).attr("src"); }); //Update the target spot on the main page with the search results narrowed.find("table td a").each(function (){ $('<div></div>').html($(this)).appendTo(wotd.medianode); }) }, } $(document).ready(function() { wotd.loadPage(); }); |
這段代碼進行了良好的注釋。它對 Ajax 庫使用了 jQuery 庫,并處理結果頁面。像這類部件還必須有一個服務器端組件,因為安全性限制將阻止您在域之間發出 Ajax 請求。JavaScript 調用了一個相關的 URL
wotd_feed_proxy
,這實際上是遠程 Wikimedia 站點頁面的代理。這是使用所選的服務器工具可以實現的一個常見模式。我使用清單 4(wotd_server.py)所示的 Python/CherryPy 服務器代碼。
清單 4(wotd_server.py)word-of-the-day 部件的 Python/CherryPy 服務器代碼
# encoding: utf-8 """ wotd_server.py Requires: CherryPy http://cherrypy.py""" import os import urllib2 import cherrypy #Wikimedia commons search doesn't like bots, so pretend to be a browser HEADERS = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' } #Tell the server where to find local, static files such as index.html LOCAL_DIR = os.path.join(os.getcwd(), os.path.dirname(__file__)) #The URLs to be proxied WOTD_FEED_URL = "http://toolserver.org/~cmackenzie/wotd-rss.php" COMMONS_SEARCH_BASE = "http://commons.wikimedia.org/wiki/Special:Search?search=" #The server code class class Wotd: #Set up a local, static file server default = cherrypy.tools.staticdir.handler( section="/", dir=LOCAL_DIR) #Proxy the Wiktionary feed _cnnew1@cherrypy.expose def wotd_feed_proxy(self): cherrypy.response.headers['Content-Type'] = 'text/xml' return urllib2.urlopen(WOTD_FEED_URL).read() #Proxy Wikimedia commons search @cherrypy.expose def commons_search_proxy(self, word): url = COMMONS_SEARCH_BASE + word req = urllib2.Request(url, None, HEADERS) response = urllib2.urlopen(req) cherrypy.response.headers['Content-Type'] = 'text/html' return response.read() #Launch the server cherrypy.server.socket_port = 8888 cherrypy.server.socket_host = 'localhost' cherrypy.quickstart(Wotd()) |
同樣,這些代碼也進行了良好的注釋。清單 5(index.html)是小部件的示例托管頁面。
清單 5(index.html)word-of-the-day 小部件的示例托管頁面
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" > <head> <title>Wikimedia word of the day</title> <script src="jquery-1.2.6.js" type="text/javascript"></script> <script src="json2.js" type="text/javascript"></script> <script src="wotd.js" type="text/javascript"></script> </head> <body> <p>Wiktionary word of the day: <a id="wotd"></a></p> <p>Related items on Wikimedia commons:</p> <div id="target"></div> </body> </html> |
圖 2. 使用 word-of-the-day 小部件的示例頁面
![]() ![]() |
![]()
|
如果您對這些站點中的技術和組織感興趣,可以訪問 Meta-Wiki,這是 “一個致力于協調和歸檔 Wikimedia Foundation的項目及其相關事務的網站”。Wikimedia Foundation 是一個非盈利性組織,但它的類似開放信息目標啟發了商業公司(通常稱為商業Wiki farms)。規模最大的此類商業站點是 Wikia,它的一名創始人還是 Wikimedia共同創始人之一。該站點托管了大量可能不適合 Wikimedia 站點的主題(例如各種Uncyclopedia,它對實際的主題進行了虛構的描述)。Wikileaks是一個針對激進主義者,舉報者和其他想要匿名發布政府、企業或其他組織希望保密的機密文檔的人員的 wiki。由于涉及敏感性話題,因此Wikileaks 不屬于傳統意義上的 wiki,在發布之前需要在內部進行審核。
由于在 Wikimedia 站點中使用了Creative Commons Attribution許可(知識共享許可),您可以免費使用所有這些資料,甚至可以用于商業活動,惟一的要求是必須添加返回鏈接并清晰地說明來源歸屬。Wikimedia的目標令人矚目,其實現過程也是如此。具有創造力的網絡管理員需要處理大量的信息。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
