CLSS Web Service API:面向应用系统的Web Service术语服务
简介
CLSS(Classification Scheme Sharing Service System, 分类法共享服务系统) Web Service API术语服务是指对分类法进行浏览、查询和应用的各种Web服务的统称。Web Service术语服务通过Web应用程序接口(API)支持机器对词表的访问和调用,是在网络环境下对词表进行应用的重要途径[1]。本文中列出的一些API针对所有受控词表(简称词表),有一些则仅针对分类法(简称类表)。
为进一步提供面向机器、系统或应用程序的Web Service术语服务,我们开发了一系列的Web Service API按需提供弹性服务。本文实现的分类法Web Service术语服务主要用于满足机器、系统或应用程序的需要,可以通过术语服务注册的方式集中提供各种分类法本体供用户自由选择调用,系统中列出、描述并指明在Web服务中可利用的分类法的集合,每种分类法以URI进行识别,从而促进分类法的发现、重用和互操作,如开放类号或类名检索OPAC的功能。
根据当前分类法网络应用的实际情况,本文提供的Web Service API集合在第1,2节中详细列出,通过Web Service调用的标准方法,所有的应用都可以在不同的应用平台上实现。为测试系统功能和获取更多的需求信息,现提供实验性开放服务,访问地址:http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService/getClassEntryType?schemeURI={0}&conceptURI={1}(http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService/method?parameter=parameter_value)。具体实现技术和调用方法请参考文献[2]。图1所示为自动赋予已有关键词标引的图书文献或信息资源分类号的过程,多个关键词以空格分开。
图书馆信息管理系统、数据库检索系统、搜索引擎、标签系统等,无论基于什么平台开发、采用何种开发语言,都可以使用该套API提供的服务,来实现基于分类法的智能检索、分类标引、知识链接和知识服务。
这里以《中国图书馆分类法》(CLC)为例,以此类推,其他分类法类型中文KOS等都可以依此方法实现其上述术语服务,目前仅面向教育和科研目的。
1 CLSS – 基础Web Service API
CLSS共有以下获取SKOS受控词表中某个成员概念的具体信息的12个通用的基础Web Service API,并可以根据新的需求进行扩展:
- 获取概念的标签、注释说明等文字属性信息
[1] public String getConceptLabel(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的所有标签。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的所有标签字符串。
[2] public String getConceptPrefLabel(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的首选标签。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的首选标签字符串。
[3] public String getConceptAltLabel(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的可选标签。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的可选标签字符串。
[4] public String getConceptHiddenLabel(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的隐藏标签。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的隐藏标签字符串。
[5] public String getConceptNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的所有注释说明。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的所有注释说明字符串。
[6] public String getConceptDefinition(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的定义。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的定义字符串。
[7] public String getConceptExample(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的应用举例。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的应用举例字符串。
[8] public String getConceptEditorialNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的编辑说明。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的编辑说明字符串。
[9] public String getConceptChangeNote(String concept,String separator);
接口作用:
该接口的作用是获取指定词表中的指定概念的修改说明。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的修改说明字符串。
[10] public String getConceptHistoryNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的历史说明。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的历史说明字符串。
[11] public String getConceptScopeNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的范围说明。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的范围说明字符串。
[12] public String getConceptNotation(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念的符号表示。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的符号表示字符串。
2 CLSS – 扩展Web Service API
CLSS共有以下5类共24个通用的扩展Web Service API,并可以根据新的需求进行扩展:
获取类目的扩展注释说明和其它文字属性(仅针对分类表)
[1] public String getConceptCrossClassNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的交叉类目注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回交叉类目注释字符串。
[2] public String getConceptAltClassNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的交替类目注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回交替类目注释字符串。
[3] public String getConceptRelatedClassNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的类目参照注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回类目参照注释字符串。
[4] public String getConceptReferenceNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的参考类目注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回参考类目注释字符串。
[5] public String getConceptClassGuideNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的相关类目注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回相关类目注释字符串。
[6] public String getConceptCombineNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的复分注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回复分注释字符串。
[7] public String getConceptImitateNote(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的仿分注释。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回仿分注释字符串。
[8] public String getConceptClassEntryType(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的类型。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的类型字符串。
- 获取类目的类号信息(仅针对分类表)
[9] public String getConceptNotationSpan(String concept,String separator);
接口作用:
该接口的作用是获取指定类表中的指定类目的类号范围。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的类号范围字符串。
[10] public String getConceptNotationCommon(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的共有类号。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的共有类号字符串。
[11] public String getConceptNotationBegin(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的起始类号。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的起始类号字符串。
[12] public String getConceptNotationEnd(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的结束类号。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的结束类号字符串。
- 获取各种语义相关联的概念(同一词表)
[13] public String getAltClassEntryOf(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的交替类目(仅针对分类表)。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的交替类目字符串。
[14] public String getTopConcept(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定概念所在词族的顶级概念。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念所在词族的顶级概念字符串。
[15] public String getCrossClassEntry(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的交叉类目(仅针对分类表)。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的交叉类目字符串。
[16] public String getReferenceClassEntry(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的参考类目(仅针对分类表)。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的参考类目字符串。
[17] public String getImitateClassEntry(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的仿分类目(仅针对分类表)。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的仿分类目字符串。
[18] public String getCoordinationOf(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定词表中的指定复合概念的组配概念。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定复合概念的组配概念字符串。
- 获取其他词表中相映射的概念(跨词表)
[19] public String listNonCloseMatch(String schemeURI,String conceptURI);
接口作用:
该接口的作用是列出与指定词表中的指定概念非近似映射的其他词表中的所有概念(非近似映射是指除skos:closeMatch和skos:exactmatch之外的任何一种映射关系)。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的非近似映射中的所有概念列表。
[20] public String getPreviousMatch(String schemeURI,String conceptURI);
接口作用:
该接口的作用是列出与指定词表中的指定概念前概念映射的前一版本词表中的所有概念(前概念映射是指修改过URI的概念与前一版本概念之间的关系)。
参数说明:
参数schemeURI为指定的词表;
参数conceptURI为指定的概念。
返回结果说明:
如果查找结果为空则返回null,否则返回指定概念的前概念映射中的所有概念列表。
- 获取复合概念的组配概念的来源(仅针对分类表)
[21] public String getCombineFrom(String schemeURI,String conceptURI);
接口作用:
该接口的作用是获取指定类表中的指定类目的组配类目的所属附表(复分表)。
参数说明:
参数schemeURI为指定的类表;
参数conceptURI为指定的类目。
返回结果说明:
如果查找结果为空则返回null,否则返回指定类目的组配类目的所属附表字符串。
- 获取关键词对应的分类号(针对自动分类)
[22] public String getAltCLassificationForKeywords(String schemeURI,String keywords);
接口作用:
该接口的作用是获取指定类表中的与指定关键词对应的候选类目列表,即列出与该关键词相关的所有类目,搜索范围包括类名、注释、各种映射等。
参数说明:
参数schemeURI为指定的类表;
参数keywords为指定的关键词。
返回结果说明:
如果查找结果为空则返回null,否则返回指定关键词对应的类目列表字符串。
[23] public String autoCLassificationForKeywords(String schemeURI,String keywords);
接口作用:
该接口的作用是获取指定类表中的与指定关键词对应的最佳类目,最佳类目为与该关键词相关的所有类目根据自定义排序规则排序后排在最前面的类目。
参数说明:
参数schemeURI为指定的类表;
参数keywords为指定的关键词。
返回结果说明:
如果查找结果为空则返回null,否则返回指定关键词对应的最佳类目字符串。
[24] public String furtherClassification(String schemeURI, String mainKeywords, String furtherKeywords);
接口作用:
该接口的作用是获取指定类表中的按照指定主分关键词和细分关键词进行细分后的组配分类号。
参数说明:
参数schemeURI为指定的类表;
参数mainKeywords为指定的主关键词,多个关键词以空格分开;
参数furtherKeywords为指定的细分关键词。
返回结果说明:
如果查找结果为空则返回null,否则返回按照指定主关键词和细分关键词进行细分后的组配分类号字符串。
3 CLSS Web Service API的调用方法
3.1 使用.Net的调用方式
3.1.1 直接通过URL地址进行访问调用
根据CLSS提供的Web服务的WSDL地址,以及希望调用的API,组成Web服务调用的完整URL地址,这里以CLC为例。
如CLC提供的Web服务的WSDL地址为:
http:// www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService? wsdl
如果希望调用Web Service,通过指定类表中的指定类目(例如B)获取类目的类型,那么选择的API为getClassEntryType。
构成调用此API的完整URL地址为:
http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService/getClassEntryType?schemeURI={0}&conceptURI=B
其中{0}处填写指定的类表。
i. .NET平台中提供了System.Net.HttpWebRequest来模拟页面访问URL的方法,并通过System.Net.HttpWebResponse类取得响应的页面内容。
在CLC网络服务系统中,利用Axis2作为它的Web服务引擎,提供的Web服务对中文的处理默认是ISO8859-1编码模式。因此在使用上述URL地址前需要对检索内容进行ISO8859-1转码。
byte[] tmp = Encoding.Default.GetBytes(value);
string tmpvalue = Encoding.GetEncoding("ISO8859-1").GetString(tmp);
把tmpvalue的值作为conceptURI的参数值,利用HttpWebRequest类进行访问。
HttpWebRequest reqforsearch = (HttpWebRequest)WebRequest.Create(url);
接着利用HttpWebResponse类获得页面响应。
HttpWebResponse resforsearch = (HttpWebResponse)reqforsearch.GetResponse();
ii. 判断页面的响应是否成功,接着利用.NET平台中提供的System.IO.Stream,System.IO.StreamReader来获取(2)中得到的页面响应的数据流。
Stream stream = resforsearch.GetResponseStream();
srforsearch = new StreamReader(stream, System.Text.Encoding.GetEncoding("utf-8"));
string s = srforsearch.ReadToEnd();
iii. Web Service返回的结果是以XML格式进行展示的。所以接下来根据具体需求对这些XML返回结果做解析,这里主要采用正则表达式的方法去做解析。
string clc_regex = "<ax21:label>(.*?)</ax21:label>";
Match clc_match = Regex.Match(s, clc_regex);
if (clc_match.Success)
{
result = clc_match.Groups[1].Value;
}
这里解析出来的结果为例子中需要的类目类型。
3.1.2 直接使用.Net提供的Web Service调用支持技术
i. 首先点“添加Web引用”,填写URL地址为(这里以CLC为例):
http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService?wsdl
填写Web引用名(如WebReference);系统会自动根据这个WSDL文件生成相应的代理类;
ii. 接着在程序中通过这些代理类来调用Web Service接口,如2.1.1中所述的例子,可如下调用:
byte[] tmp = Encoding.Default.GetBytes(value);
string tmpvalue = Encoding.GetEncoding("ISO8859-1").GetString(tmp);
TestWSClient.WebReference.ThesaurusService ts = new TestWSClient.WebReference.ThesaurusService();
TestWSClient.WebReference.Concept[] result = ts.getConcepts(tmpvalue, 0, true, 0, true);
在使用这种方法时,同样需要先对传入的中文参数进行转码。
3.2 使用JAVA的调用方式
3.2.1直接通过URL地址进行访问调用
在JAVA中,如果希望直接通过URL地址进行调用Web Service,可以使用Apache Jakarta Common下的子项目HttpClient(http://hc.apache.org/httpclient-3.x/)。
首先到HttpClient的官方网站(http://hc.apache.org/httpclient-3.x)下载它的binary with dependencies包。解压缩后取出lib中的6个包apache-mime4j-0.6.jar,commons-codec-1.3.jar,commons-logging-1.1.1.jar,httpclient-4.0.3.jar,httpcore-4.0.1.jar,httpmime-4.0.3.jar,加入到您的项目中。
接下来可以参考以下所描述的步骤进行操作:
i. 根据CLSS提供Web服务的WSDL地址,以及希望调用的API,组成Web服务调用的完整URL地址。
例如这里以CLC提供的Web服务的WSDL地址为:
http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService?wsdl
如果希望调用Web Service,通过指定类表中的指定类目(例如B)获取类目的类型,那么选择的API为getClassEntryType。
构成调用此API的完整URL地址为:
http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService/getClassEntryType?schemeURI={0}&conceptURI=B
其中{0}处填写指定的类表。
例如:
String conceptURI = "B";
String tmpvalue = new String(conceptURI.getBytes("gbk"),"ISO8859-1");
String urlstr = "http://www.lib.szu.edu.cn/nkosapp/ProjectForCLC/services/CLCService/getClassEntry?schemeURI=" + {0} + "&conceptURI=" + tmpvalue;
ii. 应用HttpClient提供的API,如这里使用Get的方式,通过创建DefaultHttpClient实例、HttpGet实例、ResponseHandler实例来访问上述的url,代码如下:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(urlstr);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = null;
try {
responseBody = httpclient.execute(httpget, responseHandler);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
其中responseBody就是Web Service调用后的结果(XML格式,所以您需要用正则表达式来获取您真正需要的内容)。
最后需要关闭DefaultHttpClient实例。如:
httpclient.getConnectionManager().shutdown();
3.2.2 使用其他工具如Axis2\XFire等来调用CLSS所提供的API
也可以使用其他的Web Service工具包进行调用,如:
Axis2 (http://ws.apache.org/axis2/ ) 或者
XFire (http://xfire.codehaus.org/ )
具体的调用方式请查看他们的官方网站。
参考文献:
[1] 欧石燕, 虞为. 网络知识组织系统注册与术语服务规范(D009-1)[R]. 国家图书馆, 2011.5. (Ou Shiyan, Yu Wei. NKOS System Register and Terminology Service specifications(D009-1) [R]. National Library of China, 2011.5.)
[2] 林伟明, 曾新红. OntoThesaurus Web Service API 及其应用研究[J]. 图书情报工作. 2010, 54(2): 119-122. (Lin Weiming, Zeng Xinhong. OntoThesaurus Web Service API and Its Application [J]. Library and Information Service, 2010, 54(2): 119-122.)