一种基于ATOM协议的远程对象交换方法转让专利

申请号 : CN200810155824.0

文献号 : CN101383824B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 崔璨钱柱中陆桑璐陈道蓄

申请人 : 南京大学

摘要 :

本发明公开了一种基于ATOM协议的远程对象交换方法,其基于ATOM文档格式的对象封装方式,利用ATOM文档格式的扩展性和通用性对一般性对象进行递归封装,消除了各种语言的异构性在此基础上,提供了一种基于ATOM发布协议的对象交换方法。并且这种方法能够在Web浏览器中以JavaScript脚本语言实现。

权利要求 :

1.一种基于ATOM协议的远程对象交换方法,其特征在于包括以下步骤:

1)由客户端或服务器端对本地对象按照以下规则进行封装:以超文本传输ATOM的可扩展标记语言协议中的条目标签Entry作为对象的开始,利用对象的类型作为自定义标签的命名空间Namespace,利用对象的名称作为自定义标签的本地部分Local Part,将简单对象的值按照可扩展标记语言的结构XSD定义的方式串行化为自定义标签的内容;或者将复杂对象或数组对象按照递归定义的方式嵌套定义在自定义标签中;

2)封装后的ATOM文档通过超文本协议HTTP服务器在传输控制协议/因特网互联协议网络上进行传输,对象的操作创建CREATE、请求REQUEST、更新UPDATE、删除DELETE对应于HTTP协议中的发布POST、获得GET、上传PUT、删除DELETE;

3)解包的过程为步骤(1)的逆过程;

所述步骤1)中将简单对象的值按照XSD定义的方式串行化为自定义标签的内容包括以下步骤:首先在可扩展标记语言XML头部将所有需要的类型定义为Namespace,然后将属性的名称作为该扩展节点的Local Part,最后按照XSD定义的方式串行化成字符串作为该节点的内容;

所述步骤1)中将复杂对象按照递归定义的方式嵌套定义在自定义标签而采取扩展元素的方式,其包括以下步骤:首先在XML文档头部将该复杂对象的类型定义成Namespace;

在封装时,先将该复杂对象的名称作为该复杂对象扩展节点的Local Part;然后遍历出所有的成员对象,若成员对象为简单对象,则在XML头部将所有需要的类型定义为Namespace,然后将该成员对象的名称作为节点的Local Part,并按照XSD定义的方式串行化成字符串作为节点的内容来创建此简单成员节点并挂接在之前创建的复杂对象扩展节点上作为其子元素,若成员对象为复杂对象,则按照上述的方式递归地对将此复杂对象创建为扩展元素并挂接在之前创建的复杂对象扩展节点上作为其子元素。

2.根据权利要求1所述的基于ATOM协议的远程对象交换方法,其特征在于步骤(1)中为将复杂对象按照递归定义的方式嵌套定义在自定义标签而采取采用链接的方式,其包括以下步骤:利用ATOM文档链接LINK标签,其中LINK元素中的href属性指向成员对象所对应的文档,rel属性指出成员对象的实际类型。

3.根据权利要求1所述的基于ATOM协议的远程对象交换方法,其特征在于步骤1)中为将数组对象按照递归定义的方式嵌套定义在自定义标签而采取扩展元素的方式,其包括以下步骤:首先需要在XML文档头部将需要使用到的一些数组对象的类型定义成Namespace;在封装时,对于每个数组对象,将其所对应的类型作为前缀,数组对象的名称作为Local Part组成一个结构化扩展元素,然后遍历出所有的数组成员对象。若成员对象为简单对象,则在XML头部将所有需要的类型定义为Namespace,然后将该成员对象的名称作为节点的Local Part,并按照XSD定义的方式串行化成字符串作为节点的内容来创建此简单成员节点并挂接在之前创建的数组对象扩展节点上作为其子元素。若成员对象为复杂对象,则按照上述的方式递归地对将此复杂对象创建为扩展元素并挂接在之前创建的数组对象扩展节点上作为其子元素。

4.根据权利要求1所述的基于ATOM协议的远程对象交换方法,其特征在于步骤(1)中为将数组对象按照递归定义的方式嵌套定义在自定义标签而采取采用链接的方式,其包括以下步骤:利用ATOM文档LINK标签,其中LINK元素中的href属性指向一个包含多个Entry的资源描述框架站点摘要Feed文档,rel属性指出数组对象的实际类型。

说明书 :

一种基于ATOM协议的远程对象交换方法

技术领域

[0001] 本发明涉及一种分布式系统间的对象交换方法,特别涉及一种适应Web2.0环境、能被网页脚本语言实现的、兼顾半结构化数据和强类型语言的一种远程对象交换方法。

背景技术

