二维码技术在图书馆查询机中的应用与实现
李善杰
天津工业大学图书馆 天津 300387
通讯作者 李善杰 E-mail:lishanjie@tjpu.edu.cn
摘要

【目的】在查询机管理程序上显示所查询书目信息的二维码。【应用背景】针对SIRSI的OPAC模块中不提供所查询书目信息二维码显示功能, 为提高读者在查询机上的图书检索效率, 以查询机管理程序为承载媒介, 实现二维码显示功能。【方法】借助前期开发的查询机管理程序, 以HtmlAgilityPack和QrCode.Net开源组件为实现手段, 完成二维码所需书目数据的抽取和显示。【结果】在查询机上, 读者浏览书目详情页面时, 查询机管理程序上同时显示读者所查询书目信息的二维码。【结论】在应用部署后, 读者在查询机上的图书检索效率较之前得到明显提升。

关键词: 二维码; 开源软件; OPAC
文章编号: 2014-97-101
Application and Implementation of Two-dimensional Bar Code on Library Book Inquiry Machine
Li Shanjie
Tianjin Polytechnic University Library, Tianjin 300387, China
Abstract

[Objective] This paper is to display the query book information with two-dimensional bar code on the management program of the book inquiry machine. [Context] Because the SIRSI’s OPAC module cannot provide the function of the searched bibliographic information display with two-dimensional barcode, to improve retrieval efficiency of the library readers on the inquiry machine, using the management program of the book inquiry machine as a carrier platform to achieve the two-dimensional barcode display. [Methods] With the early development of the inquiry machine management program, and using the HtmlAgilityPack and QrCode.Net open source components as a method, implement the two-dimensional barcode bibliographic data extraction and display. [Results] When the reader browses the details of query results, the management program can also display the two-dimensional code at the same time. [Conclusions] The reader’s query efficiency on the inquiry machine is improved significantly.

Keyword: Two-dimensional bar code; Open source software; OPAC
1 引 言

随着计算机技术的发展以及智能手机的日益普及, 现在高校图书馆在为读者提供服务方面越来越偏重各种人性化功能的引入, 像清华大学图书馆为方便读者获取馆藏书目信息, 在OPAC系统中提供短信发送功能[1];南京大学图书馆为提升自身服务创新, 设立了Book+、Find+、Subject+等服务[2];厦门大学图书馆为方便读者利用移动设备获取书目馆藏, 在书目系统中提供二维码显示功能[3]等。随着高校图书馆更多地向数字化、创新化、服务化运行模式转变, 如何对读者所需数据进行人性化展现, 是现今高校图书馆工作者所要思考及解决的问题。

近些年, 随着条码技术的发展, 二维码技术日臻成熟, 它相比传统的一维码具有更高的数据存储能力和更好的数据展现能力, 因此, 高校图书馆迫切希望将其引入到图书馆的日常工作中来, 以此提升图书馆的服务水平。本文针对笔者所在图书馆使用的SIRSI书目管理系统中不提供馆藏书目二维码显示功能, 借助基于Windows系统下读者查询机这一读者公共平台, 通过对该平台上所部署的自建管理程序进行功能扩展, 在读者查询机上实现馆藏检索书目二维码展现功能, 以此来拓展图书馆的服务内容, 从整体上提升图书馆的服务质量和水平。

2 研究现状

随着开源技术的发展, 像PHP QR Code、ZXing、QrCode.Net等开源组件可轻松实现信息的二维码显示, 因此, 目前高校图书馆技术人员正在利用开源的便利条件, 根据本馆OPAC系统实现语言, 以二次开发的方式在OPAC系统中实现馆藏书目信息的二维码显示功能。梁永鸿等[4]以Interlib OPAC开发为例, 详细介绍了该馆应用Java技术抽取现有 OPAC系统中书目信息并将其转换为 QR 码图片, 通过手机传递给读者的实现过程。李健等[5]在Android系统的基础上, 设计并实现以图书导航服务为中心的图书馆个性化服务系统, 并详细介绍了该系统的设计思路及实现过程。而有近50家“211”院校使用的汇文图书管理系统, 其OPAC系统是基于PHP技术实现的, 在汇文软件技术人员的支持下或借助PHP QR Code组件也很容易实现原生的书目信息二维码显示功能, 目前像南京大学、上海交通大学、华东师范大学、北京师范大学等汇文系统用户的OPAC系统中都已开通二维码显示功能。而使用美国INNOPAC系统的清华大学、西安交通大学等图书馆, 使用美国SIRSI系统的天津TALIS联盟馆、天津大学、北京大学等图书馆, 由于其使用的书目管理系统中没有集成二维码显示模块, 到现在为止, 这些院校图书馆的OPAC系统中都没有提供这一功能。借助文献[6]中的“手机QR码在高校图书馆OPAC系统应用的分布情况”可以看出, 国内相当大一部分院校图书馆OPAC系统中还没有提供书目二维码显示功能, 因此, 高校图书馆今后在二维码的应用服务方面拓展空间很大。另外, 通过对比文献[6]中表1全国大部分院校所使用的书目管理系统后发现, 汇文V4.5对二维码的支持最好, 是原生态支持, 而笔者所在图书馆使用的SIRSI系统目前无法提供二维码显示功能, 使用该系统的院校也没有针对该功能尝试进行二次开发。

