用于将可扩展标记语言映射到n维数据结构的方法和系统的制作方法

文档序号:6476191阅读:161来源:国知局
专利名称:用于将可扩展标记语言映射到n维数据结构的方法和系统的制作方法
技术领域
本发明涉及一种用于将数据从一种格式或编程范式转化为另一种编程格式或范式的方法和过程,并特别涉及一种用于将可扩展标记语言数据结构转换为COBOL数据结构的方法。
背景技术
面向商业的通用语言或“COBOL”是当今仍在广泛使用的最古老的高级计算机编程语言之一。与其它编程语言相似,COBOL被设计为允许开发执行特定目的和任务的计算机程序。COBOL特别适于与科学或工程数据处理任务相对的商业数据处理任务。面向商业的数据以“交易”为特征,通常,所述交易是人工进行的活动(例如销售、存款、提款等)的反映或自动进行的活动(例如,将利息加到本金金额上)的反映。面向商业的任务的共同“输出”是“报告”。因此,COBOL适合于关于面向商业的数据的收集、组织、验证、更新、处理和报告。
由于COBOL最初是以大型“主机(mainframe)”商业计算机为目标并由这种计算机执行,因此它是在20到30年前的“客户机-服务器”拓扑中采用的源语言(original language)之一。因为计算的演进已随着“瘦客户机(thinclient)”、联网服务器、广域网和因特网的出现而周而复始地提出处理范式,所以“客户机-服务器”架构再次流行,尽管“客户机”现在通常是万维网浏览器计算机,而服务器在处理带宽、存储容量、和通信能力方面成千上万倍地强大。
COBOL以及相关产品和系统例如国际商业机器公司(IBM)的顾客信息控制系统(“CICS”)和IBM的信息管理系统(“IMS”)在本行业内众所周知,其被用于从银行业、金融、投资、保险到制造和服务经营范围内的商业和政府企业。
在软件行业,诸如包括“C”、“C++”和太阳微系统公司的JAVA[TM]的面向对象语言的较新的编程语言已被广泛接受,这可能导致一些人认为COBOL、IMS、CICS以及类似产品和语言具有有限的未来价值。不管COBOL、CICS、和IMS/DC是否被认为是战略产品,从商业场合的观点来看,如今简直有数十亿行的COBOL商业应用程序代码正使用中。尽管Java现在已经成为特别好的应用程序开发语言,但是自20世纪70年代早期起直到最近,COBOL是在CICS和IMS/DC交易处理环境下使用的主要应用程序开发语言。例如,在1999年,IBM Hursley(英国)开发实验室估计在世界范围内的IBM客户的CICS装置中,每天处理超过200亿次交易。因此,COBOL仍然是一项重要技术,并且必须与任何其它“前沿”技术问题一样创造性地解决COBOL资源和较新技术资源(例如小应用程序(applet)、小服务程序(servlet)等)的连接和交互所引起的问题。例如,对每天执行200亿次的COBOL问题的低效解决方案累积了巨大的浪费处理带宽、存储器和存储设备浪费、以及通信的低效率。通过COBOL应用程序的本质(例如,商业交易),这种结果自身表现为增大的成本、完成交易的延迟时间、和减少的利润。
更为时髦的“数据挖掘”的概念可概括为再次使用来自现有应用程序的商业应用逻辑以解决未来商业问题的能力。数据挖掘实现以变化的复杂程度而存在。例如,简单的应用程序界面重整(refacing)解决方案可使用连接到万维网服务器的万维网浏览器,该万维网浏览器反过来又使用可扩展标记语言(“XML”)接口访问来自交易处理服务器的数据。在另一示例中,紧密结合的企业-企业(“B2B”)应用可以使公司连接到供应商,其中XML文档充当公共数据传输。在此示例中,可以看到,基于XML的服务器将使网络服务的演进能够访问更老的“遗留(legacy)”数据,使得随着时间的过去,企业可以在持续更新、升级、和移植其商业应用程序以便以不断增大的成本和响应效率提供增强的服务和产品的同时,向顾客极大地扩大其影响力。
因此,网络化经济正驱使企业从僵化设计的商业计算系统发展到可升级的计算平台上的灵活应用程序设计、从伙伴之间的静态交互发展到伙伴之间的动态交互、以及从技术整合发展到商业整合。
因而,稳固地建立了两个技术极端——一端是利用确保未来的商业应用程序访问和使用遗留数据的能力的XML数据传输技术的代表数不清的数十亿美元的商业投资的数十亿行COBOL代码。XML和COBOL均不能被专有地使用。然而,将COBOL和XML互相连接存在着相当大的技术挑战,尤其是对于在当今商业应用需求中非常普遍的数据的多维数组或“表”更是如此。
COBOL字段(field)定义和表的简要回顾尽管COBOL在本领域内是公知的,但是为了充分理解将表列或索引数据结构转换为COBOL和XML以及从COBOL和XML转换表列和索引数据结构的影响,简要地回顾COBOL中数据的“表”或“数组”的实现将是有益的。
在COBOL语法中,使用“picture(画面)”从句来定义供使用的字段,如表1所示。
表1示例COBOL字段定义01 Data-Field02 Data-Item-1Pic X(1).
03 Data-Item-2Pic X(1).
在此示例中,以一个字符的“精度”定义了两个数据项,它们均为字母数字字段。“Pic”之后的“X”表示该字段是字母数字,而“X”之后的“(1)”表示该字段长度为1个字符。如同“Pic 999”字段类型那样,“Pic 9(3)”字段类型是具有3位的数字字段。正如本领域所公知的那样,可以定义诸如文字、和带有小数(例如分数部分(component))的数字的其他字段类型。同样如本领域所公知的那样,可以在组中定义字段,如组层次(level)内的基本层次所示。
因此,例如,可以如表2所示定义顾客信息记录,其中,顾客名称可以有多达30个字符,电话号码是10位,而账号是18个字母数字字符。
表2在COBOL中定义的示例顾客信息01 Data-Field02 Customer-Name Pic X(30).
03 Customer-Telephone Pic 9(10).
04 Customer-AcctnumPic x(18).
这种类型的顾客数据常常被组织成信息数组或表,例如由关系数据库应用程序采用的排列。
数组结构的实现和存储布局根据语言而变。通过使用COBOL“occurs(发生)”从句实现的COBOL语言表结构将数组元素存储在连续的存储位置中。
例如,在COBOL程序中,如下定义了一维数组T,其在存储位置x开始,包含6个元素e,其中每个元素长度是4个字符
01 T.
05 e OCCURS 6 TIMES PICTURE 9999.
图1示出了由该数据结构定义表示的表。如在其它编程语言中那样,COBOL根据对于大小(例如,维数)和字段类型的数据定义,将数据组织为数组。然而,声明(declare)这种表的多种方法可能导致数据结构的不同实际运行时间实现,尤其是对于当数据存储在存储器中时的该数据的物理组织更是如此。例如,表3示出了COBOL中的示例单索引(例如,一维)数组,其中在7个字段的数组中定义了8个字符的字母数字字段。
表3COBOL中的示例单维表定义01DaysOfWeek-Table.
03 Day-Name Pic X(8)Occurs 7 Times.
在使用这种数组的程序初始化期间,或者紧靠如表3所示的这种数组定义之后,可以使用COBOL“move(移动)”动词来设置字段的初始值(例如,包含工作日名称的串),如表4所示。
表4COBOL中的示例表初始化000061Move“Monday”To DAY-Name(1)000062Move“Tuesday”To DAY-Name(2)000063Move“Wednesday”To DAY-Name(3) 000067Move“Sunday”To DAY-Name(7)一旦表被加载或初始化,就可以使用天编号(day number)索引来迅速且直接地访问单个字段的值,并且可以使用诸如COBOL“search(搜索)”动词的专有动词来检查或验证信息。
然而,大多数面向商业的数据不能被简单地组织为单维数组。例如,可以利用产品类型、销售量、地理位置等来组织顾客。COBOL允许将多维表实质上定义为表中的表,如表5所示。
表5COBOL中的示例多维表定义00004001 Sales-Transactions.
03 Customer-Num Occurs 100 Times Indexed by Cust-Index05 Order-Num Pic X(3)Occurs 15 Times Indexed by
Order-Index07 Order-Items Pic X(45)Occurs 25 Times Indexed byItem-Num在此示例中,针对15个订单(每个订单具有订单编号)跟踪每个都具有顾客编号的100个不同的顾客,并且每个订单列出或描述了多达25个条目,在每个条目的描述中使用多达45个字符。在COBOL实施中,这被实现为15个25个字段的表,这些表被进一步组织为100个表的数组(例如,100×15×25)。
以行优先次序存储多维COBOL表,其中将行一个接一个地放置在存储器中,如同Harry R.Lewis和Larry Denenberg(HarperCollins,1991)所著的教科书(text)“Data Structures & Their Algorithms(数据结构及其算法)”所描述的那样。行被定义为第一索引,其中使用3元组(x,y,z)来给具有3维的表编索引,x是用于行的索引。
例如,在存储位置x处开始的2维数组T包含2行和3列,其中每个元素(x)长度是2个字符,而每个元素(y)长度是4个字符,如具有3个COBOL语句的COBOL程序所定义的那样01 T.
05 x OCCURS 2 TIMES PICTURE XX.
10 y OCCURS 3 TIMES PICTURE 9999.
图2示出如何将此结构表示为相邻存储的表。此存储方法提供了用于由应用程序快速访问位于主存储器中的表元素的有效手段,但是对于存储空间非常重要的长期存储和检索可能是低效率的。
例如,数据库可以通过使用指针的链表或分级表来存储稀疏数组(部分填充的数组)。在处理期间,应用程序可以决定将数组元素存储在数据库中。
标记语言和COBOL之间的n维数组数据映射XML文档请求可以从外部源(例如另一公司、另一代理商、另一企业等)发起,或者它可以由需要XML接口以访问主机应用程序的网络服务器生成。将XML文档映射为COBOL数据结构不同于开发用于大容量介质上的XML文档的高效存储和检索的算法的挑战。
XML分析器和映射器开发简单的XML文档相当简单明了。然而,在映射可具有多维表或数组数据的XML文档的时候出现挑战。但是,这一需求实际上非常常见。
例如,用于显示关于体育运动联盟(league)的信息的系统可以使用XML文档来显示对队内、联合会(conference)内、大区(division)内、和联盟内的单个运动员的统计数字。所得到的结构是4维数组。
使用国家足球联盟(“NFL”)的示例可用来说明用于将数据元素映射到结果数组中的一般概念过程。在此示例中,NFL大区是第一维(w),联合会是第二维(x),队是第三维(y),而运动员是第四维(z)。如果从包含相关统计数字的XML文档中分析队名,则必须遵循以下过程来将队名映射到结果数组1.识别结果数组的维。所分析的XML标签和元素可以表现为<team_name>Dolphins</team_name>
可使用标签名来确定team_name属于队维(第三维)。
2.浏览(navigate)到所识别的目标维。Dolphins(海豚队)是AFC东部联合会中的队伍,该联合会在AFC大区中。如果我们先前已经分析并映射了NFC大区以及AFC大区中的AFC西部、AFC中部、和AFC东部联合会的元素,那么我们已经通过(1,x,y,z)、(2,1,y,z)和(2,2,y,z)逐渐进行了浏览。目前,我们正在处理AFC东部联合会中的队伍,因此我们知道数组索引将是(2,3,y)。
3.确定目标维数组索引。在此情况中,目标维数组索引是y的值。然后,系统在目标维(y)中搜索第一空team_name存储桶(bucket)。如果这是我们在AFC东部中处理过的第三支队伍,则第三存储桶将是空的,并且目标维数组索引将是3。
4.将当前数据值移动到数组内的空字段中(该数组字段可以是空的或者可以不是空的)。在此示例中,我们最后将值“Dolphins”移动到结果数组内的(2,2,3)。
然而,实际设计此一般概念过程的软件实现对开发浏览该结果数组并用于确定目标维数组索引的有效方法提出了挑战,特别是在结果数组已预加载了状态数据的情况下。因此,在本领域内存在对于将多维表数组数据高效地映射到XML和COBOL以及从XML和COBOL高效地映射多维表数组数据的方法和系统的需求。

