构建基于SRU(Search and Retrieve via URL)协议的服务接口

来源:互联网 发布:堆排序学生成绩java 编辑:程序博客网 时间:2024/06/07 03:52

一、SRU介绍(Search/Retrieve URL Service)

基于开放协议,通过带有指定参数的url获取对应的xml检索数据。

SRW/SRU:SRW(Search/Retrieve for the Web)和SRU(Search/Retrieve URL Service)
这两者是针对Web的信息检索协议,利用Web服务的架构,实现了Z39.50的一些基本服务。是ZING的核心功能。SRW使用HTTP与SOAP的无状态通信,采用XML作为信息传输编码,也可以单纯使用URL传递查询请求,用WSDL来定义Z39.50传输的格式信息,检索结果也以XML格式输出。而SRU只能通过URL参数方式提交检索请求,不支持完整的SOAP消息包(指支持SOAP消息报中的内容序列)。

它主要包括SRW/U、CQL、Zoom、ez3950和ZeeRex五个部分。



SRU的Web服务定义3种基本操作方法:
  (1)Explain方法:客户端通过调用该方法获得SRU接口的相关信息,包括:服务器主机信息、数据库信息、索引字段列表、元数据Schema以及相关参数的默认值等信息,从而支持第三方用户自主配置本地检索策略。
  (2)searchRetrieve方法:是SRU服务的核心,它执行对数据库的查询操作并返回结果集。SRU服务器对CQL语法的支持可分3个级别:0级必须支持任意词的检索(如query=OAI),如果接收到一个不支持的查询式,必须能返回一个对应的说明信息;1级除支持0级功能外,还要支持关系表达式(如“title=OAI”)或布尔表达式(如“OAIandSRU”);2级在支持1级功能基础上,要能够解析所有CQL查询并给出适当的应答。一个完善的SRU服务器应该对CQL提供2级支持。根据SRU规范,searchRetrieve操作应答信息可以是有结构的文本流,或者是以DC、MARCXML、MODS等规范描述的XML文档[13],NSL的SRU服务器当前采用扩展DC元数据规范支持结果描述。
  (3)Scan方法:调用该方法可返回在网络数据库索引中
包含的各个关键词及其出现频率,帮助用户确定数据库所覆
盖的主题范围,进而选择适当的关键词作为查询词。

我们主要实现主要的SearchRetrieve方法。


二、CQL语言等

1.1. CQL语言

  1. CQL语言简介

    CQL:Common Query Language的简写,它是一种正式的检索语言。可以向检索系统发出检索请求,其检索表达式可以映射到具体的检索系统中去(例如:RMS DB Server、SQL等检索系统)。CQL是一种非常直观的检索语言,其设计目的是使人易读、易写。如想了解更详细信息,请参考CQL: http://www.loc.gov/standards/sru/specs/cql.html

  2. CQL与传统检索语言的区别

    传统的检索语言一般有两种情况:一种是功能强大而表达性强的语言,对于非专业人员既不容易读,也是不易写的(如SQL、PQF、XML Query);另一种是简单而直观的语言,它不能够表达复杂的一些概念(如CCL或Google的检索语言)。CQL的目的就是把检索表达的这种简单性和直观性与Z39.50的Type-1检索有机地结合在一起,就像界面上任何一个语法正确地文本一样,CQL可以特意定制一些如“do what you mean”作为一些简单的每天的查询。当然,如果需要的话,也允许使用一些方法表达复杂的概念。