3 系统设计与实现
3.1 问题的提出

笔者所在图书馆在公共服务区部署了大约40台读者查询机, 通过一段时间的运行发现, 读者查询机利用率很高, 但是读者的图书检索效率却不理想, 有时还会出现读者使用查询机需排队等待的现象。通过分析发现:读者检索能力不足、需花费时间记录书目馆藏信息、智能终端拍摄检索结果效果不理想等是造成检索效率不高的主要原因。要改善这种状况, 除针对读者加强其自身检索能力的培训外, 若在现有OPAC系统中(或者查询机上)建立与读者间进行馆藏书目信息传递的媒介也会对检索效率的提升带来很大的帮助。现有的技术中, 二维码技术可以将文本信息转换成图片输出, 当下的智能手机几乎都具有将带有二维码的图片还原成文本信息的能力, 因此, 将二维码技术作为查询机与读者间进行信息传递的媒介是改善图书检索效率的有效方案。

3.2 系统技术路线

考虑到本馆使用的SIRSI系统是TALIS联盟共用一套系统软件、在一台服务器上运行并由第三方托管的现状, 在无运行管理权的情况下, 针对OPAC系统实施功能拓展非常困难。但鉴于本馆公共查询机上安装的全部是自建管理程序, 读者在查询机上进行的操作及可浏览的内容都是通过查询机管理程序来实现的, 将查询机管理程序作为检索书目二维码显示功能的拓展承载平台非常合适。所以, 本系统技术方案为:通过查询机管理程序中的WebBrowser控件获取读者正在浏览的内容;将该信息提交给HtmlAgilityPack开源组件去解析;最后根据解析结果决定是否由QrCode.Net组件将带有馆藏书目信息的二维码显示出来。在整个方案的实施过程中, 所有操作都是由查询机管理程序来负责调度和处理。

3.3 系统设计思路

在具体实现中, 已开发的查询机管理程序是本次系统实施的核心框架, 但限于篇幅, 具体的实现方法不做介绍。它的实现原理是:首先, 编写一个Windows系统下的Shell程序代替操作系统默认的Explorer, 使系统启动后直接运行该Shell, 接管系统桌面;然后, 通过编写键盘驱动和GINA程序实现屏蔽系统消息及完成自动登录系统等工作;最后展现在读者面前的就是一个浏览器界面, 至此读者在查询机上进行OPAC查询的所有操作都是在该界面下完成的, 具体实现可参见文献[7]。有了这一框架, 要实现书目查询结果的二维码显示, 先在查询机管理程序的WebBrowser控件的DocumentCompleted事件中获取读者当前浏览的内容, 借助 HtmlAgilityPack组件解析读者所浏览网页的HTML代码, 通过分析源代码中是否含有id为detail_item_information的div元素, 判断当前读者是否在浏览书目详细信息。如果是, 则从中解析出书目馆藏信息并组合馆藏地理信息, 创建QrCode.Net控件, 显示书目馆藏二维码。系统设计思路如图1所示:

图1 系统设计思路

3.4 相关技术

(1)HtmlAgilityPack

HtmlAgilityPack[8]是CodePlex网站上的一个开源项目, 是由法国软件架构师Simon Mourier首先提出, 并且由Darth Obiwan 以及Jessynoo辅助开发出来的一个软件工具, 它可以让解析HTML这种松散格式文档的工作就像解析 XML文档一样简单, 它也有类似于System.Xml命名空间中的XML DOM的许多类别, 除了可以使用阶层的方式存取HTML以外, 也支持使用XPath的方式来搜寻HTML, 这比以往使用文字比对或是Regular Expression比对方式更加明了。

(2)QrCode.Net