发明内容
在本发明的第一方面,提供了一种用于将最初用标记语言表示的n维数组数据(“源数据”)映射为适合于由商业应用程序使用的n维表(“目标数据”)的方法,所述方法包括以下步骤(a)建立可搜索的储存库,其包含关于结果数组结构的元数据信息和一个或多个结果数组数据元素;(b)分析所述源数据,以查找第一或下一个标签名;(c)如果所找到的标签名对应数组名,则执行以下步骤(i)将维数计数器设置为新的结果数组维数;(ii)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素来加载映射数组;(iii)将维字段计数设置为1;以及(iv)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量(offset),并对结果求和;(d)如果所找到的标签名对应数组元素,则执行以下步骤(i)将维数计数器设置为对应的维层次;(ii)将对应的标签值存储在由维字段计数加上维数组偏移量指示的结果存储槽(slot)中;(iii)将所述维字段计数增加1;以及(iv)对于同一维层次的连续源数据元素,重复所述步骤(d)(i)、(d)(ii)和(d)(iii),直到存储了这一维的所有元素为止;(e)以及重复步骤(b)、(c)和(d),直到映射了所述源数据的所有维为止。
在本发明的第二方面,提供了一种用于将标记语言n维数组数据(“源数据”)映射为适合于由商业应用程序使用的n维表(“目标数据”)的系统,所述系统包括(a)可搜索储存库,其包含关于结果数组结构的元数据信息和一个或多个结果数组数据元素;(b)源数据分析器,其配置为在所述源数据中查找第一或下一个标签名;(c)数组维处理器,其配置为如果所发现的标签名对应数组名则执行以下步骤(i)将维数计数器设置为新结果数组维数;(ii)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素加载映射数组;(iii)将维字段计数设置为1;以及(iv)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量,并对结果求和;(d)数组元素处理器,其配置为如果所发现的标签名对应数组元素则执行以下步骤(i)将维数计数器设置为对应的维层次;(ii)将对应的标签值存储在由维字段计数加上维数组偏移量所指示的结果存储槽中;(iii)将所述维字段计数增加1;以及(iv)对于同一维层次的连续源数据元素,重复所述步骤(d)(i)、(d)(ii)和(d)(iii),直到存储了这一维的所有元素为止;(e)以及数组映射控制器,其配置为反复操作所述分析器、所述数组维处理器、以及所述数组元素处理器,直到映射了所述源数据的所有维和所有元素为止。
在本发明的第三方面,提供了一种计算机可读介质,其被编码有用于将最初用标记语言表示的n维数组数据(“源数据”)映射为适合于由商业应用程序使用的n维表(“目标数据”)的软件,所述软件执行以下步骤(a)建立可搜索的储存库,其包含关于结果数组结构的元数据信息和一个或多个结果数组数据元素;(b)分析所述源数据,以查找第一或下一个标签名;(c)如果所找到的标签名对应数组名,则执行以下步骤(i)将维数计数器设置为新的结果数组维数;(ii)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素来加载映射数组;(iii)将维字段计数设置为1;以及(iv)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量(offset),并对结果求和;(d)如果所找到的标签名对应数组元素,则执行以下步骤(i)将维数计数器设置为对应的维层次;(ii)将对应的标签值存储在由维字段计数加上维数组偏移量指示的结果存储槽中;(iii)将所述维字段计数增加1;以及(iv)对于同一维层次的连续源数据元素,重复所述步骤(d)(i)、(d)(ii)和(d)(iii),直到存储了这一维的所有元素为止;(e)以及重复步骤(b)、(c)和(d),直到映射了所述源数据的所有维为止。


