Dspace数字资产管理系统应用开发指南
摘要:本文主要介绍Dspace数字资产管理系统中应用到的开放源代码软件和技术,对修改和定制Dspace系统提供一些向导性建议,同时提供部分Dspace系统改造方案。 关键词:Dspace;Lucene;系统结构;OAIHarvester;OAICat;Log4J;PDFBox;tm-extractor;定制;修改;1.准备工作
在修改和定制Dspace系统之前,我们需要对Dspace系统及其相关的背景知识有比较系统和详尽的理解。 (1)Dspace系统的功能。Dspace系统主要用于数字资产的长期保存和管理,它也向用户提供浏览和检索服务,同时,它还为支持OAI-PMH协议的元数据获取软件(如:OAIHarvester2.0)提供元数据服务。 (2)Dspace的系统结构。Dspace系统是按照三层结构来设计的,他们分别是存储层(Storage Layer),业务逻辑层(Business Logical Layer)和应用层(Application Layer)。其中,存储层主要由软件包:org.dspace.storage.rdbms.*和org.dspace.storage.bitstore.*构成;应用层主要由软件包:org.dspace.app目录下的所有软件包构成;其他的软件包构成业务逻辑层。在实际应用中,应用层程序调用业务逻辑层和存储层程序来实现用户所需要的各种功能。由于《Dspace系统文档选译》一文中对Dspace系统架构由详细的描述,这里不在赘述。 (3)熟悉Dspace软件包各个类的功能特征是使用这些类进行二次开发的必要条件。这些类主要有:Community,Collection,Item,Bitstream,Bundle,Handle,EPerson,Group,ResourcePolicy,Context,ConfigurationManager等。 (4)认识和理解Dspace系统使用到的开放源代码软件及软件包。Dspace系统是一个开放源代码的网络应用,它在开发过程中使用了大量的开放源代码软件,如果能够对Dspace系统中使用到的Dspace源代码软件有很好的认识,那么,不仅对我们修改定制dspace系统大有好处,而且对我们深入认识和掌握Java语言开发应用程序有极大帮助。下面,简要介绍一下Dspace系统中用到的开放源代码软件: OAICat:由OCLC开发,作为Dspace系统的数据提供者(Data Provider)向支持OAI-PMH协议的服务提供者(Service Provider)提供元数据资源。这将有利于组织之间元数据的交流与共享,加快元数据互操作的发展进程。 Lucene:Dspace系统用于实现全文检索功能的开源搜索引擎软件包。它为进入Dspace系统的元数据及其对应的部分全文(主要是PDF,DOC,TXT,HTML)提供索引和检索机制。 Log4J:对于一个基于网络的应用系统来说,日志统计功能不可或缺。Dspace系统使用Log4J实现日志统计功能。Log4J是Apache的一个开放源代码项目,是一个日志操作包。通过使用Log4J,可以指定日志信息输出的目的地,还可以控制每条日志信息的输出格式以及日志信息的级别,非常细致地实现日志统计功能。 OAIHarvester:OAIHarvester并非Dspace系统使用到的开源软件,但它是一个基于OAI-PMH协议的开放元数据获取软件,因此有必要介绍一下。OAIHarvester2.0是基于OAI-PMH2.0协议的开放元数据获取软件。OAIHarvester2.0是OAI-PMH协议的服务提供者(ServiceProvider),它的主要功能是从支持OAI-PMH协议的数字仓储(Repository)中获取开放元数据。OAIHarvester2.0向数据提供者(Data Provider)发送一个http请求,数据提供者将根据相应的请求返回一个xml文档。OAIHarvester2.0将请求动词置于http请求中,发送的http请求不同,返回的xml文档的内容不同。OAIHarvester2.0提供的请求动词主要有Identify ,ListSets ,ListRecords ,GetRecord ,ListIdentifiers , ListMetadataFormats 。Identify用于获取数据提供者(DataProvider)的相关信息。ListSets用于获取数据提供者数字仓储仓库资料集的结构。ListRecords用于获取数据提供者提供的元数据资料。ListMetatdataFormats用于获取数据提供者提供的元数据格式和类型等信息。GetRecord用于从数据提供者获取指定的元数据信息。ListIdentifiers用于向数据提供者取得能够获取记录的ID明细。 PDFBOX:文本提取工具。可以实现从PDF文档中提取文本和图形,同时也可以将文本文件转化成PDF文档。Dspace系统使用PDFBox提取PDF文件的文档,然后使用Lucene进行全文索引。 Tm-extractor:从doc文档中提取文本信息,用于ms word文档的Lucene索引。 (5)Dspace系统提供的管理工具。Dspace系统还以命令行方式提供了几个非常有用的系统管理工具。在Dspace系统平台成功搭建之后, DOS命令行之下,进入{Dspace.dir}/bin目录下,使用批处理命令dsrun运行各种管理工具。下面简要介绍一下这些管理工具的功能: dsrun org.dspace.administer.CreateAdministrator 创建Dspace系统管理员。 dsrun org.dspace.browse.InitializeBrowse 对Dspace系统内部的所有数字资产进行索引,保证用户能够正常浏览数字资源。 dsrun org.dspace.search.DSIndexer 对Dspace系统内部的所有条目(Item)进行索引,使用户能够正常检索数字资源。 dsrun org.dspace.app.itemexport.ItemExport 将Dspace系统中指定Collection中的所有元数据资源导出到文件系统中,也可以实现将Dspace系统中指定的item元数据导入到文件系统中,导出的元数据资源以结构化方式存储。每条元数据都由dublin_core.xml、handle、元数据所包括的源文件、源文件描述文件contents以及license.txt构成。其中,dublincore.xml文件存储元数据基本信息,handle用于存储handle_id,contents用于描述元数据对应的源文件的类型(ORIGINAL和LICENSE)。 dsrun org.dspace.app.itemimport.ItemImport 根据命令行参数的不同,该命令可以分别实现不同的功能。其中,该命令最重要的功能是将结构化的元数据资源从文件系统中导入到指定的Dspace系统中。这里要特别指出的是,ItemImport和ItemExport联合使用,可以实现任意两个Dspace系统之间的数据互导,从而达到数字资产备份和移植的效果。 dsrun org.dspace.app.mets.METSExport 从Dspace系统中导出一个单独的item(元数据及对应的源文件),并以METS格式形式存放。 dsrun org.dspace.administer.CommunityFiliator 该命令用于建立或者取消Dspace系统内部Community之间的联系。Dspace系统中Community之间存在两种关系,一种是父子(parent-child)关系,另一种是并列关系(不直接相关)。为该命令配置不同的命令行参数,可以实现任意两个community之间的上述两种关系。 dsrun org.dspace.app.packager.Packager 将文件系统中的一个package导入到Dspace系统中,以一个item的形式存放;或者,将Dspace系统中的一个item发布到文件系统中,并以package形式存放。 (6)Dspace系统Web UI使用MVC结构,利于修改和维护。 (7)理解Dspace系统数据的存储方式。Dspace把全文信息存储于文件系统,而把文件表述信息存储于PostreSQL或者Oracle数据表中,这就要求开发者对Dspace系统的数据表的字段以及数据表之间的关系有深入的认识。2.修改Dspace系统修改与定制
(1)Dspace系统的本地化。修改{dspace.dir}/config/language-packs/messages.properties文件,实现按钮,标签中文化。对于不能通过该文件实现的中文化,可通过修改Dspace系统的jsp页面和servlet来实现。 (2)条目(item)提交流程简化。在保持条目内容不变的前提下,简化Dspace系统的提交流程。不宜采用修改的方式实现,而应该使用Dspace系统存储层和业务逻辑层的类直接编写新的Servlet来实现,因为修改花费的代价要比自己编写的代价要高。Servlet的关键代码如下: /** *SetEpersonwhosubmitstheitem. */ EPerson eperson = EPerson.findByEmail(context, email); context.setCurrentUser(eperson); context.setIgnoreAuthorization(true); /* * Set Collection that the item insert into. */ Collection col = Collection.find(context, id); Item myitem = null; WorkspaceItem wi = WorkspaceItem.create(context, col, false); myitem = wi.getItem(); myitem.inheritCollectionDefaultPolicies(col); /** *LoadtheMetadataintoItem. */ String schema = "dc"; myitem.addMetadata(schema, "title", null, "ZH", title); myitem.addMetadata(schema, "date", "issued", null, issuedate); myitem.addMetadata(schema, "language", "iso", null, language); myitem.addMetadata(schema, "description", "abstract", "EN", abstracts); myitem.setSubmitter(eperson); myitem.update(); /** *WriteFull-TexttoDspaceSystem. */ myitem.licenseGranted(licensetext, eperson); Bundle original = myitem.createBundle("ORIGINAL"); BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file); Bitstream bs = original.createBitstream(bis); bs.setName(filename); BitstreamFormat bf = FormatIdentifier.guessFormat(context, bs); bs.setFormat(bf); bs.update(); original.update(); /** *Writemetadatainformationto Dspace database. */ InstallItem.installItem(context, wi, null); (3)条目批量导入功能的实现。批量导入功能实现所用的Dspace类与实现“条目提交流程简化”用到的类类似。 (4)权限管理修改。Dspace系统的权限管理存在一些问题,需要进行一些修改。如果时间和经济上许可的话,建议将权限管理的jsp页面和servlet重写。这需要对数据库的EpersonGroup和ResourcePolicy数据表有很好的了解,也就是掌握Dspace系统的权限管理机制。 (5)前台页面修改:如:使用jsp页面实现超级管理员添加功能。 (6)Dspace系统管理工具编写:比如:批量导入组用户。 (7)OAIHarvester的集成:使Dspace系统具有元数据获取功能。修改OAIHarvester2.0,同时使用有效的批量导入工具将元数据导入Dspace系统。这里面有很多问题需要解决:改造Lucene,元数据语种识别等等。本人在“Dspace系统元数据获取功能的实现”一文中对该功能有详细的描述。如果读者感兴趣的话,可以和我联系。 (8)修改lucene软件包,实现Dspace系统多语言索引与多语言检索功能。这是扩展Dspace系统功能最大的工程,需要开发者对lucene有完整,全面的认识;还要实现lucene多语种的分词程序。目前,lucene的已经实现了除SimpleAnalzer和StandardAnalyzer以外的至少10种分词程序,这些分词程序可以在lucene sand-box中找到。如果读者对lucene感兴趣的话,可以到官方网站上获取更多信息。本人撰写了一篇《基于OAI-PMH的元数据搜索引擎的设计与实现》论文,文中对OAI-PMH和Lucene2.0软件包有较为完整的介绍和应用示例,如果读者感兴趣的话,可以和我联系。推荐两本关于lucene的中文参考书: 《征服AJAX+LUCENE构建搜索引擎》李刚,宋伟,邱哲编著。人民邮电出版社 《Lucene in Action》ERIK HATCHER OTIS GOSPODNETIC (9)多种格式文档中提取文本信息。为lucene索引全文提供前提条件。3.结束语
Dspace系统是一个较为成功的数字图书馆应用系统,但在实际应用中,仍然有许多地方需要改进。本文对dspace系统的修改和定制给出一些导向性建议,希望能为读者提供一些帮助。 在考虑应用Dspace系统之前,必须首先对需求、自身技术实力、外部经济支持、开发周期等有一个很好的评估,对Dspace系统有一个客观的全面的认识。这样方能保证Dspace系统得到推广和应用。4.参考文献
[1] Dspace系统源代码及相关文档.http://www.dspace.org [2] OAI-PMH相关文档. [3] OAICAt以及OAIHarvester源代码及相应文档. [4] Lucene源代码及相关文档.http://lucene.apache.org/ [5] Lucene沙箱工具. http://lucene.apache.org/java/docs/lucene-sandbox/ [6] 李刚,宋伟,邱哲编著.《征服AJAX+LUCENE构建搜索引擎》.人民邮电出版社. [7] PDFBox源代码及相关文档. http://www.pdfbox.org [8] 车东,在应用中加入全文检索功能—基于Java的全文检索搜索引擎.http://www.chedong.com/tech/lucene.html