摘要:本文主要介绍
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