王建濤,董珍時(shí)
(1.浙江大學(xué)寧波理工學(xué)院圖書館,浙江 寧波 315100;2.浙江紡織服裝職業(yè)技術(shù)學(xué)院圖書館,浙江 寧波 315211)
嵌入式信息服務(wù)是泛在信息服務(wù)的重要形式,根據(jù)嵌入的范圍可分為嵌入桌面和嵌入Web兩種模式。王建濤和胡明玲在《工具條在圖書館信息服務(wù)中的應(yīng)用》[1]中以及樂小虬等在《嵌入式桌面信息服務(wù)及其系統(tǒng)實(shí)現(xiàn)》[2]中分別對(duì)嵌入桌面模式的嵌入式信息服務(wù)的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法進(jìn)行了研究。比嵌入桌面模式應(yīng)用范圍更廣的是嵌入Web的嵌入式信息服務(wù),其中基于JS(JavaScript)的嵌入式信息服務(wù)可根據(jù)需要隨時(shí)、多形式、低成本、高效率、無縫融合地嵌入萬維網(wǎng)中的用戶信息環(huán)境提供服務(wù)。JS是一種廣泛用于客戶端Web開發(fā)的腳本語言,常用來為HTML網(wǎng)頁添加動(dòng)態(tài)功能。這種服務(wù)在百度中稱為免費(fèi)代碼,在一些門戶網(wǎng)站中稱為信息定制(如天氣預(yù)報(bào))、Mashup服務(wù)等。作者分別在學(xué)術(shù)信息資源開放目錄網(wǎng)站(以下簡稱ODP)[3]、服務(wù)外包產(chǎn)業(yè)信息門戶網(wǎng)站[4]實(shí)現(xiàn)了基于JS的嵌入式信息服務(wù)。因此,探討基于JS的嵌入式信息服務(wù)的特點(diǎn)、信息服務(wù)架構(gòu)和關(guān)鍵技術(shù)實(shí)現(xiàn),對(duì)圖書館界廣泛開展嵌入式信息服務(wù)有著重要的借鑒和示范作用。
對(duì)用戶來說,基于JS的嵌入式信息服務(wù)技術(shù)門檻低、無縫融合、無需維護(hù)、零成本、數(shù)據(jù)同步。對(duì)圖書館來說,拓展了其信息服務(wù)的范圍,為信息服務(wù)的開展提供了嵌入用戶環(huán)境的信息服務(wù)平臺(tái)。歸納起來,基于JS的嵌入式信息服務(wù)主要有如下幾方面的特點(diǎn):
(1)嵌入性?;贘S的嵌入式信息服務(wù)能實(shí)現(xiàn)無縫嵌入,不僅實(shí)現(xiàn)網(wǎng)站內(nèi)翻頁,還通過樣式設(shè)置將信息資源與信息服務(wù)融入用戶信息環(huán)境。
(2)易用性。網(wǎng)站用戶只需“選擇﹢復(fù)制﹢粘貼”就可應(yīng)用基于JS的嵌入式信息服務(wù),真正實(shí)現(xiàn)了零技術(shù)門檻的應(yīng)用。
(3)廣泛適應(yīng)性。客戶端基于JS代碼,能廣泛應(yīng)用到各類網(wǎng)站環(huán)境中。
(4)信息粒度適中?;驹獢?shù)據(jù)配合用戶選擇的信息展示條數(shù),完全滿足用戶的需求。
(5)靈活性。信息的展示形式、部署位置均具有相當(dāng)?shù)撵`活性,信息內(nèi)容、信息模式等都可通過簡單的定制頁面定制到合適的JS代碼,并通過多種參數(shù)設(shè)置為用戶提供了深層次應(yīng)用的可能。
(6)泛在性。圖書館的信息服務(wù)借助JS的廣泛嵌入,不僅使信息資源得到廣泛的開放利用,還使圖書館的服務(wù)平臺(tái)無處不在成為可能。
筆者以O(shè)DP網(wǎng)站基于JS的嵌入式信息服務(wù)為例,闡述基于JS的嵌入式信息服務(wù)架構(gòu)?;谝子眯?、靈活性和高效率的要求,ODP基于JS的嵌入式信息服務(wù)架構(gòu)如圖1所示,其業(yè)務(wù)流程為:在客戶端裝載由ODP網(wǎng)站提供的JS代碼嵌入HTML;JS通過SRC屬性向服務(wù)器端發(fā)送讀取JS文件請(qǐng)求;服務(wù)器端的PHP程序根據(jù)查詢策略讀取數(shù)據(jù)并應(yīng)用緩存組件創(chuàng)建對(duì)應(yīng)的JS文檔,同時(shí)在緩存時(shí)完成利用統(tǒng)計(jì);再由Web服務(wù)器返回對(duì)應(yīng)的JS文檔,客戶端執(zhí)行JS代碼并裝載數(shù)據(jù),再由JS修改HTML,最后在客戶端頁面指定的地方展示并提供利用。
圖1 基于JS的嵌入式信息服務(wù)架構(gòu)
要將圖書館信息服務(wù)嵌入用戶信息環(huán)境,需要在用戶環(huán)境中讀?。ɑ蚍窒恚┓?wù)提供方的數(shù)據(jù)或服務(wù)內(nèi)容?;赬ML數(shù)據(jù)的信息資源共享模式和基于Open API的數(shù)據(jù)封裝模式均是服務(wù)器—服務(wù)器端在數(shù)據(jù)層面的直接交互,不存在跨域訪問的問題,但這種類型的應(yīng)用技術(shù)門檻高,不利于廣泛的應(yīng)用?;贘S的信息資源的利用則無需在JS嵌入的網(wǎng)站服務(wù)器進(jìn)行數(shù)據(jù)處理,而是直接嵌入到前臺(tái)HTML通過瀏覽器獲得信息資源,是基于客戶端—服務(wù)器的信息交互。但出于安全考慮,瀏覽器不允許客戶端與服務(wù)器之間的跨域訪問,一些服務(wù)器也對(duì)跨域訪問數(shù)據(jù)進(jìn)行了限制。因此,解決跨域訪問是基于JS的信息服務(wù)的關(guān)鍵。目前,解決跨域訪問的方式有以下幾種:
(1)JSON(JavaScript Object Notation)。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,以文字為基礎(chǔ),易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。JSON與XML最大的不同在于XML是一個(gè)完整的標(biāo)記語言,而JSON 不是,它重點(diǎn)在于數(shù)據(jù)的交換[5]。
(2)Iframe。Iframe是HTML中的元素,即文檔中的文檔,或者浮動(dòng)的框架(FRAME)。相當(dāng)于在網(wǎng)頁中開一個(gè)窗口,直接通過SRC屬性引用外部URI頁面。其特點(diǎn)是實(shí)現(xiàn)簡單,可通過URL形式傳遞參數(shù),對(duì)動(dòng)態(tài)程序進(jìn)行數(shù)據(jù)調(diào)用。不足之處是形式上的嵌入,可控性相對(duì)較差,不是基于內(nèi)容的完整嵌入。許多網(wǎng)站不愿應(yīng)用該模式,多數(shù)服務(wù)平臺(tái)(如CSDN的博客)也不支持該模式。
(3)JS(JavaScript)文檔。瀏覽器支持作為客戶端語言的JS跨域訪問JS文檔(代碼),所以可以利用這一特點(diǎn)在服務(wù)器端將數(shù)據(jù)裝入JS文檔,再直接通過JS的SRC屬性獲取外部URL的JS文檔,最后在客戶端對(duì)JS文檔中的數(shù)據(jù)進(jìn)行分析和展示。Google AJAX Search API是這種應(yīng)用的典型代表,它通過SRC將編寫好的JS控件引入客戶端,然后在客戶端通過AJAX調(diào)用經(jīng)過服務(wù)器端裝載的JS文檔數(shù)據(jù),從而實(shí)現(xiàn)搜索與展示搜索結(jié)果。
基于以上分析,JS是解決數(shù)據(jù)跨越訪問的較好選擇。
在網(wǎng)絡(luò)環(huán)境中,用戶網(wǎng)站是多種編碼模式中的一種,如UTF-8、GB2312、GBK等。因而,需要對(duì)圖書館嵌入用戶環(huán)境中的信息資源根據(jù)客戶端網(wǎng)站自動(dòng)實(shí)現(xiàn)對(duì)應(yīng)的編碼??捎肑S的“document.charset”語句獲取客戶端編碼模式,并通過URL傳遞到服務(wù)器端,服務(wù)器端再對(duì)查詢的數(shù)據(jù)生成對(duì)應(yīng)的JS編碼文件。PHP中有專門的編碼轉(zhuǎn)換函數(shù)iconv,能較好地完成相關(guān)編碼的轉(zhuǎn)換。
雖然ODP提供了傻瓜式的JS代碼定制頁面[6],從這里定制的代碼基本能滿足大部分網(wǎng)站的需要,鏈接、字體大小默認(rèn)與網(wǎng)頁中的環(huán)境一致,但也提供了相關(guān)參數(shù)供用戶配置,以便高級(jí)用戶更加靈活利用,如標(biāo)題字符個(gè)數(shù)、每頁展示信息條數(shù)等均可由用戶自行設(shè)定。
此外,由于數(shù)據(jù)已經(jīng)裝入JS文檔,且因JS文檔的開放性,對(duì)于熟悉JS編程的客戶來說,可自己根據(jù)JS文檔對(duì)數(shù)據(jù)進(jìn)行操作,一方面進(jìn)行展示效果的自由定制,另一方面通過裝載數(shù)據(jù)的操作實(shí)現(xiàn)與自己客戶端中的內(nèi)容進(jìn)行混搭(Mashup)應(yīng)用。
當(dāng)應(yīng)用JS的嵌入式信息服務(wù)的用戶較多時(shí),為了減輕服務(wù)器的負(fù)擔(dān),進(jìn)行動(dòng)態(tài)緩存尤為必要。因此,根據(jù)業(yè)務(wù)流程分析,由PHP程序生成對(duì)應(yīng)的JS文檔并以文件的形式存儲(chǔ)在服務(wù)器Web目錄中,由PHP定時(shí)動(dòng)態(tài)更新文檔。其技術(shù)實(shí)現(xiàn)流程如下:當(dāng)客戶端通過URL調(diào)用PHP程序頁面時(shí),首先判斷是否超過更新緩存JS文檔頁面的間隔時(shí)間,若超過更新間隔時(shí)間,則重新讀取數(shù)據(jù)庫并用新數(shù)據(jù)更新緩存JS文檔,供下次訪問時(shí)使用,同時(shí)將緩存的JS文檔發(fā)送到瀏覽器;若沒超過更新時(shí)間間隔,直接將緩存的JS文檔發(fā)送到瀏覽器。緩存間隔時(shí)間可根據(jù)數(shù)據(jù)變動(dòng)的頻率、用戶量、服務(wù)器端服務(wù)能力和用戶對(duì)數(shù)據(jù)同步的要求來設(shè)定。
圖書館提供的嵌入式信息服務(wù)到底有沒有用戶利用,誰在用,用的情況如何,這不僅是信息服務(wù)效果評(píng)價(jià)的重要依據(jù),而且對(duì)信息資源建設(shè)和信息服務(wù)策略的調(diào)整等均有重要意義。ODP網(wǎng)站對(duì)信息資源利用情況進(jìn)行統(tǒng)計(jì),其JS的統(tǒng)計(jì)策略是與動(dòng)態(tài)緩存一起完成的,即在動(dòng)態(tài)緩存組件開始緩存數(shù)據(jù)時(shí),完成對(duì)客戶端用戶情況的采集,包括用戶的域名(IP)、統(tǒng)計(jì)時(shí)間等信息。這種統(tǒng)計(jì)策略避免了頻繁統(tǒng)計(jì)造成網(wǎng)站服務(wù)效能降低,影響用戶體驗(yàn)。
客戶端嵌入的代碼首先是用來獲取用戶端的環(huán)境信息,包括客戶端的編碼方式、顯示數(shù)據(jù)區(qū)域等信息(見圖2中第一個(gè)腳本區(qū)域),然后再裝置從服務(wù)器端得到的信息內(nèi)容(見圖2第二個(gè)腳本區(qū)域),并以合適的方式在客戶端展現(xiàn)(見圖2中第三個(gè)腳本區(qū)域)。
圖2 客戶端JS腳本代碼
本文研究了基于JS的嵌入式信息服務(wù)的一種應(yīng)用,該應(yīng)用實(shí)現(xiàn)了網(wǎng)絡(luò)導(dǎo)航服務(wù)。這種嵌入式服務(wù)如同在用戶環(huán)境中構(gòu)建了圖書館信息服務(wù)的一個(gè)拓展平臺(tái),通過該平臺(tái)既可以實(shí)現(xiàn)如本文研究的網(wǎng)絡(luò)導(dǎo)航信息服務(wù),也可以為用戶提供通知通告、新聞動(dòng)態(tài)、專題信息、參考資源、學(xué)習(xí)資料等信息?;贘S的嵌入技術(shù)能將圖書館豐富的信息資源完全融入用戶信息環(huán)境,體現(xiàn)圖書館的泛在服務(wù)。
[1]王建濤,胡明玲.工具條在圖書館信息服務(wù)中的應(yīng)用[J].圖書情報(bào)工作,2007(2):121-124.
[2]樂小虬,等.嵌入式桌面信息服務(wù)及其系統(tǒng)實(shí)現(xiàn)[J].現(xiàn)代圖書情報(bào)技術(shù),2008(3):7-11.
[3]學(xué)術(shù)信息資源開放目錄[EB/OL].[2011-1-10].http://odp.nit.net.cn.
[4]服務(wù)外包產(chǎn)業(yè)信息門戶[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]數(shù)據(jù)開放利用之:Mashup服務(wù)[EB/OL].[2011-1-10].http://odp.nit.net.cn/opendata/foryou.php.