Bookmarklet is a light and flexible library 2.0 technology. This article designs and realizes the OPAC service based on Bookmarklet, and provids a reference for using Bookmarklet to realize library 2.0 applications.
节省读者的时间是阮冈纳赞提出的图书馆五定律之一[ 1],如何为读者提供快速高效的服务是图书馆读者服务工作中应时刻关注的问题。读者在使用网络过程中,有时会有查询馆藏书目的需求。比如在浏览购书网站时,对于那些感兴趣的图书,若认为没有收藏的必要,在确定购买之前,通常会尝试在本校图书馆OPAC系统中查找是否有馆藏可供借阅。流程如图1所示:
根据2009年对北京市5所高校大学生网上购书行为的抽样调查发现,在大学生群体中,有过网上购书行为的人数达到了61.34%[ 2]。可见这样的需求确实存在。
此外,读者在一些其他情况下也会有快速检索馆藏的需求,为简化此程序,使读者能够方便快速地访问OPAC服务,本文基于Bookmarklet,提出并实现了快速OPAC访问技术,给读者提供方便快捷的服务。
自从在图书馆2.0中提出Bookmarklet以来,虽有部分研究文献提及,但通常都一带而过,很少论及具体实现和使用情况。通过探讨Bookmarklet的开发与应用实践,可以为图书馆2.0中使用此技术提升读者服务提供参考。
通过浏览器扩展技术,能使用户在任何时候快速访问特定资源。根据孙博阳对浏览器扩展组件在图书馆中的应用的研究,目前主要有5种实现方式[ 3]。其中工具条本质上也是浏览器插件,在这里将其合并,比较结果如表1所示。
Bookmarklet使用现代浏览器都支持的书签功能实现,兼容性好。安装和使用都非常方便。
User Script最初专门针对Firefox的Greasemonkey插件实现,现在其他浏览器也有支持插件,但部分代码在非Greasemonkey环境不能运行,兼容性较差[ 4]。沈奎林等使用此技术将馆藏信息Mashup到豆瓣网的页面显示,试用效果较好[ 5]。由于目前我国普遍使用的是IE或IE内核的浏览器,因此在使用前,一般要先安装Firefox浏览器,再安装Greasemonkey插件,最后再下载安装脚本文件。因此要广泛实际使用此方案具有较大的难度。另外文献[5]中技术较固定,仅对豆瓣网页面进行Mashup,不适用于其他购书、书评等网站。
浏览器的类别不同,工具条与插件实现技术各异,可根据需要设计实现各种浏览器扩展功能。因实现插件需要较高的软件开发技能,所以通常使用LibX这种配置后生成特定版本供读者下载安装的方式实现[ 6]。出于商业目的,工具条是国内使用非常广泛的浏览器扩展技术,甚至在有的浏览器菜单栏下,有4、5个工具条扩展整齐排列。也正因如此,导致部分用户不接受工具条和系统软件对工具条的清理。
IE、Firefox等浏览器都提供了Search Plugins接口,但设置方式不同,并且仅能通过关键词进行检索,用于书目检索时,灵活性较差。
综合上述分析,对于频繁使用图书馆服务的读者,可选择使用工具条这种使用广泛的实现技术。考虑到国内浏览器使用偏好及兼容性,对于其他读者,Bookmarklet则为比较好的选择。
国外图书馆应用中典型的Bookmarklet包括LibraryLookup和xISBN Bookmarklets。
Bookmarklet是在书签(Bookmarks)的基础上发展起来的。网络语境下的书签是指保存在本地的通用资源标识符(URI)。对于IE浏览器来说,书签又称为“收藏夹”,或者“互联网快捷方式”。
通用资源标识符以“HTTP:”、“FILE:”、“FTP:”等表示访问协议的字符串开始,然后是符合相应格式、表示资源定位的字符串。但对浏览器来说,除了上述格式的通用资源标识符外,若遇到“JavaScript:”这样的前缀,则会将其后的字符串作为JavaScript代码运行。此代码在执行的过程中,具有访问当前打开页面的权限,因此能够查看或修改页面内容。如果代码执行完毕返回已定义类型的结果,则浏览器将其作为新的网页打开;否则浏览器不会打开新的页面。因此通过设定代码返回未定义类型变量,则可以实现在没有页面重载的情况下,即时修改页面内容的作用[ 7, 8]。
将以“JavaScript:”开始,随后是可执行代码的字符串,作为书签保存在浏览器书签栏(如IE的收藏夹)中时,就可以称其为Bookmarklet。
LibraryLookup[ 9]是现在国外使用较多的图书馆OPAC访问Bookmarklet。在其官方网站上填写Base URL、Library Name,选择Vendor之后,就可以生成针对具体图书馆的Bookmarklet。采用默认选项生成的代码如下:
“javascript:setTimeout(′x99.focus()′,300);var%20re=/([\/-]|is[bs]n=)(\d{7,9}[\dX])/i;if(re.test(location.href)==true){var%20isbn=RegExp.2;var%20x99=window.open(′http://ksclib.keene.edu′+′/search/i=′+isbn,′LibraryLookup′,′scrollbars=1,resizable=1,top=0,left=0,location=1,width=800,height=600′);x99.focus();}”
通过分析代码可知,其实现方式比较简单:在当前页面的URL中查找前面是“isbn=”或“issn=”,后面为连续的8至10个数字,或7至9个数字加“X”的字符串,将其认定为ISBN或ISSN号,然后作为参数在新窗口中打开OPAC检索链接。
由于国内如豆瓣读书、当当网等大部分图书网站中没有采用ISBN或ISSN作为URL参数,因此不适合国内直接使用。同时这种实现要求OPAC服务必须接受GET方式提交检索,国内的OPAC并非都支持此方式。另外,使用此方法不能通过书名或作者进行检索。
有调查表明,69.9%的被调查者感到需要或非常需要LibraryLookup工具[ 10]。若能克服LibraryLookup的上述缺点,以适合国内使用习惯,则能更好地满足读者的需求。
xISBN是OCLC基于WorldCat的一项以ISBN号发现同一作品不同版本的Web服务[ 11]。OCLC在LibraryLookup基础上增加对xISBN服务的请求,这就是xISBN Bookmarklets[ 12]。激活此工具后,代码在选中文本或整个网页中找寻ISBN记录,将其作为参数在新窗口中访问“http://xisbn.worldcat.org:80/liblook/resolve.htm”,页面左侧显示xISBN查询结果,右侧显示设定馆藏OPAC的查询结果。
除了同LibraryLookup存在同样的问题外,此工具为显示xISBN记录,必须通过WorldCat网站的Resolve.htm才能显示馆藏检索结果。
本OPAC Bookmarklet工具(简称OPAClet)的设计目标是在不打开新页面的情况下,完成OPAC检索,因此需要实现的功能包括三个方面:在当前页面中增加检索界面、向OPAC服务器发送检索请求、显示检索结果。
整个过程的时序图,如图2所示:
OPAC检索过程大致分为以下6个步骤:
(1)读者浏览购书网站或任意网页。
(2)点击收藏夹的OPAClet书签将其激活。
(3)OPAClet访问当前页面获取参数,生成OPAC检索界面,并显示在当前页面中。
(4)OPAC界面检测是否具有检索参数(检测方式见图3),若有则自动提交检索请求。
(5)在读者确认检索项后,点击“检索”按钮,OPAC检索界面向服务器端OPAC服务发送检索请求。
(6)OPAC服务通过后台数据库得到结果并将其返回到检索界面。
OPAClet将决定生成怎样的检索界面,并且也将决定界面如何与读者和OPAC服务交互。为实现结构清晰及功能的模块化,将其分成三个部分:
(1)标签模块:本模块显示在浏览器书签栏中,具备Bookmarklet的所有特征,从结构来说,可看成一个独立的Bookmarklet。其作用是响应读者的点击,载入引导模块。
(2)引导模块:本模块首先检查当前页面中是否存在已生成的检索界面,如有则将其关闭;否则根据当前页面的编码情况载入对应的OPAC生成模块。
(3)界面生成模块:本模块为服务器端单独的JavaScript文件。在被引导模块载入后,它将生成能动态交互的OPAC检索界面。
3.3 检索界面设计
由于检索界面将动态嵌入读者正浏览的任意网页,因此,考虑到页面布局,检索界面需要设计得简洁美观。
(1)检索部分包括三个控件:
①检索项选择框,可选择是书名、ISBN等;
②检索项文本框,用于显示和输入检索内容;
③检索提交按钮。
(2)显示结果占据了大部分界面,在OPAC服务返回的数据较多的情况下,出现滚动条以显示全部内容。
在完成功能需求分析的基础上,具体的实现方式如下:
本馆现有OPAC功能采用ASP.NET访问后台SQL Server服务器的方式实现,有两种实现选择:
(1)开发OPAC服务:基于后台数据库,利用ASP或ASP.NET等实现书目检索Web服务。前台OPAC界面使用jQuery插件[ 13],使用JSONP技术[ 14]解决跨域问题,提交检索需求并处理返回的数据。
(2)利用原OPAC检索程序:检索表单的Action设置为原OPAC检索处理程序,检索结果返回至界面层中的IFrame框架中。
在综合比较两种方式的优缺点的基础上,为了提供简洁的检索结果,同时又支持查询详细信息,本系统决定将两者结合起来,检索结果包含书名、索书号和当前是否可借的信息。若需了解馆藏的详细信息,可点击书名在新窗口中打开链接查看。
如同常规书签,读者要使用OPAClet,首先必须将其添加到收藏夹中。为此,在本馆的OPAC检索界面中,添加一醒目的链接: “需要在任意网页中直接查询本馆OPAC吗?请点击这里”,让所有访问此页面的读者都了解并使用本工具。
OPAC.html页面首先简要介绍本工具,然后指导读者安装和使用。读者只需要在图标上单击右键,在弹出的菜单中选择“添加到收藏夹”即可完成安装,如图4所示:
页面中OPAClet图标的链接代码如下:
<a href="JavaScript:void((function(){var e=document.createElement(′script′);e.setAttribute(′src′,′http://www.lib.sicnu.edu.cn/bookmarklet/opac/init.js′); document.body.appendChild(e);})())" onclick="leftclick(event);" onfocus="this.blur()" title="川师大图书馆书目检索"><img src="/OPAClet.png" border=0/></a>
在自动获取检索参数或读者手动查询时,调用jQuery的Ajax函数通过JSONP方式提交查询请求,并处理从服务器端返回的JSON数组,关键代码如下。
$.ajax({
url:"http://www.lib.sicnu.edu.cn/dyna/opacsvc.asp",
data: strdata, dataType:"jsonp",jsonp:"jsonpcallback", async:true,
//处理返回的JSON数组
success:function(data){
var json=data.records;
var records_str;
//如果为空数组,说明没找到记录
if(json.length==0){
records_str="
//否则遍历数组,将每个记录以
}else{
records_str = "
- ";
- "+json[one].题名+" | 索书号"+json[one].索书号+" | 现可借:" +json[one].可外借数+"本 ";
for (var one in json){
records_str+="
}
records_str+="
}
//删除原有记录,并显示新的查询结果
$("#lib_data").detach();
$("#sicnu_lib_show_box").append(records_str).fadeIn("slow");
}
});
为与原OPAC系统程序兼容,服务模块采用ASP技术实现。在获取检索参数后,生成检索字符串strSql,创建ASP数据库连接对象cnn、记录集对象rst,然后执行查询语句得到记录集,关键代码如下:
set rst=cnn.Execute(strSql,,adCmdText)
returnStr="{skey:"&chr(34)&skey&chr(34)&",svalue:"&chr(34)&svalue&chr(34) &",records:["
//若记录集为空,则保存空JSON数组
if rst.eof=true and rst.Bof=true then
returnStr=returnStr+"]}"
//否则遍历记录集,将其保存为JSON数组格式
else
do while not rst.eof
one_book= "{"
for i=0 to rst.Fields.Count-1
one_book=one_book&chr(34) &rst.Fields(i).Name&chr(34)&":"&chr(34)&trim(rst.Fields(i).Value) & chr(34) &","
next
one_book=left(one_book,InStrRev(one_book,",")-1) & "},"
returnStr=returnStr & one_book
rst.movenext
loop
returnStr=left(returnStr,InStrRev(returnStr,",")-1) & "]}"
end if
//关闭记录集,向客户端返回JSON数组
rst.close()
set rst=nothing
response.write jsonp & "(" & returnStr &")"
在安装OPAClet后,读者浏览任何网站时,都可以通过收藏夹将其激活,生成悬浮在页面中部右侧位置的OPAC检索界面。此方式对原页面影响较小,通过鼠标滚动可继续浏览原页面。OPAClet获取初始检索参数,若成功获取则自动提交并返回检索结果。如图5所示,在当当网图书浏览界面,激活本标签工具,则自动出现了本馆OPAC查询结果。
通过下拉列表,还可以选择通过书名或作者等,手动输入后点击“检索”查询。点击书名可在新窗口中查看其详细情况。当不再需要本检索框时,点击检索界面右上侧的“X”符号,或再次在收藏夹中点击本书签,即可将其关闭。
本文在分析现有浏览器扩展技术的基础上,提出Bookmarklet是一种灵活、轻巧的图书馆2.0技术。但由于国内外情况差异,国外使用广泛的LibraryLookup和xISBN Bookmarklets工具在国内有一定的局限性,同时国内较少关注此技术的具体实践应用。针对此现状,结合本馆的OPAC服务,笔者设计和实现了OPAClet小工具,经推广使用之后,深受读者的好评。本研究在为读者提供更好服务的同时,也对图书馆2.0中Bookmarklet的具体实践提供了参考。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|