客户端/服务器模式的非结构化数据处理系统及方法 【技术领域】
本发明涉及数据处理技术,特别涉及客户端/服务器模式的非结构化数据处理系统及方法。
背景技术
为了解决现有文档处理软件存在的通用性较差、文档信息提取困难、访问接口不统一、数据兼容困难或代价太高、可移植性和可伸缩性较差、页面分层技术不完善、检索手段单一等问题,在PCT申请号为:PCT/CN2006/003294的发明专利申请中,公开了一种文档处理系统。
上述发明专利申请改变了原有从用户界面到文档存储都由一个软件来完成的文档处理技术,其所公开的文档处理系统划分为应用层、接口层和文档库系统层。图1示出了该现有文档处理系统的组成结构示意图。参见图1,该文档处理系统主要包括:应用软件、接口层、文档库系统和存储设备。其中:
应用软件,包括现有任何文档处理和内容管理软件,这些应用软件都位于文档处理系统的应用层,通过发送符合接口层标准的指令来对文档进行操作;
接口层,符合预先定义的用于规范应用层和文档库系统层之间交互的接口标准,应用层中的应用软件通过接口层向文档库系统发送符合接口标准的指令,文档库系统通过接口层向应用层中的应用软件返回携带有执行结果的符合接口标准的消息;
文档库系统层,为文档处理系统的核心层,用于根据应用软件通过接口层发来的标准指令执行具体的文档处理操作,并通过接口层向应用软件返回执行结果;
存储设备,用于存储文档,常用的是硬盘或者内存,也可以是光盘、闪存、软盘、磁带,也可以是远程的存储设备,总之只要具备数据的存储能力即可。
如前所述,文档库系统是上述文档处理系统中的核心层。文档库系统是一种平台软件,提供非结构化文档(也称为非结构化数据、非结构化信息)的存储、读写、解析、呈现、组织、管理、安全和检索等功能,并通过标准接口供应用软件调用。该标准接口称为文档库标准接口,该接口的标准称为文档库标准(例如UOML标准)。文档库系统所存储的数据称为文档库,即可通过文档库标准接口存取访问的数据,也称为符合文档库标准的文档。文档库系统所处理的非结构化文档可能包含一页或多页组成的平面媒体信息,也可能包含音频、视频等流媒体信息,或者包含其它信息。
文档库系统涉及诸多文档处理功能的实现,包括文档的存储、管理、使用、安全等。图2示出了现有文档库系统的功能模块示意图。参见图2,图中各模块之间的箭头代表的含义为:箭头起点为发起调用的模块,箭头终点为接受调用的模块。图2所示文档库系统中包括:
应用层接口模块,用于向应用软件提供访问文档库系统的接口,即:接收应用软件通过接口层发来的指令,并将所述指令的执行结果通过接口层向应用软件返回;如前所述,来自于应用软件的指令和文档库系统向应用软件返回的执行结果都需要符合接口层的接口标准,在本说明书中,将接口层的接口标准称为标准调用接口(SCLI),并将来自于应用软件的指令以及文档库系统向应用软件返回的执行结果统称为SCLI协议数据包;具体而言,应用层接口模块的工作内容包括:调用SCLI解析/生成模块中的SCLI解析器,解析应用软件发送的SCLI协议数据包,并将解析结果发送至SCLI分发器模块处理,并将SCLI分发器模块返回的SCLI协议数据包返回至应用软件。
SCLI解析/生成模块,包括SCLI解析器和SCLI生成器,所述SCLI解析器用于解析来自于应用软件的SCLI协议数据包,所述SCLI生成器用于根据输入所述SCLI生成器的数据生成SCLI协议数据包;
SCLI分发模块,用于根据SCLI协议数据包的内容,调用文档库系统中相应的功能模块,将被调用功能模块返回的的执行结果,调用SCLI解析/生成模块中的SCLI生成器封装为SCLI协议数据包,并向应用层接口模块返回所述SCLI协议数据包;
身份认证/访问控制模块,用于根据SCLI分发模块的调用,提供身份认证、访问控制的功能;
文档存储模块,用于根据SCLI分发模块的调用,提供文档的存储、管理等功能;
页面描述语言(PDL)解释模块,用于根据SCLI分发模块地调用,遍历文档页面内容,并根据文档页面中的指令调用渲染模块,生成位图;
渲染模块,通常称为RIP,用于根据PDL解释模块的调用,提供二维(2d)渲染的功能。
图2所示文档库系统的功能模块划分主要着眼于文档库系统的逻辑模型,比较适合于单机实现,并未考虑特定环境下文档库系统的实现问题,例如,并未考虑如何在网络环境下实现文档库系统。
相比于单机环境来说,网络环境下将引入客户机/服务器(C/S)模式来实现文档库系统,而客户机/服务器模式将涉及如何实现客户机与服务器之间的网络通信、如何组织部署各功能模块等一系列复杂的问题。例如,在客户机/服务器模式下,客户机和服务器之间通过网络进行通信,而网络通信的处理速度与本机I/O和CPU处理速度相比,明显较慢,因此,需要合理分配客户端和服务器的功能负载、合理部署各功能模块,才能使客户机/服务器模式的文档库系统运作良好;而这些问题,对于单机模式的文档库系统而言,实际上并不需要考虑。
因此,对于客户机/服务器模式的文档库系统来说,如何在客户端和服务器端组织部署文档库系统的各个功能模块,使得文档库系统的各项功能能够更高效地运作,实质上仍然是一个未决的问题。另外,该系统除了能处理文档数据外,也应该能处理音频、视频、多维模型等其它非结构化数据。
【发明内容】
有鉴于此,本发明的主要目的在于提供一种客户机/服务器模式的非结构化数据处理系统和方法,使非结构化数据处理系统功能模块的部署合理化,以提高非结构化数据处理系统的工作效率、扩展非结构化数据处理系统的适用环境。
本发明中所述的非结构化处理系统是对背景技术中文档库系统的改进和提高,而并非对应背景技术中所述的整个文档处理系统。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种非结构化数据处理系统,包括:服务器和客户端;
所述客户端,用于接收来自于应用软件的预定义指令,根据所述预定义指令调用客户端中的相应功能和/或与服务器进行网络通信调用服务器中的相应功能完成所述操作;
所述服务器,用于与客户端进行网络通信,根据客户端的调用提供相应功能;
所述预定义指令与所述非结构化数据的存储形式无关。
所述预定义指令为预先定义的用于对预定义模型的实例进行操作的指令;所述预定义指令将发起对非结构化数据的物理操作。
上述非结构化数据处理系统中,所述服务器,可以用于存储所述非结构化数据,所述非结构化数据包括:流媒体数据、文档数据。
所述客户端,可以用于呈现所述非结构化数据,所述呈现包括:渲染、显示、打印、播放。
对任意指定的呈现效果,能够通过向非结构化数据处理系统发出一系列的指令创建相应的非结构化数据,该非结构化数据具有相同或相似的呈现效果。所述相似是指差别小于预定义的阈值。
较佳地,所述客户端,可以用于向服务器发送登录请求;
所述服务器,可以用于根据接收自客户端的登录请求对客户端进行认证。
在角色登录时采用挑战-应答方式验证应用软件是否持有角色私钥。
较佳地,所述服务器还用于在根据客户端的调用提供相应功能之前,检查当前所登录的角色是否拥有对所述功能的权限,如果没有,则拒绝提供相应的功能。
较佳地,所述客户端还用于在根据来自于应用软件的指令提供相应功能之前,检查当前所登录的角色是否拥有对所述功能的权限,如果没有,则拒绝提供相应的功能。
所述客户端,用于基于传输控制协议TCP、超文本传输协议HTTP、用户数据报协议UDP或文件传输协议FTP与所述服务器进行网络通信。
所述客户端,还可以用于提供文档库标准接口。
所述服务器和所述客户端,还可以用于对所述服务器与客户端之间的网络通信进行加密。
较佳地,所述服务器和所述客户端,可以使用对称密钥对所述网络通信进行加密。
所述服务器和所述客户端,可以使用非对称密钥在彼此之间传递所述对称密钥。
所述对称密钥和所述非对称密钥可以由服务器和客户端在进行每次网络通信时随机产生。
一种非结构化数据处理方法,包括:
客户端接收来自于应用软件的预定义指令,根据所述预定义指令调用客户端中的相应功能和/或与服务器进行网络通信调用服务器中的相应功能完成所述操作;
服务器根据客户端的调用提供相应功能;
所述预定义指令与所述非结构化数据的存储形式无关。
所述预定义指令为预先定义的用于对预定义模型的实例进行操作的指令;所述预定义指令将发起对非结构化数据的物理操作。
所述调用服务器中的相应功能完成所述操作可以包括:服务器存储所述非结构化数据;所述非结构化数据包括:流媒体数据和/或文档数据。
所述调用客户端中的相应功能完成所述操作可以包括:客户端呈现所述非结构化数据;所述呈现包括:渲染、显示、打印、播放。
所述呈现可以包括:对任意指定的呈现效果,能够通过向非结构化数据处理系统发出一系列的指令创建相应的非结构化数据,该非结构化数据具有相同或相似的呈现效果。所述相似是指差别小于预定义的阈值。
进一步地,在根据来自于应用软件的对非结构化数据进行操作的指令调用相应功能完成所述操作之前,可以包括:
客户端向服务器发送登录请求;
服务器根据所述登录请求对客户端进行认证。
在角色登录时采用挑战-应答方式验证应用软件是否持有角色私钥。
进一步地,在服务器根据客户端的调用提供相应功能之前,可以包括:
所述服务器检查当前所登录的角色是否拥有对所述功能的权限,如果没有,则拒绝提供相应功能。
在客户端根据来自于应用软件的指令提供相应功能之前,可以进一步包括:
所述客户端检查当前所登录的角色是否拥有对所述功能的权限,如果没有,则拒绝提供相应功能。
所述客户端与服务器之间的网络通信,可以基于传输控制协议TCP、超文本传输协议HTTP、用户数据报协议UDP或文件传输协议FTP进行。
所述客户端提供的功能还可以包括:支持文档库标准接口。
进一步地,该方法可以包括:
所述服务器和所述客户端在进行网络通信时,对所述网络通信进行加密。
所述对网络通信进行加密可以包括:使用对称密钥对所述网络通信进行加密。
在使用对称密钥对所述网络通信进行加密之后,可以进一步包括:
所述服务器和所述客户端使用非对称密钥在彼此之间传递所述对称密钥。
所述对称密钥和所述非对称密钥可以由服务器和客户端在进行每次网络通信时随机产生。
一种非结构化数据处理系统,包括:两个客户端和一个服务器;
所述两个客户端中的第一客户端,用于接收来自于第一应用软件的第一预定义指令序列,根据所述第一预定义指令序列在所述服务器中创建非结构化数据;
所述两个客户端中的第二客户端,用于接收来自于第二应用软件的第二预定义指令序列,根据所述第二预定义指令序列将服务器中存储的所述由第一客户端所创建的非结构化数据中第二应用软件需要的部分数据提供给第二应用软件;
所述服务器,用于存储所述非结构化数据,并用于与所述两个客户端进行网络通信,根据客户端的调用提供相应功能;
所述预定义指令与所述非结构化数据的存储形式无关。
一种非结构化数据处理方法,包括:
第一客户端接收来自于第一应用软件的第一预定义指令序列,根据所述第一预定义指令序列在服务器中创建非结构化数据;
第二客户端接收来自于第二应用软件的第二预定义指令序列,根据所述第二预定义指令序列将服务器中存储的所述由第一客户端所创建的非结构化数据中第二应用软件需要的部分数据提供给第二应用软件;
所述服务器存储所述非结构化数据,并根据所述第一客户端和第二客户端的调用提供相应功能。
由上述技术方案可见,本发明所提供的非结构化数据处理系统和非结构化数据处理方法通过合理分配客户端和服务器的功能负载、合理部署各功能模块,使客户机/服务器模式的非结构化数据处理系统运作良好,从而提高了非结构化数据处理系统的工作效率。同时,由于本发明将原有仅适用于单机环境的非结构化数据处理系统扩展到适用于网络环境,从而为扩展基于网络环境的非结构化数据处理系统的其他应用提供了基础和便利。例如:可以在多个客户端之间实现数据共享。
【附图说明】
图1为现有文档库系统的组成结构示意图;
图2示出了现有文档库系统的功能模块示意图;
图3为本发明非结构化数据处理系统的组成结构示意图;
图4为本发明SCLI分发模块进行功能模块选择的流程示意图。
【具体实施方式】
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
本发明的主要思想是提出一种基于客户机/服务器模式的非结构化数据处理系统和非结构化数据处理方法,通过合理分配客户端和服务器的功能负载、合理部署各功能模块,使客户机/服务器模式的非结构化数据处理系统运作良好,从而提高非结构化数据处理系统的工作效率、扩展非结构化数据处理系统的适用环境。
本发明中,应用软件调用非结构化数据处理系统的方式为向非结构化数据处理系统发送预定义的指令,发送指令的方式可以是发送命令串,也可以是函数调用或其它方式。其中,所述预定义指令是与非结构化文档的存储形式(尤其是存储格式)无关的,描述了对一种抽象模型的实例的操作,该抽象模型是对某一类型的非结构化文档(例如书面文档、音视频、3D模型)的某个通用特征(例如呈现效果)进行抽象得到的,模型实例通常是树状结构。优选地,所述预定义指令可以基于动作和对象来定义。非结构化数据处理系统在接收到操作指令后,将该操作指令所描述的对抽象模型实例的抽象操作映射为对所存储数据的实际操作(称为物理操作),并执行该物理操作。非结构化数据处理系统通常还具备完备性,可以生成具有通用特征任意合法值的非结构化文档,例如当通用特征是呈现效果、非结构化文档是书面文档时,可以生成具有任意版式的文档(忽略因为压缩、数据精度等原因而造成的细微差别)。文档库标准向应用软件开放了非结构化文档处理的核心技术(即非结构化数据处理系统),使得不掌握核心技术的普通软件厂商都能开发非结构化文档相关的软件,实现核心技术和应用技术的产业分工。同时,支持文档库标准的不同软件还能调用同一种非结构化数据处理系统处理同一非结构化文档,同一软件也能调用不同的非结构化数据处理系统处理不同格式的非结构化文档,实现互操作性,有利于信息的互联互通。
本发明所提供的非结构化数据处理系统具备完备性特征,例如:当抽象模型是对呈现效果进行抽象得到的时,客户端可以生成任意呈现效果的非结构化数据。即:对任意指定的呈现效果,能够通过向非结构化数据处理系统发出一系列的指令创建相应的非结构化数据,该非结构化数据具有相同或相似的呈现效果。所述相似是指差别小于预定义的阈值。相似的原因可能是由于图像数据采用了失真压缩,也有可能是由于受到坐标精度的限制,还可能与软件以及软件的运行环境有关,甚至可能与显示设备也有关(例如:分辨率、色差等)。只要差别足够小,小到对特定应用需求而言是可以忽略的,这时就可以称为是相似的,也就是说:相似的定义是与应用需求相关的。
本申请说明书详细描述了客户机/服务器模式的非结构化数据处理系统以及非结构化数据处理方法的实现,包括模块的划分,各个模块的功能、接口、设计、实现等。下面对本说明书后续描述中将使用到的英文缩写进行简要说明:
1)SCLI:根据背景技术所述发明专利申请文件的记载,应用软件通过标准接口调用非结构化数据处理系统的功能,非结构化数据处理系统通过标准接口向应用软件返回执行结果,本说明书中凡涉及标准调用接口,均以缩写SCLI(Standard Call Level Interface,标准调用接口)代替;
2)CSDP:对客户机/服务器模式的非结构化数据处理系统而言,客户端和服务器端将通过一定的协议进行通信,本说明书中凡涉及客户端/服务器端通信协议,均以缩写CSDP(Client-Server Docbase Protocol,客户机/服务器文档库协议)代替;
3)PDL:对版式文档,如PDF、SEP等而言,描述版面的指令集合,称之为页面描述语言(PDL,Page Description Language)。
本发明所提供的非结构化数据处理系统包括:服务器和客户端,其中:
所述客户端,用于接收来自于应用软件的预定义指令,根据所述预定义指令调用客户端中的相应功能和/或与服务器进行网络通信调用服务器中的相应功能完成所述操作;
所述服务器,用于与客户端进行网络通信,根据客户端的调用提供相应功能;
所述预定义指令与所述非结构化数据的存储形式无关。
上述预定义指令为预先定义的用于对预定义模型的实例进行操作的指令;所述预定义指令将发起对非结构化数据的物理操作。
较佳地,所述服务器,用于存储所述非结构化数据,所述非结构化数据可以包括:流媒体数据(例如:各种音视频数据)和/或文档数据(包括:二维文档、三维文档、多维文档)等。
所述客户端,用于呈现所述非结构化数据,所述呈现包括:渲染、显示、打印、播放等。
并且,所述服务器还可以用于提供身份认证的功能以及访问控制的功能。当然,所述访问控制的功能也可以由客户端提供,并且,所述客户端可以支持非结构化数据操作标准,例如:UOML标准。
本发明非结构化数据处理系统中,服务器与客户端之间可以基于传输控制协议(TCP)、超文本传输协议(HTTP)、用户数据报协议(UDP)或文件传输协议(FTP)等传输协议进行所述网络通信。
服务器和客户端可以对所述网络通信进行加密,例如:可以对服务器和客户端之间传递的部分或全部数据进行加密。进行加密时可以使用随机产生的对称密钥,并且,可以使用随机产生的非对称密钥传递所述对称密钥,以保证较高的安全性。
较佳地,所述客户端,用于呈现所述非结构化数据,并用于调用服务器中的身份认证、访问控制、非结构化数据存储或管理功能;
所述服务器,用于根据客户端的调用提供身份认证、访问控制、非结构化数据存储、非结构化数据管理的功能。
所述呈现包括:渲染、显示、打印、播放。
进行上述功能划分所基于的考虑是:
1、进行呈现(例如:页面渲染)时将产生大量数据,如果将呈现功能置于服务器中实现,将增大服务器与客户端之间网络通信的负担,导致整个非结构化数据处理系统工作效率低下,因此,本发明非结构化数据处理系统中由客户端提供呈现功能;
2、身份认证、访问控制的功能,由于涉及整个非结构化数据处理系统的安全性,而服务器与客户端相比,其可靠性和安全性更好,因此,本发明非结构化数据处理系统中将这些功能置于服务器中实现;
3、非结构化数据存储、管理的功能,为便于数据共享和集中管理,以及防盗等物理安全的考虑,将非结构化数据存储、管理的功能由服务器实现。
基于本发明所提供的上述功能部署,对客户端和服务器进行相应功能模块的划分,将得到如图3所示本发明非结构化数据处理系统的组成结构示意图。图3中各模块之间的箭头代表的含义为:箭头起点为发起调用的模块,箭头终点为接受调用的模块。参见图3:
所述客户端,包括:应用层接口模块、标准调用接口SCLI解析/生成模块、SCLI分发模块、页面描述语言PDL解释模块、呈现模块、第一客户端/服务器端通信协议CSDP解析/生成模块和第一网络传输控制模块;
所述服务器,包括:身份认证/访问控制模块、存储模块、第二网络传输控制模块、第二CSDP解析/生成模块和CSDP分发模块。
上述客户端中的应用层接口模块、SCLI解析/生成模块、PDL解释模块、呈现模块,以及服务器中的身份认证/访问控制模块和存储模块,所完成的功能与图2所示现有文档库系统中相应功能模块所完成的功能相同,在此不再赘述。图3所示本发明非结构化数据处理系统在图2所示现有文档库系统的基础上增加了:客户端中的第一CSDP解析/生成模块和第一网络传输控制模块,以及服务器中的第二网络传输控制模块、第二CSDP解析/生成模块和CSDP分发模块,并对图2所示现有文档库系统中的SCLI分发模块进行了相应的改进。具体而言,在图3所示本发明非结构化数据处理系统中:
所述SCLI分发模块,用于根据SCLI解析/生成模块解析得到的SCLI协议数据包的解析结果,调用所述客户端中相应的功能模块或调用第一CSDP解析/生成模块生成相应的CSDP协议数据包、并调用第一网络传输控制模块将所述CSDP协议数据包发送给所述服务器;并用于将所述服务器返回给第一网络传输控制模块的CSDP协议数据包发送给第一CSDP解析/生成模块进行解析,得到CSDP协议数据包的解析结果,将所述解析结果调用SCLI解析/生成模块封装为SCLI协议数据包之后,返回给应用层接口模块;
所述第一CSDP解析/生成模块,用于根据SCLI分发模块的调用,提供CSDP协议数据包解析或生成的功能;
所述第一网络传输控制模块,用于根据SCLI分发模块的调用,向所述服务器中的第二网络传输控制模块发送CSDP协议数据包,并用于从所述服务器中的第二网络传输控制模块接收CSDP协议数据包,发送给SCLI分发模块;
所述第二网络传输控制模块,用于接收来自于客户端中的第一网络传输控制模块的CSDP协议数据包,调用第二CSDP解析/生成模块进行解析,将所述CSDP协议数据包的解析结果发送给CSDP分发模块;并用于将所述CSDP分发模块返回的执行结果发送给第二CSDP解析/生成模块生成相应的CSDP协议数据包,将所述CSDP协议数据包返回给客户端中的第一网络传输控制模块;
所述第二CSDP解析/生成模块,用于根据第二网络传输控制模块的调用,提供CSDP协议数据包解析或生成的功能;
所述CSDP分发模块,用于根据来自于第二网络传输控制模块的CSDP协议数据包解析结果,调用所述服务器中相应的功能模块,将被调用功能模块返回的执行结果向第二网络传输控制模块返回。
由上述实施例可见,本发明所提供的非结构化数据处理系统通过合理分配客户端和服务器的功能负载、合理部署各功能模块,使客户机/服务器模式的非结构化数据处理系统运作良好,从而提高了非结构化数据处理系统的工作效率。同时,由于本发明将原有仅适用于单机环境的非结构化数据处理系统扩展到适用于网络环境,从而为扩展基于网络环境的非结构化数据处理系统的其他应用提供了基础和便利。
对应于上述客户机/服务器模式非结构化数据处理系统,本发明提供了一种非结构化数据处理方法,该方法包括:
客户端接收来自于应用软件的对非结构化数据进行操作的预定义指令,根据所述预定义指令调用客户端中的相应功能和/或与服务器进行网络通信调用服务器中的相应功能完成所述操作;
服务器根据客户端的调用提供相应功能;
所述预定义指令与所述非结构化数据的存储形式无关。
所述预定义指令为预先定义的用于对预定义模型的实例进行操作的指令;所述预定义指令将发起对非结构化数据的物理操作。
本发明非结构化数据处理方法在进行客户端、服务器端的功能划分时,基于与上述构建非结构化数据处理系统相同的思想,将非结构化数据存储功能、身份认证功能由服务器端实现,客户端可以调用服务器端的非结构化数据存储功能和身份认证功能,并且,呈现功能可以由客户端实现,访问控制功能既可以由服务器实现也可以由客户端实现。并且,客户端还可以支持UOML标准。具体地:
所述调用服务器中的相应功能完成所述操作可以包括:服务器存储所述非结构化数据,并对所述非结构化数据进行读写操作;所述非结构化数据包括:流媒体数据和/或文档数据。
所述调用客户端中的相应功能完成所述操作可以包括:客户端呈现所述非结构化数据;所述呈现包括:渲染、显示、打印、播放。
上述方法中,在根据来自于应用软件的对非结构化数据进行操作的指令调用相应功能完成所述操作之前,可以采用挑战-应答方式验证应用软件是否持有角色私钥,具体而言,可以进一步包括:
客户端向服务器发送包含角色的名称的登录请求;
服务器根据所述登录请求生成一个随机数发送给客户端;
客户端使用所述角色的私钥对所述随机数签名,将所述签名后的随机数发送给服务器;
服务器使用所述角色的公钥验证所述签名后的随机数的签名是否正确,如果正确,则通知客户端所述角色的登录认证成功通过。
在服务器根据客户端的调用提供相应功能之前,可以进一步包括:所述服务器检查当前所登录的角色是否拥有对所述功能的权限,如果没有,则拒绝提供相应功能。
在客户端根据来自于应用软件的指令提供相应功能之前,可以进一步包括:所述客户端检查当前所登录的角色是否拥有对所述功能的权限,如果没有,则拒绝提供相应功能。
所述客户端与服务器之间的网络通信,可以基于TCP、HTTP、UDP或FTP进行。
另外,客户端和服务器在进行网络通信时可以对该网络通信进行加密。所述加密可以使用对称密钥,并且,在使用对称密钥对网络通信进行加密之后,可以进一步包括:服务器和客户端使用非对称密钥在彼此之间传递所述对称密钥。上述对称密钥和非对称密钥可以由服务器和客户端在进行每次网络通信时随机产生。
基于上述本发明主要思想,本发明所提供的非结构化数据处理系统中可以包括一个、两个或两个以上客户端。例如,本发明提供了一种包含两个客户端和一个服务器的非结构化数据处理系统,在该非结构化数据处理系统中:
所述两个客户端中的第一客户端,用于接收来自于第一应用软件的第一预定义指令序列,根据所述第一预定义指令序列在所述服务器中创建非结构化数据;
所述两个客户端中的第二客户端,用于接收来自于第二应用软件的第二预定义指令序列,根据所述第二预定义指令序列将服务器中存储的所述由第一客户端所创建的非结构化数据中第二应用软件需要的部分数据提供给第二应用软件;
所述服务器,用于存储所述非结构化数据,与所述两个客户端进行网络通信,根据客户端的调用提供相应功能;
所述预定义指令与所述非结构化数据的存储形式无关。
对应于上述非结构化数据处理系统,本发明提供了一种非结构化数据处理方法,该方法包括:
第一客户端接收来自于第一应用软件的第一预定义指令序列,根据所述第一预定义指令序列在服务器中创建非结构化数据;
第二客户端接收来自于第二应用软件的第二预定义指令序列,根据所述第二预定义指令序列将服务器中存储的所述由第一客户端所创建的非结构化数据中第二应用软件需要的部分数据提供给第二应用软件;
所述服务器存储所述非结构化数据,并根据所述第一客户端和第二客户端的调用提供相应功能。
下面对本发明非结构化数据处理系统中各模块的具体实现、以及各模块相互协作完成相应功能的具体流程进行详细描述。在以下的描述中,以渲染为例,说明客户端的呈现功能。
1、网络传输控制模块
以下对网络传输控制模块基本功能的介绍,如无特别说明,对图3所示客户端中的第一网络传输控制模块和服务器中的第二网络传输控制模块均适用。
网络传输控制模块主要负责客户端与服务器之间网络连接的打开、关闭、数据传输、链路加密等功能。该模块可以基于现有的面向连接的网络协议进行实现,如HTTP、HTTPS、TCP、FTP等;也可以基于现有的面向数据报文的网络协议进行实现,如UDP、因特网协议(IP)等。当然,该模块也可以很容易地移植到其他面向连接或数据报文的网络协议上进行实现。
对于某一种具体的网络协议而言,一般都有相应的软件开发工具(SDK)可用,因此,客户端或服务器可以实现相应的SDK,从而实现彼此之间的网络通信。在以下描述过程中,将该SDK称为网络协议支持库。
较佳地,本模块可以提供面向连接的接口。针对所基于的网络协议不同,存在两种实现所述面向连接的接口的方式:
1)在基于面向连接的网络协议中实现所述面向连接的接口时,比较容易,网络连接的打开、关闭、数据传输,可以直接调用相应网络协议支持库的接口来实现,只有链路加密功能需要自行开发实现。
2)在基于面向数据报文的网络协议实现所述面向连接的接口时,首先需要在该网络协议的基础上,实现一个面向连接的协议,然后基于新的协议实现所述面向连接的接口即可。基于面向数据报文的协议来实现面向连接的协议,基本的方法是公知的,很显然的例子是TCP和IP:IP是面向数据报文的协议,而TCP是在IP基础上实现的面向连接的协议。因此,在具体实现的过程中,可以参考BSD的TCP/IP实现方式。对于这种方式下,新实现的面向连接的协议,在本文中也称其SDK为网络协议支持库。
下面给出本模块接口实现的具体示例:
①客户端网络连接的打开:
参数:
服务器IP、端口
返回值:
是否成功、连接句柄
实现:
直接调用网络协议支持库提供的相应接口。
②服务器网络连接的打开:
实现:
调用网络协议支持库的监听接口,如果监听到客户端的连接请求,
则调用网络协议支持库用于建立连接的接口,建立与客户端之间的
网络连接。
③网络连接的关闭:
实现:
调用网络协议支持库关闭连接的接口。
④数据传输:
实现:
调用网络协议支持库传输数据的接口。
⑤链路加密
启用链路加密的实现过程,存在如下两种情况:
A.对于实现了链路加密的网络协议而言,只需要使用该网络协议的链路加密功能即可;
B.对于未实现链路加密的网络协议,则需要自行实现链路加密;实现链路加密的方法基本上是公知的,这里给出一个示例,但实际的实现并不限于此:
a)客户端通过向服务器查询的方式或预先约定的方式,确定一种客户端和服务器所能支持的公钥/对称密钥加密方式,假设本例中,所确定的是公钥加密方式;
b)客户端获得服务器的公钥;
c)客户端生成一个随机对称密钥,用服务器的公钥加密该对称密钥之后,将密文发送给服务器;
d)服务器用自身的私钥解密密文,得到对称密钥;
e)客户端与服务器后续的数据交换过程中,都使用上述步骤得到的对称密钥进行加密。
上述步骤b、c、d中,客户端和服务器的地位可以互换。
停用链路加密的过程:服务器或客户端向另一端发送停用链路加密的指令,要求停止链路加密,此后的数据交换,则不再加密。
另外,链路加密可以作为独立的功能实现,也可以直接内建于打开连接的接口实现,并且,这两种方式可以并存。对独立实现的链路加密而言,需要两个接口,分别用于上述启用链路加密和停用链路加密。对于在打开连接的接口中启用链路加密功能的实现而言,则需要在调用网络协议支持库打开网络连接之后,执行启用链路加密的步骤。
2、CSDP解析/生成模块
以下对CSDP解析/生成模块基本功能的介绍,如无特别说明,对图3所示客户端中的第一CSDP解析/生成模块和服务器中的第二CSDP解析/生成模块均适用。
CSDP是本发明客户端与服务器进行通信所遵循的通信协议,CSDP需要从语义上定义本发明非结构化数据处理系统中客户端与服务器之间通信所使用的原语。CSDP由若干命令构成,客户端与服务器之间可以通过这些命令实现彼此之间的通信,这些命令可以有参数,处理命令的一方可以向发出命令的一方提供返回值。本发明所提供的CSDP与具体的网络协议无关,是由非结构化数据处理系统内部定义的语义层协议。
下面举例说明本发明CSDP的语义、语法和描述,具体的实现并不受限于此。
a)语法
使用类似于过程调用的语法,CSDP的每个命令都有类似的组成,如:
命令头部包括命令的名称,参数的个数;
命令体包括一个或多个参数,每个参数的由参数名称、参数类型、参数值三部分构成;
命令可以有一个或多个返回值,返回值的构成与参数类似。
b)语义
CSDP涉及的语义可以根据客户端和服务器职责分配的不同,而有所差异;一般而言,CSDP仅涉及服务器负责的语义,例如:非结构化数据的存储、组织、管理、身份认证,而访问控制也有可能属于CSDP的语义之中。
CSDP的某些命令可能依赖于此前的其他命令,这种情况下,协议是有顺序性的。
根据涉及到语义,协议可能的命令包括:登录、注销、创建用户、删除用户、列非结构化文档集合的内容、获得非结构化文档、上传非结构化文档、创建非结构化文档集合、删除非结构化文档集合、创建非结构化文档、删除非结构化文档、获取权限、设置权限、授权、回收授权等。
c)描述形式
CSDP的描述可以使用二进制形式、文本形式、XML形式等。
基于上述CSDP的语义、语法和描述,以下给出一个具体的CSDP协议范例,在实际应用中可以根据实际应用的需要,参照所述范例定义具体的CSDP。
在以下描述过程中,两个命令之间以“>>>>>>>>>>>>>>>>>>>>”分隔开,每个命令的参数和返回值以“---------”分隔开,在定义每一个命令时,首先给出其语义,接下来是命令名,然后是各个参数的名称、类型,最后是各个返回值的名称、类型。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
建立会话
命令名SetupSession
----------------------
success bool //会话是否成功建立
session_no int//会话号
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
注销会话
命令名CleanSession
session_no int//会话号
---------------------
success bool //会话是否成功注销
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
打开文档库
命令名docbase_open
----------------------
success bool //文档库是否成功打开
id int64 //文档库id
root_id int64 //根非结构化文档集合id
root_name string //根非结构化文档集合名
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
初始化文档库
命令名docbase_init
----------------------
success bool //文档库初始化是否成功
id //文档库id
admin_id int64 //文档库管理员角色id
admin_name string //文档库管理员角色名称
admin_prvkey bin //文档库管理员角色私钥
root_id int64//root dir id//根非结构化文档集合ID
root_name string //根非结构化文档集合名称
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
角色登录(挑战阶段)
命令名role_login
-----------------
success bool //是否成功
seed bin //随机seed值
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
角色登录(应答阶段)
命令名role_login
role_name string //角色名称
role_sign bin //角色私钥对前述随机seed值的签名
---------------------
success bool //登录是否成功
role_id int64 //角色id
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
角色注销
命令名role_logout
role_id int64 //角色id
------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
建立非结构化文档集合
命令名doclist_add
parent_id int64 //父非结构化文档集合ID
name string //所要建立的非结构化文档集合的名称
-----------------------------
success bool //是否成功
id int64 //新建非结构化文档集合的ID
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
列出非结构化文档集合的所有子非结构化文档集合
命令名doclist_listsub
id int64 //非结构化文档集合ID
----------------------------
success bool //是否成功
sub_count int //子非结构化文档集合数目
//以下的两个返回值会循环出现sub_count次,表示所有子非结构化文档集合
{
id int64 //子非结构化文档集合ID
name string //自非结构化文档集合名称
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
列出非结构化文档集合下所有非结构化文档
命令名doclist_listdoc
id int64 //非结构化文档集合ID
----------------------------
success bool //是否成功
doc_count int //非结构化文档数目
//以下两个返回值会循环出现doc_count次,表示所有子非结构化文档
{
id int64 //非结构化文档id
name string //非结构化文档名称
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
删除非结构化文档集合
命令名doclist_delsub
id int64 //非结构化文档集合ID
-----------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
删除非结构化文档
命令名doclist_deldoc
id int64 //非结构化文档ID
------------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
重命名非结构化文档集合
命令名doclist_rename
id int64 //非结构化文档集合ID
name string //非结构化文档集合的新名称
------------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
新建非结构化文档
命令名doclist_adddoc
id int64 //新建非结构化文档所在的非结构化文档集合的ID
name string //非结构化文档名称
gdata bin //新建非结构化文档的全局数据,可选
------------------------------
success bool //是否成功
id int64 //非结构化文档ID
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得非结构化文档全局数据
命令名doc_get_gdata
id int64 //非结构化文档ID
-----------------------
success bool //是否成功
gdata bin //非结构化文档全局数据
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
上传非结构化文档全局数据
命令名doc_up_gdata
id int64 //非结构化文档ID
gdata bin //非结构化文档全局数据
------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
上传非结构化文档页面数据
命令名doc_up_pdata
id int64 //非结构化文档ID
index int //页面索引号
pdata bin //页面数据
-------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得页面数目
命令名doc_get_page_count
id int64 //非结构化文档ID
----------------------
success bool //是否成功
count int //非结构化文档中页面的数目
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
删除指定页面
命令名doc_del_page
id int64 //非结构化文档ID
index int //页面索引号
-------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得指定页面的数据
命令名doc_get_pdata
id int64 //非结构化文档ID
index int //页面索引号
----------------------
success bool //是否成功
pdata bin //页面数据
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
在非结构化文档中新建一页
命令名doc_ins_page
id int64 //非结构化文档ID
index int //新页面索引号
pdata bin //页面数据
----------------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
将非结构化文档移动到指定非结构化文档集合
命令名doc_move
id int64 //非结构化文档ID
sid int64 //源非结构化文档集合ID
tid int64 //目标非结构化文档集合ID
----------------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
将非结构化文档复制到指定非结构化文档集合
命令名doc_copy
id int64 //非结构化文档ID
sid int64 //源非结构化文档集合ID
tid int64 //目标非结构化文档集合ID
----------------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得指定主体对指定客体的权限
命令名getpriv
oid int64 //客体ID
sid int64 //主体(角色)ID
-----------------------
success bool //是否成功
priv int //权限字
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得指定客体的ACL
命令名getobjpriv
oid int64 //客体ID
-----------------------
success bool //是否成功
entry_count int //权限项数目
以下两个返回值会循环entry_count次,表示客体ACL中所有的权限项
{
id int64 //主体(角色)ID
priv int //权限字
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
设置客体的ACL
命令名setobjpriv
oid int64 //客体ID
entry_count int //ACL中权限项数目
//以下两个参数会循环entry_count次,表示ACL中所需修改的权限项
{
id int64 //主体(角色)ID
priv int //权限字
}
----------------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
创建角色
命令名role_creat
name string //角色名
--------------------
success bool //是否成功
id int64 //角色ID
prv_key bin //角色私钥
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
删除角色
命令名role_del
id int64 //角色ID
-----------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
更新角色私钥
命令名role_update
id int64 //角色ID
-------------------
success bool //是否成功
prv_key bin //角色新的私钥
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
枚举所有角色
命令名role_enum
-------------------
success bool //是否成功
role_count int //角色数目
//以下两个返回值会循环role_count次,表示所有的角色
{
id int64 //角色ID
name string //角色名称
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得非结构化文档源文件数目
命令名doc_get_src_count
id int64 //非结构化文档ID
---------------------------
success bool //是否成功
src_count int //源文件数目
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
更新源文件数据/增加新源文件
命令名doc_append_src
id int64 //非结构化文档ID
index int //源文件索引号,可选(不给出索引,则新建一个源文
件)
oddset int //从offset偏移量开始更新指定源文件
psrc bin //源文件数据
--------------------------
success bool //是否成功
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
获得指定源文件长度
命令名doc_get_src_len
id int64 //非结构化文档ID
index int //源文件索引号
---------------------------
success bool //是否成功
src_len int //源文件长度
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//获得指定源文件数据
命令名doc_get_src
id int64 //非结构化文档ID
index int //源文件索引号
offset int //从offset偏移量开始读取源文件数据
len int //获取源文件数据的长度限制
--------------------------
success bool //是否成功
psrc bin //源文件数据
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CSDP解析/生成模块的功能是对CSDP协议数据包进行解析得到协议数据包中的具体数据,或根据数据生成相应的CSDP协议数据包。以下给出一个CSDP解析/生成模块的接口范例,在实际应用中可以根据实际应用的需要,参照所述范例定义具体的CSDP解析/生成模块接口。
struct cmd;
cmd*cmd_create();
void cmd_destroy(cmd*);
int cmd_unmarshal(cmd*,const unsigned char*csdp_cmd,int len);
int cmd_marshal(cmd*,unsigned char*buf,int buf_len);
const char*cmd_get_name(cmd*);
int cmd_get_param_count(cmd*);
const char*cmd_get_param_name(cmd*,int index);
char cmd_get_param_type(cmd*,int index);
int cmd_get_param_len(cmd*,int index);
const unsigned char*cmd_get_param(cmd*,int index);
void cmd_set_name(cmd*,const char*name);
void cmd_add_param(cmd*,const char*name,char type,unsigned char*param,int param_len);
上述即为一个CSDP解析/生成模块的接口定义,CSDP解析/生成模块也可称为CSDP解析器/生成器,其中:
cmd结构定义了解析器/生成器;
cmd_create和cmd_destory分别用于创建、销毁解析器/生成器;
cmd_unmarshal用于将CSDP协议数据包解析为cmd结构,实际的CSDP协议数据包解析由该接口完成;
cmd_marshal用于将cmd结构打包为CSDP协议数据包,实际的CSDP协议数据包生成由该接口完成;
cmd_set_name和cmd_add_param分别用于设置协议命令名称、添加协议命令参数,主要用于CSDP协议数据包生成;
cmd_get_name、cmd_get_param_count、cmd_get_param_type、cmd_get_param_len、cmd_get_param、cmd_get_param_name分别用于获得协议命令名称、获得协议参数个数、获得指定协议参数类型、获得指定协议参数长度、获得指定协议参数数据、获得指定协议参数名称,这些接口主要用于解析CSDP协议数据包。
使用上述接口的一般流程是:
解析CSDP协议数据包的过程:
获得CSDP协议数据包;
调用cmd_create创建cmd结构;
调用cmd_unmarshal解析CSDP协议数据包;
调用cmd_get_***系列函数,获得该协议数据包的相关信息,如命令名称、各个参数的数据等,并完成相关工作;
在需要使用cmd结构的工作完成后,调用cmd_destroy销毁cmd结构。
生成CSDP协议数据包的过程:
调用cmd_create创建cmd结构;
调用cmd_set_name设置命令名称;
调用cmd_add_param增加若干参数;
调用cmd_marshal生成CSDP协议数据包,并完成相关工作;
在需要使用cmd结构的工作完成后,调用cmd_destroy销毁cmd结构。
3、应用层接口模块
该模块是非结构化数据处理系统中客户端的接口,用于向应用软件提供访问文档库的接口。应用软件在访问文档库的功能时,调用该模块的接口,传递SCLI形式的协议数据包,也就是发送SCLI指令。
应用层接口模块相当于非结构化数据处理系统的一个总控模块,在接收到应用软件的SCLI指令后,其一般工作流程为:
第1步:应用层接口模块调用SCLI解析/生成模块,对SCLI形式的调用进行解析,获得解析结果;
第2步:应用层接口模块调用SCLI分发模块,将SCLI的解析结果传递给SCLI分发模块;
第3步:SCLI分发模块根据所述SCLI的解析结果确定应用软件所请求的功能,调用适当的功能模块,得到执行结果;本步骤中,被调用的功能模块可以是客户端自身所拥有的功能模块,也可以是服务器所拥有的功能模块,涉及服务器中的功能模块,将需要调用第一CSDP解析/生成模块生成CSDP协议数据包,并调用第一网络传输控制模块将CSDP协议数据包发送给服务器;
第4步:SCLI分发模块调用SCLI解析/生成模块,将执行结果封装为SCLI协议数据包;
第5步:应用层接口模块将携带有执行结果的SCLI协议数据包的返回给应用软件。
该模块基本上不需要实质性的实现,只需要调用其他模块的提供的功能接口即可。
4、SCLI解析/生成模块
SCLI解析/生成模块包括SCLI解析器和SCLI生成器,负责对非结构化数据处理系统所使用的标准调用接口(SCLI)进行解析或生成,具体地:用于解析来自于应用软件的SCLI协议数据包,将所述SCLI协议数据包的内容返回给应用层接口模块,并用于根据SCLI分发模块的调用生成返回至应用层接口模块和应用软件的SCLI协议数据包。
5、SCLI分发模块
SCLI分发模块的输入为SCLI协议数据包的解析结果,输出是非结构化数据处理系统执行结果的SCLI封装形式。具体地,SCLI分发模块用于根据SCLI协议数据包的解析结果,选择适当的客户端/服务器功能模块,以及相应模块中的适当的功能接口;然后,调用相应的功能接口,得到返回值;最后,调用SCLI生成器,将返回值封装为SCLI协议数据包。
上述选择适当的功能模块的过程,主要是判断应用软件发送的SCLI协议数据包所请求的功能服务。图4为本发明SCLI分发模块进行功能模块选择的流程示意图。参见图4,功能模块的选择过程包括如下步骤:
步骤401:根据SCLI协议数据包的解析结果判断应用软件所请求的功能服务类型,如果应用软件请求渲染页面位图,则继续执行步骤402;如果应用软件请求进行身份认证、获得访问控制信息或对非结构化文档/非结构化文档集合进行操作等,则继续执行步骤404。
本步骤实际上是根据SCLI协议数据包的解析结果,判断应用软件所请求的功能服务部署在客户端本身还是部署在服务器端。如果是部署在客户端本身,就直接调用相应的功能模块;如果部署在服务器,则需要调用相应的功能模块与服务器进行通信。
步骤402:SCLI分发模块将SCLI协议数据包的解析结果分发至PDL解释模块。
步骤403:SCLI分发模块将PDL解释模块生成的页面位图,调用SCLI解析/生成模块中的SCLI生成器封装为SCLI协议数据包,将所述SCLI协议数据包发送给应用层接口模块,继续执行步骤409。
步骤404:SCLI分发模块调用第一CSDP解析/生成模块,将所述解析结果封装为CSDP协议数据包。
步骤405:SCLI分发模块将生成的CSDP协议数据包通过第一网络传输控制模块发送给服务器。
步骤406:服务器处理完之后,将把执行结果封装在CSDP协议数据包中返回给第一网络传输控制模块,第一网络传输控制模块将服务器返回的CSDP协议数据包发送给SCLI分发模块。
步骤407:SCLI分发模块将CSDP协议数据包发送给第一CSDP解析/生成模块进行解析,得到CSDP协议数据包的解析结果。
步骤408:SCLI分发模块将所述CSDP协议数据包的解析结果,调用SCLI解析/生成模块中的SCLI生成器生成SCLI协议数据包,将所生成的SCLI协议数据包发送给应用层接口模块。
步骤409:应用层接口模块将SCLI分发模块返回的携带有执行结果的SCLI协议数据包,返回给应用软件。
上述步骤404和步骤408涉及SCLI协议数据包与CSDP协议数据包之间的相互转换。下面对所述协议数据包的转换过程进行说明:
1)SCLI协议数据包到CSDP协议数据包的转换,即:步骤404所述将SCLI协议数据包的解析结果封装为CSDP协议数据包。
由于CSDP协议实际上是一组命令的集合,定义了有限个命令,因此,首先可以将SCLI协议数据包的解析结果与CSDP协议中的命令进行匹配,确定与SCLI协议数据包相应的CSDP命令。下面给出一些可能的方式,具体的实现不限于此:
第一种方式:依次判断所有命令与SCLI协议数据包的解析结果是否匹配,将第一个匹配的命令确定为与该SCLI协议数据包匹配的CSDP命令。
第二种方式:依次判断所有命令与SCLI协议数据包的解析结果的匹配程度,将匹配程度最高的命令确定为与该SCLI协议数据包匹配的CSDP命令。
第三种方式:首先判断SCLI协议数据包的解析结果所属的功能领域,如身份认证、访问控制、非结构化文档/非结构化文档集合操作等,然后与相关功能领域所涉及的CSDP命令子集进行匹配,例如:可以使用上述第一种方式或第二种方式进行匹配方法,得到与该SCLI协议数据包匹配的CSDP命令。
然后,根据SCLI的解析结果,以及所述确定的CSDP命令,调用CSDP解析/生成模块中的CSDP生成器,生成CSDP协议数据包。
2)CSDP协议数据包到SCLI协议数据包的转换,即:步骤408所述将CSDP协议数据包的解析结果封装为SCLI协议数据包。
首先,根据CSDP协议数据包的解析结果,确定CSDP协议数据包所包含命令和参数;一般而言,命令是在转换过程中是没有用处的,因为SCLI分发模块所解析的CSDP协议数据包一般是服务器返回的执行结果,即:服务器的返回值,因此,在转换过程中只需要考虑其中包含的参数即可。
然后,将CSDP协议数据包所包含的各个参数,封装为SCLI协议数据包。
上述匹配操作由SCLI分发模块完成,具体而言:
SCLI分发模块,用于在调用第一CSDP解析/生成模块生成相应的协议CSDP协议数据包之前,将SCLI协议数据包的解析结果与CSDP协议中的命令进行匹配,确定与SCLI协议数据包相应的CSDP命令,并根据所述SCLI协议数据包的解析结果以及所述确定的CSDP命令,调用第一CSDP解析/生成模块中的CSDP生成器生成相应的CSDP协议数据包。
SCLI分发模块,用于在调用SCLI解析/生成模块生成SCLI协议数据包之前,将CSDP协议数据包的解析结果与SCLI协议中的命令进行匹配,确定与CSDP协议数据包相应的SCLI命令,并根据所述CSDP协议数据包的解析结果以及所述确定的SCLI命令,调用SCLI解析/生成模块中的SCLI生成器生成相应的SCLI协议数据包。
6、PDL解释模块
PDL是页面描述语言,用于定义描述版面的指令格式。PDL解释模块用于解释特定类型的PDL,并根据PDL指令调用渲染模块,以生成页面的位图表示。
PDL解释模块的输入是描述了某个页面的版面信息的PDL数据,其输出是页面位图,其工作流程如下:
第1步:遍历PDL数据中的各个指令;
第2步:根据PDL指令描述的操作,调用渲染模块;
第3步:生成页面位图。
7、渲染模块
渲染模块通常也称为渲染引擎,是用于渲染版面的软件或硬件模块。常见的渲染引擎包括win32gdi、xwindows、qt、cairo、libart、agg等。
8、CSDP分发模块
CSDP分发模块的输入是CSDP协议数据包的解析结果,其功能在于:根据CSDP协议数据包所请求的服务来调用适当的功能模块,得到返回结果,并调用CSDP解析/生成模块中的CSDP生成器,将返回结果封装为CSDP协议数据包。
CSDP分发模块的执行过程如下:
第1步:根据CSDP协议数据包的解析结果,选择服务器端适当的功能模块,以及相关功能接口;
第2步:调用第1步所确定的功能接口,得到返回值;
第3步:将返回值发送给CSDP解析/生成模块封装为CSDP协议数据包。
上述第1步中选择适当的功能模块接口的过程包括如下步骤:
第1步:根据CSDP协议数据包的解析结果,确定所发送的CSDP命令和相关参数。
第2步:对CSDP命令、参数,与服务器端的功能模块/接口进行匹配。这里,可以通过多种方式进行所述匹配,例如:
第一种方式:依次判断服务器端的所有模块/接口,与所述CSDP命令是否匹配,将第一个匹配的接口确定为与该CSDP命令匹配的模块/接口。
第二种方式:依次判断服务器端的所有模块/接口,与所述CSDP命令的匹配程度,将匹配程度最高的模块/接口确定为与该CSDP命令匹配的模块/接口。
第三种方式:首先判断CSDP命令所请求的服务隶属的功能模块,然后适用上述第一种方式或第二种方式进行匹配,从该模块提供的接口中选择一个作为与该CSDP命令匹配的接口。
在上述具体判断某个接口与当前的CSDP命令是否匹配时,可以判断接口名称与CSDP命令名称是否相同/相近,参数个数是否相同,参数类型是否相同/可转换等。
9、身份认证/访问控制模块
根据背景技术所述专利申请文件,非结构化数据处理系统的身份认证基于角色,每个角色都有名称、ID两个属性,另外还有一对公私钥。角色的私钥由应用软件/用户自行管理,角色的公钥由非结构化数据处理系统管理。
在本发明所述非结构化数据处理系统中,一个应用软件,能够同时以多个角色登录服务器。
角色登录时,需要进行认证,采用挑战-应答方式,认证过程分为两个阶段:
阶段一:
1、应用软件向客户端发送登录请求,该登录请求中包含角色名称,表示要求以该角色身份登录;
2、客户端将登录请求转发给服务器;
3、服务器根据接收自客户端的登录请求生成一个随机数,发送给客户端;
4、客户端将该随机数返回给应用软件。
阶段二:
1、应用软件使用角色私钥对该随机数进行签名,并发送给客户端;
2、客户端将签名后的随机数发送给服务器;
3、服务器使用角色的公钥验证签名是否正确,如果正确,则角色登录认证成功通过,否则拒绝登录。
挑战-应答也可以采取用公钥对随机数进行加密、应用软件用私钥进行解密的方式进行。
本发明客户机/服务器模式的非结构化数据处理系统在实现访问控制时,描述访问权限的数据可以保存在服务器端,此时,对权限的判断也在服务器端进行。具体访问控制过程包括如下步骤:
第1步:应用软件调用应用层接口模块,发出SCLI协议数据包形式的指令。
第2步:应用层接口模块调用SCLI解析器,对SCLI协议数据包进行解析。
第3步:应用层接口模块调用SCLI分发器,对SCLI协议数据包的解析结果进行分发。
第4步:如果所访问的功能模块位于服务器,则服务器在执行相应功能之前,先检测客户端所登录的角色是否对该请求所涉及的客体有足够权限,如果所述检测成功通过,则执行客户端的请求,并将执行结果返回;否则,返回错误信息。
当然,描述访问权限的数据也可以保存在客户端,客户端在根据来自于应用软件的指令提供相应功能之前,可以先检测当前所登录的角色是否拥有对所述功能的权限,如果有,则提供相应的功能。
10、存储模块
本发明客户机/服务器模式的非结构化数据处理系统中,存储模块提供对非结构化文档、非结构化文档集合的访问和操作等功能,该功能模块部署于服务器。
以上详细介绍了本发明客户端/服务器模式的非结构化数据处理系统中各功能模块的部署、功能、接口、涉及和实现等。下面结合图3所示本发明非结构化数据处理系统,详细描述图3中各功能模块之间如何协作实现非结构化数据处理系统的相应功能。涉及客户端与服务器端的交互,本发明客户端/服务器模式的非结构化数据处理系统中所涉及的主要功能包括:初始化文档库、打开文档库、关闭文档库、登录、注销、获得ACL(接入控制列表)、更新ACL、列非结构化文档集合、列非结构化文档、建立非结构化文档集合、删除非结构化文档集合、更新非结构化文档集合名称、建立非结构化文档、删除非结构化文档、获得非结构化文档全局数据、更新非结构化文档全局数据、获得非结构化文档页数目、获得非结构化文档页数据、更新非结构化文档页数据和插入非结构化文档页数据等。详细介绍如下:
A、初始化文档库:
第1步:建立会话,可以包括如下5个步骤:
a)客户端调用第一网络传输控制模块,打开网络连接;
b)服务器监听到客户端请求,建立与客户端的网络连接;
c)打开链路加密功能,本步骤为可选步骤;
d)客户端向服务器发送CSDP命令,要求建立会话;
e)服务器向客户端发送CSDP返回值,返回会话编号。
第2步:客户端向服务器发送初始化文档库命令。
第3步:服务器判断文档库是否已经初始化,如果没有初始化,则初始化文档库,建立根非结构化文档集合,初始化文档库管理员角色,并以CSDP协议数据包的形式,将文档库ID、根非结构化文档集合的名称和ID、文档库管理员角色的名称、ID和私钥返回给客户端。
B、打开文档库:
第1步:建立会话;
第2步:客户端向服务器发送CSDP命令,要求打开文档库;
第3步:服务器判断文档库是否已经初始化,如果已经初始化,则以CSDP协议数据包的形式,将文档库ID、根非结构化文档集合名称和ID返回给客户端。
3、关闭文档库:
关闭文档库主要是清除会话,具体实现过程为:客户端向服务器发送清除会话的CSDP命令;服务器处理该命令,清除该客户端对应的会话数据。
4、登录:
假设会话已经建立,登录过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求登录;登录参数包括角色名称。
第2步:服务器根据角色名称查找角色,如果角色不存在,则返回错误信息;如果角色存在,则生成一个随机数,保存在客户端对应的会话数据中,并以CSDP协议数据包的形式将随机数发送回客户端。
第3步:客户端接收从服务器发送的随机数,使用角色私钥签名;然后向服务器发送CSDP命令,要求登录,登录参数为签名串。
第4步:服务器使用角色公钥验证签名,如果通过,则角色登录成功,将角色的ID返回给客户端。
5、注销:
注销的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求注销角色;同时发送角色的ID。
第2步:服务器验证该角色在客户端的会话中是否登录,如果已经登录,则从客户端对应的会话数据中注销该角色ID。
6、获得ACL:
ACL,是指某个客体的所有权限信息,即所有主体(也就是角色)对该客体的权限的列表。获得ACL的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求获得指定客体的ACL。
第2步:服务器确认该客体在服务器的存在性,如果存在,则获得该客体的ACL,然后将ACL数据打包为CSDP协议数据包的形式返回。
7、更新ACL:
更新ACL的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求更新指定客体的ACL;同时将新的ACL数据作为参数发送。
第2步:服务器确认客户端当前登录的角色是否有更新该客体ACL的权限,如果检查通过,则使用新的ACL数据更新服务器端现存的ACL数据。
8、列非结构化文档集合:
列非结构化文档集合就是列出指定非结构化文档集合的所有子非结构化文档集合的列表,该过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求获得指定非结构化文档集合的所有子非结构化文档集合的列表。
第2步:服务器确认客户端所指定的非结构化文档集合存在,然后枚举其所有子非结构化文档集合,将当前客户端可以访问的所有子非结构化文档集合的名称/ID返回。
9、列非结构化文档:
列非结构化文档的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求获得指定非结构化文档集合下的所有非结构化文档;
第2步:服务器确认客户端指定的非结构化文档集合存在,然后枚举该非结构化文档集合下的所有非结构化文档,将客户端可以访问的所有非结构化文档的名称和ID返回。
10、建立非结构化文档集合:
建立非结构化文档集合的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求在指定非结构化文档集合下建立一个新的子非结构化文档集合,同时发送新非结构化文档集合的名称。
第2步:服务器确认所指定的非结构化文档集合存在,并确认客户端有在该非结构化文档集合下建立子非结构化文档集合的权限,以及该非结构化文档集合下不存在与新建非结构化文档集合同名的子非结构化文档集合,然后按指定的名称建立子非结构化文档集合,并将新建子非结构化文档集合的ID返回。
11、删除非结构化文档集合:
删除非结构化文档集合的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求删除指定的非结构化文档集合。
以下第2~5步是一个递归的过程:
第2步:服务器确认指定非结构化文档集合存在,然后将该非结构化文档集合设置为当前非结构化文档集合。
第3步:确认客户端是否有删除当前非结构化文档集合的权限,如果没有则返回上一层。
第4步:对当前非结构化文档集合下的所有非结构化文档,如果客户端有权删除,则执行删除操作。
第5步:对当前非结构化文档集合下的所有子非结构化文档集合,执行步骤2~5。
12、更新非结构化文档集合名称:
更新非结构化文档集合名称的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求更新指定非结构化文档集合的名称。
第2步:服务器确认客户端有权修改该非结构化文档集合,然后更新非结构化文档集合的名称。
13、建立非结构化文档:
建立非结构化文档的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求在指定非结构化文档集合下建立新非结构化文档,并给出非结构化文档名称。
第2步:服务器确认该非结构化文档集合存在,并确认客户端有权在该非结构化文档集合下建立新非结构化文档。
第3步:服务器确认指定非结构化文档集合下不存在同名非结构化文档,然后按指定名称建立新非结构化文档,并返回非结构化文档ID。
14、删除非结构化文档:
删除非结构化文档的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求删除指定非结构化文档。
第2步:服务器确认指定非结构化文档存在,并确认客户端有删除该非结构化文档的权限;
第3步:服务器删除指定非结构化文档。
15、获得非结构化文档全局数据:
获得非结构化文档全局数据的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求获得指定非结构化文档的全局数据。
第2步:服务器确认指定非结构化文档存在,并确认客户端有访问非结构化文档的权限。
第3步:服务器将非结构化文档的全局数据打包为CSDP协议数据包,返回给客户端。
16、更新非结构化文档全局数据:
更新非结构化文档全局数据的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求更新指定非结构化文档的全局数据,同时发送用于更新的新全局数据作为参数。
第2步:服务器确认非结构化文档存在,并确认客户端对该非结构化文档有更新权限。
第3步:服务器使用客户端发送的新全局数据,更新非结构化文档的现存全局数据。
17、获得非结构化文档页数目:
获得非结构化文档页数目的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求获得指定非结构化文档的页数。
第2步:服务器确认该非结构化文档存在,并确认客户端可以访问该非结构化文档。
第3步:服务器获得非结构化文档页数,用CSDP协议封装非结构化文档页数,返回给客户端。
18、获得非结构化文档页数据:
获得非结构化文档页数据的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求获得指定非结构化文档中某一页的数据。
第2步:服务器确认该非结构化文档存在,并确认客户端可以访问该非结构化文档,并确认所请求的页存在。
第3步:服务器获得该非结构化文档中指定页的数据,用CSDP协议封装所述指定页的数据打包,返回给客户端。
19、更新非结构化文档页数据:
更新非结构化文档页数据的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求更新指定非结构化文档值某一页的数据,同时发送新的页面数据作为参数。
第2步:服务器端确认该非结构化文档存在,并确认客户端可以更新该非结构化文档,并确认所请求的页存在。
第3步:服务器使用客户端发送的新页面数据,更新该非结构化文档指定的页面数据。
20、插入非结构化文档页数据:
插入非结构化文档页数据的过程包括如下步骤:
第1步:客户端向服务器发送CSDP命令,要求在指定非结构化文档中新增一页,并同时发送新页面的数据和位置作为参数。
第2步:服务器确认该非结构化文档存在,并确认客户端可以更新该非结构化文档,并确认所请求插入页面的位置合理。
第3步:服务器在该非结构化文档中指定位置插入客户端发送的新页面数据。
由上述实施例可见,本发明所提供的非结构化数据处理系统和非结构化数据处理方法通过合理分配客户端和服务器的功能负载、合理部署各功能模块,使客户机/服务器模式的非结构化数据处理系统运作良好,从而提高了非结构化数据处理系统的工作效率。同时,由于本发明将原有仅适用于单机环境的非结构化数据处理系统扩展到适用于网络环境,从而为扩展基于网络环境的非结构化数据处理系统的其他应用提供了基础和便利。例如:可以在多个客户端之间实现数据共享。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。