专利名称:用于管理来自单个接口的多层次数据的技术的制作方法
技术领域:
本发明涉及用于管理分层数据的技术,尤其涉及用于管理来自单个集成接口的多层次数据的技术。
背景技术:
有些数据很自然地按照层次进行组织。层次是众所周知的数学构造。通常,层次由处于多个层级的节点组成。处于各个层级的节点与处于不同层级的一个或多个节点相连接。处于顶层级以下的某一层级的节点是处于该层级以上层级的一个或多个父节点的子节点。在树形结构中,每个子节点都只有一个父节点,但是父节点可以有多个子节点。在树形结构中,没有父节点与其连接的节点是根节点,没有子节点与其连接的节点是叶节点。树形层次通常只有一个根节点。
例如,由计算机操作系统用来将内容存储到计算机可读介质上的一种灵活的文件系统通常被组织成分层的“文件夹”或“目录”。每个文件夹都可以包括任意数量的将数据存储在计算机可读介质上的文件和任意数量的其他文件夹。包括文件和其他文件夹的文件夹是这些文件和文件夹的父节点。该系统通常具有一个根文件夹。
同样,可扩展标记语言(XML)中的数据元素也被排列成树形结构。XML被广泛用于存储数据,以及在独立应用程序之间交换数据。XML中的每个数据元素可以由零个或多个子元素组成。每个元素还包括元素名称,并具有零个或多个附加元素属性。XML文档是一种单根元素。
虽然这对于多种用途来说比较方便,但对按层次组织的数据(例如文件系统和XML文档)的操作可能难以表达。这样的操作包括例如创建层次的节点(例如文件或XML元素)、从层次的节点检索数据、将数据写入层次的节点、复制、移动以及删除层次的节点。节点和操作的表达式(expression)可能从一个层次数据系统到另一个层次数据系统而有所不同。可以用使用节点和操作的同一组表达式的单个集成接口方便地对在多层次间扩展的数据进行操作。
在一个方法中,多个层次的节点被汇编成为一个在用户设备上发挥作用的、具有既定且方便的接口的系统(以下称之为用户的“本地系统”)。例如,在一个本地系统中,层次中的节点被存储在关系数据库的节点表中,并且父子关系被存储在层次索引中。该索引可以列出每一个父节点,并针对每个父节点列出层次中直接位于该父节点以下的所有子节点。在该系统中,SQL命令可以用于列出满足特定标准的节点。针对节点的操作可以通过一个或多个存储程序执行。
以这种方式维持节点表和层次索引,使得可以使用文件系统上的SQL查询来找到从根文件夹到特定文件夹的路径或满足针对文件夹或文件属性的特定标准的文件。例如,假设“所有者”和“创建日期”是节点表中的文件的属性,则对于由用户Scott拥有且在2001年1月1日及2001年1月10日之间创建的所有文件,都可以得到文件名称以及起自于根文件夹的路径。然后,可以将这些文件复制到新文件夹或对这些文件进行其他操作。
虽然这个方法对按层次组织的多种数据都很有效,但该方法具有一些缺点。例如,在许多情况下,非本地(即,外来的)分层数据系统提供了用于存储和检索数据的资源。为了将数据引入到本地系统中,这使得本地系统需要贡献其拥有的资源来存储已经存储在其他地方的数据。这通常会大大增加维持本地系统的费用。
而且,外来系统中的节点的数量可能非常大,而本地系统的用户可能不经常在这些节点上操作。将所有这些节点引入到本地系统可能使本地系统的层次索引臃肿。臃肿的索引可导致响应时间的增加以及本地系统的整体性能降低。
另外,加入新的外来系统将消耗用户系统上的资源,而所消耗的资源随新的外来系统中数据量的增加而增加。新系统的数据资源必须从新系统复制到本地系统,且必须将本地索引更新。类似地,卸除外来系统也将消耗随外来系统中的数据量增加的资源。必须将数据内容从本地系统中删除,且必须将本地系统索引更新。如果外来系统的内容变化,那么本地系统必须卸除老版本的外来系统并加入新版本。消耗如此多的资源来加入和卸除外来系统将导致本地系统的整体性能降低。
而且,除了将外来数据引入到本地系统,还有数据安全方面的问题。例如,外来系统可以根据异常或所有者安全模式控制对外来层次中的数据的访问,其中,所说的异常或所有者安全模式可能会非常难或不允许在本地系统中表达或执行。
基于以上原因,非常需要一种用单个接口管理多个层次中的分层数据并克服以上缺点的技术。尤其是,需要一种用单个接口管理在多个层次中分配的数据、而不需要将所有的数据都引入到单个分层数据系统中的技术。
本节中描述的现有方法可以继续使用,但不是以前已经构思出或继续的必要方法。因此,除非本文另有说明,否则不能仅因为在背景技术中出现了这些方法,就认为它们是本申请的权利要求中描述的方法的现有技术。
本发明将通过实例的方式进行说明,但这些实例并不用于限定本发明,在所结合的附图中,相同的附图标号表示类似的部件,其中图1是说明根据一个实施例的多文件系统中的节点和链接的多个层次的结构图;图2是说明根据一个实施例的用于管理多个层次中的资源的系统的框图;图3是总体示出根据本发明的用于管理多个层次中的资源的方法的流程图;以及图4是示出可实施本发明的实施例的计算机系统的框图。
具体实施例方式
所描述的技术是用于管理排列在多个层次中的数据容器(datacontainer)。在以下描述中,出于说明的目的,阐述了大量具体的细节以提供对本发明的全面理解。但是,很显然,没有这些具体细节本发明也可以实施。在其他实例中,以框图形式示出了众所周知的结构和装置,以避免使本发明不必要地变得模糊不清。
下文中,将以管理来自于存储在关系数据库中的本地分层文件系统中的多层次文件系统的上下文来描述本发明的实施例。但是,本文中描述的技术和装置不限于该环境。在其他实施例中,本地系统是针对分层数据容器的另一管理系统。
本文中使用的术语“数据容器”指的是与节点相关联的数据,不管该数据是层次中的文件夹、文件、XML元素、还是一些其他分组的数据,例如,是关系数据库表的一列或多列中的项目。在一些实施例中,其他的分层数据(例如XML文档),可以形成一个或多个层次的数据容器。
根据一个实施例,用于管理来自于同一个本地层次的多层次数据容器的技术包括●为每一个不是本地层次的层次登记(或者叫“注册”)一组程序。对于每一个层次来说,该组程序对该层次中的数据容器执行一组操作。
●接收指出针对不与本地层次的节点相对应的特定数据容器的特定操作的用户请求。
●基于该用户请求,确定针对不是本地层次的第一层次的第一组一个或多个节点的第一操作。
●从在登记步骤中为第一层次登记的第一组程序中选择对应于第一操作的特定程序。
●调用特定程序对第一组一个或多个节点进行操作。
本文中描述的技术允许用户采用与本地层次相容的接口,从而到达向管理本地层次的系统登记的任何层次中的数据容器。因为调用了登记函数来到达外来数据容器,所以包含在外来数据容器中的数据不需要并入到本地层次中。从而,只需要消耗较少的对本地层次进行管理的系统的资源来搜索外来数据容器中的数据,或用来加入或卸除所有外来数据容器的内容。
分层文件系统实例图1是示出根据一个实施例的多文件系统中的节点和链接的多个层次100的结构图。本地层次101包括多个节点110,每一个都对应于本地文件系统中的文件夹或文件。节点110a、110b、110c、110e、110f对应于文件系统中的文件夹,它们是一个或多个其他节点的父节点;节点110d、110g对应于文件系统中的文件,它们通常为不是任何其他节点的父节点的叶节点。术语“资源”在下文中指的是文件夹或文件;因此所有的节点110都对应于资源。省略号111表示对应于文件系统中的其他资源的层次101中的其他节点110。
节点110通过链接120与其他节点110连接。链接120使一个节点110与不同的单个节点110相连。链接120a使父节点110a与子节点110b相连。类似地,链接120b、120c、120d、120e、120f、120g、和120h使一个父节点110与一个子节点110相连。省略号121表示对应于文件系统中的其他资源间的一对一连接的层101中的其他链接120。
图1还描述了两个外来层次102、103,它们包括在两个独立的外来文件系统中管理的资源。外来层次102包括节点130a、130b、和130c,以及由省略号131表示的其他节点,以下全部称作外来节点130,每一个都对应于外来文件系统之一中的资源。节点130a和130b对应于外来文件系统中的文件夹,且是一个或多个其他节点的父节点;以及,节点130c对应于外来文件系统中的文件,它是叶节点。外来层次102包括链接140a、和140b,以及由省略号141表示的其他链接,以下全部称作外来链接140。
外来层次103包括节点150a、150b和150c,以及由省略号151表示的其他节点,以下全部称作外来节点150,每一个都对应于第二外来文件系统中的资源。节点150a和150c对应于第二外来文件系统中的文件夹,且是一个或多个其他节点的父节点;以及,节点150b对应于外来文件系统中的文件,它是叶节点;外来层次103包括节点160a、和160b,以及由省略号161表示的其他链接,以下全部称作外来链接160。
每一个节点110、130、150都具有一个或多个与相应的资源的性质相对应的属性。例如,节点属性可以对应于一个或多个资源名称、资源类型(表示是文件或文件夹、或表示文件类型或文件夹类型)、资源创建类型、资源修改日期、资源所有者、资源尺寸、一个或多个资源的列表、以及资源的其他性质。
每一个链接120、140、160都具有一个或多个描述链接所连接的节点之间的联系的属性。例如,链接属性可以对应于一个或多个链接名称、链接类型(表示链接是否代表父子关系或其他关系,例如兄弟关系、祖孙关系、或姑侄关系)、链接创建日期、链接修改日期、链接所有者、链接所有者类型(例如,只具有一个创建或删除子节点的所有者的软链接;或具有多个所有者的硬链接,这多个所有者中的任何一个都可以创建子节点,且所有这些所有者都必须删除子节点)、链接描述文本、以及链接的其他性质。
在很多文件系统中,所有的链接都是隐式的。隐式链接都是相同的类型(例如,父子型软链接),不具有独立于节点的名称,且不具有任何属性。
路径表示从层次中的一个节点(起始节点)到另一节点(终止节点)的一连串链接。可以使用现有技术中已知的任何方法指定路径。通常,路径由列出起始节点和终止节点之间的链接的路径名来指定。在很多文件系统中,路径名称可以通过将多个链接的链接名以从起始节点到终止节点的遍历次序进行结合来构造,这多个链接名通过一组划界的一个或多个特殊字符而分开。通常,起始节点是层次的根节点。例如,通过以下链接名给出从文件夹110a到文件110d的路径/L120a/L120c其中,LX表示链接“X”的名称,其中X可由表示图1中的链接的数字替换;以及,字符“/”用来对链接名划界。在使用隐式链接或至少使用隐式链接名的文件中,使用了借助链接相连的父节点和子节点的名称来代替链接名。在路径名中,沿路径的中间节点的名称不重复使用,而是只使用一次,这是因为其角色是作为在一个链接中的子节点,同时是下一链接中的父节点。在该系统中,从文件夹110a到文件110d的路径通过以下路径名称给定/N110a/N110b/N110d其中,NY表示节点“Y”的名称,其中Y可由表示在图1中的节点的数字代替。
路径对于源自于关系数据库系统的输出是很有用的,因为不同文件夹中的资源可以具有相同的名称,而这些资源由通向它们的路径区分。具体的资源可通过路径名和资源名表示。文件系统对来自于由路径唯一指定的资源的数据(例如,文件中的数据或文件夹中的文件的列表)进行操作。
如图1所示,在一些层次中,可能存在不止一条通向同一节点的路径。例如,有三条路径从根节点110a通向文件夹110g/L120a/L120d/L120g/L120b/L120f/L120h
/L120b/L120e/L120g将其中有多于一个的路径通向子节点的层次称为包括循环。这样的层次通过图表而不是树来表示。
图1还示出了两个虚拟链接190a和190b,以下统一称作虚拟链接190。虚拟链接190包括对管理外来层次的外来文件系统的参考。虚拟链接190使本地层次中的文件夹成为对应于外来层次的节点的父节点。
函数概述根据本发明的实施例,外来层次102、103中的资源130、150和链接140、160被认为是本地层次101的虚拟资源。外来层次102、103通过相应的虚拟链接190a、190b(以下统一称作190)连接到本地层次。为每一个通过虚拟链接190连接的外来层次登记函数,以对外来层次中的资源和链接执行一组基本的文件系统操作。
当在涉及目标虚拟资源的操作过程中遍历从本地文件夹到虚拟资源的一个虚拟链接时,调用所登记的函数中的一个。所调用的登记函数对应于对目标虚拟资源执行的特定操作。调用函数的输入参数表示目标虚拟资源。
通过调用登记的函数,可以对外来文件系统中的节点和链接执行文件系统操作,而不用将这些节点或链接引入到本地文件系统中。由于节点和链接没有被引入到本地系统中,因而本地系统不会消耗本地系统资源来管理这些外来节点和链接。这使得用户能够采用与本地层次兼容的接口,以到达向本地层次登记的任何外来层次中的数据容器,而不用引入外来文件系统中的节点或链接。
结构概述图2是示出根据一个实施例的用于管理多个层次中的资源的系统200的框图。该系统200包括资源管理服务程序220、一个或多个资源客户程序210、以及一个或多个外来层次服务程序240。
在所示出的实施例中,资源管理服务程序220是一种应用程序,它为文件系统中的资源提供文件系统服务。众所周知,文件系统服务包括列出文件夹的内容、在文件夹中创建资源、从文件夹中删除资源、从文件中获得数据、获得资源的特性、将资源从一个文件夹移动到另一个文件夹、以及将资源从一个文件夹复制到另一个文件夹。
资源客户程序210包括向资源管理服务程序220请求涉及一个或多个层次中的资源的文件系统服务的任何应用程序。在所示实施例中,资源客户程序210包括资源客户程序210a和资源客户程序210b,以及由省略号211表示的其他资源客户程序。
外来层次服务程序240包括向外来文件系统中的资源提供文件系统服务的任何应用程序。在所示实施例中,外来层次服务程序240包括外来层次服务程序240a和外来层次服务程序240b、以及由省略号241表示的其他外来层次服务程序。每一个外来层次服务程序240都包括表示与相应的外来层次的节点和链接相对应的资源和链接的数据。在所示实施例中,外来层次服务程序240a包括图1中的外来层次102的资源和链接,外来层次服务程序240b包括图1中的外来层次103的资源和链接。一个或多个外来层次服务程序240可以与资源管理服务程序220存留在相同的主机上。任一或所有的外来层次服务程序240也可以存留在与资源管理服务程序220的主机不同的一个或多个主机上。
在其他实施例中,资源管理服务程序220由数据容器管理服务程序代替,它是一种为可能不是文件系统的其他层次系统中的数据容器(例如,XML文档)提供服务的应用程序。对数据容器的服务可以包括类似于文件系统服务的服务,例如列出父容器的内容、在父容器中创建子容器、从父容器删除子容器、从容器获得数据、获得容器的特性、将容器从一个父容器移动到另一个父容器、以及将容器从一个父容器复制到另一个父容器。在其他实施例中,资源客户程序210由数据容器客户程序代替,它是一种请求涉及一个或多个层次的数据容器服务的应用程序。在其他实施例中,外来层次服务程序是对分层数据容器进行管理的外来系统,例如外来文件系统和用于编辑XML文档内容的不同系统。
资源管理服务程序资源管理服务程序220包括本地层次数据222、分层处理引擎230、客户程序接口232、以及登记函数组234(包括登记函数组234a和登记函数组234b)、以及由省略号231表示的其他登记函数组。
本地层次数据222包括与本地层次(例如,图1中的层次101)的节点和链接对应的资源和链接。当执行资源服务程序220时,可以采用表示本地层次的技术中已知的任何方法。例如,表示资源和链接的数据可以如Agarwal所述进行设置。
客户程序接口232提供对一个或多个客户程序的访问,用于发送要求资源管理服务程序220的服务的请求。由客户程序210发送的请求可以用现有技术中已知的任何方式表示。在一些实施例中,这些请求是通过使用消息交换协议的网络从在一个主机上执行的客户程序发送到在不同主机上执行的资源管理服务程序220的消息。例如,在一些实施例中,这些请求是本技术领域中已知的文件传输协议(FTP)请求。在一些实施例中,这些请求是超文本传输协议(HTTP)请求。在一些实施例中,这些请求使用了被称作基于网络的分布式著作和版本控制(“WebDAV”)的协议,该协议扩展了HTTP,支持互联网(模仿了流行的文件系统)上的分层次操作。在Agarwal系统中,消息包括对表示文件系统中的资源和链接的层次数据进行管理的关系数据库管理系统的结构化查询语言(SQL)中的语句。
在一些实施例中,不将客户程序请求表示为消息,而是对应用编程接口(API)中指定的程序的调用。指定各个API以用于高级编程语言,例如JAVA(以下成为“Java”)、C、和称作PL/SQL的SQL过程语言。API的使用在本技术领域中众所周知。API命名了可以由客户程序调用的程序,且当调用程序时列出了作为变量的参数和参数类型。根据一些实施例,所提供的多种编程语言中的API用于从资源管理服务程序220获取文件系统服务。
分层处理引擎230是确定和执行对本地层次和外来层次的一个或多个资源或链接的操作的程序,该操作涉及满足从客户程序210接收的请求。分层处理引擎230将参照图3在以下章节中进行更详细的描述。
登记函数组234是向外来层次服务程序240的提出服务请求的程序。包括使处理器执行每个登记函数组的程序的指令的数据模块向资源服务程序220进行登记;并且当分层处理引擎230从函数组调用函数时,执行这些指令。通过另外的程序执行这些指令的模块在本技术领域中周知为“插入”模块。将参考图3在以下章节中描述用于登记每个登记函数组的模块的方法。
在一些实施例中,一个或多个外来层次服务程序240中的每一个都是资源管理服务程序,类似资源管理服务程序220,它具有自己的本地层次数据和用于外来的一个或多个层次服务程序的登记函数组。
利用资源服务程序220,客户程序可以与单个接口232相互作用,并从包括本地层次和一个或多个外来层次的多个层次中的任何一个获得资源。
用于管理多个层次的方法图3是总体示出根据一个实施例的用于管理多个层次中的资源的方法的流程图。虽然在图3中以特定顺序示出了这些步骤,但是在其他实施例中,这些步骤也可以以不同的顺序执行或在时间上重复。
登记函数组在步骤310中,为由资源管理服务程序220管理的各个外来层次的资源登记函数组234。任何用于向另外的应用程序登记包括一个或多个函数的一组函数的方法都可以使用。在所示实施例中,建立了分层处理引擎230用来调用函数的API,并由希望加入外来层次的综合管理员将包括与该API匹配的指令的模块提供给资源管理服务程序220。资源管理服务程序220存储了每个外来层次和对应模块之间的联系。
在所示实施例中,函数组包括用来执行表格1中列出的基本文件系统操作的函数。
表1各函数组支持的示例性基本文件系统操作
在其他实施例中,在每个函数组中可以包括或多或少的操作和对应的函数。例如,每个函数组中可能包括各种操作和相应的函数。例如,可以增加用于删除、重命名、和复制链接的操作;或通过代之以删除和创建操作的结合,可以忽略用于复制和重命名的操作。
在一些实施例中,模块中的每个函数都具有与基本操作名称相匹配的名称,以及与操作对象相匹配的参数列表。这样,每一个函数都包括一个或多个指令,以生成使相应的外来层次服务程序执行表1中描述的操作的命令。
在步骤310中,针对由外来层次服务程序240管理的各个外来层次,向资源管理服务程序220登记具有执行表1的操作的函数的一个或多个模块。在一些实施例中,外来节点被连接到本地层次处的路径或文件夹的名称也被指定。在一些实施例中,当登记模块时,还指定了外来层次的其他性质。例如,指定外来层次中的资源可以被修改或不可以被修改;不可以被修改的资源称作“只读”,可以被修改的资源称作“可修改”。可以指定外来层次的资源或链接是否可以通过搜索资源或链接的性质或内容找到;允许这种搜索的外来层次称作“可搜索”。如果外来层次是可搜索的,那么,在一些实施例中,向函数组增加一个或多个搜索函数,并在登记过程中提供调用外来层次的搜索能力的模块。如果外来层次的资源或链接可以修改,那么可以指定当作出修改时该修改是否可以被自动提交(称作“自动提交”),或仅当完成多个步骤的事务处理和作出类似调用提交函数的明确提交动作时被提交(称作“事务触发”)。在一些实施例中,外来层次的根节点借助指定的路径名默认连接到虚拟链接。在一些实施例中,外来层次的非根节点与虚拟链接相连;在这些实施例中,在步骤310的登记过程中,还包括了外来层次中到相关的非根节点的路径名。
在一些实施例中,在步骤310中产生映射,把针对一个外来层次的函数与到虚拟链接190的路径名相关联,该虚拟链接将本地层次中的文件夹与该外来层次中的节点相关联。在一些实施例中,在模块的各个函数水平上作出映射,以使函数在一个或多个模块上扩展,函数名可以与表1中的基本操作名称不同。
在一些实施例中,本地层次的链接性质包括表示链接是否是虚拟链接190的属性,如果是虚拟链接的话,那么还包括存储有函数组的模块的名称,或模块的列表和函数组中的每个函数的函数名。当遍历路径时,当遇到虚拟链接时,使用相关模块或函数对跟随该虚拟链接的路径部分上的资源执行操作。
为了说明,假设通过调用资源管理服务程序220的一个被称作create_virtual_folder的程序,并以下面的顺序确定以下信息作为该程序的参数来完成函数组的登记1.虚拟文件夹与本地文件夹相连的路径名;2.针对按表1的次序的基本操作的模块名和函数名;
3.指出是否是可搜索、只读、以及事物触发的标记。
在该实施例中,虚拟文件夹通常是外来层次的根节点。出于说明的目的,进一步假设名为“Basic102A”和“Basic102B”的模块包括针对图1中所示的外来层次102的函数组,外来层次102既不是可搜索的也不是可修改的。那么,外来层次102可以在文件夹110e下用以下语句向针对如图1所示的本地层次101的资源管理服务器220登记create_virtual_folder(/L120a/L120d/L190a,Basic102A.get_folder,Basic102A.begin_folder_list,Basic102A.next_in_folder_list,Basic102A.end_folder_list,Basic102A.get_file,Basic102A.get_attributes,Basic102B.get_link_attributes,Basic102A.no_operation,Basic102A.no_operation,Basic102A.no_operation,Basic102A.no_operation,Basic102A.no_operation,Basic102A.no_operation,Basic102A.no_operation,NOT_SEARCHABLE,READ_ONLY,NULL)在一些实施例中,链接名由父资源和子资源的资源名体现。在该实施例中,作为create_virtual_folder程序的第一变量的路径名“/L120a/L120d/L190a”由路径名“/N110a/N110b/N110e/N130a”代替。
出于说明的目的,进一步假设名为“BasicOp103”的模块包括针对图1所示的外来层次103的函数组,外来层次103可以修改但是不能搜索,其中该修改可以自动提交。那么,外来层次103在如图1所示的文件夹110f下可以用以下语句向针对本地层次101的资源管理服务程序220登记create_virtual_folder(/L120b/L120f/L190b,BasicOp103.folder_contents,BasicOp103.begin_list,BasicOp103.next,BasicOp103.end_list,BasicOp103.file_contents,BasicOp103.attributes,Basic102B.link_attributes,BasicOp103.new_folder,BasicOp103.new_file,BasicOp103.add_link,BasicOp103.delete,BasicOp103.delete,BasicOp103.rename,BasicOp103.copy,NOT_SEARCHABLE,MODIFIABLE,AUTO_COMMIT)这些登记的结果是表2中所总结的映射。
表2将基本操作映射到针对两个外来层次的函数组的实例
处理客户程序请求在步骤320中,从客户程序210接收文件系统请求到资源管理服务程序220中,以对多个层次100中的文件和文件夹进行操作。例如,在接口232上接收到列出文件夹110e下的所有内容的请求。可以用本技术领域中已知的任何方式接收请求,例如,用HTTP/WebDAV消息方式。例如,请求包括表达式“列出文件夹/L120a/L120d/N110e下的所有内容”。该请求的期望结果是列出该文件夹下的资源的名称,例如,本地文件110g的名称N110b、外来文件夹130a的名称N130a、外来文件夹130b的名称N130b、外来文件130c的名称N130c、以及前面加上合适的路径名称的由省略号131表示的其他资源的名称。
在步骤330中,分层处理引擎230基于请求来确定对本地资源或链接的本地操作(如果存在本地操作的话)以及对外来资源或链接的外来操作(如果存在外来操作的话)。例如,引擎230确定出,列出全部内容的请求涉及到获得文件夹110e的内容的下一本地操作。
在步骤350中,执行下一本地操作,将本地链接120g的标识返回本地文件110g,并将虚拟链接190a的标识返回到外来文件夹130a。出于说明的目的,假设虚拟链接190a被存储在本地层次数据222中,且包括外来层次102的根节点的名称。将链接和资源的名称插入用于返回客户程序的结果数据结构中。出于说明的目的,假设,结果数据结构被更新为包括下面用R1表示的表达式/L120g/N110g,/L190a/N130a(R1)在所述的实施例中,步骤330在时间上与步骤350重叠,使得如上所述在步骤350中执行本地操作后,在步骤330中分层处理引擎230将确定下一外来操作。在步骤330中,分层处理引擎230确认本地文件110g不具有子文件但是文件夹130a可能有子文件夹。在所述的实施例中,在步骤310的登记过程中,如以上所述,所存储的映射把在链接190a处终结的路径与针对外来层次102的函数组相关联。从而分层处理引擎230知道文件夹130a是层次102的外来文件夹,因为它是在链接190a之下。因此,在所述的实施例中,下一外来操作是对/L190a/N130a的get-folder-contents操作。使用表2的映射中的路径名,确定外来操作是表2的中间栏中的操作,它们与路径名/L120a/120d/L190a相关联。
在步骤360中,所选择的特定函数对应于来自为特定外来层次登记的函数组的下一个外来操作。在所述的实施例中,选择函数Basic102A.get_folder。如表2中所示,Basic102A.get_folder对应于为链接190a下的外来层次102登记的基本操作get-folder-contents。
在步骤370中,调用选定的函数。在所述的实施例中,调用函数Basic102A.get_folder,针对基本操作指定的操作对象是路径名和文件夹名。操作对象中的路径名称和文件名称在表示哪个外来层次的虚拟路径190a之下。例如,用下面的外来函数调用1(FFI1)表示的表达式调用函数。
Basic102A.get_folder(“/N 130a”) (FFI1)其返回/L140a/130b,L140b/130c。
在步骤380中,将来自本地操作和外来操作的结果与任何现有结果结合,按照要求增加路径名。例如,在步骤380之后,结果数据结构包括下面用R2表示的表达式。
/L120g/N110g,/L190a/N130a,/L190a/L140a/130b,/L190a/L140b/130c (R2)在步骤390中,确定在步骤350和370中执行的操作是否是涉及完成来自客户程序的请求的最后操作。如果不是,控制过程返回到步骤330以确定执行下一本地操作和外来操作。例如,在步骤370中获得文件夹130a的内容后,分层处理引擎230还应该获得文件夹130b的内容,所以控制返回到步骤330。在步骤330中,确定下一操作获得文件夹/L190a/140a/130b的内容。因为该文件夹是在/L190a之下,所以它是在层次102中的外来文件夹。控制回到步骤360来选择正确的函数以获得文件夹内容,该函数依然是Basic102A.get_folder。在步骤370中,使用L190a以下的路径名部分来调用函数,获得文件夹/L190a/L140a/N130b的内容,如以下表达式FFI2所示。
Basic102A.get_folder(“/L140/N130b”) (FFI2)在步骤380中,将获得的所有结果都添加到结果数据结构中。继续从步骤330到步骤390的循环,直到外来层次102中不再存在文件夹。
如果在步骤390中确定最后操作已经执行并满足了客户程序请求,则控制回到步骤395。在步骤395中,将结果从资源管理服务程序220返回到客户程序210。
在其他实施例中,获得文件夹110e的内容的本地操作的结果产生到下一节点的链接,而不是节点名称。与节点相关的名称从get-resource-properties操作获得。为了获得链接120g上的子节点的名称,应对本地节点110g执行本地操作。为了获得虚拟链接190a上的子节点的名称,必须调用与外来层次相关联的函数。在这种情况下,步骤330涉及1)确定本地函数get-resource-properties以获得节点110g的名称;以及2)确定相应的应被使用的外来函数,来获得节点130a的名称。从而基于客户程序请求确定本地操作和外来层次操作,以列出文件夹110e的内容。
请求实例获得文件为了进一步解释用于管理多个层次上的资源的方法300的使用,下面将描述获得层次102上的文件的内容的客户程序请求。假设由于以上描述的请求“列出所有”,客户程序210的用户知道了文件存在于路径/L120a/L120d/L190a/L140b/上。在此处所考虑的随后请求中,客户程序210a发送请求以从资源管理服务程序220获得该文件的内容。
在步骤330中,分层处理引擎230接收获得/L120a/L120d/L190a/L140b/N130c的文件内容的请求,且将其分解为对本地资源的本地操作和对外来资源的外来操作。具体来说,分层处理引擎230确定本地操作从/L120a/L120d/L190a获得文件内容以及外来操作从/L140b/N130c获得文件内容在步骤350中,执行本地操作(如果有的话)。由于路径/L120a/L120d/L190a不表示文件,所以在步骤350中未获得文件内容。
在步骤360中,从表2的映射中选择对应于get-file-contents的外来函数。在L190a下的层次是层次102。在层次102下,对应的外来函数是Basic102A.get_file。
在步骤370中,对外来目标/L140b/N130c调用外来函数。由分层处理引擎形成的表达式由FFI3给定。
Basic102A.get_file(/L140b/N130c)(FFI3)FFI3的结果是来自文件130c的内容的数据流。
在步骤380中,将数据流放入结果数据结构中。在步骤390中,确定没有其他操作要执行以满足用户请求。在步骤395中,数据流通过一个或多个到客户程序210a的消息发送到客户程序。
这样,基于客户程序请求确定本地操作和外来操作以获得文件130c的内容。
请求实例复制文件为了进一步描述用于管理多个层次上的资源的方法300的使用,下面将描述将层次102上的文件复制到层次103中的文件夹中。假设客户程序210a的用户由于以上描述的“列出所有”的请求,而知道了文件130c存在于路径/L120a/L120d/L190a/L140b/上。进一步假设客户程序210a的用户由于对文件夹110f的“列出所有”请求,而知道文件夹150c存在于路径/L120b/L120f/L190b/L160b/上。
在此处所考虑的请求中,客户程序210a向到资源管理服务程序220发送请求,以使用表达式Q1将文件130c复制到文件夹150c将/L120a/L120d/L190a/L140b/N130c复制到/L120b/L120f/L190b/L160b/ (Q1)在步骤330中,分层处理引擎230接收请求Q1,将其分解为一序列对本地资源的本地操作和对外来资源的外来操作。因为源文件和目的文件不在相同的外来层次中,所以在外来层次中无法执行复制操作。相反,必须在目的外来层次103中根据源外来层次中的文件内容创建文件。在所述的实施例中,分层处理引擎230确定以下特定顺序的操作1.从/L120a/L120d/L190a获得资源属性的本地操作;2.获得L190a下的/L140b/N130c的资源属性的外来操作;3.从/L120a/L120d/L190a获得文件内容的本地操作;4.获得L190a下的/L140b/N130c的文件内容的外来操作;5.利用得自get-file-contents操作的名称N130c、当前属性、数据流,在文件夹/L120b/L120f/L190b中创建文件的本地操作;
6.利用得自L190b下的get-file-contents操作的名称N130c、当前属性特性、以及数据流,在文件夹/L160b/150c中创建文件的外来操作;在步骤350中,如果有的话,执行下一本地操作(1)。因为路径/L120a/L120d/L190a不表示资源,所以在步骤350中未获得资源的属性。
在步骤360中,从表2的映射中选择对应于下一外来操作(2)的外来函数,即get-resource-properties。在L190a下的层次是层次102。在层次102下,对应的外来函数是Basic102A.get_attributes。
在步骤370中,对外来目标/L140b/N130c调用外来函数。分层处理引擎形成的表达式由FFI4给定。
Basic102A.get_attributes(/L140b/N130c) (FFI4)FFI4的结果是针对文件130c的属性值的当前属性数据结构,例如所有者、创建日期、以及其他。
在步骤380中,没有结果存储在结果数据结构中。当执行复制操作时没有结果返回到客户程序。
在步骤390中,确定要执行其他操作以满足用户请求;具体来说即以上列出的操作3、4、5、6。
在步骤350的下一次重复中,执行下一次本地操作(3)。因为路径/L120a/L120d/L190a不表示文件,所以在步骤350中未获得文件内容。
在步骤360的下一次重复中,从表2的映射中选出对应于下一外来操作(4)的外来函数,即get-file-contents。在L190a下的层次是层次102。在层次102下,对应的外来函数是Basic102A.get_file。
在步骤370中,针对外来目标/L140b/N130c调用外来函数。分层处理引擎形成的表达式由FFI5给定(类似于前面的章节中描述的FFI3)。
Basic102A.get-file(/L140b/N130c)(FFI5)FFI5的结果是来自文件130c的数据流的内容。
在步骤390中,确定存在其他操作要执行以满足用户请求;具体来说即以上列出的操作5、6。
在步骤350中下一次重复中,执行下一本地操作(5),即create-file操作。因为路径/L120a/L120d/L190a不表示文件夹,所以在步骤350中没有文件被创建。
在步骤360的下一次重复中,从表2的映射中选出对应于下一外来操作(6)的外来函数,即create-file。在L190b下的层次是层次103。在层次103下,对应的外来函数是BasicOp103.new_file。
在步骤370中,针对外来目标/L160b/N150c调用外来函数。分层处理引擎形成的表达式由FFI6给定。
BasicOp103.new_file(/L160b/N150c,N130,属性,数据流)(FFI6)其中,属性表示当前属性数据结构中的值。FFI6的结果是基于来自文件130c的内容的属性和数据流的层次103中的新文件。
这样,可基于将外来层次102中的文件130c的内容复制到外来层次103中的文件夹150c中的客户程序请求,来确定多个本地操作和多个外来操作。
硬件概述图4是描述可实施本发明的实施例的计算机系统400的框图。计算机系统400包括用于传递信息的总线402或其他通信机构、和用于处理信息的与总线402连接的处理器404。计算机系统400还包括与总线402连接得主存储器406,例如随机访问存储器(RAM)或者其他动态存储装置,用于存储信息及处理器404要执行的指令。主存储器406还可用于在处理器404执行指令过程中存储临时变量或其他中间信息。计算机系统400还包括与总线402连接得只读存储器(ROM)408或者其他静态存储装置,用于存储静态信息和处理器404的要执行的指令。提供了存储装置410和总线402连接,如磁盘或光盘,用于存储信息和指令。
计算机系统400可以经由总线402连接到显示器412,如阴极射线管(CRT),用于向计算机用户显示信息。包括字母数字键和其他键的输入装置414与总线402相连,用于传递通信信息和命令选择到处理器404。另一种用户输入装置是光标控制器416,如鼠标、跟踪球、或光标方向键,用于传递方向信息和命令选择到处理器404及用于控制显示器412上的光标移动。该输入装置通常在两个轴上(第一个轴(例如X轴)和第二个轴(例如Y轴))具有两个自由度,使该装置能在平面上指定位置。
本发明涉及使用计算机系统400来实施本文所述的技术。根据本发明的一个实施例,这些技术通过计算机系统400响应于处理器404执行包含于主存储器406中的一串或多串的一个或多个指令来执行。这些指令可从其他的计算机可读介质(例如存储装置410)中读入主存储器406。执行包含于主存储器406中的一系列指令将使处理器404执行本文中所述的程序步骤。在可选实施例中,可用硬布线电路代替或结合软件指令来实施本发明。因此,本发明中的实施例不限于硬件电路和软件的任何特定组合。
本文使用的术语“计算机可读介质”是指参与提供给处理器404执行的指令的任何介质。这种介质可以采取很多形式,包括但不限于非易失性介质、易失性介质和传输介质。非易失性介质举例来说包括光盘或磁盘,如存储装置410。易失性介质包括动态存储器,如主存储器406。传输介质包括同轴电缆、铜线、和光纤,包括由总线402组成的导线。传输介质还可采取声波或光波形式,例如那些在无线电波和红外线数据通信过程中产生的声波和光波。
通常的计算机可读介质举例来说包括软盘、软磁盘、硬盘、磁带,或者任何其他磁性介质、CD-ROM、任何其他光介质、打孔纸、纸带、或者任何带孔的物理介质、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存储芯片或者磁带,或者以下提到的载波、或者计算机能读的任何其他介质。
各种形式的计算机可读介质可参与传送一串或多串的一个或者多个指令给处理器404执行。例如,开始可将指令载入到远程计算机的磁盘中。远程计算机能将该指令加载到其动态存储器中,然后使用调制解调器通过电话线发送指令。位于计算机系统400本地的调制解调器可通过电话线接收数据,然后使用红外转换器将数据转换成红外信号。红外探测器可以接收红外信号携带的数据,通过一定的电路可以把数据放置到总线402上。总线402把数据传递到主存储器406中,处理器404可从主存储器取回并执行这些指令。在处理器404执行这些指令之前或之后,主存储器406接收的指令可随意地存储于存储装置410中。
计算机系统400还包括连接到总线402的通信接口418。通信接口418提供与连接到局域网422的网络链路420相连的双向数据通信。例如,通信接口418可以是综合业务数字网(ISDN)卡或者调制解调器,用于提供到相应类型电话线的数据通信连接。又如,通信接口418可以是局域网(LAN)卡,用于提供至兼容局域网(LAN)的数据通信连接。也可以实现无线链路。无论采用何种连接,通信接口418均能发送和接受承载各种信息的数字数据流的电信号、电磁信号和光学信号。
网络链接420通常可通过一个或者多个网络将数据通信提供给其他数据装置。例如,网络链接420可通过局域网422与主机424连接,或者与互联网服务提供商(ISP)426操作的数据设备连接。ISP 426又通过目前通称为“互联网”428的全球分组数据通信网络提供数据通信服务。局域网422和互联网428都使用承载数字数据流的电信号、电磁信号或光学信号。通过各种网络的这些信号、和网络链接420上并通过通信接口418的信号,都传送数字数据给计算机系统400或者传送来自计算机系统400的数字数据,是传输信息的载波的典型形式。
计算机系统400能通过网络、网络链接420和通信接口418发送消息和接收数据,包括程序代码。例如,在互联网上,服务器430可通过互联网428、ISP 426、局域网422、和通信接口418,传送所请求的应用程序的程序代码。
当代码被接收和/或存储在存储装置410上或者其他非易失性介质上用于随后执行时,处理器404可执行所接收到的代码。按照这种方式,计算机系统400可以载波的形式获得应用代码。
在前述的说明书中,参考具体实施例描述了本发明。然而,很显然,在不脱离本发明的广泛的精神和范围的基础之上,可以有诸多的调整和变化。说明书和附图,仅用于说明本发明,而不是用于限制本发明的范围。
权利要求
1.一种用于管理多个层次的数据容器的方法,每个层次都包括多个节点,每个节点都对应一个数据容器,所述方法包括以下步骤针对本地层次以外的每一个层次,登记用于一组操作的一组程序,当被调用时,所述程序对所述层次中的一个或多个数据容器执行该组操作中的一个或多个操作;接收用户请求,所述用户请求指示针对不与所述本地层次的节点相对应的特定数据容器的特定操作;基于所述用户请求,确定对不是所述本地层次的第一层次的第一组一个或多个节点执行的第一操作;从为所述第一层次登记的第一组程序中选择对应于所述第一操作的特定程序;以及调用所述特定程序来对所述第一组一个或多个节点进行操作。
2.根据权利要求1所述的方法,所述接收用户请求的步骤还包括以下步骤向用户提供带有控制器的单个接口,所述控制器用于指定对多个层次中的任何一个中的一个或多个数据容器进行操作的请求;基于用户对所述控制器中至少之一的作用来接收用户输入;以及基于所述用户输入,形成用户请求作为针对一个或多个数据容器的包括一个或多个操作的一组操作。
3.根据权利要求1所述的方法,其中,该组操作包括创建数据容器的操作;从数据容器获得数据的操作;更新数据容器中的数据的操作;删除数据容器的操作;将一个父数据容器的数据容器复制到另一个父数据容器的操作;以及将数据容器从其父数据容器移动到另一父数据容器的操作。
4.根据权利要求1所述的方法,其中,该组操作包括重复父容器所拥有的子容器的操作。
5.根据权利要求4所述的方法,其中,重复子容器的步骤包括开始重复的操作;提供下一个子数据容器的操作;以及结束重复的操作。
6.根据权利要求1所述的方法,其中,所述第一操作与所述特定操作相同。
7.根据权利要求1所述的方法,其中,所述第一操作与所述特定操作不同。
8.根据权利要求1所述的方法,还包括基于用户请求而确定对所述本地层次的第二组一个或多个节点执行的第二操作的步骤。
9.根据权利要求8所述的方法,其中,所述第二操作与所述特定操作相同。
10.根据权利要求8所述的方法,其中,所述第二操作与所述特定操作不同。
11.根据权利要求1所述的方法,还包括将包括从调用特定程序返回的第一结果的响应发送给用户。
12.根据权利要求8所述的方法,还包括将从调用所述特定程序返回的第一结果和来自第二操作的第二结果结合到给用户的响应中;以及将所述响应发送到用户。
13.一种载有一个或多个指令序列的计算机可读介质,当通过一个或多个处理器执行该指令序列时,所述计算机可读介质使所述一个或多个处理器执行权利要求1至12中任一所述的方法。
全文摘要
用于管理来自同一个本地层次的数据的多个层次的技术,包括为每个外来层次登记一组程序。该组程序对与节点关联的层次中的数据执行一组操作。接收用户请求,以针对不与本地层次的节点相对应的特定数据指定特定操作。基于该用户请求,确定针对不是本地层次的第一层次的一组一个或多个节点的第一操作。从为第一层次登记的第一组程序中选出对应于第一操作的特定程序,并调用。这些技术允许用户使用与本地层次兼容的接口以获得任何层次中的数据。
文档编号G06F17/30GK1729467SQ200380107186
公开日2006年2月1日 申请日期2003年11月6日 优先权日2002年11月6日
发明者西瓦桑卡兰·钱德拉塞卡, 拉维·默西, 尼普恩·阿加瓦尔, 埃里克·塞德拉 申请人:甲骨文国际公司