e读在SULCMIS OPAC中的应用——以深圳大学图书馆为例
林伟明
深圳大学图书馆 深圳 518060
摘要
针对SULCMIS OPAC仅提供书目的详细信息, 缺少目次、摘要等信息的问题, 结合e读的优点, 提出基于e读Open API整合的方案, 并采用HttpWebRequest、XML等技术在SULCMIS OPAC中集成e读的目次、摘要、章节试读、电子资源全文阅读等信息, 丰富OPAC的服务内容, 提升图书馆的服务能力。
关键词: e读; SULCMIS; OPAC整合; XML
E-reading Used in SULCMIS OPAC ——Taking Shenzhen University Library as an Example
Lin Weiming
Shenzhen University Library, Shenzhen 518060, China
Abstract
One problem SULCMIS OPAC face is displaying only detail information for a bibliographic without some information such as catalog, abstract and so on. Making full use of the advantage of e-reading can solve this problem. This paper proposes an integration solution for SULCMIS OPAC based on e-reading’s Open API. Finally SULCMIS OPAC is integrated with catalog, abstract, try-read and full text of e-books service with technologies of HttpWebRequest and XML, which can enrich the service contents of OPAC and improve the service ability of library.
Keyword: E-reading; SULCMIS; OPAC integration; XML
1 引 言

e读是中国高等教育文献保障系统CALIS提供的学术搜索引擎, 旨在整合全国高校纸本和电子资源, 为读者在海量的全国图书馆资源中提供检索服务。e读有4个方面的优势[ 1, 2]:收录了丰富的资源;便捷获取原文;提供了SaaS与API定制、分面浏览、输入提示、聚类检索等良好的用户体验;基于云的服务模式, 协助成员馆零投入建立电子图书馆。截止到2012年3月底, e读服务的成员馆数已经有800多家[ 1]。OPAC是图书馆揭示馆藏文献的重要途径之一, 传统的OPAC仅提供书目的详细信息已经无法满足读者浏览的需求。e读提供的目次、摘要、章节试读、电子资源全文阅读等服务正好弥补了OPAC这一缺陷, 丰富了OPAC的服务内容, 提升了图书馆的服务能力。

因此, 在深圳大学图书馆获批CALIS的“e读服务示范馆建设”项目这一契机下, 笔者基于e读的Open API, 在SULCMIS OPAC的书目详细信息页面集成了目次、摘要、章节试读、电子资源全文阅读、链接e读 (如果是期刊则链接到CALIS的外文期刊网CCC) 的功能, 为读者带来了便利。笔者对CALIS三期74家e读示范馆的OPAC
与e读集成的实践情况进行了调研 (有8家无法访问) , 其中通过ISBN的检索方式链接e读的有12家, 通过题名的检索方式链接e读的有21家, 直接能链接到e读提供的详细书目信息的有3家, 使用了e读的目次、摘要等服务的有2家 (湖南理工学院图书馆和深圳大学图书馆) , 只有深圳大学图书馆使用SULCMIS OPAC。

2 需求及技术思路
2.1 SULCMIS OPAC的现状及需求

深圳大学图书馆基于多层MVC框架模式采用ASP.NET实现了新版本SULCMIS OPAC[ 3], 并于2009年1月1日正式对外发布。系统的详细书目信息页面不仅展示书目信息, 还展示了相关电子资源、藏书情况、读秀或Google提供的图书封面、二维码、借阅次数、评分、相关借阅、各种途径的扩展检索等信息, 却缺少对书目目次、摘要的揭示, 也没有提供试读及全文阅读的功能。为了更全面地揭示文献, 便于读者更好地利用书目, 迫切需要在OPAC中加入上述功能来满足读者的需求。

2.2 e读的作用及其API使用方法

CALIS针对图书信息、期刊信息、期刊文章信息、学位论文信息在e读中提供了一系列的Open API[ 4], 其中图书信息包括封面、目次、摘要、试读链接、全文链接、图书在e读的详细信息页面地址。这些服务恰恰可弥补SULCMIS OPAC的不足之处, 是深圳大学图书馆解决OPAC无法更全面揭示文献的有效途径。在实践过程中, 笔者调用了“获取文本形式的目次”、“获取图书摘要”、“获取图书试读链接”、“获取图书全文链接”、“获取图书在e读的详细信息页面地址”这5个API。另外, 对期刊的处理不是使用e读的API, 而是通过ISSN直链到CALIS的外文期刊网CCC, 因此不在此处进行描述。

e读提供两种调用方式:基于CALIS控制号 (calis uuid) 和基于图书馆本地控制号调用。二者都必须使用CALIS基于授权的安全访问方式,本馆选用了后者。下面以“获取图书试读链接”API为例, 介绍调用的过程, 其他API的调用可以参考此过程及相关文档。“获取图书试读链接”基于图书馆本地控制号的调用地址为:

http://api.calis.edu.cn/book/sample/localid?calis_clientkey={client_key}&localid={local_id}&calis_parameters={calis_parameters}&calis_sign={calis_sign}