[0002] 随着互联网络的发展,传统桌面应用逐渐向轻便易用的Web应用转化。Ajax(Asynchronous JavaScript and XML,异步的用于客户端网页开发的脚本语言和可扩展标记语言)等技术推动的Web2.0、Mash-up理念使得Web应用得到了日新月异的发展,用户友好性、内容的丰富性得到了极大的提高。在Web2.0的环境中,当前的数据内容应用停留在Blog、新闻层次,其数据的主要格式为RSS、JSON或Atom格式。传统的远程交换机制中对于每一个远程服务,本地需要有一个相应的存根(Stub)与其对应。因此,需要按照远程服务以及远程对象类型,事先构建本地存根来实现对象的传输,无法实现动态的对远程服务的调用和远程对象的传输。而在Web2.0环境中,由于数据大多为半结构化数据,无法事先确定对象的结构和类型,对象的定义和对象的数据无法完全独立开来。

发明内容

[0003] 本发明的目的是提出一种实现简单、有效支持半结构化数据、适应小量多次数据环境,兼容现有Web2.0应用,并且能方便地被基于Web浏览器实现的远程对象交换方法。
[0004] 为实现上述目的,本发明提供一种基于ATOM协议(一种基于超文本传输协议的用于创建和编辑网络资源的协议)的远程对象交换方法,其包括以下步骤:
[0005] 1)由客户端或服务器端对本地对象按照以下规则进行封装:采用ATOM的Entry(XML协议中的条目标签即可扩展标记语言协议中的条目标签)标签作为对象的开始,利用对象的类型作为自定义标签的命名空间,利用对象的名称作为自定义标签的本地部分,并将简单对象的值按照XSD(XML Schemas Definition,XML结构定义)定义的方式串行化为自定义标签的内容,或者将复杂对象或数组对象按照递归定义的方式嵌套定义在自定义标签中;
[0006] 2)封装后的ATOM文档通过HTTP(超文本协议)服务器在TCP/IP(传输控制协议/因特网互联协议)网络上进行传输,对象的操作CRUD(Create(创建),Request(请求),Update(更新),Delete(删除))对应于HTTP协议中的POST(发布),GET(获得),PUT(上传),DELETE(删除);
[0007] 3)解包的过程为步骤(1)的逆过程。
[0008] 本发明基于ATOM文档格式的对象封装方式。利用ATOM文档格式的扩展性和通用性对一般性对象进行递归封装,消除了各种语言的异构性在此基础上,提供了一种基于ATOM发布协议的对象交换方法。并且这种方法能够在Web浏览器中以JavaScript脚本语言实现。
[0009] 下面将结合附图进行详细说明。

附图说明

[0010] 图1:系统结构框图;
[0011] 图2:对象与Atom文档中扩展节点XML片段的映射;
[0012] 图3:封装流程图;
[0013] 图4:解包流程图;
[0014] 图5:创建远程对象示意图;
[0015] 图6:查询远程对象示意图;
[0016] 图7:更新远程对象示意图;
[0017] 图8:删除远程对象示意图。

具体实施方式