QR Code码是由日本Denso公司于1994年9月研制的一种矩阵二维码符号, 它具有一维条码及其他二维条码所具有的信息容量大、可靠性高、可表示汉字及图像等多种文字信息、保密防伪性强等优点。QrCode.Net[9]是CodePlex网站上的一个开源项目, 其创建目标是依据ISO/IEC 18004标准, 为广大开发者提供一个开放源代码、易于使用、能完全控制管理的.NET二维码输出类库。

3.5 功能实现

按照上面的设计思路, 实现书目检索信息二维码显示的系统数据处理流程如图2所示:

图2 系统数据处理流程

限于篇幅, 仅重点介绍书目信息解析和书目二维码生成的实现。

(1)书目信息解析的实现

HtmlAgilityPack可通过GetElementbyId、Select Nodes、SelectSingleNode等方法快速得到HTML文件结构中的某一节点的内容信息, 它还支持XPath方式获得节点集合。但在使用该组件前, 首先要进行初始化, 代码如下所示:

HtmlAgilityPack.HtmlDocument ha = new HtmlAgilityPack.

Html Document();

ha.Load(webn.DocumentStream, Encoding.UTF8);

//webn为可视化组件WebBrowser

在获取馆藏书目信息节点前, 为使获取节点信息准确, 首先需去掉HTML代码中的注释信息, 代码如下所示:

if (null != ha.DocumentNode.SelectNodes("//comment()"))

{

foreach (var comment in ha.DocumentNode.SelectNodes ("//comment()").ToArray())

{comment.Remove();//移除注释}

}

完成上述准备工作之后, 只要获取id为“detail_ item_information”的div对象节点, 就可完整的获取馆藏书目信息, 代码如下所示:

HtmlAgilityPack.HtmlNode hn = ha.GetElementbyId("detail_ item_information");

HtmlNode firstdl = hn.SelectNodes("dl")[0];//定位书目信息位置

foreach (HtmlNode t in firstdl.SelectNodes("dd"))

//遍历节点取出信息

{

if (t.Attributes["class"].Value.ToLower().Trim().

Equals("title") == true)

{ bookname = t.InnerText.Trim();}

//此处省略获取其他内容的实现代码

}

在提供给读者的二维码中, 除需要书目信息外, 还需要书目的馆藏位置信息。而HtmlAgilityPack组件以XPath的方式获取节点信息更为简便准确, 因此, 以XPath的方式获取检索书目馆藏位置信息的代码如下所示:

HtmlNode ht = hn.SelectSingleNode("ul/li/table");

//馆藏位置的XPath为ul/li/table

foreach (HtmlNode hr in ht.SelectNodes("tr"))

{

HtmlNodeCollection htd = hr.SelectNodes("td");

if (htd.Count == 1) //获取馆址信息

{loc=htd[0].InnerText.ToLower()).Replace(" ", "");}

if (htd.Count == 4) //获得具体数目馆藏信息

{string tmp = htd[3].InnerText.Trim().ToLower(). Replace(" ", "");}

//此处省略获取其他内容的实现代码

}

解析完成后, 将馆藏书目信息和该书目的地理位置信息交给QrCode.Net二维码显示组件即可。

(2)书目二维码的生成

使用QrCode.Net类库将文本信息输出为二维码的过程相对简单, 在MS Visual Studio开发工具中直接拖出QrCode.Net控件, 然后设置该控件的相关属性即可, 实现代码如下:

qrzone.Location = new Point(9, 10);

//定义类库组件在容器中的位置

qrzone.ErrorCorrectLevel = ErrorCorrectionLevel.M;

//定义错误纠正级别

qrzone.QuietZoneModule = Gma.QrCodeNet.Encoding.Windows. Render.QuietZoneModules.Two;

//定义QuietZone模块数

qrzone.Size = new Size(200, 200);//定义类库组件显示大小

qrzone.Text = "天津工业大学图书馆";//设置二维码显示的内容

(3)效果评估

经过以上开发, 在读者查询机上, 书目查询结果中馆藏信息的二维码显示效果如图3所示。另外, 为免除二维码显示框在非书目详情页面时出现而带来的视觉干扰, 实现人性化设置, 系统在分析读者浏览动作时, 只有在读者浏览书目详情页面时, 才会显示二维码显示框。

图3 书目信息二维码显示效果

通过测试之后, 本系统目前已在天津工业大学图书馆投入使用, 系统各方面运行状况良好。为便于说明在书目查询机上部署二维码显示功能带来的变化, 笔者将2012年未部署二维码显示功能时的查询机读者使用次数与2013年部署后的情况进行了对比, 如图4所示:

图4 书目查询机读者访问量对比

随着系统使用过程中遇到的问题以及总结来自读者的反馈, 还存在以下几方面需要改进:

①馆藏地理信息需逐步细化

目前, 系统中提供的馆藏地理信息只是包含楼层和房间号, 还没有细化到具体的书目架位位置, 系统也不提供具体的导航路线图供读者参考, 因此, 笔者正在仔细分析本馆的馆藏格局与现有自动化系统所提供的书目详情信息之间的关系, 完善馆藏地理信息呈现方式, 提高读者的使用体验。

②新增功能的宣传需要加强

本系统已经搭建了读者与所查询书目馆藏信息的媒介(二维码), 但是有的读者还不了解二维码的用途, 不清楚系统提供二维码的作用, 因此, 读者使用习惯的改变需要一个过程, 对新技术的了解也需要普及, 图书馆在以后的工作中需要加强新技术、新服务的宣传力度, 只有这样才能让读者逐渐接受新技术的便利和快捷。

4 结 语

图书馆是大学的一个重要教学辅助部门, 由于每个大学图书馆使用的书目管理系统各有不同, 因此, 如何根据实际情况, 将新兴技术运用到读者服务是图书馆技术人员所要思考的问题。本文结合自己开发的查询机管理程序, 在无法修改OPAC系统代码的基础上, 提出了一种新的书目信息二维码展现方式, 弥补所使用书目管理系统功能上存在的不足, 在真正意义上为广大读者提供优质的服务, 提升图书馆的服务水平和质量。

参考文献
1 清华大学图书馆馆藏目录[EB/OL]. [2013-10-12]. http://innopac.lib.tsinghua.edu.cn/. (Tsinghua University Library OPAC[EB/OL]. [2013-10-12]. http://innopac.lib.tsinghua.edu.cn/ [本文引用: 1]
2 南京大学智慧图书馆创新服务[EB/OL]. [2013- 10-12]. http://lib.nju.edu.cn/html/article.htm?id=88&fid=49. (Nanjing University Wisdom Library Innovation Service [EB/OL]. [2013-10-12]. http://lib.nju.edu.cn/html/article.htm?id=88&fid=49 [本文引用: 1]
3 厦门大学图书馆书目检索系统[EB/OL]. [2013-10-12]. http://210.34.4.28/opac/search.php. (Xiamen University Library OPAC[EB/OL]. [2013-10-12]. http://210.34.4.28/opac/search.php [本文引用: 1]
4 梁永鸿, 苏宁. 手机二维码在图书馆OPAC中的应用与实现[J]. 无线互联科技, 2011(3): 58-59.
(Liang Yonghong, Su Ning. Two-dimensional Code Application and Practicing in OPAC System[J]. Wireless Internet Technology, 2011(3): 58-59. ) [本文引用: 1]
5 李健, 杨京峰, 张成昱. 条形码/二维码技术在图书馆个性化服务中的应用与实现[J]. 现代图书情报技术, 2012(2): 82-86.
(Li Jian, Yang Jingfeng, Zhang Chengyu. Application and Implementation of Bar Code and Two-dimensional Bar Code in Library Personalized Services[J]. New Technology of Library and Information Service, 2012(2): 82-86. ) [本文引用: 1] [CJCR: 1.073]
6 朱丽君, 亢琦, 代学冬. 手机QR 码在OPAC 馆藏目录检索中的应用现状调查与思考——以“211工程”院校为例[J]. 图书馆学研究, 2012(20): 61-66.
(Zhu Lijun, Kang Qi, Dai Xuedong. Mobile QR Code in OPAC Catalog Retrieval Survey and Thinking[J]. Research on Library Science, 2012(20): 61-66. ) [本文引用: 1]
7 李善杰. 基于Windows平台构建OPAC检索机的研究与实现[J]. 现代图书情报技术, 2007(12): 74-77.
(Li Shanjie. Research and Implementation of OPAC Search Machine Based on Windows Platform[J]. New Technology of Library and Information Service, 2007(12): 74-77. ) [本文引用: 1] [CJCR: 1.073]
8 Html Agility Pack[EB/OL]. [2013-09-02]. http://htmlagility-pack.codeplex.com. [本文引用: 1]
9 QrCode. Net [EB/OL]. [2013-09-02]. http://qrcodenet.code-plex.com. [本文引用: 1]