王红 李文清 雷菊霞
〔摘要〕对图书馆开源软件Koha的专业特点和技术特征进行了深入全面的介绍,以Koha为例挖掘了开源软件技术与应用的优缺点,探索我国图书馆开源软件的可行性,通过分析开源图书馆软件在国外的发展动力,对我国图书馆开源软件的发展提出建立人才、技术、知识储备的路径。
〔关键词〕图书馆;开源软件;Koha;开源软件;技术特点;开源许可证;云计算
DOI:10.3969/j.issn.1008-0821.2018.02.015
〔中图分类号〕G25076〔文献标识码〕A〔文章编号〕1008-0821(2018)02-0096-05
Analysis and Enlightenment on Technical Features of the
Open Source Software Used in Library
——Taking Koha 322 as an Example
Wang Hong1Li Wenqing2Lei Juxia3
(1.Library,Shanxi University of Finance and Economics,Taiyuan 030006,China;
2.School of Information Management,Shanxi University of Finance and Economics,Taiyuan 030006,China;
3.Library,Beijing Normal University,Beijing 100875,China)
〔Abstract〕The paper introduced the professional and technical features of the open source software koha used in the library thoroughly and comprehensively.Taking koha 322 as an example,it explored the strength and weakness of the software in its application,probed the feasibility of its application in chinese library.Based on the analysis of the development of the software in foreign countrys libraries,the paper came up with ways for the development of the open source software in our countrys libraries and on how to prepare for it from such aspects as talents,technology and knowledge.
〔Key words〕library;open source software;Koha;open source;technical features;license for open source;cloud omputing
进入21世纪以来,国外图书馆行业开始关注开源技术在图书管理领域的探索,开放源码逐渐成为一种发展趋势。Koha Library Software(以下简称Koha)作为第一个图书馆开源软件,自2000年7月由新西兰Horowhenua Library Trust社团图书馆委托Katipo开发,以图书馆专业技术人员为主体,围绕Koha的技术发展与应用,开展了一系列持续不断的研究和探索,从最初Koha-100版只提供图书馆简单应用,陆续实现了MARC的导入导出、MARC21和UNIMARC技术标准对接、Z3950服务器数据接口、利用Zebra实现Koha系统的Simple Z3950检索服务、多语言版本与转换和元数据收割协议对接等功能。截至2016年11月,Koha已经推出完全基于WEB表单编目风格的32212版和在WEB页面上类似于传统单机版编目风格的Koha-160505版。
Manisha Singh[1]、Bojan Macan等[2],认为Koha具有先进的数据库功能,易于安装,对MARC21和UNIMARC书目著录和有着良好的支持,Don Keast[3]等分析了英国皇家伦敦医院图书馆、法国3所大学图书馆、意大利图书馆联盟等图书馆部署和使用Koha的情况后,认为Koha安装简易、与传统的系统耦合性好,支持更多的专家库。Ian Walls、Farasat Shafi-Ullah发现Koha可以快速的完成数據迁移。HFrank[4]认为虚拟化和云计算在图书馆应用方面,可以有效优化硬件资源、节约潜在的成本;Denis Galvin,Mang Sun认为图书馆可以充分利用云计算的3个模式开展服务[5];国内图书馆理论界,早在2006年的数字图书馆与开放源码软件(OSS)研讨会为契机,就开始关注图书馆自动化软件,而台湾地区也开展了Koha繁体版的汉化与推广工作。总的来看,这些研究工作主要集中在开源软件推广的策略分析[6]、启发与借鉴[7],以及参考英文版和繁体版Koha进行的功能介绍[8]与尝试性研究[9]方面,对于Koha在图书馆专业层面的特色研究,以及探索Koha本地化开发和功能扩展研发等技术性工作,还停留在表面描述和外围尝试性研究阶段。
1Koha简介
11开源许可证
任何软件都需要基于许可证授权实现购买和使用。Koha是依据开源许可证发行的自由软件。开源许可证是指在开源软件协议基础上,对用户提供的使用授权,并对代码修改者依据开源协议提出约束性要求。开源许可证一般称为GPL(General Public License,以下简称GPL),核心含义是软件的版权属于公共群体,供公共群体自由使用,反对并排斥任何以版权名义,据开源软件版为私有授权的行为。开源许可证种类很多,并常常与推出开源许可证的机构名称关联,一般比较常用的开源许可证主要有:GNU GPL许可证(GNU General Public License,以下简称GNU、)、MPL许可证(The Mozilla Public License,以下简称MPL)、BSD许可证(Berkly Software Distribution,以下简称BSD)等。Koha系统在开源许可证约束下,终端的图书馆用户自动获得使用授权,用户可以自由使用Koha,并对Koha进行后续性开发;对于在Koha基础上进行源码的修改、增加等,则要求开发者依据开源协议,无条件开放源码并自由分发,开发者仅可以向委托开发的用户收取一定的服务性费用。
12Koha运行环境开源
从Koha系统运行的操作系统、数据库、Web服务器,到Koha开发使用的Perl语言解释器、Javascript,以及索引技术Zebra搜索引擎等,都完全使用了基于GNU和BSD许可证的各种开源协议。主要包括基于开源的操作系统、开源Web服务器数据、开源语言与解释器开发,以及Koha系统的索引技术等。
121基于开源操作系统
Koha系统官方推荐的操作系统平台是Ubuntu桌面版操作系统,Ubuntu操作系统作为Linux操作系统的一个分支,Ubuntu桌面版操作系统的许可证继承了Linux的GNU公共许可证。由于Koha是基于Linux操作系统运行的,因此Koha也可以在其他各种Linux分支的操作系统上运行。
122基于开源Web服务器数据库
Koha默认的Web服务器,采用基于AL20即Apache许可证的Apache服务器系统;Koha系统默认的数据库采用Mysql数据库,也适用于PostgreSQL数据库。Mysql数据库是基于GPL许可证发行的,PostgreSQL数据库则是基于BSD许可证发行的。
123基于开源语言与解释器开发
Koha系统是由Perl语言开发的,其中前端部分使用了Javascript技术。Perl语言基于GNU许可证发行,被广泛用作Web编程、数据库处理、XML处理以及系统管理等领域,已经被所有Unix、Linux系统捆绑在一起作为标准部件发布。Javascript语言的授权使用与GPL兼容的MIT许可证,或者由用户根据需要选择使用GNU许可证。
13多语言国际化
Koha完全采用UTF-8编码标准,可以适用任何语言编码的字符集。Koha的程序文件按照UTF-8无BOM头方式进行存储,浏览器端则通过〈meta charset=UTF-8″〉调用UTF-8字符集显示,数据库把客户端来源数据使用的字符集、连接层字符集、查询结果字符集、系统元数据字符集等设置成UTF-8格式后,数据在存储、传输过程中的字符格式保持一致。
2Koha技术特点
21云计算应用特征
Koha是以B/S结构运行的,根据网络服务情况,既可单机安装运行,也可在其他网络终端机提供WEB应用服务,部署方式较为灵活。以本地单机方式运行,可以作为中小型图书馆的应用,进行图书管理;以网络模式运行,部署到局域网中,能够为局域网内所有的用户提供服务,满足大中型图书馆的应用;部署到互联网上,采用集中服务方式,则能够满足跨网段、跨区域多个分馆的分散应用。由于Koha可以部署在互联网上,因此Koha具有明显的云计算应用即服务(SAAS)特征,使图书馆用户更加专注于具体的资源管理与服务业务。
22程序编码规范
在Koha文件名、应用程序文件夹以及变量、注释等方面,都有一定的规范性要求。譬如全局性文件夹和文件命名时,首字母大写。Perl模块和自定义包是供全局调用的基本程序,也采用首字母大写。在应用功能性程序文件夹和文件的命名规范,采用完整英文功能性名称命名,以图书管理业务专业名称进行文件命名为主,以通用习惯功能名称命名为辅,对于简短的名词使用完整的名称,字段较长的名称,容易在功能上混淆或重复的采用完整名称,而对于比较容易识别且不容易重复的功能,则使用简写方式命名。编目模块文件夹,采用英文完整名称Cataloguing命名,与馆藏管理模块(Catalogue)进行区分,而对于流通管理模块(Acqui),则采用简写方式;对于系统设置模块(Admin),也采用习惯简写方式命名。文件的命名规范一方面继承了文件夹的命名规范,同时兼顾具体功能含义的表达,能够用一个单词表达的程序功能,尽量用一个单词,不能用表达清楚的情况下,采用组合方式命名,组合命名分为两种样式,一种是在两个单词之间添加连接符,一种是不添加连接符组合成新的命名。而采访功能的主页面采用连接符方式命名:acqui-homepl,而传递订单文件则采用不添加连接符命名:transferorderpl。
Koha在变量命名时,大多采用小写、完整的英文描述,復杂变量采用连接符,连接多个描述性的词汇,比如:$item、$itemnumber分别代表馆藏、馆藏号的函数,函数$subfield_data表示子字段的数据。另外程序注释广泛存在Koha的每个程序中,几乎每个Koha的程序头都有Koha贡献者的署名,和Koha作为自由软件的声明与授权说明。每段程序的注释也在程序前面进行了注释,比如在一段程序前加入“# Get the item title for more information”文字,表示下面一段程序的作用是“获取馆藏题名”的名称。
23符合SOA架构标准的WEB服务
Koha系统在架构采用SOA面向服务架构标准,在结构上主要分为表现层、业务层、数据存储层三层架构模式。表现层的结构化标准语言为XHTML和XML语言,表现标准语言为CSS,行为标准对象模型为如W3C DOM和ECMAScript等。业务层的实现语言主要是perl语言,实现标准是CGI,业务支撑由Perl Module完成。数据存储层由DBI接口调用实现。
Koha系统的数据流,通过前端浏览器向Koha服务器提交请求,Koha的Cgi程序执行并调用数据库、自主开发包、系统的Perl模块等,把执行结果通过模板返回Apache服务器,最终以html格式返回给客户端浏览器(见图1)。在运行方式上,Koha采用公共网关接口(CGI)方式实现Web方式动态运行,通过浏览器、Web服务器和Koha的CGI程序进行数据交互,完成用户在浏览器端发出的请求。
客户通过浏览器,在地址栏中以Koha服务器IP地址或域名为访问目标,并在IP地址后附加访问的功能模块名称和请求参数,向Web服务器发出请求。Web服务器接到
请求后,根据IP地址后的模块名称,调用Koha的CGI程序,并把参数注入到CGI程序中,程序在执行完后,调用每个功能程序的html模板文件,把执行结果通过html格式返回给Web服务器,Web服务器把html格式的数据,返回给浏览器,完成用户的请求。
24Koha图书馆业务特点
241符合图书館专业标准
Koha除了具有极强的信息技术专业特色之外,也紧密跟踪图书馆领域的专业性标准和应用。Koha英文版默认的MARC是MARC21和UNIMARC两种格式标准。Koha并不排斥其他格式的MARC,比如未经过任何技术处理的CNMARC,在导入数据库之后就可以初步使用。Koha的MARC记录,存储与处理方法主要采用适合现代信息及技术检索与处理的XML(可扩展标记语言)格式进行存储。XML格式数据为数据的索引、查找、排序、传输、交换以及相关一致性提供了强大的存储、交换和分析能力。
此外,Koha引入了国际图联提出的FRBR(书目记录的功能需求:Functional Requirements of Bibliographic Records)理念、规范控制格式(FRAD-Functional Requirements for Authority Data)和《主题规范数据的功能需求》(FRSAD-Functional Requirements for Subject Authority Data),在Koha的规范控制模块中,包含MARC21和UNIMARC两种格式的最新版本的规范控制数据,对主题词、人名、家族、机构、会议等书目标引属性的别名、变异、非规范表目进行规范控制,使得馆藏实体能够与数据库标目形式保持一致,确保检索、查询、排序、统计等工作更加准确。
Koha使用Zebra搜索引擎技术,zebra搜索引擎对大多数开发语言提供丰富的查询接口,支持文本前缀查询格式(Prefix Query Format(PQF))、标准化数据(Data Normalization)、文本分词(Text Tokenization)、字符映射(Character Mappings)等排序与分类,通过对表达式的匹配和近似匹配、容许匹配错误等技术,进行模糊查询。Zebre不仅可以对传统格式的MARC数据建立索引,还可以对XML格式数据、SGML、电子邮件等非结构化数据建立索引。
242应用架构丰富且易于扩展
Koha系统具有清晰的应用架构、模块化和灵活组合等特点。多层架构使得每层都各司其职互不干涉,模块化则在分层基础上,使得每个模块都独立运行,一个模块出现问题不影响其他模块运行,同时在表现层,又给用户较为灵活的自定义设置的接口权限(见图2)。
Koha系统在应用层和表现层,根据业务划分,以业务模块形式单独存在,根据模块在系统中的作用,总体来说,可以分为馆员工作模块(Intranet)和读者模块(OPAC),馆员工作模块可以分为系统设置类、系统管理类、业务应用类。系统设置模块主要包括系统给全局偏好设置(Global System Preferences)、基础参数设置(Basic Parameters)、流通参数设置(Patrons and Circulation)、编目参数设置(Catalog)、采访参数设置(Acquisition Parameters)和其他参数设置(Additional Parameters)。系统管理类主要包括统计报表设置、读者设置分组、流通规则设置、书目编目设置、馆藏录入设置以及Z3950服务器设置、图书馆工作日程表等工具管理。业务应用类则包括流通、采访、订阅、编目、典藏、课程参考资料服务、规范数据等功能模块。
243OPAC适合多种终端设备
OPAC模块相对独立于Koha的馆员工作模块,OPAC模块在Web服务器上,是一个独立的域,需要单独设置IP地址和域名空间;在业务层面,OPAC仅仅在数据库层面与馆员管理端有些许的重叠,程序完全独立运行。利用Bootstrap技术,使得OPAC前端可以适应于各种终端访问。OPAC端主要是为了读者服务的界面,为适应新技术新应用的发展趋势,Koha在OPAC端采用Bootstrap前端响应式技术,在手机和各种宽度屏幕上的显示,都有不同的适应风格,而不需要专门为手机等智能终端的应用进行专门的开发。
为适应不同图书馆对外服务的要求,允许管理员自定义OPAC主页内容,Koha提供了OPAC页面显示内容的自定义功能,用户可以在后台页面的OPAC风格设置表单中,输入html内容,就可以在OPAC页面上显示。Koha还提供了丰富的自定义OPAC的外部特征、规则、策略、隐私、查询检索、远程自主注册等设置,读者可以查看自己的借还历史、当前已经借阅、超期、预约的图书,修改自己的账号密码,查看罚款情况等。Koha还在OPAC中提供了选书车(Cart)、虚拟书架(List)、自定义标签(Tag)、荐购(Suggestion)、评论等特色功能。
25Koha在国外不断发展的技术推动力
Koha的发展主要是通过Koha开源社区协作,在不断对新功能进行开发和对已发现错误进行修正的过程中,促进并推动了Koha的发展,由于每一个开发贡献者,都在具体程序的注释中,标注了贡献者名称和贡献时间,从贡献者的属性来看,主要贡献者都是以企业机构署名,独立开发的个人在程序开发中所占贡献比例相对较少。
从时间进展来看,以2008年作为分界。2008年以前对Koha贡献较大的机构,主要由最早推出Koha的Katipo Communications公司完成基础程序,曾经负责托管守护Koha的Liblime公司对程序进行了较多的完善和补充;2008年以后,对Koha开发贡献比较活跃的是美国BywaterSolutiongs公司,美国纽约C&P书目服务公司(C&P Bibliography Services)、PTFS欧洲有限责任公司、法国BibLibre公司、新西兰Catalyst公司等机构性质的团队。
值得称道的是软件专家、开源协议制定的参与者Kyle Hall,以独立开发者的身份,为Koha贡献较多关键应用的开发程序。一些应用程序的贡献者主要来自已经部署Koha应用的图书馆、博物馆等机构,比如挪威的奥斯陆公共图书馆(Oslo Public Library)、荷兰的国立博物馆(Rijksmuseum)以及美国的纳尔逊维尔公共圖书馆和雅典县公共图书馆等。由于Koha的前端页面文件,都与Koha的功能模块文件一一对应,虽然都没有明确标注贡献者的名称,但可以理解为是由完成具体功能模块文件的贡献者完成。因此,任何对Koha前端进行多语言翻译的贡献者,往往很难在Koha中留下印记。
3Koha技术上存在的一些问题
31过于依赖Ubuntu桌面版
在Koha的一些安装手册上,大多推荐安装在Ubuntu桌面版上,用Ubuntu作为服务器,存在很多弊端,Ubuntu的升级较为频繁,容易导致旧的版本技术过时,但是在升级Ubuntu后,又缺乏对原有版本依赖库升级的支持。如果在Ubuntu上安装Koha,在升级Ubuntu后,就会导致安装的Koha出现依赖库缺失或版本过高的问题,而安装合适的依赖库对于Ubuntu来说又是一个巨大的技术挑战。
32不同版本之间难以衔接
这个现象与Koha过于紧跟Ubuntu系统相关,也与Koha的不同版本由开源社区不同个人或小组完成有关,与Ubuntu跟随过紧,导致依赖库版本过高,给升级带来困难。不同的开源社区组,开展修复Bug和新功能扩展工作,往往存在彼此依赖的初始版本各有差异,相互之间的开发工作不能充分有效沟通,最终汇总的时候往往需要很长周期,不同版本之间进行升级,也会导致用户在升级Koha时,带来不可预料的问题。
33社区协作,缺乏规范性
Koha开发的志愿者分散在世界各地,社区主要通过Mailing List、ICU开展交流活动,缺少一个有影响力的精神领袖,导致Koha在社区开发过程中缺乏统一的规范和指导。一个明显的问题是,有些模块在纯英文环境下使用尚且正常,如果在多语言环境下使用,就会出现乱码问题,比如在Koha-32200版本的系统管理(Tools)模块下的读者列表功能,是由美国Bywater小组完成的功能,这个功能由于是独立于Koha程序实现的,其包文件单独存放在Koha∷List∷中,其功能性文件也单独存在于Koha功能目录中,访问数据库完全脱离Koha程序的约束,最终导致在多语言环境下,出现乱码而无法使用该功能。
4阻碍我国图书馆界引进国外开源软件的技术因素
41语种、标准、专业和软件使用习惯的阻碍
Koha是以英文用户作为使用语言进行编写的,非图书馆专业人员对图书馆专业名词的翻译和理解往往存在偏差,比如中文MARC的规范控制数据,英文采用Authority(权威)这个词汇,典藏业务英文名称是Rotating Collections,这对于不了解图书馆专业,但熟悉计算机程序开发的人员造成困扰。Koha中的机读目录格式采用MARC21标准,而国内主要采用CNMARC和UNIMARC作为机读目录格式的标准,对于不熟悉MARC以及不熟悉图书馆专业,尤其是不熟悉英文MARC21的技术开发人员,一时也是无从入手。在软件的使用习惯上,国内的软件设计在习惯上,往往层次清晰、结构严谨、一目了然,而Koha的一些功能则是隐藏在具体功能之下,往往要建立起一定的数据后,或者在表单中输入数据后,才能在后续的处理上显示出来,这也往往令图书馆专业人员,在初次入手的使用时无所适从,比如读者分组管理模块,需要输入读者姓名,并由程序在数据库中查找到对应数据后,才显示确定按钮。
42缺乏专业机构或企业的技术支撑
任何一套大型的软件系统都需要强有力的专业技术支持,以确保能够及时处理用户在使用过程中遇到的任何问题。Koha系统作为开源软件,在国内并没有专业机构和软件企业,开展Koha中文化本地化工作,更没有技术团队和成熟的Koha社区对软件进行调试、修正错误和深入开发。缺少技术保障和专业指导,以Koha为代表的图书馆开源软件在国内图书馆界取得信任、支持和普及的道路还很漫长。
43不了解开源软件的知识产权与授权机制
开源软件的的知识产权和使用授权,大都是由国外的一些机构和团体倡导发起,其授权文本由英文书写,法律名词艰涩难懂。由于国内并没有专门的开源软件适用的法律,使得图书馆在使用时缺乏清晰的法律条款保护、授权与支持,因此难免顾虑重重。
44开源软件技术开发人才相对稀缺
Koha采用的Perl语言和Cgi技术,在国外和一些大型网站中使用比较广泛,在国内,当前Web开发的主流技术集中在Php、Java等流行技术,Perl语言和CGI技术则成为国内少数高级技术人员常用的技术,能够全面了解Koha并对程序进行继续开发的人才相对稀缺;能够了解图书馆行业标准、业务模式与流程,同时又熟悉Perl语言开发技术的技术人员,则更加稀缺。缺少人才队伍支撑,成为我国图书馆开源软件普及与发展的瓶颈。
5我国图书馆开源软件技术发展之路
我国的图书馆开源软件之路应该本着稳健、务实、可行、发展的思路,积极借鉴吸收国外的先进经验,从翻译、汉化等本地化工作出发。有条件的图书馆,通过逐步测试和使用开源软件,进行开源软件知识与人才的初步培养和积累,逐步过渡到图书馆开源技术进入高校图书馆情报学专业和信息技术专业的课程体系之中,为全面培养我国的图书馆开源软件人才,打下知识、技术与人才基础。
51开展图书馆开源软件本地化工作,为开启我国自主的开源软件提供借鉴和启发
国内拥有较强图书馆专业人才储备和信息技术储备的图书馆、高校以及有关企业,对国外具有较高专业技术水平、符合未来技术发展趋势的图书馆开源软件,通过汉化工作,开启我国图书馆开源软件本土化研究,在全面了解国外图书馆开源软件的研发思路和技术架构的基础上,为我国推出自主图书馆开源软件,提供经验借鉴和设计启发。
52鼓励图书馆应用开源软件,为我国开源软件研究与开发提供知识与人才储备
图书馆开源软件的良好发展,最终受益者还是图书馆和广大读者。图书馆应该积极尝试大胆试用。无论对本馆的技術人员还是其他提供开源技术支持的机构、团队和人才,予以包容,鼓励尝试与探索。通过形成良好的科研探索氛围和精神,为图书馆开源软件形成初步的人才与知识储备,使图书馆开源软件走上良性发展轨道。
接触过全功能的图书馆自动化系统,即使他们毕业到图书馆工作,也很少有机会熟悉图书馆自动化软件的所有模块[10]。LibLime技术总监Joshua早在2007年1月20日,启动开源图书馆自动化系统软件Koha课堂计划时,谈到下一代的图书馆员想要了解知识管理的内在规律。“从开放源代码软件学习图书馆技术,不但了解图书馆技术本身,而且可以试着按照自己的研究思路进行调整”。我国图书馆的专业技术人才,通过高等教育才能形成广泛的人才基础,可以为未来图书馆开源软件发展,以及图书馆事业的兴旺发达打下坚实的基础。
参考文献
[1]Manisha S,Gareema S.Open Source Integrated Library Management Systems[J].The Electronic Library,2012,30(6):809-832.
[2] Bojan M,Gladys V,Fernández.Open Source Solutions for Libraries:ABCD vs Koha[J].Program,2013,47(2):136-154.
[3]Don K.A Survey of Koha in Australian Special Libraries[J].OCLC Systems & Services:International Digital Library Perspectives,2011,27(1):23-39.
[4]Frank C.An Overview of Virtual and Cloud Computing[J].OCLC Systems & Services:International Digital Library Perspectives,2010,26(3):162-165.
[5]Denis G,Mang S.Avoiding the Death Zone:Choosing and Running a Library Project in the Cloud[J].Library Hi Tech,2012,30(3):418-427.
[6]王婷,杨守文.开源图书馆自动化系统在国内的应用与推广策略研究[J].图书馆论坛,2008,(3):78-80.
[7]胡振宁,陈大庆,丁培,等.国外开源图书馆集成系统的成功经验和启示[J].图书馆论坛,2013,(6):101-106.
[8]刘丽莉.基于开放源码的图书馆自动化系统Koha研究[J].新世纪图书馆,2014,(6):65-68,82.
[9]陈晓彬.基于VMware虚拟机构建Koha开源图书馆自动化系统[J].情报探索,2013,(4):106-109.
[10]李书宁.开源图书馆自动化系统Koha走进图书馆学教育课堂[J].现代图书情报技术,2007,(3):94.
(责任编辑:郭沫含)