GCAT(汉语著者号码表) 取号服务 WebService接口说明
声明:
1) gcatserver服务器软件和WebService接口的版权归数字平台公司所有;
2) 目前位于dp2003.com服务器上的gcatserver运行实例,数字平台公司保留对访问者收取服务费的权利(虽然目前尚未收费)。关于收费服务的权利和义务另行约定;
3) 本接口说明只是为技术参考之用,数字平台公司并不担保开发者利用这里介绍的知识开发出具有汉语著者号取号功能的前端软件。数字平台公司也不对开发者所开发出的涉及本接口的前端软件的功能性作任何担保;
4) 如果今后gcatserver的WebService接口发生修改,或者本接口说明发生修改,数字平台公司不能担保通知到特定的开发者,并且不能担保开发者的已经开发的前端程序经过修改后能兼容修改后的本接口。(虽然数字平台公司会以合适的方式公布修改后的接口文档)
~~~
GCAT的WebService接口WSDL文件在这里可以获得:
http://dp2003.com/gcatserver/metadata
将这个WSDL文件导入某种开发工具,例如VS2010以后(所谓Add Web Reference),可以创建出C#的Proxy代码,然后就可以当作一般的(类和)函数来调用了。这方面网上通用的介绍资料很多,这里就不详述了。
下面介绍一下这个接口中取著者号码的函数使用方法和相关数据结构,以帮助开发者利用好这个接口。
下面是获得著者号的API GetNumber()函数的原型:
// 获得著者号
// parameters:
// strID 验证身份用的ID
// strAuthor 著者字符串
// bSelectPinyin 是否要选择多音字。一般用true
// bSelectEntry 是否要选择同名的多个条目。一般用true
// bOutputDebugInfo 是否要返回调试信息
// questions [in][out]需要回答的问题
// strNumber [out]返回著者号码
// strDebugInfo [out]返回调试信息
// strError [out]返回出错信息
// return:
// -3 需要回答问题
// -2 strID验证失败
// -1 出错
// 0 成功
public int GetNumber(
string strID,
string strAuthor,
bool bSelectPinyin,
bool bSelectEntry,
bool bOutputDebugInfo,
ref Question[] questions,
out string strNumber,
out string strDebugInfo,
out string strError)
当前还没有使用权限验证机制,所以strID参数值只需要指定为""即可。
strAuthor需要放入拟取著者号的著者字符串。
bSelectPinyin和bSelectEntry都应当使用true来进行函数调用。表示需要进行多音、多事项时的提问选择。如果它们为false进行调用,软件会自动选用多项的第一项,这显然不是一个好的作法。
bOutputDebugInfo决定了函数返回的时候是否返回调试信息。调试信息用文字描述了取号的全过程,对于调试、排错,还有图书馆学系编目课程的教学实践(深入了解通用汉语者者号码表的取号细节)都很有帮助。
questions是一个ref型的参数,也就是调用前里面可能已经有值,调用过程可能会增补修改里面的内容。当GetNumber() API返回-3的时候,应当出现一个类似对话框的界面,把questions里面的提问显示出来,让操作者可以回答问题(以输入一个适当的字符串的方式),然后前端程序把这个“答案”字符串设置到questions里面的适当位置,重新发起一次GetNumber() API调用。
questions参数的数据类型是Question[],也就是一个元素为Question类型的数组。Question类型的定义如下:
public class Question
{
public string Text; // 问题正文
public string Answer; // 问题答案
}
当GetNumber() API调用返回-3的时候,前端程序应当寻找Question数组的最末一个元素的Text成员显示出来,然后收集操作者输入的答案字符串,把答案字符串放入Question数组的最末一个元素的Answer元素。然后重新调用GetNumber() API。
GetNumber() API使用中稍微有一点曲折的地方就是这个遇到返回-3时候的处理过程。
~~~
如果未来我们启用了身份验证机制,那么前端程序还需要准备处理GetNumber() API返回-2的情况。前端程序需要出现一个对话框,让操作者输入身份ID,然后用这个新的ID字符串重新调用GetNumber() API。当然前端程序可以采用某种机制把操作者输入的ID字符串存储起来(最好要经过操作者明示同意“存储”之后),以便下次访问的时候使用。
操作者的身份ID如何获得?需要最终用户单位联系数字平台公司的的客户服务部门,请求分配一个ID字符串。如果前端程序的开发者自己不是最终用户,开发者不必代替最终用户去获得一个身份ID字符串,数字平台公司也是明确反对开发者这样去代劳的。开发者在测试验证自己的前端软件的时候如果需要身份ID字符串,同样需要联系数字平台公司的客户服务部门获取一个测试用的ID字符串。