方興未艾的 Open Data 浪潮
近年來 open data(開放資料)成為熱門議題。根據維基百科的定義1 ,所謂的開放資料,指的是一種經過挑選與許可的資料,這些資料不受著作權、專利權,以及其他管理機制所限制,可以開放給社會公眾,任何人都可以自由出版使用,不論是要拿來出版或是做其他的運用都不加以限制。
開放資料有許多來源,但一般以政府與學術單位所釋出的資料為大宗。隨著各國政府推展 open government(開放政府)的腳步,產界、學界已經摩拳擦掌,準備利用開放資料進行各種研究與加值。在網路技術、行動裝置的普及,主客觀條件均已日漸成熟下,開放資料所帶起的新一波創新,指日可待。
然而,當資料準備開放時,將面臨一重要問題:我應該選擇什麼平台?
個人認為,美國政府於 2012 年 5 月所提出的 Digital Gonvernment(數位化政府)白皮書2中所描述數位化政府策略原則,也正是一個資料入口平台(Data Portal Platform)應該具備的要件:
- 以資訊為中心(Information-Centric):資料應以對使用者最方便的方式,加以標記(tagged)、共享(shared,此指跨平台共用資料,避免重複放置 data)、安全保管(secured)、混搭(mashed up)與呈現(presented)。
- 共享平台(Shared Platform):同前面所述,透過資料的共享,避免重複釋出相同資料,也令使用者更容易找尋到需要的資料;同時為了方便共享,資料釋出必須採用開放之業界標準,並提供 API 以便於存取其 metadata(後設資料)。
- 使用者為中心(Customer-Centric):網站平台應提供清楚的流程,讓使用者容易瀏覽,或透過搜尋獲得欲取得之資料。
- 安全與隱私(Security and Privacy):確保在資料釋出的同時,兼具安全性與隱私性。
當開放遇上開放:ckan 開放原始碼資料入口平台
今天所要介紹的 ckan,便是如此的 open data「大航海時代」中應運而生。ckan 是目前開發最活躍、使用組織最多的開放原始碼資料入口平台, 由 Open Knowledge Foundation(OKF)支持發展,透過 AGPLv3 釋放原始碼。它的功能非常多,除了最重要的資料發布與存取外,還支援資料視覺化、搜尋與條件篩選器(filters)、標籤(tag)、版本控制(revision)、分享與發布組織(organization)等功能,更有許多的延伸套件(extensions)提供安裝,可滿足不同領域組織發布檔案之需求。使用 ckan 最有名的專案,應屬英國政府開放資料平台 data.gov.uk(其同時使用 drupal 作為管理使用者與資訊發布之用)。ckan 的官方網站上列舉有數個成功案例,另外也提供了展示網站。
▲ ckan 的起始頁面
ckan 的功能與優勢
ckan 的主要功能與優勢包括:
- 簡潔便利的使用者介面:ckan 的資料發佈與檢視畫面簡潔但強大,上傳資料只需三步驟(建立資料集->新增資料->額外的資料),對於某些常用格式(pdf, csv, xml, json 等,以及地理資訊來源如 csw 等),還能在瀏覽器內直接檢視資料內容。以資訊為中心的設計,符合前述資料入口平台的要件。
- 強大的管理與存取能力:ckan 提供本機上傳資料集,透過 http request 新增及修改資料集的
Action API
,藉由 Action API 亦可以 JSON 形式取得資料集之後設資料。如此一來便可輕鬆實現上述的「共享平台」目標,形成開放資料平台間的「聯邦(federation)」。這呼應了前面資料入口平台要件的共享概念。 - 完善的協作與社群互動:ckan 2.0 以後新增了發佈組織功能,可用以區隔發佈身份與權限;使用者也可以輕鬆地將資料集頁面分享至 Google+、Twitter 與 Facebook 等社群網站。
- 靈活的擴充空間與套件:ckan 將核心功能包裝成
Plugin API
,幾乎所有的資料集操作都可以透過呼叫ckan.plugins.*
此一 package 來完成,除保留了擴充功能的彈性,使開發延伸套件更為便利外,也因為避免直接觸及資料庫與底部邏輯,確保了安全性。目前延伸套件已有超過 60 個以上,包括 spatial(地理空間資訊相關)、QA、Google Analytics 等。
ckan 的核心技術
ckan 使用以 Python 為基礎的 Pylons 網頁框架開發,template 使用 jinja2,多國語言支援採用 Babel,資料庫使用 PostgreSQL,ORM(object-relational mapping)是 Pylons 推薦的 SQLAlchemy,搜尋功能則使用 Apache Solr 實作,同時搭配 jetty 作為 servlet container。也因為使用 Python 架構,ckan 得以使用許多 python 方便好用的 packages。ckan 的系統架構如下圖所示:
▲ ckan 系統架構圖
ckan 佈署經驗分享
看完了上述介紹,那麼 ckan 就是在茫茫大海中指引我們的那盞明燈囉!
等等,先別急著高興,它是否有缺點呢?
答案當然是肯定的。以下將就筆者在過去兩個月親自架設並修改 ckan 的心得,與各位分享。
首先,對於導入 ckan 的組織,必須有對其進行修改與客製的能力。ckan 尚屬年輕的專案,且資料來源與種類千百種,故 ckan 開發過程中係以最廣泛流通之格式為主要支援對象。以 ckanext-harvest 這個延伸套件為例,其功能是將其他網站的資料收割(harvesting,蒐集之意)下來,並匯入為 ckan 資料集。ckanext-harvest 預設僅提供「ckan 網站」一種收割器(harvester,蒐集特定來源的介面),若要蒐集來自其他來源的資料,必須使用 ckanext-harvest 提供的 harvesting interface,自行實作。另外,有許多套件的安裝並不方便,甚至需要直接修改程式碼(如 ckanext-spatial)。
再者,ckan 對於中文支援不佳。其使用的 Apache Solr,預設並沒有中文搜尋的 schema,必須另外安裝與定義中文斷詞器;另一個例子,前面提到的 ckanext-harvest 在建立 ckan 資料集的階段,若遇到非 ASCII 文字,會將文字取代成空白,但若資料來源名稱全部為中文,就會發生錯誤,對此我們必須隨機產生資料名稱;目前的中文化也被發現存在部分錯字。
最後,由於 ckan 主要使用 python 技術,若具有 python 語言與相關套件(Pylons, SQLAlchemy, Babel)的基礎,對於架設與修改 ckan 會有莫大幫助。當然,基本的系統管理(UNIX, Linux)、網頁伺服器(Apache, Nginx)與資料庫(SQL)的能力亦不可少。
如何釣魚
若您欲了解詳細的 ckan 安裝與使用方法,官方文件是不可或缺(也幾乎是唯一的)參考資料。
另外,每一個 ckan 的延伸套件,其 Github 專案頁面的說明也請務必仔細閱讀,上面會列出一些 FAQ 與疑難排解。
如果您對 ckan 的部份功能有疑問,或發現了 bug,可至 Github 專案 回報或加入 ckan-dev mailing list,該 list 也活躍進行著各種 ckan 使用上的討論。
順道老王賣瓜一下,筆者也撰寫了安裝與使用教學。除了 step-by-step 指引外,也就實際安裝時可能遇到的問題加以說明,並提出相應的解決方法。
另附上筆者過去在中研院資訊所分享的三則投影片連結:
- ckan 2.0 Introduction: 對 ckan 2.0 的基本功能、使用案例與安裝經驗做一說明。
- ckan 2.0: a deeper look: 介紹 ckan 的延伸套件:ckanext-spatial 與 ckanext-harvest,以及搬移之經驗。
- ckan 2.0: Harvesting from other sources: 針對 ckanext-harvest 套件作更深入的探討。
小結
工欲善其事,必先利其器。作為開放資料中的基礎建設,ckan 的諸多便利設計,不失為建立開放資料平台的好選擇,本文提供一些實作上的建議,希望對於 ckan 有興趣的人有所助益。
本文主要以技術面介紹與分析 ckan,然而一個開放資料平台的建立並不僅此於此。資料該由誰開放?以何種形式開放?何時開放?該開放多少?又該以哪種授權開放?這些問題涉及管理、法律,以及政治的領域,不在本文討論的範疇。對於資訊專業人員而言,我們能做的即是令開放資料的發佈、管理、瀏覽、取得的流程更加便利,降低獲取開放資料的門檻,與為開放資料努力的各位共勉之。那麼,有緣再會了!
追記:若您對 ckan 有興趣,也歡迎加入 ckan Taiwan interest group 的 mailing list:https://groups.google.com/forum/#!forum/ckan-taiwan-interest-group