王建濤,董珍時
(1.浙江大學寧波理工學院圖書館,浙江 寧波 315100;2.浙江紡織服裝職業技術學院圖書館,浙江 寧波 315211)
嵌入式信息服務是泛在信息服務的重要形式,根據嵌入的范圍可分為嵌入桌面和嵌入Web兩種模式。王建濤和胡明玲在《工具條在圖書館信息服務中的應用》[1]中以及樂小虬等在《嵌入式桌面信息服務及其系統實現》[2]中分別對嵌入桌面模式的嵌入式信息服務的系統設計與實現方法進行了研究。比嵌入桌面模式應用范圍更廣的是嵌入Web的嵌入式信息服務,其中基于JS(JavaScript)的嵌入式信息服務可根據需要隨時、多形式、低成本、高效率、無縫融合地嵌入萬維網中的用戶信息環境提供服務。JS是一種廣泛用于客戶端Web開發的腳本語言,常用來為HTML網頁添加動態功能。這種服務在百度中稱為免費代碼,在一些門戶網站中稱為信息定制(如天氣預報)、Mashup服務等。作者分別在學術信息資源開放目錄網站(以下簡稱ODP)[3]、服務外包產業信息門戶網站[4]實現了基于JS的嵌入式信息服務。因此,探討基于JS的嵌入式信息服務的特點、信息服務架構和關鍵技術實現,對圖書館界廣泛開展嵌入式信息服務有著重要的借鑒和示范作用。
對用戶來說,基于JS的嵌入式信息服務技術門檻低、無縫融合、無需維護、零成本、數據同步。對圖書館來說,拓展了其信息服務的范圍,為信息服務的開展提供了嵌入用戶環境的信息服務平臺。歸納起來,基于JS的嵌入式信息服務主要有如下幾方面的特點:
(1)嵌入性。基于JS的嵌入式信息服務能實現無縫嵌入,不僅實現網站內翻頁,還通過樣式設置將信息資源與信息服務融入用戶信息環境。
(2)易用性。網站用戶只需“選擇﹢復制﹢粘貼”就可應用基于JS的嵌入式信息服務,真正實現了零技術門檻的應用。
(3)廣泛適應性。客戶端基于JS代碼,能廣泛應用到各類網站環境中。
(4)信息粒度適中。基本元數據配合用戶選擇的信息展示條數,完全滿足用戶的需求。
(5)靈活性。信息的展示形式、部署位置均具有相當的靈活性,信息內容、信息模式等都可通過簡單的定制頁面定制到合適的JS代碼,并通過多種參數設置為用戶提供了深層次應用的可能。
(6)泛在性。圖書館的信息服務借助JS的廣泛嵌入,不僅使信息資源得到廣泛的開放利用,還使圖書館的服務平臺無處不在成為可能。
筆者以ODP網站基于JS的嵌入式信息服務為例,闡述基于JS的嵌入式信息服務架構。基于易用性、靈活性和高效率的要求,ODP基于JS的嵌入式信息服務架構如圖1所示,其業務流程為:在客戶端裝載由ODP網站提供的JS代碼嵌入HTML;JS通過SRC屬性向服務器端發送讀取JS文件請求;服務器端的PHP程序根據查詢策略讀取數據并應用緩存組件創建對應的JS文檔,同時在緩存時完成利用統計;再由Web服務器返回對應的JS文檔,客戶端執行JS代碼并裝載數據,再由JS修改HTML,最后在客戶端頁面指定的地方展示并提供利用。