1.2. CQL语言说明及样例

  1. 简单词

    表示不需要加入任何运算符和修饰符,直接输入检索词进行检索。例如:计算机。

  2. 关系表达式

    1. 关系运算符

      • =:

        • 相当于模糊匹配,用于查找匹配一定条件的记录。例如:论文题名="计算机辅助设计 研究",表示查找论文题名是“计算机辅助设计 研究”这个字符串或是包括“计算机辅助设计 研究”的一串字符串,注意:只能在“计算机辅助设计 研究”的前后插入字符,不能在“计算机辅助设计 研究”字符串内插入任何字符。

        • 精确等于某个值。

      • exact:能精确匹配一串字符串。例如:作者 exact "王明",是指查找作者是王明的记录。

      • all:当检索词中包含有多重分类时,它们分别可以被扩展成布尔运算符“and”的表达式。例如:论文题名 all “北京 上海 广州”,可扩展为:论文题名=“北京” and 论文题名=“上海”and 论文题名=“广州”,表示查找论文题名中包括“北京、上海、广州”的记录。

      • any:当检索词中包含有多重分类时,它们分别可以被扩展成布尔运算符“or”的表达式。例如:论文题名 any "北京 上海 广州"可扩展为:论文题名=“北京” or 论文题名=“上海” or 论文题名=“广州”,表示查找论文题名中包括“北京、上海、广州”或其中之一的记录。

    2. 关系修饰符

      • 支持通配符“*”。

        *:表示匹配任意0个或多个字符,如果表示单个字符“*”,那么可以用转义字符“\*”来表示。例如:计算机*研究,表示查找包括“计算机研究”、“计算机软件研究”、“计算机辅助设计研究”等的记录。

  3. 布尔表达式

    1. 布尔运算符

      • and:用“与”组合检索项,表示查找包括这两项的记录。例如:北京 and 上海,表示查找包括北京和上海的记录。

      • or:用“或”组合检索项,表示查找包括这两项或仅其中任一项的记录。例如:北京 or 上海,表示查找包括北京和上海或其中之一的记录。

      • not:使用“非”查找包括某一项而非另一项的记录。例如:软件 not 硬件,表示查找包括软件但不包括硬件的记录。

    下表为具体的检索样例。

    表 1. 检索样例

    检索词含义软件检索数据库所有字段中含有“软件”的记录论文标题 = 软件检索数据论文标题字段中含有“软件”的记录软件 and 测试检索数据库所有字段中含有“软件”和“测试”的记录软件 or 测试检索数据库所有字段中含有“软件”或“测试”的记录论文标题 = "软件" and 论文标题 = "测试"检索数据库论文标题字段中含有“软件”和“测试”的记录论文标题 = "软件" or 论文标题 = "测试"检索数据库论文标题字段中含有“软件”或者“测试”的记录论文标题 = "软件" not 论文标题 = "测试"检索数据库论文标题字段中含有“软件”但是不含有“测试”的记录作者 exact "杨美琴"检索数据库作者字段精确为“杨美琴”的记录企业名称 all "万方 股份 公司"检索数据库企业名称字段中含有“万方”和“股份”以及“公司”的记录企业名称 any "万方 股份"检索数据库企业名字段中含有“万方”或“股份”的记录论文标题= "软件" and 论文标题= "测试" not 作者="顾江萍"检索数据库论文标题字段中含有“软件”和“测试”,但是作者字段中不含有“顾江萍”的记录


 三、SRU/W检索接口访问说明(示例)


 1、SRU/W基本访问信息

Locator:http://irsr.llas.ac.cn/sru

SRU/W版本:1.2

HTTP Transport:GET,POST(SRU)

Result Formats:http://irsr.llas.ac.cn/sru/style/searchRetrieveResponse.xsl

 2、SRU/W参数设计规范

检索的功能主要是让用户可以获取远程数据库中的数据,实现过程为:客户端发送一个检索请求(searchRetrieve request)给服务端,服务端检索本地的数据库,并返回检索应答(searchRetrieve response)给客户端。

 2.1、SRU客户端请求格式

主要遵守SRU标准请求格式,包含以下几个基本参数,见表1:

表1 SRU客户端请求格式
参数名称必备or可选描述version必备表示客户端支持的版本号,服务器端可以按照客户端的要求发送消息,如果服务器端的版本号高于客户端的版本号,那么服务端将降低版本号,适应客户端的要求。本系统默认为1.1。query必备遵守CQL语法的检索表达式。opeation必备一般为"searchRetrieve".本系统默认为searchRetrieve.startRecord可选说明客户端要求response返回的第一条记录的位置。服务器端有可能检索到若干条记录,用户如果只想取其中的一部分,则可使用该参数,取值应大于0。本系统默认为1。maximumRecords可选说明客户端要求response返回的最大记录数,取值应大于等于0。但应小于服务器端默认的最大记录数。本系统默认为10。recordPacking可选指定命中结果返回的格式,可以是String或是XML。本系统默认为"xml"。recordSchema可选客户端要求返回的记录需要遵循的XML模式。主要用于验证服务器端返回的XML文件的有效性。本系统默认为空。recordXPath可选由recordSchema的参数决定,必须遵守SRU XPath样式表。本系统默认为空。resultSetTTL可选返回结果集被创建的时间,服务器端在应答时可忽略这个请求。本系统默认为300。sortKeys可选指定排序方式,可以对多个字段进行排序。sortKeys由多个sortKey组成,sortKey包括的参数见表2:stylesheet可选返回xml 样式表的URL,一般由服务器端指定。本系统指定为"http://irsr.llas.ac.cn/sru/style/searchRetrieveResponse.xsl".extraRequestData可选提供一些其他的信息,一般用于指定要检索的数据表。本系统默认为空。
表2 sortKeys参数说明
名称类型是否可选pathxsd:istring必备项schemaxsd:string可选项ascendingxsd:boolean可选项 2.2、SRU请求的应答格式