这里{client_key}是由CALIS分配给成员馆的client key, {local_id}是本地控制号, {calis_parameters}是用Base64对调用参数按一定格式加密后的结果, {calis_sign}是基于CALIS分配的client key及client secret对规定的参数进行Base64+MD5加密后的结果。API返回的是XML数据, 如图1所示:

图1 “获取图书试读链接”API返回格式示例

在获得返回结果后, 可使用XPath解析。XML数据的查询早在2007年已经广泛应用[ 5], 因此在OPAC中解析e读API的返回结果是容易实现的。

2.3 集成思路

在上述OPAC需求及e读调用分析的基础上, 笔者拟采用ASP.NET+XML调用e读API, 实现SULCMIS OPAC与e读的集成, 如图2所示:

图2 SULCMIS OPAC集成CALIS服务示意图

图2中加粗边框的为SULCMIS OPAC需实现的模块。为方便其他使用SULCMIS OPAC的图书馆进行集成, 运用配置文件管理调用时使用的参数, 例如CALIS分配的{client key}、API的调用地址等。

页面部分的实现, 可采用Ajax把服务调用结果与书目信息页面一起呈现, 也可基于链接的方式进行呈现。前者可使用jQuery[ 6]或Prototype[ 7]实现。鉴于SULCMIS OPAC采用的JavaScript框架为Prototype, 如果采用jQuery, 两者都使用﹩符号会产生冲突, 需在引入jQuery的JavaScript后, 加上“var jQuery=﹩;”, 后面一律使用jQuery来代替﹩符号。本馆主要采用了基于链接的方式在书目信息页面bookinfo.aspx展示e读服务。读者点击链接时, OPAC会通过实现的e读API调用服务, 获取具体的e读信息。

综上所述, 总体的集成流程为:

(1) 参考《CALIS_API参考手册》[ 4], 在SULCMIS OPAC中实现calis_parameters和calis_sign的加密;

(2) 在SULCMIS OPAC中增加配置文件, 管理client key, client secret以及调用的API地址;

(3) 使用ASP.NET的HttpWebRequest、HttpWebResponse调用这些API, 最后采用XPath技术对返回结果进行解析;

(4) 在书目信息页面bookinfo.aspx中加入相应的HTML代码, 集成e读服务。

3 具体实现步骤

根据2.3节集成思路可知, 整个集成过程中服务端需在ASP.NET环境下使用加密、可配置、Open API调用、XML解析等技术, 页面端需加入相应的HTML代码, 下面以集成e读的试读服务为例, 介绍整个过程。

3.1 服务端的实现

(1) 对calis_parameters和calis_sign进行加密。对calis_parameters的加密实现过程为:根据调用的API从配置文件中取得要加密的参数内容, 形成待加密串;使用Base64加密待加密串。calis_sign的加密实现过程为:对client_key、calis_parameters、client_secret按文档规定的格式进行字符串拼接, 形成待加密串;使用MD5加密待加密串;使用Base64加密上一步中的加密串。

(2) 使用ExeConfigurationFileMap从配置文件中读取试读API的地址, 并根据书目的本地控制号及加密后的calis_parameters和calis_sign形成具体的调用地址。整个集成的过程, 涉及参数有CALIS 为成员馆分配的client key及client secret、获取目次、摘要、试读、全文、e读链接等地址。因此采用ASP.NET中的配置文件技术*.config来管理这些参数, 方便其他图书馆进行配置。另外, e读API的返回结果中有三个特殊的地方:如果API返回的是在e 读中的地址, 那么地址前会显示“细览页面地址=”;如果返回的是试读的地址, 那么地址前会显示“试读=”;如果返回的是全文的地址, 那么地址前会显示“全文=”。所以也考虑把这三种情况通过配置文件管理, 整个配置文件如下:

(3) 使用ASP.NET提供的HttpWebRequest发起调用请求, HttpWebResponse获取响应并从中得到返回的数据流。由于返回的是XML数据, 可使用XmlDocument从数据流中读取, 并设定其内部的命名空间运用XPath获得相应的内容。

服务端实现试读API调用的关键代码如下:

①基于加密算法构造calis_parameters和calis_sign。

string calis_parameters = EDUEncrypt.encryptParameters (parameters) ;

string calis_sign = EDUEncrypt.encryptSign (sign) ;

②使用ExeConfigurationFileMap读取配置文件。

ExeConfigurationFileMap map = new ExeConfigurationFileMap () ;

map.ExeConfigFilename = Server.MapPath ("..\config\xxx.config") ; //设定配置文件路径

Configuration config = ConfigurationManager.OpenMappedExeConfiguration (map, ConfigurationUserLevel.None) ;//打开配置文件

③取得需要的参数。

AppSettingsSection appsetting = config.GetSection ("appSettings") as AppSettingsSection;

sample_book_url = appsetting.Settings["sample_url"].Value;

//取得调用的API地址

④构造具体的API调用地址。

string api_url = sample_book_url.Replace ("{clientkey}", client_key) .Replace ("{localid}", localid) .Replace ("{parameters}", calis_parameters) .Replace ("{sign}", calis_sign) ;

