山东大学本科毕业设计论文.doc_第1页
山东大学本科毕业设计论文.doc_第2页
山东大学本科毕业设计论文.doc_第3页
山东大学本科毕业设计论文.doc_第4页
山东大学本科毕业设计论文.doc_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山东大学本科毕业设计论文THOR:基于清华建筑数字图书馆的OAI互操作协议的实现计算机科学与技术学院周晓丹摘要:本文总结了笔者在清华大学计算机系参加毕业实习所做的工作。文章首先介绍了数字图书馆的相关知识,主要包括数字图书馆的定义和研究现状、清华建筑数字图书馆简介、互操作协议的概念以及OAI协议的说明等内容。实习的主要工作就是用Java技术实现了一个符合OAI互操作协议的系统THOR( TsingHua Oai Repository ),该系统基于清华建筑数字图书馆,客户可以通过这个系统,在异构的、网络化的环境中,用OAI协议采集建筑数字图书馆的数据记录。在实现THOR的过程中,采用了一定的技术和实现技巧,比如对resumptionToken的实现、从RDB中抽取数据动态生成OAI要求的XML数据、对中文的支持等等,本文也做了重点说明,希望能对其他准备实现OAI协议的工作者有所帮助。文章最后附带了THOR系统实现的全部Java源代码。关键字:数字图书馆,信息检索,互操作协议,OAI协议THOR: Implementation of OAI Protocol for Metadata HarvestingBased on Tsinghua Architecture Digital Library( ZHOU, Xiaodan )Abstract:The thesis mainly focuses on THOR( TsingHua Oai Repository ) a system implements OAI protocol based on THADL using Java technologies. Clients could harvest records stored in THADL via THOR in heterogeneous, networking environment.During the development of THOR, some striking features were implemented, such as the use of resumptionToken, Chinese-support mechanism, dynamic data generation from relational data, and so on. The methods used are written down in details with plenty of explanations. I hope it would be help for researchers who would like to implement OAI protocol soon.Keywords:Digital Library, Information Retrieval, Interoperability Protocol, OAI ProtocolI. 引言在大学生活即将结束之际,我有幸来到清华大学计算机系软件所的数据库组参加毕业实习,实习的课题是“清华大学建筑数字图书馆的关键理论、技术及示范系统研究”,该项目获得国家973计划(G1999032704)和清华大学基础研究基金(JZ2000014)的赞助。我所进行的工作主要是基于清华建筑数字图书馆,用Java技术实现一个符合OAI互操作协议标准的系统THOR( TsingHua Oai Repository ),通过这个系统,可以将数字图书馆中的数据以OAI协议格式发布出去。在THOR的实现过程中,遇到了一些具体问题,应用了一些技巧,本文的主体就是在THOR编码开发的基础上,把遇到的这些问题和采用的方法总结出来。由于OAI协议新版v2.0于2002年6月14日才正式推出,THOR的实现可能会有一定的示范意义,希望这一部分能对其他准备实现OAI v2.0的研究人员有所帮助。由于工作牵扯到很多关于数字图书馆方面的知识,我想有必要在论文开始介绍一下,这一部分内容主要来自各方面参考资料的汇总以及我本人的总结;后面的关于THOR的具体内容才是我自己独立完成的工作。II. 工作背景 数字图书馆数字图书馆(Digital Library,简称DL)是一种有组织的数字化信息对象的数据库,这些信息对象是用各种格式和媒体来维持的,以便向用户群体提供不需要中介的便利的查找途径。数字图书馆是信息高速公路的重要信息资源,是未来社会的公共信息中心和枢纽,并将成为21世纪知识经济时代一种新的信息资源管理模式。DL具有以下特征:它是复杂的数据/信息/知识系统,帮助我们:满足用户的信息需求(societies),提供信息服务(scenarios),以有用的方式组织信息(structure),提供管理信息的场地(space),以及与用户及他们的代理人交流信息(streams)。DL将从根本上改变由于信息分布广泛、媒体类型众多、数据量庞大而造成的信息分散、无组织、不便使用的现状,为用户提供在水平和效益上远远超过传统图书馆的高质量、多样化、统一的全球化信息服务。DL的兴起和发展标志着Internet逐步走出技术发展的范畴,迈向了科学交流,艺术创造,文化传播,经济发展,知识管理等多学科、创造性的人类活动领域。正是因为数字图书馆有着传统图书馆无法比拟的优点,DL正成为全球范围内信息基础设施建设的热点领域,是21世纪全球文化与科技竞争的焦点之一。1994年美国副总统戈尔提出的“全球信息基础设施”(GII)计划中将数字图书馆列为11个研究项目之一。美国政府“国家计算、信息、通信指导办公室”(NCO for CIC)发表的官方报告“蓝皮书”中对数字图书馆的战略意义越来越重视。1995年的蓝皮书“用于国家信息基础设施的技术”将数字图书馆列为九项国家信息基础设施(NII)应用的国家级挑战的第一位;1998年的蓝皮书“用于21世纪的技术”则在计算、信息、通信(CIC)的六个研究发展重点项目中又将数字图书馆列于第一位。由美国科学基金会(NSF)出资支持的 “数字图书馆启动”(DLI)第一期项目(94-98),在涉及数字图书馆一系列技术问题上取得了进展,如纸质文献的数字化、多媒体的数字化、新型的用户界面、大容量数据存取、数据挖掘等等。随后又紧接着启动了更大规模的DLI二期项目,资助方(仍以NSF为主)和参与者达几十个大学和研究机构,展开更广泛、更深入的研究和实践。欧、日、澳、俄等都有类似的DL发展计划1。我国计算机研究领域和图书馆界从95年左右开始这一领域的跟踪研究,98年全面升温,到现在无论是在对数字图书馆的认识,还是其理论研究、关键技术准备方面,都取得了很大的进展3。1998年国家图书馆牵头酝酿 “国家数字图书馆工程”的筹备,并于今年3月,在李岚清副总理支持下,正式宣布“中国数字图书馆工程”启动,“工程”上报规划预算8亿元(6年时间)1。清华建筑数字图书馆的相关研究工作就是在这个大背景下展开的。 清华大学建筑数字图书馆清华大学建筑数字图书馆(TsingHua Architecture Digital Library,简称THADL)是由清华大学图书馆、清华大学计算机科学与技术系、清华大学建筑学院三方合作共同研制开发的,旨在通过对DL的研究,建立以中国古代建筑为主的建筑数字图书馆,促进中国古代建筑的研究,传播中国古代建筑的成就,弘扬中国优秀传统文化4。THADL于2000年3月立项,并投入正式运作。目前,已建有以中国营造学社和梁思成先生生平为主线的中国建筑史项目,能够提供中国营造学社史信息导航、学社资料成果信息导航以及新营造学社资料等方面的服务。其最主要的特色就是可以使用户方便的查看各种珍贵的历史建筑图片,以及观赏各种建筑过程的动画影片。THADL中除了文本信息以外,还包含大量的图片以及多媒体数据,怎样才能使用户找到和使用这些数据呢?通常的方法是手工为这些多媒体数据加上描述性信息,即所谓“元数据”(metadata)。元数据就是描述数据的数据,在图书馆界,元数据内容主要包括“作者”,“题目”,“类别”,“描述”等等内容,这样,用户就可以通过检索“元数据”来找到相应的数据了。为了统一元数据的格式,国际上建立了USMARC,CNMARC,Dublin Core等标准。THADL的元数据格式也兼容这些协议标准。有了元数据之后,剩下的问题就是,如何让用户在网络环境下,使用不同的手段来获取这些元数据。这看似一个简单的问题,但在目前分布式的、网络化的、异构的环境之下,这其实是一个需要认真考虑和分析的问题,因此也产生了下面将要描述的所谓“互操作协议”的有关问题。III. 互操作协议及OAI 互操作协议概述随着数字图书馆的日益增多,人们发现必须访问许多DLs才能找到所需要的资料。由于大多数DLs是基于数据库驱动的,现有的搜索引擎不能对其建立索引。因此,对于那些需要跨越多个DLs查找资料的用户来说,搜索引擎不能满足这种需求。如何将广泛分布的、异构的DLs联合起来向用户提供统一的服务,即实现DLs的互操作,成为数字图书馆的一个中心问题5。实现DLs互操作的方法可概括为以下三种类型:基于联邦(Federation)的方法、Harvesting方法和基于搜集(Gathering)的方法5。联邦(Federation)是指正式或非正式合作的操纵DLs的一些组织,它们同意支持一组共同的服务和标准,以便在联盟成员之间共享DLs的资源即实现互操作。利用联邦方法实现DLs互操作的基本思想是:借助于分布式搜索技术将用户的查询送往参与联邦的所有DLs上分别执行,收集返回的结果,综合整理后返回给用户(图1)。一台计算机能够自动地从其它计算机中收集元数据的方法通常称作Harvesting。利用Harvesting方法实现DLs互操作的基本思想是:从每个DL收集元数据,经过处理、合并后集中保存在一个中心DL中,然后对保存在中心DL本地的元数据执行搜索(图2)。显然,这种方法需要在中心DL维护一个DLs馆藏元数据索引信息的副本,以便提供基于内容的查询路由服务。对于那些不能正式加盟的DL组织,仍有可能通过搜集(Gathering)可公开访问信息的途径获得一定程度的互操作。基于搜集的方法通常提供统一的用户界面,用户输入查询请求,系统执行分布式搜索,并将合并后的查询结果返回给用户。Web搜索引擎就属于此类应用。用户数字图书馆(DL)DL1DL2DLn查询查询查询结果结果结果图1 基于联邦的方法搜索用户中心DLDL1DL2DLn查询结果元数据图2 Harvesting方法搜索本地元数据元数据元数据在THADL中实现的OAI协议就是应用了Harvesting的思想。 OAI协议概述OAI( Open Archives Initiative ),它的目标是,发展和促进在互操作能力方面的系列标准,以方便内容数据的高效分发。OAI的起因是为了加强以学术交流为目的的对电子印刷文档的访问,以及要保证科学数据在将来也可以访问的需求。因为OAI的出现,我们访问使用学术信息的方式将有一个根本性的改变11。首先要说明的是OAI的几个概念以及它们之间的关系:l Data Provider:维护一些Repositories(就是存储元数据的数据库),并且支持OAI协议来查询其Repositories的记录的信息。l Service Provider:向Data Providers发出符合OAI协议的请求,并且利用得到的元数据向end users提供具有附加值的服务。OAI协议的工作过程是:SP通过HTTP协议向DPs发送OAI协议的请求命令,用来查询DP的信息或者采集DPs中的数据。而DP在接收到SP发送的请求后,把信息以XML格式返回给SP。通过这种方式,SP可以从多个DPs中采集到数据,并将这些来自不同DPs的数据整合成为一个统一的、一致的数据集,为最终用户提供服务。OAI的工作示意图见(图三)。图三 OAI协议示意图 OAI协议功能细节OAI协议的请求使用HTTP中的GET或POST方法。请求传递至少一个的参数,形式如:key=vlaue,多个参数时使用&隔开。每个OAI请求都必须包括一个名字为verb=OAI方法名的参数。GET方法传送的请求用?连接在URL的后面,例如:/oai/oaiHandler?verb=GetRecord&identifier=oai:00001&metadataPrefix=oai_dc 这个请求表示表示使用的OAI方法是GetRecord,要请求得到identifier是oai:00001的记录,记录的元数据格式是oai_dc(遵循OAI定义的Dublin Core)。OAI总共6条命令的说明列表如下:l GetRecord:查找一个单独的记录/元数据。参数:identifier是待查记录的标识符;metadataPrefix是待查记录的格式。l Identify:用于获得所采集的Data Provider的信息,包括服务器参数、管理员Email等。参数:无。l ListMetadataFormats:查询Data Provider或一条特定记录所支持的元数据格式。参数:identifier是可选参数,如果有则查询该记录支持的元数据格式;否则查询Data Provider支持的元数据格式。l ListSets:得到Data Provider支持的Set结构。参数:resumptionToken用于流量控制。l ListIdentifiers:要求得到可以从Data Provider中查到的记录的标识符。参数:from指定返回记录的时间戳下限;until指定返回记录的时间戳下限;set指定返回特定Set中的记录;metadataPrefix表示返回记录中元数据必须是前缀指定的格式;resumptionToken:独占参数,用于流量控制。l ListRecords:从Data Provider返回满足查询条件的记录。参数:同ListIdentifiers。IV. THOR的特点和功能列表上面用一定的篇幅进行了必要的知识性铺垫,下面的内容将着重介绍我所做的工作:设计并实现一个基于THADL的OAI Data ProviderTHOR( TsingHua Oai Repository )。THOR的特点和功能列表描述如下: 特点优点l 完全支持OAI v2.0:实现了规定的6条操作,信息格式严格遵守OAI Spec的规定,尽量遵守OAI Repository Implementation Guide。l 跨平台性:全部采用Java相关技术,可以运行于Unix/Linux/Windows等操作系统下。l 稳定性强:对多种可能产生的异常情况进行了判断和处理,便于定位和查找错误。l 配置灵活:许多系统相关的配置信息保存在外部文件中,而不是写在源码中,修改配置只需要修改配置文件,无需重新编译。l 源码便于扩充和修改:从整个源码的结构上支持扩充。比如对一些目前无法实现的功能预留了接口;动态生成所需源数据格式等等。l 自主版权。缺点l 效率低:采用了很多buffer,有一些算法也还没有优化。l 没有条件参加OAI官方的conformance test,不能保证完全兼容OAIv2.0格式。l 没有经过长期测试:不能保证系统确实稳定,无法发现潜在的问题。l 可能要修改已有的数据库,或建立新的数据库,以支持OAI特有的要求。l 辅助工具不全:缺少一些图形化的配置工具等。 功能列表已经实现的功能l 严格实现各种规定的异常,即选项。l 支持HTTP Compression,可以进行压缩传输。l 支持不同的源数据格式,包括DC/MARC等。l 根据已有数据库,动态生成OAI所需数据。l 支持Flow Control,即支持resumptionToken选项。l 支持中文字符集。尚需改善优化的功能l ListIdentifiers命令采取了ListRecords的方法,效率太低。l 源数据identifier的格式。l 若有多个错误,返回的也为多个。目前只返回发现的第一个错误。l 对发现的,细化返回的错误代码。l 支持resumptionToken的可选参数。没有实现的功能l 通过HTTP状态码,诸如503( Retry After )等,实现负载均衡和流量控制。l 支持Set功能。l 封装成MARC源数据格式。l 采用XML DOM/SAX方式来访问XML文件而不是现在的字符流方式。l 对结果集的缓存。V. 实现过程要点说明 resumptionToken的实现resumptionToken的作用是这样的:当Harvester从Repository采集数据时,如果结果集过大,比如说有十万条记录,这时Repository就需要把结果集分段,一次只提供给Harvester一部分数据,比如一千条记录,捎带提供一个resumptionToken,这样下次只要Harvester出示这个Token,Repository就可以接着把剩下的记录依次返回。OAI协议没有明确规定resumptionToken的格式或者实现方法,仅提供了两种参考方案,不管采用那种方法,OAI要求这个Token要对Harvester是透明的。THOR采用的方法是OAI建议的两种方案之一,即把查询的参数封装到Token里,当Harvester提供这个Token时,Repository对Token进行解析,生成一个查询,可以把剩下的记录返回。比如,当Harvester查询from=1990-01-01, until=2000-01-01, metadataPrefix=oai_dc时,生成1234条记录,只返回1000条记录,最后一条记录的日期是1998-12-12,这时,生成的Token就形如:”from=1998-12-12;until=2000-01-01;metadataPrefix=oai_dc”,这样当再次查询时,Repository就可以解析这个Token,并把剩余的记录正确的返回给Harvester。 数据一致性的保证上面采用resumptionToken的方法似乎会影响数据的一致性,因为在Token传递的过程中有一个时间延迟,而这时数据源可能会发生改变。比如在上例中,如果第999条记录被修改,那么当Harvester再次查询第10011234条记录时,假如没有返回这个修改值,就产生了数据的不一致,而且这个不一致将很难被发现。正是因为这个问题,才使resumptionToken成为整个OAI协议中最为复杂的部分。如何解决这个问题呢,不同的resumptionToken的实现方案都有不同的解决办法。THOR是通过与记录的datestamp和deleted标记配合使用,从而解决了这个问题。具体的说,就是当记录被修改时,一定要同时修改该记录的datestamp为当前时间。比如上例,要将第999条记录的datestamp改为2002-06-08,这样,存在的潜在不一致将会在Harvester采集到2002-06-08这一天时被发现。更详细的论述请参考文献7。 读取数据库及动态源数据格式生成由于THOR可能会面临到不同的、变化着的数据源格式,必须采取灵活的数据映射策略。THOR采用的方法是定义一种中间数据格式,先把数据库中的数据映射到这个中间数据格式上,再根据这个中间数据格式,通过不同的Dublin Core Wrapper或者MARC Wrapper等包装器,把数据动态封装成相应的DC/MARC格式。利用中间数据格式,可以方便的将THOR用于各种不同的数据库(这也是能把THOR快速用于THADL的原因),并且可以仅通过增加Wrapper来增加支持的源数据格式。 中文的支持目前只是在Servlet中用一条setContentType( “txt/xml; charset=gb2312” )语句,就可以在浏览器中看到中文。至于程序内部运行的机制是否保证全程中文支持,或者其他更深入的问题,我也不算了解。 全局配置文件分为两类:1. 服务器设置文件,由Servlet在首次运行时读取,设置内容包括是否支持set,最大的可查询记录的timestamp等等;2. 信息文件,存储服务器响应Identify命令时的信息等等。采取这种方法而不把配置写入源代码中,使当配置信息发生改变时,毋须编译源文件。VI. 使用技术说明在开发过程中,主要采用了以下的技术:l J2SE:是THOR主要采用的技术,完成系统绝大部分功能。采用JDK1.4。l Servlet:处理所有HTTP界面,把主要的运算工作分配到合适的类去完成。l JDBC:连接后台数据库,也可屏蔽不同数据库的差异。l XML:用于描述各种配置信息及数据。l Tomcat:提供Servlet的运行支持。l Apache:提供Web Server支持。l MS SQL Server:后台数据库,存放基础源数据。l EditPlus, make:用于编辑/编译Java源文件。在运行时,需要的环境如下:l Tomcat v4.03l Oracle 9i release 2l Java 2 RuntimeVII. 设计和编码THOR采用Java相关技术实现,总共编码量1300行左右,纯编码时间5.286.2共6天,由Cobra(周晓丹)独立完成。程序源码在Windows2000 Server, Tomcat 4.03, JDK1.4, J2EE1.3.01, PIII550, 256M环境下编译通过并顺利运行。在设计过程中我参考了Virginia Tech开放源码的部分设计思路,重写了所有代码,全面实现了OAI-PMH v2.0版本的Data Provider端。 类结构说明l oaiRepository记录了整个系统所需的全局常量,常量的值从配置文件中读入。l oaiUIDOAI要求的ID格式要符合URI标准,因此在数据库ID的基础上加以包装。功能有:将OAI ID同数据库ID互相转换;将OAI ID转化成字符串。l oaiQueryParams表示ListRecords/ListIdentifiers查询数据库时所需要的参数。l oaiResumptionToken主要实现了resumptionToken的内部表示。功能有:将Token的内部表示同字符串表示互相转换;生成Token所代表的oaiQueryParams查询参数。l oaiRecord介于原始数据同DC/MARC等不同元数据格式之间的中间数据格式。功能有:中间数据格式的表示;生成记录Header信息;生成DC格式XML数据;生成MARC格式XML数据。l oaiItem负责直接同数据库连接,查询数据,并把数据返回给oaiRecord。功能有:连接数据库;生成查询语句;生成结果集;取出结果集大小;把结果集数据赋给oaiRecord。l oaiError封装OAI要求的信息,根据错误号,生成相应的错误码及错误说明。l oaiVerb所有Verb的超类,实现了不同Verb的公共操作,其子类只需重写判断参数是否正确以及生成XML的主体这两个函数即可。功能有:生成固定的XML头;生成固定的XML尾;提供生成XML的运行框架;l GetRecordVerb的子类,读取一条item,赋值到一个oaiRecord中。l IdentifyVerb的子类,返回Repository服务器的信息,需要读取信息文件。l ListSetsVerb的子类,返回Repository关于数据集Set的信息。需要读取SetHierarchy文件,该文件由数据库Aggregate后生成,这样做是为了提高效率。不生成resumptionToken。l ListMetadataPrefixVerb的子类,返回Respository支持的metadata信息,需要读取metadataPrefix文件。如果有参数identifier,还要查找给记录是否存在。l ListRecordsVerb的子类,从数据库中查询满足条件的记录,包装成用户请求的源数据格式,返回给用户。功能有:支持resumptionToken;判断各种出错情况,生成相应的;调用oaiItem查询数据库。l ListIdentifiersVerb的子类,同ListRecords类似,仅仅把输出改为了仅输出Record的Header信息。编码时也直接用了ListRecords的代码,导致效率降低。l BadVerbVerb的子类,用于表示错误的Verb。l oaiHandler处理HTTP接口,把计算任务分配给合适的Verb,从而使Verb处理同具体的HTTP环境分离。功能有:Verb绑定;生成规范参数表;支持compress;支持中文的设置;读取配置文件;(支持HTTP状态码)。l serverError自定义的java.lang.Error子类,当产生内部错误时,被抛出。l DriveVerb测试驱动程序,其作用是替代oaiHandler驱动整个系统的运行,这样可以脱离HTTP环境进行测试。主要用于开发阶段。功能有:读入请求参数;调用相应的oaiVerb子类。 源代码(见附录) 测试报告OAI官方组织()为了确保所有的OAI Data Provider都完全遵守OAI协议,特别提供了一个conformance test,并向参加测试的Data Provider实现者提供一份详细的测试报告。另外,也可以自己设计测试用例,对照协议标准进行测试。由于时间所限,目前尚未进行系统的测试工作。VIII. 用户手册 安装1. 安装J2SE, J2EE, Tomcat4等相关支持环境,按照手册要求正确配置。2. 在Tomcat4的webapps下建立oai目录,把所有的*.class文件copy到oaiWEB-INFclasses下,把所需JDBC等*.jar文件copy到oaiWEB-INFlib下。适当配置server.xml及web.xml等文件。3. 修改THOR配置文件,将所需文件的路径填入适当项中。 测试及使用本来应该是用Harvester通过HTTP协议访问THOR,采集所需源数据,但为了实验方便,可以在浏览器地址栏中输入网址,可以看到返回的XML文件格式。现在就可以访问:59(这是我在清华的实验平台的主机IP)进行测试,主页上有详细的使用指南。国外有一个通用的Repository Explorer可以进行测试使用,它模拟了一个Harvester,非常好用。但这台59无法被国外的机器访问,无法使用,非常遗憾。 运行示范1. 在浏览器地址框中输入:59,并点击进入Verb测试园地。2. 选择ListRecords,在”from”一栏中输入”1999-05-05T12:00:00Z”,在metadataPrefix一栏中输入”oai_dc”,提交。3. 应该看到返回的XML结果集,如果结果集是incomplete的,还有一个resumptionToken,“复制”这个token。4. 回到Verb测试园地,选择ListRecords(resumption),把复制的token“粘贴”上,提交。5. 应该看到剩下的结果集。IX. 下一步工作由于实习时间较短,THOR有一些功能并不完善,下一步的主要工作就是完善这些功能,并接受OAI组织的conformance test,使THOR成为一个严格符合OAIv2.0协议的、运行稳定的系统。另外,由于OAI协议的最新版本v2.0于2002年6月14日才正式推出,THOR也算是OAIv2.0在未来长期的推广过程中实现的较早的系统,具有一定的示范意义;而且,在实现THOR的过程中,采用了一些具体的技巧和实现方式,我也希望把在开发THOR的过程中所获得的经验和技巧总结出来,写一片文章,投到相关的会议或期刊上。上面提到的工作我会在实习结束之后展开。X. 参考文献1 周立柱 邢春晓 “数字图书馆研究和开发” 第18届全国数据库学术会议演示稿2 William Y. Arms著 施伯乐等译 “数字图书馆概论” 电子工业出版社3 肖珑等 “国内数字图书馆研究与发展综述” 北京大学数字图书馆研究所4 隋开霞 “基于XML/RDF的清代样式雷图元数据设计及实现” 清华硕士学位论文5 张付志等 “数字图书馆互操作研究综述” 燕山大学6 Chunxiao Xing, Lizhu Zhou, Kaihua Wu, Guilin Liu “Research and Implementation of Tsinghua Architecture Digital Library” 16th International Parallel and Distributed Processing Symposium, Florida, U.S.A, 20027 The Open Archives Initiative Protocol for Metadata Harvesting version 2/OAI/2.0/openarchivesprotocol.htm8 Implementation Guidelines for the OAI-PMH vesion 2/OAI/2.0/guidelines.htm9 Paul Miller “Z39.50 for All” http:/www.ariadne.ac.uk/issue21/z395010 “Dublin Core Metadata Initiative” 11 Carl Lagoze etc. “The Open Archives Initiative: Building a low-barrier interoperability framework” /documents/oai.pdf12 Bruce Eckel “Thinking in Java 2nd Edition” /Books/TIJ13 “The Java Tutorial” /docs/books/tutorial14 “Java 2 SDK, Standard Edition Documentation version 1.4.0”/j2se/1.4/docs/index.html15 Marty Hall “Core Servlet & JSP” 16 “清华数字图书馆园地” /digitallib/digital.htmlXI. 致谢首先,感谢清华大学计算机系给我提供了一个宝贵的实习机会。衷心感谢周立柱老师、邢春晓老师精心的指导。周老师优雅的风度、渊博的学识和敏锐的洞察力令我深为折服,邢老师幽默的谈吐、敏捷的反应和不断涌现的灵气也给人留下深刻的印象。在两位老师身上,我学到了很多东西,使我终身收益。感谢数据库组所有的老师和同学,你们热情的接受了我,陪伴我度过了一段充实而快乐的时光。最后,也是最重要的,感谢母校山东大学,感谢所有教导过我的老师,正是您们辛勤无私和精彩绝伦的教导,为我打开了无尽的知识宝库,谢谢!XII. 附录 实习日志总计:51天日期完成任务4.24初到实验室,配置上机环境4.25看DLI计划,学习Z39.504.26学习Dublin Core,RDF,OAI(初步)4.27学习OAI4.28学习SDLIP,SDARTS4.29学习STARTS,复习XML基本概念(Namespace, Schema)4.30学习InfoBus,整理资源,写阶段报告5.15.3五一节放假5.44.5深入学习OAI,体验OAI服务,深入学习DC5.6深入学习Z39.50,体验Z39.50服务5.75.8较深入学习InfoBus5.95.10重装系统,准备OAI data provider开发5.11规划OAI原型开发计划5.12研读VT的c+实现方案5.135.15学习实验Java5.165.19学习Java server端编程,配置实验环境5.205.21看OAI v2.0文档,写创新总结报告5.225.24返校各项事宜5.256.2OAI原型的分析、设计、编码、调试6.36.5休息6.66.9完善源码,写文档,写阶段性总结6.106.13写毕业论文 源码/* * Version: alpha 1.1 * Created: 2002-05-28. * LastUpdated: 2002-06-02. * Developer: Cobra. * Description: Stores the server-wide configurations and variables. */import java.util.*;import java.io.*; public class oaiRepository / 真正运行时下面的量应该全是final的,但现在为了测试,都改成非final了 public static boolean supportSetHierarchy; public static boolean supportCompress = true; public static int MaxRows = 2; / 每次query最大结果数,超过此数,则采用resumptionToken / 存在RepositoryConfig.xml中,由ReadRepositoryConfig读入设置,若查询不制定from,就使用该值 / 为了调试目的,手工设置一个值 public static Date EarliestDateStamp = (new GregorianCalendar(1990,0,1,0,0,0).getTime(); public static Date MaxDateStamp = (new GregorianCalendar(2099,0,1,0,0,0).getTime(); public static String metadataFormats = oai_dc ; public static String ConfigFilePath = d:tomcat4webappsoaiWEB-INFclassesconfig; /* * Pre :配置文件RepositoryConfig.xml存在且内容完整正确. * Post :把文件中的配置信息读出,存入oaiRepository的全局变量中 */ public static void ReadConfig() / read file; try oaiRepository.supportSetHierarchy = true; if ( false ) throw new IOException(); catch( IOException e ) System.err.println( File RepositoryConfig.xml read error! ); throw new serverError( oaiHandler:init: Read repository config file error ); /* * Version: beta 1.2. * Created: 2002-05-28. * LastUpdated: 2002-06-03. * Developer: Cobra. * Description: Represent UID format, and an optional date field. */import java.util.Date;public class oaiUID public static final String header = new String(oai:); / UID的URI类型 protected String dbid; / metadata在数据库中的ID protected String uidstring; / 封装之后的uid /* * Usage :把数据库中的rawid封装成oaiUID格式返回 */ public static oaiUID wrap( String rawid ) return new oaiUID( header + rawid ); /* * Usage :oaiUID的默认初始化,调用者必须保证id的正确性,否则返回serverError。比较保险的方法是调用parse() 调用者无需clone一个id进来,构造函数会生成一个新的 */ public oaiUID( String id ) if ( !id.startsWith( header ) ) throw new serverError( oaiUID: initialize with a bad format id ); uidstring = id.toString(); / init a copy of id dbid = uidstring.substring( header.length() ); / 除去oai:之外的部分既是 public static oaiUID parse( String str ) if ( str = null ) return null; if ( !str.startsWith( header ) ) return null; return new oaiUID(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论