创建用于转换数据表的编辑脚本的制作方法

文档序号:6425156阅读:159来源:国知局

专利名称::创建用于转换数据表的编辑脚本的制作方法
技术领域
:本发明涉及在通信终端中转换数据表的方法,特别地,但不限于用于创建可在更新移动通信中的数据时使用的编辑脚本的方法。
背景技术
:空中编程(Overtheairprogramming,OTAP)已经被开发,因此可使用新软件或数据重新编程位于无线网络中的移动终端,而无需将这些终端重返至中央管理网点。在移动终端中保持的数据通常以表格格式存储,其可以各种方式更新,典型地,可通过发送可以替代该旧表的全新表,或通过发送转换该旧表以创建该新表的编辑脚本或其他文件。例如,在US5832520和US7003534中描述了包含编辑脚本的系统。创建编辑脚本典型地包括确定旧表和新表之间的差异并创建一段相对短的包括例如插入、删除和重置标签操作的代码。然后,该脚本从该中央网点通过无线广播至每个需要升级的终端。当不同终端组包含不同的表或具有不同数据的相同表时,可能需要多个不同的编辑脚本。为了使处理更有效,被用于创建、广播和执行该编辑脚本的时间应该少于被用于简单广播该新数据的时间。已存在大量用于确定两个文件间区别的算法,例如标准文本区别算法和二进制区别算法。其它用于转换一个序列符号至另一序列的算法,包括计算编辑图形内路径长度或编辑距离矩阵,也已经被开发[1]。当该数据以例如表或树的等级形式可用时,这些算法相当没有效率。因此当该旧的和新的数据被表现为有根、有序、标记了的树时,已开发出更有效的算法以找到最小成本的编辑脚本[2]。例如,在US7,287,0中描述了一个基于最近树的系统。编辑距离矩阵可由两个适当构造的树形成。该矩阵的两个轴典型地由包含数据值的树的节点形成。接着该矩阵可被用于确定这些树之间的编辑路径。该路径由使用插入、删除或重置标签操作连接矩阵的顶点的有向图来确定。编辑路径可被用于恢复用来转换一个树成另一个的编辑脚本。用于优化或至少减少其长度以及编辑路径的其它处理成本的各种算法是已知的。[l]EugeneMyers,"An0(ND)DifferenceAlgorithmanditsVariations,,,Algorithmica,vol1,p251_266(1986).[2]SudarshanChawathe,"ComparingHierarchicalDatainExternalMemory,,,VLDB'99,Proceedingsof25thInternationalConferenceonVeryLargeDatabases,September7-10,1999,p90_101(MorganKaufmann,1999).
发明内容因此本发明的目的是提供用于转换数据表的改进方法,或者至少提供一个现有方法的有用的替换方法。本发明的一个方面是一种创建用于将旧的数据表转换成新的数据表的编辑脚本的方法,包括从该旧表和新表分别创建旧数据树和新数据树,确定第一部分脚本,其将该旧树转换成与该新树具有相同长度的中间树,确定第二部分脚本,其将该中间树转换成新树,并且合并该第一和第二部分脚本。优选地,该第一部分脚本被确定为仅仅在旧数据树中引起插入和删除的最小成本的一系列编辑。在该旧数据树中只有完全子树被插入或删除。优选地,该第二部分脚本被确定为仅仅在中间树中引起替换的最小成本的一系列编辑。优选地,使用编辑距离矩阵确定该第一部分脚本,该编辑距离矩阵具有行优先形式的旧树和中间树。使用编辑距离矩阵确定该第二部分脚本,该编辑距离矩阵具有行优先形式的中间树和新树。可选地,使用编辑距离矩阵确定该第二部分脚本,该编辑距离矩阵具有列优先形式的中间树和新树。优选地,该方法还包括确定第二脚本,该第二脚本使用行优先形式转换中间树成新树,确定第二脚本,该第二脚本使用列优先形式转换中间树成新树,基于成本从这些第二脚本中选择该第二部分脚本。优选地,这些数据树是由来自各个表中的数据形成的有根、有序、标记了的树。优选地,这些数据树还仅仅包含度为0、1、2的节点并且仅仅度为2的节点包含来自该各个表中的数据。本发明的另一方面是一种用于更新移动通信设备中的数据的方法,该方法包括确定存在于该设备中的旧数据表,确定在该设备中所需的新数据表,确定转换该旧数据表成新数据表的编辑脚本,传送该编辑脚本至该设备,以及驱使该设备执行该编辑脚本,其中使用如上所述的方法确定该编辑脚本。本发明的优选实施例将參照所附附图描述,其中图1概略地示出由无线网络中的无线单元使用的数据表,图2示出了用于创建转换数据库中的多个数据表的编辑脚本的例程,图3A-;3B示出了用于为单个表创建编辑脚本的例程,图4A-4B示出了用于计算旧树和新树之间编辑距离的例程,图5示出了用于转换表成行优先树的例程,图6示出了用于转换行优先树成列优先树的例程,图7示出了个用于创建部分编辑脚本的例程,图8示出了用于转换旧树成具有相同长度的中间树的例程,图9示出了用于创建转换该旧树成中间树的编辑脚本的例程,图10示出了用于从有向图创建编辑脚本的例程,图IlAUlB是旧表和新表的简单示例,图12AU2B对应于图IlAUlB的旧树和新树的示例,图13是用于图IlAUlB中旧树和新树的编辑距离矩阵,图14示出了通过图13中矩阵的允许例程,图15示出了对编辑距离矩阵中顶点的更新、插入、删除步骤,图16A、16B、16C示出了用于对图15中更新、插入、删除步骤的计算成本的例程,图17A至17F示出了对图14的矩阵中的编辑路径计算成本的步骤,图18示出了用于图14的优化编辑路径,图19A、19B示出了从图18恢复的编辑脚本的两种形式,图20A、20B示出了图14以行优先和列优先形式的中间树,图21示出了图14以列优先形式的新树;图22A、22B示出了对应于图20A、20B和图21、以及优化编辑路径的编辑距离矩阵;图23示出了从图20B恢复的编辑脚本,以及图M示出了通过合并图19B和23的脚本形成的编辑脚本。具体实施例方式参照附图将意识到本发明可被以大量不同方式实施以用于各种移动无线系统,以及潜在的其它不相关系统,这些系统以等级形式使用和更新数据。在此所述的实施例只是作为示例。为了清楚起见,许多常规无线系统的细节已经被省略,但是仍旧可以本领域技术人员理解。图1示出了一个简单无线网络,其具有通过网关11连接至基站12的中央管理计算机10。使用一个或多个RF信道在移动终端13和基站之间传送无线信号。实际上这种网络可以包括若干个不同种类的中央计算机、很多不同设置的基站、以及在一个宽广的地域内使用的一群多达一千或更多的移动终端。每个移动终端包含能够使用OTAP更新的软件和数据。该数据典型地以表格形式存储,在此表现为“旧表”,要被更新或转换为“新表”。该管理计算机包含数据库14,其存储与终端相关的数据,包括由每个终端存储的旧表的备份。该管理计算机还包含客户端软件15和服务器软件16。典型的移动无线终端的部署和更新处理如下进行1)在本领域中使用前,无线终端13由该客户端软件15编程。这就允许该客户端软件将所需软件和配置数据部署至该终端。该客户端软件在该中央管理数据库中记录该终端的状态。2)客户端软件15稍后被使用以修改该所需应用软件版本和/或在这些终端中所需的配置数据,如同存储在该中央管理数据库中的数据。3)服务器软件16为要被发送至终端的任何已更新软件创建补丁文件。4)服务器软件16为任何配置数据的改变创建更新文件。该更新文件包含由各个终端使用的转换旧表成新表的编辑脚本。5)服务器软件16创建数据消息并使用该数据网关通过无线广播这些消息至终端。6)终端13异步发送响应消息至该固定网络。7)一旦已确认所有的更新已经由终端13接收,该服务器软阵发送激活命令至该终端。可选地,这个步骤可以需要来自一群管理员的输入,他们手动初始化对这些更新的激活。8)一旦收到激活命令,这些终端13应用这些更新至该软件和配置数据。依赖于该终端的配置,这些更新的应用可以是a)—旦收到该命令;b)在下次开机时;c)在由该无线使用者初始化时。图2描绘了根据在一群终端中存在的旧数据表和对应的随后所需的新表之间的差异,一个或多个编辑脚本如何在该中央管理数据库14中被创建。对于数据库中的每个表,该客户端软件15将旧表和新表转换成在之后编辑距离矩阵中使用的旧树和新树表示。接着仅使用影响该旧表长度的一个有限范围操作来计算编辑路径,并且恢复第一部分编辑脚本。通过应用该脚本至该旧表数据,生成该数据的中间树表示。接着在中间树和使用行优先和列优先形式两者的新树之间计算一对编辑路径和相应的部分编辑脚本。每个这些第二部分脚本的成本被计算并且选择成本最小的那个。接着通过合并该第一部分脚本与所选择的第二部分脚本,以形成用于转换该旧表成该新表的完整编辑脚本。与图2相关,该旧和新表可被优选地转换为树,通过将表中数据的每一项考虑为深或度为2的叶子节点。在行优先形式下,该表的每行变成子树,该子树具有包含被加至具有空值的度为1的节点的数据值的叶子。在列优先形式下,该表的每列类似地变成子树,该子树具有包含被加入具有空值的度为1的节点的数据的叶子。这些叶子据此由这些数据值标记。所有度为1的节点被加至度为0的根节点,也就是空值。由连续行或列形成的子树被从左至右排序,以“先序”。通过在树中向下移动,每个节点被连续编号,并且从左至右。用这种方法将表转换成树的示例由图11A、12A和11B、12B给出。仍旧与图2相关,优选地,该编辑距离矩阵由两个度为2的有根、有序、标记了的树形成。该矩阵的两个轴由各自的度标签对序列形成。以这种方式形成的矩阵示例由图12A、12B、13给出。还与图2相关,优选地,该第一部分脚本仅仅由影响该旧树长度的操作形成,因此该中间树的长度和新树的长度是相同的。仅仅那些在旧树中包含完全子树的插入或删除的操作才被认为是有效的。那些包含各个节点的插入或删除的操作是无效的。以这种方式形成的编辑路径的示例在图18中给出。相比之下,该第二部分脚本仅仅使用在中间树中重新标记节点的操作而被计算。以这种方式形成的编辑路径的示例在图22A、22B中给出。图3描绘了用于为单个表创建编辑脚本的例程。该例程的输入是两张数据表,即,为旧表和新表。该例程首先检查该表适合打补丁。基于一组最基本的要素,该要素被识别用于更新在远程终端上的数据库,没有方式创建改变列(在域中数据位的个数)的长度或增加或移除列的脚本。任何这种改变将意味着该表的整个内容必须被发送。如果这些表的结构(它们的定义)相等,则该处理如之前所述的继续处理。图4描绘了具有两层嵌套循环的例程,其被用于处理该两个树并且计算它们之间的编辑距离。首先,一些变量被初始化。last_sub_tree[]是持有矩阵最后列的阵列,其持有在水平轴上的子树的根节点。当一个完整的子树(或行)正在被处理时,即,删除操作,其与唯一被执行的该例程主体的计算相关。previous_column[]持有外层循环在之前索引的列,其被需要用于计算更新操作的成本。subtreejength(其被用在大量计算中)被初始化为列的数目(在该原始表)加1。额外的增加用于说明该子树的根节点(树中顺序为1的节点),其在表至树的转换中被增加。在该例程中的外部循环从1运行至该原始表的长度。其处理该矩阵的每一列。由于该编辑脚本仅仅对该根节点(第0列的第0个索引)感兴趣,第0列可被忽略。该方法限制了两个树中的节点和在该原始表中的列索引与在该目的表的列索引匹配的顶点的比较。该限制带来的后果是没有叶子节点的插入或删除。为此,该内层循环被初始化为原始表的索引(来自该外层循环的循环计数值)-1以子树长度为模(有效地识别在该目的树内与在原始树位置匹配的列的偏移)。该内层循环接着在每次迭代的末尾由该子树的长度增加。这意味着只有那些在源中的列索引和在目的中的列索引匹配的顶点才被考虑用于该外层循环的每次迭代。该内层循环的每次迭代计算执行更新操作的成本。如果该外层循环计数器由该子树的长度恰好除尽,则我们正处于子树的根并且在该内层循环的每次迭代过程中插入和删除的成本也被计算。当遇到了该矩阵中的最终节点,那个操作(该有向图中的最终节点表示该编辑脚本)被从该例程中返回。图5描绘了用于转换表成有根、有序、标记了的树的例程(以先序或行优先)。度为0的节点被用作整个树的根。接着对于每行来说,度为1的节点被用作子树的根。对于每列来说,当前行的值被增加为树中度为2的节点。度为1的节点被用作一个终结符以简化插入和删除操作的计算。图6描绘了转换行优先(先序)树成列优先(后序)树的例程。这意味着以行优先的顺序读树并且以列优先的顺序写树。该流程图展示了这样操作的方法,其选择以迭代整个输出树并且基于由当前行索引与子树长度相乘加上感兴趣的列从源树计算该读取位置。图7描绘了用于恢复仅仅包含影响该表长度的操作的子集(插入和删除操作)的部分编辑脚本的例程。该例程颠倒该有向图中的边(或操作)的顺序并且接着将不是插入或删除的任何操作转换至空操作。图8描绘了用于将来自图7的部分编辑脚本应用至该源树以创建与该目的树相同长度的中间树的例程。这个中间树会保持来自源树的、排除了那些已经被删除的行的数据,除了那些已经被插入的行(其中该数据将与该目的树的数据相匹配)外。对于空操作来说,该例程拷贝来自源树的数据至该中间树。对于删除操作来说,该例程增加该源树中的指针并且不执行更新至中间树。对于插入操作来说,该例程拷贝来自该目的树的数据并且不在该源树中增加该指针。图9描绘了一旦这些树知道长度相同则计算该编辑脚本的例程。这是该主编辑距离处理的简化版本。该算法简单地与为索引两个树中每个位置比较索引以及确定该标签是否应当被更新相关。图10描绘了负责从有向图恢复该编辑脚本的例程。边以它们在有向图中出现的顺序读入(因此从两树的末端后退至源头)。相同操作类型的邻近边被连接起来以形成更大的操作(跨越树中更多节点的操作)。一旦一条边不能和图中的下条边连接则它被输出至该脚本。这个一直被重复直到没有更多的边要被处理。图11至30涉及转换旧数据表至新数据表的简化的例子。图IlAUlB示出了具有三列的表“Animal”,其包含存储为P-string的一种动物的名字;首字节被用以存储字符串中一定数量的字符,该字符串中的每个字符被连续地存储在随后的字节中,“#legs”,其包含该类动物通常具有腿的个数,其被存储为一个单字节,“Colour”,其包含与作为P-string的动物类型通常最相关的颜色。图12A示出了表现为有根、有序、标记了的树的图IlA中旧表数据的表示。树中的每个节点由其序号注释。节点按先序编号。每个节点旁边的文字标签包含该节点的度(树的深度)和它的标签(在树中用于那个单元的数据)。图12B示出了表现为有根、有序、标记了的树的图IlB中新表的表示。注释和图12A相同。在这种情况下这些改变可以被发现。第二个子树(根在节点幻现在持有不同的细节。根在9的子树含有之前根在5的数据。额外的子树(根在17)已经被添加至该树。这表示一个行的插入、另一行的删除、以及附加一个新行至该表结尾。图13示出了由图12A、12B中的这些树形成的被存储为标签度对阵列的编辑距离矩阵。旧和新数据分别沿着水平轴和垂直轴。图14示出了在图13的矩阵中可用的有限范围的编辑路径。不可能或效率不高的操作不被考虑,具体的操作包括插入或删除各个度为2的节点、或重置标识对于在矩阵中目的顶点表示具有不同度的节点。每个可用编辑路径的成本必须由顶点之间各个指针的步骤来确定。图15和16A、16B、16C表明了在编辑路径中各步骤可能如何被计算成本。该矩阵的一列被一次性地载入到该管理计算机的存储器中。在任何时间点,在当前列时,先前列(如果存在)和旧数据(如果存在)中度为1的节点的最后列被包含在存储器中。通过把节点成本的最小值移动至图中当前节点的左边,依次计算遍历当前列中每个节点的成本。通过该节点本身的成本加上从之前节点遍历至当前节点操作的成本来计算节点移动至左边的成本。插入成本(Cl)、删除成本(CD)、以及更新成本(CU)的最小成本被用来确定该根以及当前节点的成本。图15中节点D的成本会被如下计算=CostD=min{CU,Cl,CD}其中CU=CostA+uCI=CostB+iCD=CostC+d在此考虑的特定案例中这是复杂的,原因是该数据的表结构阻止允许插入或删除在单个节点上操作。这意味着仅仅在行开始的节点对于删除和插入操作以及那些遍历至之前行的起始点的操作是有效的。用于图16A中更新成本的示例代码将左手邻居(当前顶点斜左方的顶点)的成本添加至在源树中更新当前节点的成本以匹配该目的树。如果该源和目的节点的标签相等,那么该操作的成本是0。否则,如果之前操作也不是写操作,那么这个操作也引起移动该指针至在源表中当前位置的成本。该更新操作成本的剩余部分是基于为该目的节点的标签传送数据的成本。LabelCost为该树的特定节点计算要传送标签的字节数,举例来说,对于“Animal”或“Colour”列来说,该标签的成本对于字符数来说是1字节,并且接着每字符1字节,对于“#legs”列来说,该成本是1字节。用于插入成本的示例代码添加左手邻居(当前顶点上方的顶点)的成本至在当前位置插入一行的成本。插入一行的成本依赖于是否任何之前的插入或删除操作在该图中已经遇到了。如果没有则拷贝该表和重命名该表的额外成本对于这个操作已发生。如果左手邻居不是一个插入操作,则当前操作也发生移动该指针以及从该原始表拷贝一个或多个行数据至新表的成本。用于删除成本的示例代码将左手邻居(与当前顶点左方水平的顶点)的成本添加至在当前位置删除一行的成本。删除一行的成本依赖于是否任何之前的插入或删除操作在该图中已经遇到了。如果没有,则拷贝该表和重命名该表的额外成本对于该操作已发生。如果左手邻居不是删除操作,则当前操作发生从该原始表拷贝一个或多个行数据至目的表的成本。如果该左手操作是删除操作,对于删除额外的连续行没有额外的成本发生。下列常数已经被用于这些示例,而例如位组装和组装开销的关注在成本计算中已经被忽略了。常数cost_of_cursor_move8字节cost_of_copy_table4字节cost_of_rename_table4字节cost_of_copy_rows:10字节图17A至17F示出了图14的矩阵中在用于对编辑路径计算成本的例程中的迭代,而图18示出了该优化的编辑路径。在图17A中,该原始节点的成本是0并且所有其它在列中的节点是不能到达的,以及因此发生了无限大的成本(这被用于从考虑中排除所有达到该图中这些节点的路径)。在图17B中成本计算被如下执行第0个节点不能被到达。成本无限大。第1个节点标签相等。成本为0。第2个节点至第4个节点不能被到达。成本无限大。第5个节点插入一行。这是该路径上的第一个插入或删除(返回至原始的最便宜路径包括一个成本为0的“更新”操作。left.cost+cost_of_copy_table+cost_of_rename_table+cost_of_cursor_move+cost_of_copy_rows+LabelCost(horse)+LabelCost(4)+LabelCost(brown)==0+4+4+8+10+6+1+6==39第6个节点至第8个节点不能被到达。成本无限大。第9个节点插入一行。这不是第一个插入或删除。之前的操作是一个插入操作。左成本为39。left.cost+LabelCost(mantis)+LabelCost(6)+LabelCost(green)==39+7+1+6==53由于到达了图17A至17F中每次迭代的末端,仅仅那些在矩阵中是部分有效路径的顶点被保持在存储器中。因此在图19的第四次迭代的末端,该程序在存储器中保持第二、第三和第四列,但是释放该第三列。由于还没有遇到其它度为1的列,该第二个仍是需要的。由于之前列输入至下个迭代,该第四列仍是需要的。第三列中那些不是任何有效有向图一部分的顶点可在这个点上被释放。在这种情况下,在图17C的第六次迭代的末端,该程序到达第一行数据的末端。此处,可计算插入和删除操作。图19A示出了应当从图14中示出的矩阵恢复的脚本。在恢复该脚本的过程中,所有表示同类操作的邻近边被连接以形成单个操作。在被用于构建该矩阵的成本算法中,这个处理被识别。这个脚本接着被重写以生成仅仅包含改变该表长度的操作(插入行或删除行)的脚本。该产生的重写脚本在19B中示出。其将会形成与图2相关所提及的该第一部分脚本。图20A、20B示出了分别以行优先和列优先两种形式应用的具有来自图19B的长度脚本的旧树。图21示出了为确定与图2相关所提及的该第二部分脚本,被转换为列优先的新树。图22A、22B示出了分别与在图20A、20B行优先和列优先形式的中间树相关的用于新树的编辑距离矩阵。优化编辑路径只包含重新标签步骤,并且因此是对角线,这是由于该中间树的长度匹配于该新树的长度。被计算用于列优先形式的路径被看成具有最低成本。图23示出了从图22B生成的编辑脚本,其应当形成该第二部分编辑脚本以与来自图19B的脚本合并。在这种情况下,旧和新数据表相对来说很小,并且在图22A、22B中示出的编辑路径成本大约相等。每个都可能被选择具有最低成本的脚本。实际上,这些数据表可以包含成千个行或列,并且由它们各自树的行优先和列优先形式创建的差异可能会更明Mo图M示出了根据图19B和图23中的脚本生成的合并脚本。这个脚本可被用来将旧表转换成新表。权利要求1.一种创建编辑脚本用于转换旧数据表成新数据表的方法,包括根据旧表和新表分别创建旧数据树和新数据树;确定第一部分脚本,该第一部分脚本将旧树转换成与新树具有相同长度的中间树;确定第二部分脚本,该第二部分脚本将中间树转换成新树,以及合并该第一和第二部分脚本。2.根据权利要求1的方法,其中该第一部分脚本被确定为仅仅在旧数据树中引起插入和删除的最小成本的一系列编辑。3.根据权利要求2的方法,其中该第一部分脚本仅仅在该旧数据树中插入或删除完全子树。4.根据权利要求1的方法,其中该第二部分脚本被确定为仅仅在中间树中引起替换的最小成本的一系列编辑。5.根据权利要求1的方法,其中使用编辑距离矩阵确定该第一部分脚本,该编辑距离矩阵具有行优先形式的旧树和中间树。6.根据权利要求1的方法,其中使用编辑距离矩阵确定该第二部分脚本,该编辑距离矩阵具有行优先形式的中间树和新树。7.根据权利要求1的方法,其中使用编辑距离矩阵确定该第二部分脚本,该编辑距离矩阵具有列优先形式的中间树和新树。8.根据权利要求1的方法还包括确定第二脚本,该第二脚本使用行优先形式转换中间树成新树;确定第二脚本,该第二脚本使用列优先形式转换中间树成新树;以及基于成本从第二脚本中选择第二部分脚本。9.根据权利要求1的方法,其中这些数据树是由来自各个表中的数据形成的有根、有序、标记了的树。10.根据权利要求9的方法,其中数据树仅仅包含度为0、1、2的节点,并且仅仅度为2的节点包含来自该各个表的数据。11.一种用于更新移动通信终端中的数据的方法,包括确定存在于设备中的旧数据表;确定在该设备中所需的新数据表;确定转换旧数据表成新数据表的编辑脚本;传送该编辑脚本至该设备;以及驱使该设备执行该编辑脚本,其中,使用如上所述的方法确定该编辑脚本。全文摘要一种创建用于转换数据表的编辑脚本,本发明有助于在通信终端中转换旧数据表成新数据表。通过根据该旧表和新表分别创建旧的和新的数据树,以创建编辑脚本。然后确定第一部分脚本,该第一部分脚本将该旧树转换成一个与该新树具有相同长度的中间树。还确定第二部分脚本,该第二部分脚本将该中间树转换成新树。然后合并该第一和第二部分脚本,以提供能够被发送至该终端的脚本。优选地,该第一部分脚本是仅仅在旧数据树中引起插入和删除的最小成本的一系列编辑。优选地,该第二部分脚本是仅仅在中间树中引起替换的最小成本的一系列编辑。文档编号G06F17/30GK102236703SQ201110141630公开日2011年11月9日申请日期2011年4月8日优先权日2010年4月9日发明者H·A·史密斯申请人:太特电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1