结合在此呈现的附图的以下详细描述提供了对本发明的完整公开。
图1提供了一维数组的表列(tabular)图示。
图2同样提供了COBOL用来存储表列数据的线性性质的图示。
图3图示了XML数据结构的分级组织。
图4示出了我们的倾斜树(tilted tree)、旋转锥形(spinning cone)过程的第一步骤,其中用锥形代替了分级结构中的方形组。
图5示出了我们的倾斜树、旋转锥形过程的后续步骤,其中,树被旋转以引入与图中两个轴之一(映射轴)的相合(congruence)。
图6图示了我们的倾斜树、旋转锥形过程的旋转动作,其允许使分级结构中每组(例如每个数组)的每个成员与该图的映射轴相接触。
概括地说,新的倾斜树、旋转锥形过程可用来高效地将诸如XML的标记语言文档中包含的多维数组数据映射为适合于由COBOL应用程序使用的数据结构。该过程以效率高得多的方式映射数据,从而允许以减少的处理资源映射更多的数据。使用锥形来表示XML数组的二维反转树结构被虚拟化,这实现了n维XML数据到二维表示的映射。接下来,通过倾斜反转锥形树而在二维图上将其重新定位,使得每一维中的一个数组(锥形)成员相对于轴例如y轴平直地布置。这个轴现在被称为映射轴。现在,XML结构中的维对应于y轴的段。最后,通过每次旋转一个锥形(例如,旋转数组),每个数组的每个成员可以与映射轴相接触。映射轴的维段可表示为适用于COBOL应用程序的一维或线性组织的数组。
具体实施例方式
本发明优选地在这样的计算机程序中实施,该计算机程序提供诸如可扩展标记语言(“XML”)的格式和诸如COBOL的结构化编程格式之间的n维数据结构的连接。本发明可作为用于在诸如企业服务器的计算系统中使用的、采用高级语言(COBOL、C、C++、Java等)、低级或汇编语言或者甚至是采用可编程或固定设计的固件和逻辑的软件来实施。
已经有一段时间可以从国际商业机器公司以一种或另一种形式获得对于万维网支持的CICS应用程序的一般转换器解决方案,其中所述CICS应用程序包括与3270桥的接口以提供对3270应用程序的访问。
该一般转换器解决方案现在已经利用包含我们发明的“倾斜树、旋转锥形”过程的XML接口而得到了进一步增强。这通过提供WebSphere Java客户机使得Java开发者能够成为解决方案参与者。这是本发明的主题。
为了提供实施例的过程,首先回顾如何用XML来表示n维数组是有益的。XML文档的结构通常被图示为反转树(30),如图3所示。顶部的主根分支为渐低的层次或维。任何特定层次的垂直成员代表该层次的数组元素。
以下示例示出了根据我们的NFL示例的用图表示的XML结构,其中联盟为根元素,大区为第一维数组,联合会为第二维数组,队为第三维数组,而运动员为第四维数组(32)。从该图可以看出,可以以这种方式在二维空间中表示XML文档的所有元素。不考虑维的数目(y轴)或单个数组的大小(x轴),这是正确的。
当前述一般概念过程的讨论完成时,我们指出可以在分析和映射XML文档数组元素之前用状态数据预加载结果数组。因此,使用结果数组来基于结果数组中数据的存在确定所分析的XML文档数组元素的映射是不可靠的。然而,使用这一方法,可以在二维空间中表示n维结果数组,这使得有可能创建可用于映射的n维结果数组的镜像数组。
不幸地是,这一镜像数组可能变得非常大。在每个维层次保存20个信息条目的简单的足球联盟示例将需要大小至少为50k字节的镜像数组。此外,如果对于每个数据元素需要再次浏览更高的维层次,那么搜索正确的数组维(例如浏览表)可能是麻烦和效率低下的。
然而,可以采用我们的新倾斜树、旋转锥形过程,从而导致这样的表示其需要少得多的存储空间,对于我们的示例是164字节,并且在映射时效率高得多。以下讨论和说明解释这一过程。
首先,如图4所示,也可以使用锥形(41)代表数组,来说明与图3示出的反转树结构类似的反转树结构(40)。
接下来,通过倾斜反转锥形树而在图上将其重新定位,使得每一维中的一个数组(锥形)成员相对于轴平直地布置。现在,XML结构(41’)中的维(32)对应于y轴的段,如图5所示。
最后,可以看到,如图6所示,通过每次旋转(60)一个锥形(例如,旋转数组),可以使每个数组的每个成员与这个轴相接触,其中,我们现在可以将这个轴称为映射轴。映射轴的维段可表示为一维数组。返回我们的NFL示例,需要映射数组具有4个元素组,每一维一组。每组可包含1.与这一维关联的XML标签名(即队、运动员等);2.结果数组元素或元素组的长度;3.结果数组中的最大允许元素出现次数(occurrences);以及4.当前元素出现次数计数,其用来确定目标维数组索引。
当通过该过程分析XML文档时,每一维的映射数组组保存关于当前被旋转到与映射轴相接触(例如,被旋转地定位以对准映射轴)的锥形的信息。分析和映射以XML文档根元素开始,并通过向下分析而进行到逐渐降低的维的锥形。当遇到锥形元素时,映射它们。
例如,如果在处理队层次的锥形元素(在适当的位置旋转)期间,遇到了代表更低层次锥形的运动员元素,则立即将该更低层次运动员锥形“旋转为接触”该映射轴。一旦对于队完成了运动员锥形处理,就将映射数组上移一维,以便将新的队锥形旋转到适当的位置,从而重复该过程,直到处理了n维数组中的所有锥形为止。
为了进一步理解本发明,现在我们提出用于映射n维数据的我们的倾斜树、旋转锥形过程的功能性、操作示例实施例和应用程序。以下讨论将使用表6示出的具有表7所示的对应COBOL程序4维表定义的入站(inbound)XML文档请求、以及它所创建的映射数组的另一示例。
表6示例XML入站数据<league>
<league_name>NFL</league_name>
<division>
<division_name>AFC</division_name>
<conference>
<conference_name>AFC_East</conference_name>
<team>
<team_name>Dolphins</team_name>
<team_games_played>16</team_games_Played>
<team_player>
<player_name>Jay Fiedler</player_name>
<player_games_played>16</player_games_played>
</team_player>
<team_player>
<player_Name>Ed Perry</player_Name>
<player_pgames_played>16</player_games_played>
</team_player>
<team_player></team_player>
</team>
<team></team>
</conference>
<conference></conference>
</division>
<division></division>
</league>
表7示例COBOL程序语句01 COBOL-RESULT-ARRAY02 LEAGUE-NAME PIC X (20).
02 DIVISION OCCURS 2 TIMES.
04 DIVISION-NAME PIC X(03).
04 CONFERENCE OCCURS 3 TIMES.
06 CONFERENCE-NAME PIC X (09).
06 TEAM OCCURS 6 TIMES.
08 TEAM-NAME PIC X(20).
08 TEAM-GAMES-PLAYED PIC 9(03).
08 TEAM-PLAYER OCCURS 70 TIMES10 PLAYER-NAME PIC X(20).
10 PLAYER-GAMES-PLAYED PIC 9(03).
05 DIMENSION-COUNTER PIC S9(4)COMP.
05 MAPPING-ARRAY10 DIMENSION-TABLE OCCURS 4 TIMES.
20 DIMENSION-TAG-NAME PIC X (32).
20 DIMENSION-OCCURS-GROUP-LEN PIC S9(4)COMP.
20 DIMENSION-OCCURS-MAX-TIMES PIC S9(4)COMP.
20 DIMENSION-FIELD-COUNT PIC S9(4)COMP.
根据我们在IBM CICS计算环境下的示例实施例,当接收到XML请求时,SAX(用于XML的标准API)分析器开始在XML文档的开头进行分析。SAX分析器是事件驱动的,从而意味着当发现XML标签名(事件)时,对我们的用于元素映射的倾斜树、旋转锥形过程给出控制。
进一步根据我们的示例实施例,映射数组具有两个关联的控制值。维数计数器指示正在处理的多维结果数组的当前维层次。维数组偏移量是到当前正在处理的维的开头的数组的偏移量。将树倾斜到映射数组轴的思想使映射数组是一维数组的事实成为可能。记住,树是多维源数组的二维表示。
对于每个分析器事件,处理进行如下1.内存储器(in-memory)储存库包含关于结果数组结构的元数据信息和结果数组数据元素。在该储存库中搜索XML标签名的匹配。
2.如果该标签名对应于数组名(即DIVISION、CONFERENCE、TEAM、或TEAM-PLAYER),则(a)将维数计数器设置为新结果数组维数(这对应于将锥形旋转为与映射数组相接触);(b)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素加载映射数组;(c)将维字段计数设置为1,使得这一维的下一个XML数据元素将被映射到第一存储槽;以及(d)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量,并对结果求和。
3.如果标签名对应于数组元素(即DIVISION-NAME、CONFERENCE-NAME、TEAM-NAME、TEAM-GAMES-PLAYED、PLAYER-NAME、或PLAYER-GAMES-PLAYED),则(a)将维数计数器设置为对应的维层次;以及(b)将对应的标签值存储在由维字段计数加上维数组偏移量指示的结果存储槽中(结合储存库执行元素存储,该储存库包含对于存储槽1的元素结果数组偏移量、元素长度、和元素类型(字母数字、数字等))。
(c)将维字段计数增加1;以及(d)按照刚才所述,处理同一维层次的下一个连续的数组元素(对应于在适当的位置旋转锥形),直到存储了这一维的所有元素为止。
尽管紧靠之前的解释可能看起来简单直接,但是实际的代码实现复杂得多,以便能够处理表8示出的COBOL数组定义。在此示例中,注意,TEAM-LOCATION是TEAM数组的元素,但是跟随在TEAM-PLAYER的更高维数组之后。CONFERENCE-BOARD数组是与CONFERENCE数组维数相同的数组,并跟随在TEAM和TEAM-PLAYER的更高层次的数组之后,其中,CONFERENCE-BOARD数组和CONFERENCE数组均在DIVISION数组之下。
表8示例COBOL实现01 COMMAREA.
02 LEAGUE-NAME PIC X (20).
02 DIVISION OCCURS 2TIMES.
04 DIVISION-NAME PIC X(03).
04 CONFERENCE OCCURS 3 TIMES.
06 CONFERENCE-NAME PIC X(09).
06 TEAM OCCURS 6 TIMES.
08 TEAM-NAME PIC X(20).
08 TEAM-GAMES-PLAYED PIC 9(03).
08 TEAM-PLAYER OCCURS 70 TIMES.
10 PLAYER-NAME PIC X(20).
10 PLAYER-GAMES PLAYED PIC 9(03).
08 TEAM-LOCATION PIC X(20).
04 CONFERENCE-BOARD OCCURS 12 TIMES.
06 CONFERENCE-BOARD-MEMBER-NAME PIC X(20).
总而言之,新的倾斜树、旋转锥形过程可用来将包含在标记语言文档例如XML中的多维数组数据高效地映射为适合于由COBOL应用程序使用的数据结构。该过程以效率高得多的方式映射数据,从而允许以减少的处理资源映射更多的数据。使用锥形来表示XML数组的二维反转树结构被虚拟化,其实现了n维XML数据到二维表示的映射。接下来,通过倾斜反转锥形树而将其在二维图上重新定位,使得每一维中的一个数组(锥形)成员相对于轴例如y轴平直地布置。这个轴现在被称为映射轴。现在,XML结构中的维对应于y轴的段。最后,通过每次旋转一个锥形(例如,旋转数组),可以使每个数组的每个成员与映射轴相接触。映射轴的维段可表示为适合于COBOL应用程序的一维或线性组织的数组。
权利要求
1.一种用于将最初用标记语言表示的n维数组数据(“源数据”)映射为适合于由商业应用程序使用的n维表(“目标数据”)的方法,所述方法包括以下步骤(a)建立可搜索的储存库,其包含关于结果数组结构的元数据信息和一个或多个结果数组数据元素;(b)分析所述源数据,以发现第一或下一个标签名;(c)如果所发现的标签名对应于数组名,则执行以下步骤(i)将维数计数器设置为新结果数组维数;(ii)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素加载映射数组;(iii)将维字段计数设置为1;以及(iv)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量,并对结果求和;(d)如果所发现的标签名对应于数组元素,则执行以下步骤(i)将维数计数器设置为对应的维层次;(ii)将对应的标签值存储在由维字段计数加上维数组偏移量指示的结果存储槽中;(iii)将所述维字段计数增加1;以及(iv)对于同一维层次的连续源数据元素,重复所述步骤(d)(i)、(d)(ii)和(d)(iii),直到存储了这一维的所有元素为止;(e)以及重复步骤(b)、(c)和(d),直到映射了所述源数据的所有维为止。
2.如权利要求1所述的方法,其中,结合储存库执行所述存储对应标签值的步骤,所述储存库包含对于存储槽1的元素结果数组偏移量、元素长度、和元素类型。
3.如权利要求1或2所述的方法,还包括将状态数据预加载到所述目标数据数组中的步骤。
4.如权利要求1、2或3所述的方法,其中,所述分析所述源数据的步骤包括分析以可扩展标记语言定义的数据结构和/或采用用于可扩展标记语言分析器的标准应用程序编程接口。
5.如权利要求1至4中任意一项所述的方法,还包括由面向商业的通用语言应用程序使用所述目标数据数组的步骤。
6.一种用于将标记语言n维数组数据(“源数据”)映射为适合于由商业应用程序使用的n维表(“目标数据”)的系统,所述系统包括(a)可搜索储存库,其包含关于结果数组结构的元数据信息和一个或多个结果数组数据元素;(b)源数据分析器,其配置为在所述源数据中查找第一或下一个标签名;(c)数组维处理器,其配置为如果所发现的标签名对应于数组名则执行以下步骤(i)将维数计数器设置为新结果数组维数;(ii)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素加载映射数组;(iii)将维字段计数设置为1;以及(iv)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量,并对结果求和;(d)数组元素处理器,其配置为如果所发现的标签名对应于数组元素则执行以下步骤(i)将维数计数器设置为对应的维层次;(ii)将对应的标签值存储在由维字段计数加上维数组偏移量所指示的结果存储槽中;(iii)将所述维字段计数增加1;以及(iv)对于同一维层次的连续源数据元素,重复所述步骤(d)(i)、(d)(ii)和(d)(iii),直到存储了这一维的所有元素为止;(e)以及数组映射控制器,其配置为反复操作所述分析器、所述数组维处理器、以及所述数组元素处理器,直到映射了所述源数据的所有维和所有元素为止。
7.如权利要求6所述的系统,其中,所述数组元素处理器配置为结合储存库执行所述存储步骤,所述储存库包含对于存储槽1的元素结果数组偏移量、元素长度、和元素类型。
8.如权利要求6或7所述的系统,还包括目标数据预加载器,其配置为将状态数据预加载到所述目标数据数组中。
9.如权利要求6或7所述的系统,其中,分析器配置为分析可扩展标记语言分析器,并包括用于可扩展标记语言分析器的标准应用程序编程接口。
10.一种计算机可读介质,其被编码有用于将最初用标记语言表示的n维数组数据(“源数据”)映射为适合于由商业应用程序使用的n维表(“目标数据”)的软件,所述软件执行以下步骤(a)建立可搜索的储存库,其包含关于结果数组结构的元数据信息和一个或多个结果数组数据元素;(b)分析所述源数据,以发现第一或下一个标签名;(c)如果所发现的标签名对应于数组名,则执行以下步骤(i)将维数计数器设置为新的结果数组维数;(ii)用数组标签名、这一维和更高维的所有元素的总长度(维组长度)、以及最大数组元素加载映射数组;(iii)将维字段计数设置为1;以及(iv)对于每个较低层次的维,通过将维组长度乘以当前维字段计数来计算维数组偏移量,并对结果求和;(d)如果所发现的标签名对应于数组元素,则执行以下步骤(i)将维数计数器设置为对应的维层次;(ii)将对应的标签值存储在由维字段计数加上维数组偏移量所指示的结果存储槽中;(iii)将所述维字段计数增加1;以及(iv)对于同一维层次的连续源数据元素,重复所述步骤(d)(i)、(d)(ii)和(d)(iii),直到存储了这一维的所有元素为止;(e)以及重复步骤(b)、(c)和(d),直到映射了所述源数据的所有维为止。
全文摘要
采用倾斜树、旋转锥形过程来将最初采用标记语言的n维数组数据映射到适合于由COBOL应用程序使用的n维表。在不扫描空存储槽的结果数组的情况下执行映射。这允许用状态数据预加载该结果数组存储槽。在映射期间,使用具有用于每个数组层次的锥形的反转树结构来以二维表示标记语言n维数据的分级性质。将该树倾斜,以使给定层次的成员与树图的一个轴相接触,随后旋转适当的锥形,以使该层次的某成员与同一个轴相接触。这导致了使用一维映射数组的能力。然后,可以将映射轴上的维偏移量用作用于存储或检索元素数据的映射数组输出中的索引值。
文档编号G06F17/30GK1723463SQ200480001806
公开日2006年1月18日 申请日期2004年1月22日 优先权日2003年2月6日
发明者詹姆斯·L·霍林斯沃思 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1