王建濤,董珍時(shí)
(1.浙江大學(xué)寧波理工學(xué)院圖書(shū)館,浙江 寧波 315100;2.浙江紡織服裝職業(yè)技術(shù)學(xué)院圖書(shū)館,浙江 寧波 315211)
嵌入式信息服務(wù)是泛在信息服務(wù)的重要形式,根據(jù)嵌入的范圍可分為嵌入桌面和嵌入Web兩種模式。王建濤和胡明玲在《工具條在圖書(shū)館信息服務(wù)中的應(yīng)用》[1]中以及樂(lè)小虬等在《嵌入式桌面信息服務(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ú)縫融合地嵌入萬(wàn)維網(wǎng)中的用戶信息環(huán)境提供服務(wù)。JS是一種廣泛用于客戶端Web開(kāi)發(fā)的腳本語(yǔ)言,常用來(lái)為HTML網(wǎng)頁(yè)添加動(dòng)態(tài)功能。這種服務(wù)在百度中稱為免費(fèi)代碼,在一些門戶網(wǎng)站中稱為信息定制(如天氣預(yù)報(bào))、Mashup服務(wù)等。作者分別在學(xué)術(shù)信息資源開(kāi)放目錄網(wǎng)站(以下簡(jiǎn)稱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ì)圖書(shū)館界廣泛開(kāi)展嵌入式信息服務(wù)有著重要的借鑒和示范作用。
對(duì)用戶來(lái)說(shuō),基于JS的嵌入式信息服務(wù)技術(shù)門檻低、無(wú)縫融合、無(wú)需維護(hù)、零成本、數(shù)據(jù)同步。對(duì)圖書(shū)館來(lái)說(shuō),拓展了其信息服務(wù)的范圍,為信息服務(wù)的開(kāi)展提供了嵌入用戶環(huán)境的信息服務(wù)平臺(tái)。歸納起來(lái),基于JS的嵌入式信息服務(wù)主要有如下幾方面的特點(diǎn):
(1)嵌入性。基于JS的嵌入式信息服務(wù)能實(shí)現(xiàn)無(wú)縫嵌入,不僅實(shí)現(xiàn)網(wǎng)站內(nèi)翻頁(yè),還通過(guò)樣式設(shè)置將信息資源與信息服務(wù)融入用戶信息環(huán)境。
(2)易用性。網(wǎng)站用戶只需“選擇﹢復(fù)制﹢粘貼”就可應(yīng)用基于JS的嵌入式信息服務(wù),真正實(shí)現(xiàn)了零技術(shù)門檻的應(yīng)用。
(3)廣泛適應(yīng)性??蛻舳嘶贘S代碼,能廣泛應(yīng)用到各類網(wǎng)站環(huán)境中。
(4)信息粒度適中?;驹獢?shù)據(jù)配合用戶選擇的信息展示條數(shù),完全滿足用戶的需求。
(5)靈活性。信息的展示形式、部署位置均具有相當(dāng)?shù)撵`活性,信息內(nèi)容、信息模式等都可通過(guò)簡(jiǎn)單的定制頁(yè)面定制到合適的JS代碼,并通過(guò)多種參數(shù)設(shè)置為用戶提供了深層次應(yīng)用的可能。
(6)泛在性。圖書(shū)館的信息服務(wù)借助JS的廣泛嵌入,不僅使信息資源得到廣泛的開(kāi)放利用,還使圖書(shū)館的服務(wù)平臺(tái)無(wú)處不在成為可能。
筆者以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通過(guò)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,最后在客戶端頁(yè)面指定的地方展示并提供利用。

圖1 基于JS的嵌入式信息服務(wù)架構(gòu)
要將圖書(shū)館信息服務(wù)嵌入用戶信息環(huán)境,需要在用戶環(huán)境中讀?。ɑ蚍窒恚┓?wù)提供方的數(shù)據(jù)或服務(wù)內(nèi)容?;赬ML數(shù)據(jù)的信息資源共享模式和基于Open API的數(shù)據(jù)封裝模式均是服務(wù)器—服務(wù)器端在數(shù)據(jù)層面的直接交互,不存在跨域訪問(wèn)的問(wèn)題,但這種類型的應(yīng)用技術(shù)門檻高,不利于廣泛的應(yīng)用?;贘S的信息資源的利用則無(wú)需在JS嵌入的網(wǎng)站服務(wù)器進(jìn)行數(shù)據(jù)處理,而是直接嵌入到前臺(tái)HTML通過(guò)瀏覽器獲得信息資源,是基于客戶端—服務(wù)器的信息交互。但出于安全考慮,瀏覽器不允許客戶端與服務(wù)器之間的跨域訪問(wèn),一些服務(wù)器也對(duì)跨域訪問(wèn)數(shù)據(jù)進(jìn)行了限制。因此,解決跨域訪問(wèn)是基于JS的信息服務(wù)的關(guān)鍵。目前,解決跨域訪問(wèn)的方式有以下幾種:
(1)JSON(JavaScript Object Notation)。JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,以文字為基礎(chǔ),易于閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。JSON與XML最大的不同在于XML是一個(gè)完整的標(biāo)記語(yǔ)言,而JSON 不是,它重點(diǎn)在于數(shù)據(jù)的交換[5]。
(2)Iframe。Iframe是HTML中的元素,即文檔中的文檔,或者浮動(dòng)的框架(FRAME)。相當(dāng)于在網(wǎng)頁(yè)中開(kāi)一個(gè)窗口,直接通過(guò)SRC屬性引用外部URI頁(yè)面。其特點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,可通過(guò)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)文檔。瀏覽器支持作為客戶端語(yǔ)言的JS跨域訪問(wèn)JS文檔(代碼),所以可以利用這一特點(diǎn)在服務(wù)器端將數(shù)據(jù)裝入JS文檔,再直接通過(guò)JS的SRC屬性獲取外部URL的JS文檔,最后在客戶端對(duì)JS文檔中的數(shù)據(jù)進(jìn)行分析和展示。Google AJAX Search API是這種應(yīng)用的典型代表,它通過(guò)SRC將編寫(xiě)好的JS控件引入客戶端,然后在客戶端通過(guò)AJAX調(diào)用經(jīng)過(guò)服務(wù)器端裝載的JS文檔數(shù)據(jù),從而實(shí)現(xiàn)搜索與展示搜索結(jié)果。
基于以上分析,JS是解決數(shù)據(jù)跨越訪問(wèn)的較好選擇。
在網(wǎng)絡(luò)環(huán)境中,用戶網(wǎng)站是多種編碼模式中的一種,如UTF-8、GB2312、GBK等。因而,需要對(duì)圖書(shū)館嵌入用戶環(huán)境中的信息資源根據(jù)客戶端網(wǎng)站自動(dòng)實(shí)現(xiàn)對(duì)應(yīng)的編碼??捎肑S的“document.charset”語(yǔ)句獲取客戶端編碼模式,并通過(guò)URL傳遞到服務(wù)器端,服務(wù)器端再對(duì)查詢的數(shù)據(jù)生成對(duì)應(yīng)的JS編碼文件。PHP中有專門的編碼轉(zhuǎn)換函數(shù)iconv,能較好地完成相關(guān)編碼的轉(zhuǎn)換。
雖然ODP提供了傻瓜式的JS代碼定制頁(yè)面[6],從這里定制的代碼基本能滿足大部分網(wǎng)站的需要,鏈接、字體大小默認(rèn)與網(wǎng)頁(yè)中的環(huán)境一致,但也提供了相關(guān)參數(shù)供用戶配置,以便高級(jí)用戶更加靈活利用,如標(biāo)題字符個(gè)數(shù)、每頁(yè)展示信息條數(shù)等均可由用戶自行設(shè)定。
此外,由于數(shù)據(jù)已經(jīng)裝入JS文檔,且因JS文檔的開(kāi)放性,對(duì)于熟悉JS編程的客戶來(lái)說(shuō),可自己根據(jù)JS文檔對(duì)數(shù)據(jù)進(jìn)行操作,一方面進(jìn)行展示效果的自由定制,另一方面通過(guò)裝載數(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)客戶端通過(guò)URL調(diào)用PHP程序頁(yè)面時(shí),首先判斷是否超過(guò)更新緩存JS文檔頁(yè)面的間隔時(shí)間,若超過(guò)更新間隔時(shí)間,則重新讀取數(shù)據(jù)庫(kù)并用新數(shù)據(jù)更新緩存JS文檔,供下次訪問(wèn)時(shí)使用,同時(shí)將緩存的JS文檔發(fā)送到瀏覽器;若沒(méi)超過(guò)更新時(shí)間間隔,直接將緩存的JS文檔發(fā)送到瀏覽器。緩存間隔時(shí)間可根據(jù)數(shù)據(jù)變動(dòng)的頻率、用戶量、服務(wù)器端服務(wù)能力和用戶對(duì)數(shù)據(jù)同步的要求來(lái)設(shè)定。
圖書(shū)館提供的嵌入式信息服務(wù)到底有沒(méi)有用戶利用,誰(shuí)在用,用的情況如何,這不僅是信息服務(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)緩存組件開(kāi)始緩存數(shù)據(jù)時(shí),完成對(duì)客戶端用戶情況的采集,包括用戶的域名(IP)、統(tǒng)計(jì)時(shí)間等信息。這種統(tǒng)計(jì)策略避免了頻繁統(tǒng)計(jì)造成網(wǎng)站服務(wù)效能降低,影響用戶體驗(yàn)。
客戶端嵌入的代碼首先是用來(lái)獲取用戶端的環(huán)境信息,包括客戶端的編碼方式、顯示數(shù)據(jù)區(qū)域等信息(見(jiàn)圖2中第一個(gè)腳本區(qū)域),然后再裝置從服務(wù)器端得到的信息內(nèi)容(見(jiàn)圖2第二個(gè)腳本區(qū)域),并以合適的方式在客戶端展現(xiàn)(見(jià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)建了圖書(shū)館信息服務(wù)的一個(gè)拓展平臺(tái),通過(guò)該平臺(tái)既可以實(shí)現(xiàn)如本文研究的網(wǎng)絡(luò)導(dǎo)航信息服務(wù),也可以為用戶提供通知通告、新聞動(dòng)態(tài)、專題信息、參考資源、學(xué)習(xí)資料等信息。基于JS的嵌入技術(shù)能將圖書(shū)館豐富的信息資源完全融入用戶信息環(huán)境,體現(xiàn)圖書(shū)館的泛在服務(wù)。
[1]王建濤,胡明玲.工具條在圖書(shū)館信息服務(wù)中的應(yīng)用[J].圖書(shū)情報(bào)工作,2007(2):121-124.
[2]樂(lè)小虬,等.嵌入式桌面信息服務(wù)及其系統(tǒng)實(shí)現(xiàn)[J].現(xiàn)代圖書(shū)情報(bào)技術(shù),2008(3):7-11.
[3]學(xué)術(shù)信息資源開(kāi)放目錄[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ù)開(kāi)放利用之:Mashup服務(wù)[EB/OL].[2011-1-10].http://odp.nit.net.cn/opendata/foryou.php.