⑤创建HttpWebRequest对象, 发起请求。

HttpWebRequest req = (HttpWebRequest) WebRequest.Create (api_url) ;//创建HttpWebRequest对象

res = (HttpWebResponse) req.GetResponse () ;

//发起请求, 取得响应

⑥如果调用成功, 则获取响应流, 读取返回结果。

if (res.StatusCode == HttpStatusCode.OK) {//调用成功

Stream stream = res.GetResponseStream () ;

sr = new StreamReader (stream, System.Text.Encoding.GetEncoding ("utf-8") ) ;

samplecontent = sr.ReadToEnd () ;} //读取返回结果

⑦构建XmlDocument对象从字符串中读取XML。

XmlDocument xd = new XmlDocument () ;xd.LoadXml (toccontent) ;//从字符串中读取XML

⑧设定XML命名空间以及XPath。

XmlNamespaceManager nsp = new XmlNamespaceManager (xx.NameTable) ;

nsp.AddNamespace ("CALIS_book", "http://www.calis.edu.cn/metadata_ns/1.0/book/") ;//设定命名空间

XmlNode node = xx. SelectSingleNode ("CALIS_book:book/CALIS_book:extInfo/CALIS_book:calisSource", nsp) ;//XPath表达式

⑨对应用XPath后的检索结果进行处理。

if (node!=null) return node.InnerText.Replace (sample_url_prefix, "") ;

3.2 页面端实现

考虑到SULCMIS OPAC的书目详细信息页面已展示比较多的内容, 如果直接在页面上展示目次、摘要等信息, 会影响读者的体验, 因此采用直接增加链接的方式展示e读服务。打开OPAC目录下的bookinfo.aspx, 找到希望放置的位置, 加入如下代码, 并在OPAC的多语种配置文件中, 加入试读等配置:

4 应用效果

读者在集成了e读服务的SULCMIS OPAC上访问图书的详细信息页面时, 可以看到“看目次”、“看摘要”、“试读”、“全文”、“链e读”等服务, 如图3所示:

图3 SULCMIS OPAC集成e读后的效果

点击这些服务后, 能获得相应的内容。具体效果可访问http://opac.lib.szu.edu.cn/opac/bookinfo.aspx?ctrlno=722654。实践证明, 在SULCMIS OPAC中应用e读, 完善了OPAC的服务内容, 让读者获得了更多的书目信息体验。

5 结 语

集成了高校所有资源的e读为各个图书馆带来了一种新的服务模式, 传统OPAC书目信息中缺少的内容可以由e 读通过Open API的方式集成到OPAC中。本文基于e读的API, 实现了SULCMIS OPAC与e读的集成, 加强了OPAC对书目的目次、摘要、章节试读、全文阅读等信息的展示, 使图书馆更好地为读者进行文献的揭示, 提升了图书馆的服务能力。其他使用SULCMIS OPAC的图书馆可以直接使用本文的实践来集成e读的服务。

参考文献
[1] e读学术搜索服务[EB/OL]. [2012-12-17]. http://www.calis.edu.cn/educhina/pages/calisservices.jsp#2. ( Scholarly Resources Retrieval Service with E-reading[EB/OL]. [2012-12-17]. http://www.calis.edu.cn/educhina/pages/calisservices.jsp#2. ) [本文引用:2]
[2] 扈志民. 从e读推广看图书馆信息资源共建共享新方向[J]. 图书馆学研究, 2011 (11) : 74-76. (Hu Zhimin. From E-Reading Promotion to See the Direction of Library Information Resource Construction and Sharing[J]. Research on Library Science, 2011 (11) : 74-76. ) [本文引用:1]
[3] 胡振宁, 杨巍, 丁培, 等. SULCMIS OPAC多语言界面的设计与实现[J]. 现代图书情报技术, 2013 (2) : 70-76. (Hu Zhenning, Yang Wei, Ding Pei, et al. Design and Implementation of Multi- Language Interface in SULCMIS OPAC[J]. New Technology of Library and Information Service, 2013 (2) : 70-76. ) [本文引用:1]
[4] CALIS_API参考手册[EB/OL]. [2012-04-11]. http://api.calis.edu.cn/sfgapi/download/CALIS_API.doc. ( Reference Manual of CALIS_API[EB/OL]. [2012-04-11]. http://api.calis.edu.cn/sfgapi/download/CALIS_API.doc. ) [本文引用:2]
[5] 孔令波, 唐世渭, 杨冬青, 等. XML数据的查询技术[J]. 软件学报, 2007, 18 (6) : 1400-1418. (Kong Lingbo, Tang Shiwei, Yang Dongqing, et al. Querying Techniques for XML Data[J]. Journal of Software, 2007, 18 (6) : 1400-1418. ) [本文引用:1] [CJCR: 2.181]
[6] jQuery[EB/OL]. [2013-07-06]. http://jquery.com/. [本文引用:1]
[7] Prototype[EB/OL]. [2013-07-06]. http://prototypejs.org/. [本文引用:1]