[0018] 本发明利用ATOM联合格式(Syndication format)提供的扩展功能实现远程对象的封装,利用ATOM发布协议实现远程对象在基于HTTP的Web环境下的操作,从而实现远程对象的交换。整个机制的总体框架如图1。
[0019] 其中ATOM文档解析器,负责解析和分离出ATOM文档中的结构化扩展节点。ATOM文档生成器负责将映射模块提供对象结构、类型、数值等信息串行化ATOM结构化扩展节点,并嵌入至ATOM文档中。映射模块利用ATOM文档解析器中提供的结构化扩展节点信息构建本地或远程对象,同时也负责将本地或远程对象的结构、类型、数值等信息提供给ATOM文档生成模块。
[0020] 具体的实施包括三方面内容,一、对象的封包;二、对象的传输和操作;三、对象的解包。
[0021] 1.对象的封包和解包
[0022] 如图2所示,可以利用XML(可扩展标记语言)节点的前缀(prefix)来表述类型。首先将类型名定义为Namespace(命名空间),然后将类型名作为XML节点的前缀。这样既保证了在忽略Namespace的情况下,此XML片段仍然为自我描述的半结构化数据,可以被弱类型或无类型语言使用,又满足了强类型语言在进行解包时对类型信息的需要。同时,直接将类型和数据放在一起可以减少传输数据量的大小,提高本机制在多类型小数据情况下的性能。任何数据对象都可以拆分为简单对象的组合和重复,因此对于数据对象的封装可以看成一个递归的过程(如图2)。在研究利用Atom格式对一般对象进行封装的时候,可以将封装的方式细化为三种:简单对象的封装、复杂对象的封装以及数组对象的封装。对任何对象的封装都是这三种方式的组合应用。
[0023] 简单对象是指对象所有的属性都为XSD定义的基本类型。Atom文档中一个entry对应于一个完整的对象。利用Atom的扩展节点可以在简单对象和Atom文档的扩展节点之间进行如图2的映射。首先需要在XML头部将所有需要的类型定义为Namespace,这样可以将属性的类型作为该扩展节点的前缀。其次,将属性的名称作为该扩展节点的Local Part(本地部分)。最后因为该属性的类型是XSD定义的基本类型,可以按照XSD定义的方式串行化成字符串作为该节点的内容(Content)。
[0024] 复杂对象是指该对象至少具有一个属性不为XSD定义的基本类型,如简单对象或者复杂对象。这样的情况下可以有两种方式进行封装,一种是采取扩展元素(Extension Element)的方式,一种为链接的方式。利用Atom中定义的结构化扩展元素(Structured Extension Element)可以在Atom文档中嵌入任意的XML文档,从而可以递归的对成员对象进行封装。首先需要在XML文档头部将需要使用到的一些成员对象的类型定义成Namespace。在封装时,对于某一对象,将其成员对象的类型作为前缀,成员对象名作为Local part组成一个结构化扩展元素,此成员对象的属性按照上一段介绍的简单对象和本段的复杂对象的封装方式来递归组织XML并作为结构化扩展元素的子元素(Child Element)。对于复杂对象还可以采用链接的方式进行复合。利用ATOM文档LINK(链接)标签,其中LINK元素中的href属性指向成员对象所对应的文档,rel属性指出成员对象的实际类型。
[0025] 对于数组对象,同样可以采用结构化扩展元素方式和链接方式两种。在采用类似上一段介绍的结构化扩展元素方式时,将数组变量所对应的类型作为结构化扩展元素的前缀,将数组变量的名称作为结构化扩展元素的Local Part,数组成员的封装方式与复杂对象中成员对象的封装方式相同。利用链接的方式来实现数组对象的封装与实现复杂对象的封装是基本相似的。不同的是,LINK元素中HREF指向的是一个包含多个Entry的Feed(RDF Site Summary,资源描述框架站点摘要)文档,而不是只含有一个Entry的Entry文档。具体的封装流程如图3所示,首先分析需要进行封装的对象的类型。如果对象的类型为简单对象,则利用Atom的扩展节点来封装这个简单对象。首先在XML头部将所有需要的类型定义为Namespace,并将属性的类型作为该扩展节点的前缀。其次,将属性的名称作为该扩展节点的Local Part。最后按照XSD定义的方式串行化成字符串作为该节点的内容。如果对象的类型为复杂对象,首先需要在XML文档头部将需要使用到的一些成员对象的类型定义成Namespace。在封装时,对于某一对象,将其成员对象的类型作为前缀,成员对象名作为Local part组成一个结构化扩展元素,此成员对象的属性按照上一段介绍的简单对象和本段的复杂对象的封装方式来递归组织XML并作为结构化扩展元素的子元素。如果对象的类型为数组对象,将数组变量所对应的类型作为结构化扩展元素的前缀,将数组变量的名称作为结构化扩展元素的Local Part,数组成员的封装方式与复杂对象中成员对象的封装方式相同。
[0026] 具体的解包流程如图4所示,分析所要解包的Atom文档,得到文档中所有需要解析成对象的项(entry),对每个项进行遍历处理。对于特定的单项,获取单项的所有扩展节点,并对每个扩展节点的类型进行分析。如果扩展节点为简单节点,则利用该节点的前缀(Prefix)作为类型,Local part作为名称来构建简单数值,并将该节点的值赋给它。如果该扩展节点为结构化扩展节点,则将该节点作为需要分析的单项,递归进行上述操作,并以该节点的前缀prefix作为类型,Local part作为名称来构建复杂对象。并且将递归操作的结果作为该对象的值赋给该对象。
[0027] 2.对象的传输和操作
[0028] 远程对象与本地对象之间通过基于XML的ATOM文档进行封装和解包。封装后的ATOM文档通过HTTP服务器在TCP/IP网络上进行传输。对象的操作CRUD(Create,Request,Update,Delete)对应于HTTP1.1协议中的POST,GET,PUT,DELETE。即客户端利用HTTP POST方法将按照上文定义的封装方法封装的数据对象提交到服务器端从而实现对象的创建(如图5),利用HTTP PUT方法将按照上文定义的封装方法封装的数据对象提交到服务器端从而实现对象的修改(如图7),利用HTTP GET方法以一定参数访问服务器端从而得到按照上文定义的符合参数要求的封装方法封装的数据对象(如图6),利用HTTP DELETE方法以一定参数发送给服务器端将删除符合参数要求的相应数据对象(如图8)。