同样遵守SRU请求的标准应答格式,见表3:

表3 SRU请求的应答格式
参数名称类型必备or可选描述versionxsd:string必备说明服务器使用的SRW协议的版本。本系统指定为"1.2"。numberOfRecordsxsd:integer必备说明命中记录的数量。查询失败时值为0。resultSetIdxsd:string可选结果集的唯一标识。每个结果集都有唯一的resultSetId,不论是否有新的查询提交,也不论该结果集是否仍然存在。若修改已有结果集(如对其重新进行排序),则服务器为新的结果集提供新的resultSetId。本系统默认为空。resultSetIdleTimexsd:integer可选服务器端认为结果集能够保留的时间。resultSetIdleTime只能取正数,且应大于用户实际引用结果集的时间。若服务器不让结果集被引用,则应在响应中忽略结果集标识。本系统默认为空。recordssequence of record可选返回的记录结果列表。records包含一个或多个record子元素。每个record元素包含一个命中记录或者是一个代表诊断,解释为什么命中记录未被传递。nextRecordPositionxsd:integer可选指下一次返回记录的位置,适应于翻页的情况。diagnosticssequence of diagnostic可选错误信息列表。diagnostics包含一个或多个diagnostic子元素。每个diagnostic表示一种错误诊断消息。extraResponseDataxmlFragment可选是扩展 ResponseData,主用来报告searchRetrieveRequest中extraRequestData指定数据表是否存在。echoedSearchRetrieveRequestechoedSearchRetrieveRequest可选要求仍以XML的格式将查询信息返回给请求方。  3、SRU/W接口检索规范

在IRSR中,主要是针对综合资源和科研机构进行查询。其中综合资源可分为软件、资源集、文本集合、数据集、事件、图像/多媒体、交互资源、服务8种类型。

具体查询方法主要有两种:

3.1、提交表单进行查询

查询地址:http://irsr.llas.ac.cn/sru

SRU/W表单查询界面

图1 SRU/W表单查询界面

例如:要查名称中含有“nano“的综合资源,

则选择“找综合资源”,下拉菜单选择“名称”,然后输入“nano”,并点击”提交查询“。

3.2、querystring的查询方式

如上例的表单,提交的基本URL如:

http://irsr.llas.ac.cn/sru/services?radio=ColA&version=1.1&operation=searchRetrieve&maximumRecords=10&startRecord=1&recordPacking=xml&recordSchema=&recordXPath=&resultSetTTL=300&sortKeys=&stylesheet=style%2FsearchRetrieveResponse.xsl&extraRequestData=&ctype=title&query=nano

以上两种查询方法可得到的请求结果都为一个XML文件,格式如services.xml所示:services.xml

客户端得到XML文件后,可将其解析,得到相应的结果。示例如图2:

records解析示例-资源查询

图2 records解析示例-资源查询

同理,查询科研机构名称中含有"中国科学院"的记录,见图3:

提交的基本URL如下:

http://irsr.llas.ac.cn/sru/services?radio=OrgA&version=1.1&operation=searchRetrieve&maximumRecords=10&startRecord=1&recordPacking=xml&recordSchema=&recordXPath=&resultSetTTL=300&sortKeys=&stylesheet=style%2FsearchRetrieveResponse.xsl&extraRequestData=&ctype=title&query=%E4%B8%AD%E5%9B%BD%E7%A7%91%E5%AD%A6%E9%99%A2

records解析示例-机构查询

图3 records解析示例-机构查询


四、基于SRU协议系统的应用                                                                                                                                                                                                                                                               

 


参考:1.http://www.docin.com/p-70531363.html

            2.http://www.loc.gov/standards/sru/specs/cql.html  cql介绍

           3.http://www.loc.gov/standards/sru/index.html sru 标准

           4.http://www.loc.gov/standards/sru/resources/tools.html 辅助开发工具包等