圖1 基于JS的嵌入式信息服務架構
要將圖書館信息服務嵌入用戶信息環境,需要在用戶環境中讀取(或分享)服務提供方的數據或服務內容。基于XML數據的信息資源共享模式和基于Open API的數據封裝模式均是服務器—服務器端在數據層面的直接交互,不存在跨域訪問的問題,但這種類型的應用技術門檻高,不利于廣泛的應用。基于JS的信息資源的利用則無需在JS嵌入的網站服務器進行數據處理,而是直接嵌入到前臺HTML通過瀏覽器獲得信息資源,是基于客戶端—服務器的信息交互。但出于安全考慮,瀏覽器不允許客戶端與服務器之間的跨域訪問,一些服務器也對跨域訪問數據進行了限制。因此,解決跨域訪問是基于JS的信息服務的關鍵。目前,解決跨域訪問的方式有以下幾種:
(1)JSON(JavaScript Object Notation)。JSON是一種輕量級的數據交換格式,以文字為基礎,易于閱讀和編寫,同時也易于機器解析和生成。JSON與XML最大的不同在于XML是一個完整的標記語言,而JSON 不是,它重點在于數據的交換[5]。
(2)Iframe。Iframe是HTML中的元素,即文檔中的文檔,或者浮動的框架(FRAME)。相當于在網頁中開一個窗口,直接通過SRC屬性引用外部URI頁面。其特點是實現簡單,可通過URL形式傳遞參數,對動態程序進行數據調用。不足之處是形式上的嵌入,可控性相對較差,不是基于內容的完整嵌入。許多網站不愿應用該模式,多數服務平臺(如CSDN的博客)也不支持該模式。
(3)JS(JavaScript)文檔。瀏覽器支持作為客戶端語言的JS跨域訪問JS文檔(代碼),所以可以利用這一特點在服務器端將數據裝入JS文檔,再直接通過JS的SRC屬性獲取外部URL的JS文檔,最后在客戶端對JS文檔中的數據進行分析和展示。Google AJAX Search API是這種應用的典型代表,它通過SRC將編寫好的JS控件引入客戶端,然后在客戶端通過AJAX調用經過服務器端裝載的JS文檔數據,從而實現搜索與展示搜索結果。
基于以上分析,JS是解決數據跨越訪問的較好選擇。
在網絡環境中,用戶網站是多種編碼模式中的一種,如UTF-8、GB2312、GBK等。因而,需要對圖書館嵌入用戶環境中的信息資源根據客戶端網站自動實現對應的編碼。可用JS的“document.charset”語句獲取客戶端編碼模式,并通過URL傳遞到服務器端,服務器端再對查詢的數據生成對應的JS編碼文件。PHP中有專門的編碼轉換函數iconv,能較好地完成相關編碼的轉換。
雖然ODP提供了傻瓜式的JS代碼定制頁面[6],從這里定制的代碼基本能滿足大部分網站的需要,鏈接、字體大小默認與網頁中的環境一致,但也提供了相關參數供用戶配置,以便高級用戶更加靈活利用,如標題字符個數、每頁展示信息條數等均可由用戶自行設定。
此外,由于數據已經裝入JS文檔,且因JS文檔的開放性,對于熟悉JS編程的客戶來說,可自己根據JS文檔對數據進行操作,一方面進行展示效果的自由定制,另一方面通過裝載數據的操作實現與自己客戶端中的內容進行混搭(Mashup)應用。
當應用JS的嵌入式信息服務的用戶較多時,為了減輕服務器的負擔,進行動態緩存尤為必要。因此,根據業務流程分析,由PHP程序生成對應的JS文檔并以文件的形式存儲在服務器Web目錄中,由PHP定時動態更新文檔。其技術實現流程如下:當客戶端通過URL調用PHP程序頁面時,首先判斷是否超過更新緩存JS文檔頁面的間隔時間,若超過更新間隔時間,則重新讀取數據庫并用新數據更新緩存JS文檔,供下次訪問時使用,同時將緩存的JS文檔發送到瀏覽器;若沒超過更新時間間隔,直接將緩存的JS文檔發送到瀏覽器。緩存間隔時間可根據數據變動的頻率、用戶量、服務器端服務能力和用戶對數據同步的要求來設定。
圖書館提供的嵌入式信息服務到底有沒有用戶利用,誰在用,用的情況如何,這不僅是信息服務效果評價的重要依據,而且對信息資源建設和信息服務策略的調整等均有重要意義。ODP網站對信息資源利用情況進行統計,其JS的統計策略是與動態緩存一起完成的,即在動態緩存組件開始緩存數據時,完成對客戶端用戶情況的采集,包括用戶的域名(IP)、統計時間等信息。這種統計策略避免了頻繁統計造成網站服務效能降低,影響用戶體驗。
客戶端嵌入的代碼首先是用來獲取用戶端的環境信息,包括客戶端的編碼方式、顯示數據區域等信息(見圖2中第一個腳本區域),然后再裝置從服務器端得到的信息內容(見圖2第二個腳本區域),并以合適的方式在客戶端展現(見圖2中第三個腳本區域)。

圖2 客戶端JS腳本代碼
本文研究了基于JS的嵌入式信息服務的一種應用,該應用實現了網絡導航服務。這種嵌入式服務如同在用戶環境中構建了圖書館信息服務的一個拓展平臺,通過該平臺既可以實現如本文研究的網絡導航信息服務,也可以為用戶提供通知通告、新聞動態、專題信息、參考資源、學習資料等信息。基于JS的嵌入技術能將圖書館豐富的信息資源完全融入用戶信息環境,體現圖書館的泛在服務。
[1]王建濤,胡明玲.工具條在圖書館信息服務中的應用[J].圖書情報工作,2007(2):121-124.
[2]樂小虬,等.嵌入式桌面信息服務及其系統實現[J].現代圖書情報技術,2008(3):7-11.
[3]學術信息資源開放目錄[EB/OL].[2011-1-10].http://odp.nit.net.cn.
[4]服務外包產業信息門戶[EB/OL].[2011-1-10].http://soip.nit.net.cn.
[5]JSON[EB/OL].[2011-1-10].http://zh.wikipedia.org/zh-cn/JSON.
[6]數據開放利用之:Mashup服務[EB/OL].[2011-1-10].http://odp.nit.net.cn/opendata/foryou.php.