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 的关键代码如下:
                 /**
                  * Set Eperson who submits the item.
                  */
                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);
 
                 /**
                  * Load the Metadata into Item.
                  */
                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();
                 /**
                  * Write Full - Text to Dspace System.
                  */
                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();
                 /**
                  * Write metadata information to 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
 

你可能感兴趣的:(Dspace数字资产管理系统应用开发指南)