用于带同步的双向数据修改的方法和***
背景技术
存在不同端点之间,如在不同计算机***之间同步数据的各种各样的同步***。在某些情况下,所同步的数据采用至少某些表示可以与特定约束相关联或服从特定约束。在此类约束的仅某些示例中,计算机文件***可以要求文件名仅使用特定字符、同一目录中的文件具有唯一名称、文件位于目录中、等等。
为表示并实施约束,在某些情况下,同步***本身可被设计或扩展成了解特定约束并跨所有同步端点统一地实施该特定约束。在其它情况下,可提供或定义作为同步***的补充或“在其上”操作的附加逻辑,以便在同步***同步数据时统一地实施约束。
扩展同步***以实施可能专用于或仅相关于特定类型的数据或特定端点的约束可能会使同步***的各个方面复杂化,这包括更难以变更或更新同步***如何操作。例如,在某些情况下,在新端点要求数据符合新约束时,可能难以或甚至不可能向现有的同步端点***添加新类型的端点。此外,统一地施加约束以使每一端点向同步的数据施加同一约束也可导致可能的问题,这包括要求同步的数据限于每一端点所支持的可能较低保真的表示,即使某些端点可能能够提供附加的功能或采用同一数据的更复杂且可能更有用的表示来操作。
概述
下面提供本发明的简要概述以便向读者提供基本的理解。本概述不是本发明的详尽概观,并且既不标识本发明的关键或重要元素,也不描绘本发明的范围。其唯一目的是以简化形式提供在此公开一些概念作为稍后提供的更详细描述的序言。
此处所描述的是涉及在不必修改所同步的数据的情况下对同步端点上的数据的修改的各种技术和方法。在至少某些实现中,可修改端点上的数据的表示以便实施该特定端点上的约束,而不需要在将数据同步到其它端点时对该数 据进行相似或相同的修改。
附图描述
图1示出了其中可以同步并共享数据的示例性***。
图2示出了一示例性概括操作流程,其包括可在端点上并入同步数据,包括将同步数据体现到域数据上时执行的各种操作。
图3示出了一示例性概括操作流程,其包括可在生成供传送到其它端点的同步数据,包括使用先前体现的域数据来生成同步数据时执行的各种操作。
图4示出了一示例性***,其示出了参与同步关系并包括用于将同步数据体现到域数据上的功能的端点的一个实施例。
图5示出了在其中可以实现此处所描述的各种技术的示例性计算设备。
详细描述
此处所描述的是涉及数据同步的实现的各种技术和方法,其中数据在同步端点上修改,这可能是为了确保实施该端点上的数据上的约束,而不必修改所同步的数据。即,例如,且在至少某些实现中,可修改端点上的数据的表示以便实施该特定端点上的约束,而不需要在同步数据时或在其它端点上访问或使用该数据时对该数据进行相似或相同的修改。
在某些实现中,一种同步***可包括在多个端点之间,如在各种各样类型的多个计算设备之间传送数据的可执行代码。在仅一个示例中,一种同步***可在不同计算机之间同步计算机实现的目录和文件。使用这一***,用户能够保持目录以及该目录中的所有文件(以及可能的子目录)在多个计算机之间同步。当用户变更该同步的目录中的文件时,该修改或变更的文件可通过各种手段从做出该变更的计算设备同步或传输到一个或多个其它计算设备。当用户添加新文件时,该新文件可被类似地传送,等等。同一或一个或多个其它同步***也可同步各种各样其它类型的数据中的任一种。
在至少某些实现中,可存在与所同步的数据相关联的一个或多个约束。如果不遵循或不遵守这些约束,则同步的数据可能无法使用,可能不是有效的,且可能仅在限制的情况下使用,等等。例如,继续示例性目录和文件同步实现, 在至少某些端点上,情况可以是同步的目录和文件必须符合各种特定约束。在许多可能的示例的仅一个中,可要求文件是目录的“子项”,或者可要求文件与该目录相关联。此外,可要求目录本身是有效的,即,其不能被删除,不能具有无效名称,等等。另一示例性约束可能要求特定目录不包含具有相同名称的两个文件。在又一示例性约束中,不允许两个目录是彼此的子项(这将形成“循环”)。即,如果“目录B”是“目录A”的子项,则“目录A”不能是“目录B”的子项。在再一示例中,可要求目录名和文件名仅使用从特定一组字符中选择的字符。即,可能在目录或文件名中允许如“A”、“B”、“c”、“d”、“1”、“5”等字母数字字符,而可能不允许特定的其它字符,可能像“!”、“%”或其它字符。对于示例性目录和文件同步实现以及对于任何其它类型的数据,其它约束也是可能的。
在某些环境中,如在单个计算设备上,确保遵循至少某些约束可能被认为是相对简单的。然而,在至少某些其它环境中,包括在多个端点之间同步数据且数据可在多于一个端点上修改或变更时,确保遵循所有约束可能更难。仅作为一个示例,确保目录仅保持具有特定名称的一个文件可例如由与文件***相关联的可执行代码来在单个***上实现。这一可执行代码可能不允许在新文件与同一目录中的现有文件具有相同名称时创建该新文件,可能不允许将文件重命名为与现有文件相同的名称,等等。
然而,在其中目录中的文件在计算设备之间同步并且文件可在多于一个计算设备上添加、修改或删除的环境中,诸如要求不存在重复等要求在至少某些实现中可能无法仅由特定计算设备上的文件***来实施。在其中可创建多个文件的情况的仅一个示例中,可在一个计算设备上创建新文件。同时,或在数据同步之前的另一时刻,可在第二计算设备上创建具有相同名称的另一文件。在本示例中,直到两个计算设备同步其数据之前,可能都不会违反不存在重复文件的要求。然而,要完全同步数据将要求在第一计算设备上创建在第二计算设备上所创建的文件。执行此动作将在第一计算设备上的同一目录中创建具有相同名称的两个文件,这将违反同一目录中不允许重复文件的约束。(当在第一计算设备上所创建的文件被同步到第二计算设备时存在相同的问题。)
其中遵循约束可能很困难的潜在问题的另一示例可以发生在作为目录或 文件名的一部分所允许的字符上。例如,情况可以是例如使用相同文件***的两个或更多端点可具有关于目录或文件名中允许的字符的相同约束。即,同样出于示例目的,假定两个端点都运行相同的计算机操作***且具有使用相同文件***的存储。在一个这样的端点上创建的文件如该端点上使用的一个或多个文件***所实施的那样可具有有效文件名。同样作为示例而非限制,如果这一文件随后被同步到服从对于目录和文件命名的相同约束的另一端点,则该文件名可继续有效。然而,如果该文件被同步到例如使用某一其它具有对于有效文件名的不同规则或约束的操作***或文件***的端点或计算设备,则该文件名可能不是有效的。因此,例如,像“File!.txt”这样的文件名可能在一个端点上有效而在另一端点上无效。在某些情况下,这一文件可在一个端点上没有问题地创建,但是然后不可在不违反与同步的数据相关联的至少某些约束的情况下被同步到另一示例性端点。
在至少某些情况下,当作为同步数据的一部分可能违反约束时,可使用各种实现或解决方案来例如试图通过确保不违反约束或解决所违反的约束来解决潜在问题。
例如,在某些实现中,有可能确定违反了约束,并且可能自动地或在牵涉到像用户或某一其它可执行代码这样的某一实体的情况下解决被违反的约束。继续先前所介绍的目录和文件同步示例,在某些实现中,有可能对使用在特定端点上无效的字符的目录或文件进行重命名。例如,但非限制,如果在第一端点上以在第一端点上有效的文件名创建的文件随后被同步到其中该第一文件名无效的第二端点,则可在该第二端点上在某些情况下自动变更该文件名以使该文件名使用在该第二端点上有效的字符。如果文件被保持在两个端点之间同步,则当对文件名的变更被同步回到第一端点时,该文件名也可在第一端点上被变更为同一新文件名。结果,文件名可以在两个端点上相同,并且可以在两个端点上有效。然而,在这一情况下,文件名现在可被限于不再包括在第一端点上有效的字符,并且由于缺少仅与第二端点相关联的约束,可能不像其本来那样具有描述性。
此外,在某些情况下,不同端点可具有互斥约束,使得在不违反与至少一个端点相关联的约束的情况下,甚至无法在两个端点上表示数据的某一子集。 例如,使用如在北印度语中使用的字符的名称不能与使用以中文语言、英文语言等的形式来使用的字符的名称共享任何字符。
在某些示例中,违反约束可导致同步的项目以某种方式来标记或注明。然后可能由同步数据的用户或某一其它实体来评估这一标记或注明的数据,且然后可通过某种手段,包括通过该用户或实体一方的动作来解决该约束违反。作为使用目录和文件同步的相同情况的另一具体且非限制示例,如果文件同步会导致创建在同一目录中创建具有相同名称的文件,则可将这两个文件中的一个置于“挂起区域”,如特定目录中,或在某种程度上与其它文件区别开来以便不违反该约束。这一动作然后可用“冲突”或同步***的其它类似元素来注明,并且可通过某种手段来通知用户,可能是同步文件的用户,存在这一冲突。例如,用户可看见对话框、接收“冲突电子邮件”等等。用户然后能够通过一个或多个动作,如对两个文件中的一个重命名、将一个文件移至不同目录、删除一个文件等,来解决该冲突。当用户的变更,即重命名的文件、移动的文件、删除的文件等,然后被同步回到第一端点时,两个端点然后可具有同一目录中带相同名称的同一组文件等等,并且可以不违反相关约束。
尽管如先前所介绍的那些技术可使得数据能在不违反约束的情况下被同步,但这些技术也可具有其自己的限制。一个可能有问题的限制是变更数据以确保遵循约束可能会导致其中同步数据仅能够利用或使用在所有端点上共同或可用的功能的情况。例如,即使一个或多个端点支持使用各种各样字符的目录或文件名,如果目录或文件与仅支持更受限的字符集的另一端点同步,则这些端点也可能无法使用具有许多这样的字符的目录或文件。在另一示例中,尽管不存在重复文件的要求在文件位于单个文件***中时可能是常见的,但这一要求可能不适用于同一目录和文件数据的其它表示。作为这种情况的一个具体示例,如果如以“web投影”使用如HTML等网页来表示目录结构,并且用户具有通过点击网页上的链接来下载文件的能力,则可允许具有重复名称的文件,因为在此表示中,“文件”可以仅由HTML和链接构成,并且没有任何理由要求HTML和链接不能包括某种重复。
这些种类的限制在改进、进展或一般地改变同步数据的端点或所同步的数据时也可能是有问题的。像这样的限制会减少可改进或改变同步***的方式, 或者可减少可参与数据同步的端点。例如,尽管同步数据的初始端点可具有相同或相似的约束,即,比如,可能***的第一实现仅在运行操作***的特定版本的计算设备上运行,则在稍后有可能希望扩展该同步***以在计算设备的各种其它操作***或各种其它类型的计算设备的一个或多个上运行。例如,有可能希望使得具有可能较少计算能力、相应地能够支持可能较少功能的计算设备(如移动电话)能参与数据同步,而非仅仅在“台式”或“膝上型”计算设备上运行。然而,遵循添加此类端点所要求的新约束则有可能要求所同步的数据在范围、功能等方面更受限。(或者,在新端点包括解释和同步端点之间所同步的完全或原始范围的数据所需的功能之前,可能无法在同步***中包括新的附加端点。)
此外,除了有可能降低所同步的数据的保真度或能力之外,此类改变还可能要求修改所有参与端点以在“同时”或在与其它端点同步之前支持新要求。可能有这样的要求以便例如较老的端点不会尝试将数据同步到不能支持或使用该数据的新端点。在某些同步***中,以此方式改变或更新所有端点可能是不切实际或不可能的,并且因此,在某些情况下,可能不会做出或可能以比本来所需的更低的频率做出可能广泛有用的更新。
在某些实现中,有可能通过将“同步数据”“体现”到“域数据”上的过程来解决这些问题中的至少某一些。如此处所描述的,一般而言,将同步数据体现到域数据上可以是将例如在端点之间同步的数据映射到可在特定端点上使用的数据的表示的过程。“同步数据”因而将包括在端点之间传送的数据的至少一部分,而“域数据”将包括同步数据如投影或存在于端点上的表示。
仅作为一个示例,考虑通过在端点之间传送XML文档来同步目录和数据文件的实现。在至少一个示例中,这一XML文档可被认为包括同步数据。在一个非限制示例中,目录和文件元数据(如目录或文件名、与目录或文件相关联的日期和时间等等)有可能可以用XML文档来表示。在某些情况下,实际文件数据可以从XML文档内引用,但是不能作为XML文档本身的一部分来传输。在其它情况下,文件数据可被包括在XML文档中。
在这一示例中,XML文档和任何引用的文件信息可包括同步数据,并且可被体现到诸如实际目录和文件等实际文件***对象或文件***元素上,后者 进而包括域数据。体现同步的XML文档的过程可部分地通过修改(包括创建、更新和删除)文件***中的实际目录和文件来实现。即,在至少某些实现中,可执行代码可解释同步的XML文档的内容,然后创建、更新、删除或以其它方式操作一个或多个目录和文件。(应当注意,一般而言,如此处所使用的,如“修改域数据”等短语应被解释为包括修改现有域数据,并且还包括对于域数据所采取的其它动作,包括创建新域数据和删除现有域数据。)
在这一示例中,以及在许多其它实现和示例中,包括在不同步目录和文件或者在其它方面不同的实现和示例中,先前介绍的问题中的至少某一些以及其它问题可至少部分地通过将同步数据体现到域数据上的方式来解决。仅作为一个示例,为解决因对目录或文件名所支持的字符的差别而引起的不兼容性,可在与一个文件***一起使用时将同步数据体现到具有特定名称的目录或文件上,并且在与另一文件***一起使用时可将其体现到具有不同名称的目录或文件上,而非修改目录或文件本身(如在同步数据中所表示的)。即,在仅一个非限制示例中,包括在同步数据中的目录或文件名在该目录或文件名对特定文件***有效时可被体现到目录或文件上并用作域数据的一部分。然而,当包括在同步数据中的目录或文件名对特定端点无效时,该目录或文件名可被体现到具有对该特定端点有效的不同名称的目录或文件上。
此外,在至少某些实现中,当域数据变更时,即,在前一示例中,当实际目录或文件变更时,并且当该变更被同步到其它端点时,域数据可用以下方式被映射回到同步数据上:在某些情况下,作为将同步数据体现到域数据上的一部分而做出的对数据的变更不被传输、同步到其它端点或不对其它端点可见。例如,假定由于将同步数据体现到域数据上的过程,文件具有不同于在相关联的同步数据中指定的名称的名称。对该文件的变更,比如对该文件的内容的变更,可能需要被同步到其它端点。然而,该文件名的变更,即在体现过程期间做出的变更,可能不连同更新的文件数据一起同步。取而代之的是,作为为该文件生成同步数据的一部分,可确定该文件名由于体现过程而不同。在这一情况下,例如,但非限制,在同步数据中指定的原始名称可用作所生成的同步数据的一部分来代替特定端点上的盘上(或存储器中)的文件的名称。也可实现用于将域数据映射到同步数据上的各种类似的或其它机制,并且在本文的别处 更详细描述。
一般而言,换言之,在实现同步***时可能引发的一种困难是确保在端点之间同步的数据在不同端点上“收敛”到同一状态。即,尽管在特定端点上做出的变更可导致一个或多个端点上的数据在某一段时间内不同,但是这一变更应在同步端点之间以使得最终所有端点都将具有相同的变更并收敛到同一状态的方式来传送。
存在于一个或多个端点上的约束会使得收敛到公共状态变得更困难。例如,可以回想先前介绍的其中端点可同步来自另一端点的、具有相同名称的文件来作为已存在于该端点上的文件的示例。如果与不允许在同一位置存在具有相同名称的文件的文件***一起使用,则端点可能会试图通过对文件之一重命名来解决这一潜在问题。重命名的文件然后可被同步到其它端点。然而,如果多于一个端点独立地变更了同一文件的名称,则会引发其中对该文件名的变更在多个端点上被重复做出的情况,并且该变更可能会发散且不会到达公共状态而不是收敛到公共状态。
在某些实现中,这些问题可至少部分地通过将同步数据与域数据分离然后将同步数据体现到域数据上来解决,如此处所描述的。在这些实现中,可以不要求同步数据遵循为该域数据定义或要求的同一约束。这又使得同步数据更容易在所有端点上收敛到公共状态。将同步数据体现到域数据上的过程然后可用作应用域数据所要求的约束的一部分,以及使用经更新的同步数据来传递对域数据的至少某些变更的一部分。
最后,可能有用的是理解在至少某些实现中,包括先前介绍且此处描述的那些在内的至少某些问题的存在对于被设计成相对更“通用”的同步技术(表现在这些同步技术被设计成在各种各样不同类型的数据上操作)是更常见的。即,在某些情况下有可能在操作来仅同步特定类型的数据的同步***中包括对与该特定类型的数据相关联的约束的特定处理。然而,也可能更难或更不需要随可同步各种各样数据类型的通用同步技术来包括这样的特定处理。结果,如此处所描述的包括在同步数据和域数据之间映射在内的这些技术可提供在与通用同步技术一起使用时尤其有用的好处。
现在转向图1,所示是其中可同步并共享数据的示例性***100。示例性 ***100包含端点A 110、端点B 120和端点C 130,以及示例性通信装置115。图1的此描述可参考其它附图来进行。然而,应当理解,参考图1所描述的各元素并不旨在限于用于参考其它附图所描述的元素。另外,尽管图1中的示例性图示表明特定元素,但在某些实现中,并非这些元素全部都存在,并且在某些实现中,可存在其它元素。
一般而言,共享或同步关系可存在于两个或更多端点之间。特定的共享关系一般可涉及包括一个或多个数据项,或简称项的一组数据。当对一个项做出至少某种变更时,所变更的项或仅仅该变更本身可被同步到同步关系中的(多个)其它端点。
尽管数据的同步可以用各种各样的方式并使用各种技术和方法来实现,但在至少某些实现中,数据的同步可以至少部分地通过将特定数据添加到使用如RSS(“真正简单聚合”或“丰富站点概要”)或Atom那样的可能各种接受的协议提供的数据订阅源来实现。例如,在采用由仅彼此通信的两个端点构成的拓扑的示例性实现中,如至少一个示例中可能是端点A 110等发布者可发布包含某一或某几种类型的信息的RSS或Atom订阅源。在可能一个示例中,该订阅源可包括表示目录和文件的数据。在又一示例中,订阅源可表示、包含或引用任何其它数据。
诸如一个示例中可能是端点C 130等订阅者可订阅第一端点所提供的订阅源,并且可在例如第一端点添加新文件、修改现有文件等时得到通知。另外,订阅端点可发布其自己的订阅源,该订阅源具有在原始发布者的订阅源中所提供的相同的数据,并且还具有订阅者所做出的变更或添加。原始发布者然后可订阅该第二订阅源。通过这些互相订阅,任一端点所做出的变更可被反映在两个端点所维护的数据中。此外,多个端点可通过订阅另一端点所提供的订阅源中的至少一个并类似地发布其自己的订阅源来参与并共享相同的数据。
在至少某些实现中,订阅源中的同步信息以及至少特定端点在交换数据时要遵循的过程可以与同诸如“简单共享扩展”(SSE)等协议相关联的那些信息和过程相同或相似。SSE一般可被理解为定义对如RSS和Atom等订阅源协议或其它订阅源协议或文档的扩展或要与这些协议一起使用的附加数据,其中这些扩展涉及可在使用订阅源传输或同步数据时使用的信息。在某些情况下, 包括SSE信息的RSS、Atom或其它类型的订阅源可被称为“SSE订阅源”。
诸如SSE等协议或另一同步协议也可定义要由端点所遵循的过程,以使订阅源中的同步信息符合特定组织,且因此可由同步关系中的其它端点读取和使用。仅作为一个示例,SSE指定了可对SSE订阅源中的项存在的特定同步信息。当创建新项时,端点可负责确保适当的SSE信息与该新项相关联并且该SSE信息是在订阅源中的正确位置中提供的、使用正确的标识名称等等。像SSE这样的协议还可定义可要求在例如端点修改现有项、删除现有项、并入来自其它端点的变更等时包括特定数据的其它过程。
在其中两个端点都发布和订阅的共享关系中,每一端点可对项做出“本地”变更,其中“本地”变更可以是在特定端点上出于某种原因而做出的变更,包括由诸如用户、自动过程等实体做出的变更。然后,所共享的项因而在两个端点上保持相同,本地变更可作为订阅源的一部分来发布。另一端点可维护其自己的一组相同的项,并且因为其订阅了订阅源,可将使用该订阅源展示的变更与其所维护的该组项“合并”。另一端点也可做出其自己的本地变更,该本地变更然后在被发布后可被第一端点合并或并入。
作为一个具体示例,端点A 110(或端点B 120,或包括未示出的那些在内的某一其它端点)可参与与比如端点C 130的共享或同步关系。端点A可使得比如包含项数据和订阅源同步数据的Atom订阅源可用。端点C可访问该订阅源、将该订阅源中的变更并入或合并到其自己的项存储中、并进而使得其自己的订阅源可用。端点A然后可订阅由端点C提供的订阅源,并合并端点C做出的变更。
在某些实现中,共享或同步关系中的端点本身可生成或更新在同步关系中使用的订阅源。例如,用户可使用与端点A 110相关联的应用程序来修改某一数据,该数据进而由端点A可能与端点C 130共享和同步。为使用户所做出的变更对端点C可用,端点A可能需要用变更的项信息以及变更的订阅源同步信息来更新该订阅源。在使用SSE的实现中,订阅源中的订阅源同步信息可例如通过修改XML文档来更新,该XML文档通过特别地用新版本号来更新特定“版本”属性、通过经由创建新XML元素来修改与该项相关联的更新历史等来体现该订阅源。
如此处所使用的,同步数据一般包括在端点之间交换、传输或传送的数据。在一个具体且非限制示例中,当使用像SSE这样的协议来在端点之间同步信息时,该同步数据可包括包含SSE信息的订阅源。这一订阅源本身可包括一个或多个订阅源项(或订阅源数据项),这些项在某些情况下可被称为“同步数据项”。在其它实现中,同步数据项(以及一般意义上的同步数据)可用各种其它方式,包括不使用SSE来表示。
在某些实现中,并非所有端点都必须既发布订阅源又订阅相应的订阅源。例如,某些端点可以仅发布但不订阅与某个特定数据集相关的订阅源。这些端点可发布关于该端点所做出的本地变更的信息,但是不并入任何其它端点做出的变更。可取决于特定场景或情形的要求来构想或实现发布和订阅动作的任何其它安排。还要注意,在某些实现中,特定一组两个端点如果共享多于一组数据的话可具有多于一种共享关系。在其它实现中,共享关系可被定义成包括在两个端点之间共享的所有数据,即使其包括多于一组或一种类型的数据。此外,尽管在某些实现中共享关系可能存在于两个端点之间,但也有可能是特定一组项与任何数量的端点共享并同步。这可通过端点的各种排列或拓扑来实现。仅作为一个示例,一组某一数量的端点可以与一特定端点同步,并且该特定端点然后可以与不直接与该组原始端点同步信息的一个或多个附加端点同步。在此类情况的至少某一些中或在其它情况中,信息可以在同步端点的“整个”网格上同步。
端点A 110和端点C 130在***100中被示为由示例性通信装置115连接。这一示例性通信装置可被解释为包括可用于传送数据的任何装置,包括任何类型的网络或任何其它种类的传输,包括像压缩盘(CD)或闪存驱动器这样的物理介质的传输。端点还可直接连接,如可由例如端点A 110和端点不120之间的连接所示的。
在端点之间共享并同步的信息可用各种方式来存储并存储在各种位置。在至少一个实现中,端点可将同步的数据本地地存储在同一计算设备上,或远程地存储在一个或多个其它计算设备上。在某些情况下,这一存储可由一个或多个盘驱动器或磁或其它存储设备来具体化,或由可用于存储数据的任何其它机制来具体化。当远程地访问部分或全部同步的数据时,该数据可例如使用网络 或其它通信手段来访问。
在某些实现中,端点可使用诸如计算机实现的数据库等数据存储或其它存储机制来存储共享的数据,并且可动态地或在特定时间生成订阅源。在同一或其它实现中,端点可通过存储文件***中的文件,可能在RSS订阅源的情况下通过存储XML文件等来存储订阅源本身。
本***中所示的每一端点可表示任意数量的通用或专用计算机,包括台式计算机、服务器计算机、膝上型计算机、工作站计算机、移动或蜂窝电话、连接的个人数字助理(PDA)等等。在至少某些实现中,端点可由包括以下参考图5所讨论的示例性计算环境在内的计算环境来实现。
现在转向图2,所示是一示例性概括操作流程200,其包括可在端点上并入同步数据,包括将同步数据体现到域数据上时执行的各种操作。图2的以下描述可参考其它附图来进行。然而,应当理解,参考图2所描述的操作流程并不旨在限于用于参考其它附图所描述的元素。另外,尽管图2的示例性操作流程指示了特定执行次序,但在一个或多个替换实施例中操作可被不同地排序。此外,尽管该示例性操作流程包含多个步骤,但应认识到在某些实现中,这些操作中的至少某一些可被组合或同时执行,并且在同一或其它实现中,可以不执行某些步骤。
在操作210的示例性实现中,可以通过各种手段从某一位置,包括从另一端点获得同步数据。例如,在使用一个或多个同步数据订阅源的实现中,诸如在使用SSE的实现中,操作210的一个实现的至少一部分可包括检索包括项信息以及订阅源同步数据元素的订阅源文档。这一订阅源文档可由执行示例性操作流程200的至少某些操作的端点通过例如执行HTTP GET请求,或通过某一其它网络或其它数据检索操作来检索。在同一或其它实施例中,同步数据可被传递或提供给端点。在某些实现中,同步数据可由像传入订阅源422或传入订阅源N 424这样的订阅源来表示,这两个传入订阅源都在以下参考图4描述。
在操作215的至少一个实现中,包括可通过执行操作210来获得的数据在内的所获得的同步数据可与端点维护的同步数据合并或并入其中。在至少某些实现中,所获得的外部或外同步数据与本地同步数据的合并可使用一种或多种同步技术来执行。此类技术在某些实现中可标识至少某些潜在同步问题。例如, 可标识的一种类型的问题可在多个端点独立地修改了一特定项且可能需要进一步审阅或处理以便例如当在另一个端点上保存在一个端点上做出的变更时该变更不被盖写或丢失的时候发生。在某些实现中,合并操作可由与同步模块420相同或相似的同步模块来执行或与该同步模块相关联,并且可导致传入同步数据与已经使用同步数据存储模块430存储或变得可用的同步数据的并入或合并,这两个模块都在下文中参考图4来描述。
例如,在使用SSE的实现中,操作215的至少一个实现可包括使用用于合并订阅源的SSE技术将传入订阅源与本地订阅源合并。例如,在某些示例性实现中,作为操作210的一部分获得的同步数据可以是“外订阅源”(foreignfeed),本地执行的项更新可在使用像同步数据存储模块430这样的实体维护的本地订阅源存储上操作,等等。例如,但非限制,在至少一个实现中,本地维护的订阅源文档可在操作215的执行期间更新,以使本地维护的订阅源文档并入在传入或外订阅源中表示或包含的变更中的至少某一些。
尽管操作215在某些实现中可合并同步数据并执行至少某些附加处理,如标识可使用订阅源中的订阅源同步数据来确定的冲突,但在至少某些实现中,可以不执行特定的其它操作来作为操作215的一部分。可以不在操作215的至少某些实现中执行的一个操作可包括将同步数据体现到域数据上的过程,该过程在此类实现的至少某一些中可以由示例性操作流程200中的其它操作,包括操作230来执行。
在完成了操作215的实现之后,可认为从另一端点获得的同步数据中所包含的变更或修改已被并入并体现在本地同步数据中。即,例如,在另一端点上做出的且在操作210中获得的同步数据中传送的对项的变更现在已经被并入到相应的本地同步数据中。仅作为一个具体示例,如果在操作210中获得的同步数据表示目录和文件,且对现有文件的变更被表示在所获得的同步数据中,则操作215的执行已将该变更并入同步数据的本地表示中。类似地,可以实行用于合并数据的同步协议或技术所提供的其它功能。例如,如果合并过程可确定项何时在多个端点上被独立修改(这在至少某些情况下是SSE所拥有的能力),则可标识或标记该项。例如,在使用SSE的实现中,该项可被标识为SSE冲突。
然而,尽管更新了本地同步数据,该该数据可能尚未被体现、映射或以其它方式使用来更新相应的域数据,包括用户、进程或其它实体通常可能使用的域数据。在同步目录和文件信息的示例中,尽管可能已更新了目录和文件信息的本地同步数据表示,从而比如对现有文件的变更现在已经被表示在本地同步数据中,但是这些变更也可能尚未被体现到比如诸如目录和文件等实际文件***对象或文件***元素的域数据上。
因此,在操作220的至少一个实现中,可确定是否还剩下任何同步数据项要处理来作为将同步数据项体现到域数据项上的一部分。如果还剩下项要处理,则示例性操作流程200可如下所述前进到225。如果没有更多项要处理,则该示例性操作流程可结束。在至少某些实现中,在操作220的第一次执行期间,可能尚未处理本地同步数据中表示的所有数据项。例如,在使用SSE且其中比如在本地同步数据中表示了10个数据项的实现中,在第一次执行操作220时可能剩下10个项要处理。在其它实现中,通过使用各种过滤器或其它手段,仅选自本地同步数据的特定项可被标识来处理。在某些实现中,在操作220的后续迭代期间,可认为先前处理项不再需要处理。在同一或其它实现中,已经被处理的项可被确定为需要附加处理,即,例如,在某些情况下一个项可被处理一次以上。同步数据项可出于各种理由而被确定为需要附加处理,包括作为将同一或其它同步数据项体现到域数据项上的结果或其一部分。
在操作225的至少一个示例性实现中,本地同步数据中的一个或多个项可被标识为将在操作230的后续执行中被进一步处理的项。在某些实现中,一次仅可标识单个项。在其它实现中,包括在可将多个同步数据项体现到单个域数据项上的那些实现中,当执行操作225时可标识多于一个同步数据项。
仅作为一个示例,在同步目录和文件信息的一个实现中,每次执行操作225时,可标识本地同步数据中的一个新目录或文件。在同一或其它目录和文件实现中,可在操作225的某些执行中标识多个项。例如,当标识目录时,操作225的一个实现还可标识或试图标识位于该目录中的文件。这可例如使得文件在其父目录被体现到域数据上时也能被体现到域数据上。
最后,在操作230的一个或多个实现中,可将操作225中所标识的(多个)同步数据项体现到一个或多个域数据项上。一般而言,可通过使用同步数据项 中包括的至少某些信息来创建或修改相关联的域数据项而将一个或多个同步数据项体现到一个或多个域数据项上。操作230的实现和创建或修改域数据项的具体方式以及如何使用与同步数据项相关联的数据或使用什么数据一般至少部分地取决于同步数据项和域数据项的特性。此外,在至少某些实现中,操作230可至少部分地由诸如示例性体现模块440或体现模块442等体现模块来实现,这两个模块在下文参考图4来描述。
仅作为一个示例,考虑其中同步数据项表示文件的情况,该同步数据项包括描述文件元数据的文本且位于XML订阅源文档(也可包括SSE信息)中,并且该文件的内容也位于该XML文档(可能在内容是文本的时候)中或被表示为二进制数据且位于订阅源文档中的数据所引用的某一其它位置。在这一情况下,在至少某些实现中,对应于该同步数据项的域数据项可以是文件***中的实际文件。在这一示例中,将同步数据项体现到域数据项上可涉及创建具有同步数据项中所提供的或其所引用的文件元数据和内容的新文件,这可能使用文件***或操作***提供的应用程序编程接口(API)来进行。如果这一文件已存在,则体现同步数据项可涉及更新与该文件相关联的信息,包括文件元数据或文件内容,以使该文件与同步数据项相一致。对于其它类型的数据、其它同步数据表示、其它域数据项等,将同步数据项体现到域数据项上可不同地进行。
尽管这些体现步骤在至少某些情况下可能是足够的,但在其它环境中,可能需要附加处理来将同步数据项体现到域数据项上。此类其它情况可包括其中在与同步数据相关联的功能、支持或表示和与域数据相关联的功能、支持或表示之间存在差别的各种环境,包括先前介绍或讨论的至少某些示例中的环境。例如,这一差别的仅一个示例(也是先前所介绍的)可以是当同步数据中所允许的有效字符集不同于或大于对应的域数据中所允许的有效字符集的时候。
当这些差别存在时,可能需要做比仅仅将同步数据项的元素传输或复制到对应的域数据项更多的事情。例如,在某些情况下,可能需要修改来自同步数据项的信息以使对应的域数据项有效。
此外,对数据的这一修改可能需要以使得同步数据项不被修改且在对域数据项的变更稍后被用于更新或生成在将变更同步到其它端点时使用的新同步 数据项时也不被修改的方式来执行。以此方式变更域数据项有可能例如使其它端点甚至在特定端点只能支持例如更有限的表示、更有限的功能等时也能完全使用同步数据。
在修改域数据时或在稍后生成供传送到另一端点的同步数据时可修改域数据而不修改同步数据的一种方式可使用记录对一个或多个特定同步数据项,域数据项如何被修改或变更的某种数据结构。这一数据结构然后可在生成同步数据时使用,这可能用于标识(多个)原始同步数据项或“倒退”可作为将同步数据体现到域数据上的一部分做出的一个或多个变更。
仅作为一个示例,再次考虑其中同步数据表示目录和文件,且在特定端点上存在各种限制或不兼容性的一个或多个的情况。在这一示例中,将目录和文件同步数据体现到域数据表示的一部分上可涉及确定同步数据是否以某一方式与域数据表示所要求的约束不兼容或违反该约束,且如果是,则修改一个或多个域数据项,并记录做出了什么样的一个或多个修改。具体地,例如,假定在同步数据中传送的文件具有使用在特定文件***上不支持的字符的名称。体现这一同步数据项的一部分可涉及例如创建具有不同名称的实际文件,并记录域数据项(同样是该文件)如何变更。这一记录的数据接着稍后可例如如以下参考图3更详细描述地用作确定如何生成或更新供传送到其它端点的同步数据项的一部分。
如先前所介绍的,当将同步数据体现到域数据上时,取决于与同步数据、域数据、其上执行体现的一个或多个端点等相关联的特性,可确定对域数据的各种修改是必要的。当一个或多个修改是必要的时候,将同步数据体现到域数据上的一部分可包括修改域数据以解决此类不兼容性、实施约束等等。
在目录和文件同步数据的示例中,且在各种其它示例中,在体现期间可出现可能需要修改域数据的其它情形。这些情形中的至少三个可在域数据包括以一个或多个分层结构组织的信息的时候,但(在至少某些实现中,包括在使用某些形式的SSE的实现中)同步数据仅包括数据的“平面”列表而没有分层结构的固有概念的情况下出现。在这一环境中,或在其它环境中,可表示分层结构的一种方式可使用每一同步数据项上的一个或多个附加数据字段来存储该项的“父项”。采用这一实现,定位目录中的文件的同步数据可在特定数据字 段中具有数据,该数据包含例如目录的名称、目录的ID、或使得能从非分层数据表示中推断分层组织的某种其它信息。
尽管这一实现可启用分层数据表示,但也可能会使在将同步数据体现到域数据上时需要修改域数据的不一致性、不兼容性或其它情况出现。这些问题可包括孤立项、重复、循环或其它问题。一般而言,这些问题可以是可在诸如在操作215中合并同步数据的技术等底层同步技术独立于所同步的数据的意义或使用而存在时发生的至少某些问题的具体示例。即,这些问题可存在于当底层同步技术不一定支持或了解存在于域数据中的域专用关系时的至少某些实现中。如先前所解释的,一般而言,这种问题中的至少某一些可通过在将同步数据体现到域数据上时修改域数据来解决。
例如,在至少某些实现中,可要求文件***中的文件位于目录中,且因此可要求该文件具有“父项”。不具有父项的文件(或目录)可被认为是“孤立项”。尽管操作***可在用户或进程直接与文件***对象交互时阻止创建孤立文件或目录,也有可能在同步目录和文件信息时创建孤立项。例如,假定一个用户向目录添加文件而在另一端点上的另一用户在同步新添加的文件之间删除同一目录。如果第二用户然后同步且因此接收到新添加的文件,则该新添加的文件将是孤立项,因为其父目录不再存在于第二端点上。
孤立文件***对象的问题可用各种方式来解决。在一个示例中,孤立文件可在其同步数据被体现到域数据上使得该域数据项(实际文件)被置于或位于文件***中诸如特定目录等“保持区域”或某一特定位置时移动。这一变更可以仅从体现同步数据的端点的观点来做出。即,同步数据本身可以不变更,并且从使用同一同步数据的其它端点的观点来看,目录仍可被删除且新添加的文件仍可存在。此外,不同的体现过程,比如可能是用于web投影的将文件存储在数据库中的平面列表中并且仅使用目录作为用于标记文件的名称的体现过程,可能完全不将父目录的缺乏认为是关键或问题。
在某些示例中,如在其中域数据包括实际文件***或具有其它类型的域数据的示例中,也可通知用户特定文件被孤立。用户然后能够采取可能决定性地解决该不兼容性的某一特定动作,如将该文件移至未删除的目录、删除该文件等等。用户所采取的这一动作一般可被认为是对域数据做出的本地变更,且由 此,该变更(或变更的域数据)然后可被包括在经更新的同步数据中并同步到其它端点(如在以下参考图3更详细解释的)。
另一潜在问题可在例如在多个端点上创建位于同一目录中的具有相同名称的文件时出现。当同步这一文件时,同步数据然后可指示在同一目录中存在具有相同名称的文件,这是许多文件***不允许的。(然而,如同孤立文件的示例一样,具有相同名称的文件对某些类型的域数据可能不是问题。)在文件***体现的情况下,可用各种方式来解决重复文件的问题。在一个示例中,可以用某种方式,可能通过选择具有较高SSE标识符的项,来选择重复之一,然后将其移至如特定目录等保持区域。结果,文件***然后可在原始目录中包含一个文件并在另一目录中包含具有相同名称的另一文件。此外,如前一样,用户、进程或其它实体然后能够评估文件并确定是否应采取任何进一步的动作。这些动作可包括对一个或两个文件重命名、将一个或两个文件移至不同的位置、删除文件等等。并且最后,如前一样,对域数据的这一用户修改然后可在至少某些实现中导致对相应同步数据的修改以及一个或多个变更向其它端点的同步。
又一潜在文件***问题是“循环”的问题,即,当在一个端点上例如“目录A”等一个目录成为例如“目录B”的子项,而同时或至少在两个端点同步数据之前,在另一端点上“目录B”成为“目录A”的子项。文件***可要求文件***分层结构中的所有文件***对象或文件***元素最终从根对象或元素传下来,而循环违反了这一要求。解决该不兼容性的一种方式可以是将构成循环的文件***对象移至保持区域或特殊目录。如前一样,可向用户通知这一变更,并且用户然后能够可能通过在保持区域中重定位该文件来决定性地解决该问题。
在另一文件***示例中,某些文件***可使得文件能包括多个或“替换”数据“流”或数据集,而非仅一个数据流或数据集。如果没有用于操作包括替换流的文件的过程,则可实现同步***以使其仅支持具有单个数据流的文件,即,不允许还包含替换流的文件。然而,在其中同步数据被体现到域数据上的实现中,即使对不本机地支持具有替换流的文件的端点也可支持或同步此类文件。例如,在支持具有替换流的文件的端点上,仅可创建还包含替换流的单个 文件。然而,在使用不支持替换流的文件***的端点上,同步数据中的替换流信息可被体现到附加且单独的文件上。(此外,在生成同步数据时,如下参考图3所述,该附加且单独的文件可用于生成表示具有替换流的单个文件的同步数据。)
同样应当注意,尽管许多先前(以及后续)的操作和其它元素是参考讨论端点之间的目录和文件的同步的具体示例来解释的,但此处所描述的技术不限于此类实现,并且适用于各种各样的其它用途,包括对各种各样其它类型的数据的同步的使用。
仅作为另一类型的同步数据和域数据的一个示例,内容管理或web日志(博客)***可同步顶层文章或公告,以及关于每一文章或公告所做出的评论。在这一示例中,公告或评论的文本可被表示为如可使用SSE的RSS订阅源中的项。此外,在例如文章和评论之间可存在各种约束。例如,至少在表示在用户界面中时,每一评论可能需要与顶层文章或公告相关联。当体现同步数据时,则不与顶层文章或公告相关联的评论可被标记以供进一步审阅并且可能不被显示。
其中将同步数据体现到域数据上可能有用的同步***的另一示例可包括同步一种或多种特定语言的信息的示例性***。在这一实现中,将这一同步数据体现到使用某种其它语言的端点上的域数据上的一部分可包括将信息从一种语言翻译成另一种语言的信息。类似地,以某种其它语言提供的信息可在体现过程中被翻译成第一语言的信息。仅作为这一实现的一个具体示例,用户可使用北印度语来创建文档。该文档可被同步到由阅读英语的用户操作的某一另一端点。作为将该文档体现到第二用户的端点上的过程的一部分,该文档中的信息可从北印度语翻译成英语。可能在同一实现中,由第二用户用英语信息创建的文档可被同步到第一用户。然后,作为将该文档体现到阅读北印度语的用户的端点上的一部分,该文档中的信息可从英语翻译成北印度语。
现在转向图3,所示是一示例性概括操作流程300,其包括可在生成供传送到其它端点的同步数据,包括使用先前体现的域数据来生成同步数据时执行的各种操作。图3的以下描述可参考其它附图来进行。然而,应当理解,参考图3所描述的操作流程并不旨在限于用于参考其它附图所描述的元素。另外, 尽管图3的示例性操作流程指示了特定执行次序,但在一个或多个替换实施例中操作可被不同地排序。此外,尽管该示例性操作流程包含多个步骤,但应认识到在某些实现中,这些操作中的至少某一些可被组合或同时执行,并且在同一或其它实现中,可以不执行某些步骤。
参考图2先前描述的操作解释了如何例如从另一端点获得同步数据,如何将该同步数据并入本地同步数据中并然后体现到域数据项上。这些操作可使得特定本地端点能使用在另一端点上做出的变更。然而,考虑到隔离,参考图2描述的操作未使其它端点能用在本地端点上做出的对域数据项的变更来更新其数据。例如,同样使用非限制目录和文件示例,假定用户可能通过在本地应用程序中打开文件、做出变更、然后保存该文件来更新文件。在某一后续时间点,生成反映该文件的变更的经更新的订阅源以使其它端点然后能够将该变更并入其自己的该文件的本地副本中是有用的。对示例性操作流程300的一种使用可以是帮助通过生成然后可被同步到其它端点的同步数据来实现此目标。
在操作310的示例性实现中,可出于各种原因中的一种或多种来发起适用于传送到其它端点或变得对其它端点可用的同步数据的生成。在某些实现中,新同步数据可在经过了某一时间间隔之后周期性地生成。在同一或其它实现中,新同步数据的生成可在一个(或多个)域数据项本地地变更时发起,或可出于某种其它原因发起。
在操作315的至少一个示例性实现中,可确定是否还剩下任何域数据项要处理。如果还剩下域数据项要处理,则示例性操作流程300可如下所述前进到操作320。如果没有更多项要处理,则该示例性操作流程可结束。在某些实现中,所有域数据项可由示例性操作流程300来处理,而在其它实现中,仅域数据项的某一子集,例如可能仅那些已变更的数据项,或仅那些已变更或涉及已变更的数据项的数据项,可被处理。
在操作320的示例性实现中,一个或多个域数据项可被标识为考虑在生成经更新的同步数据时使用。在某些实现中,每一域数据项可被单独考虑,且因此在操作320的每次执行期间仅可标识单个域数据项,而在其它实现中,可标识多于一个域数据项,然后可能将这些数据项与其它标识的域数据项一起考虑。
在操作325的至少一个实现中,可确定是否有必要为操作320中标识的域数据项生成任何同步数据项。如果生成一个或多个同步数据项是必要的(或者可能是必要的,但是在此操作期间不能做出确定),则该操作流程可前进到操作330。如果不需要同步数据项,则该操作流程可前进到操作315。是否需要一个或多个同步数据项可用各种方式来确定。例如,在其中处理所有域数据项的实现中,该确定可至少部分地通过确定所标识的域数据项自从它们上次被同步以来是否被修改来做出。如果是,则有必要生成一个或多个同步数据项,以使本地做出的修改可对其它端点可用。例如,如果诸如实际文件等域数据项被更新或变更,则该操作可确定应对域数据项生成一个或多个同步数据项。
在某些实现中,作为将同步数据项体现到域数据项上(诸如可例如由先前参考图2描述的示例性操作230所实现的)的一部分所做出的修改可能不包括将导致新同步数据的生成的变更。即,例如,新同步数据项可以仅在用户或其它实体对域数据项做出变更时才是必要的。从另一观点考虑,可以理解作为将同步数据体现到域数据项上的一部分对域数据项的修改在某些情况下可以仅导致对域数据项本身的变更。这一变更可以不对其它端点可见或不被同步到其它端点,因此不需要生成新同步数据。
最后,在操作330的至少某些示例性实现中,可为例如在操作320中标识的一个或多个域数据项生成一个或多个同步数据项。在某些情况下,如在所标识的域数据项未作为将同步数据体现到域数据项上的一部分而被修改的情况下,该操作可通过使用与域数据项相关联的数据来生成相应的同步数据项来实现。对域数据项本地地做出的变更然后可被反映在所生成的同步数据中,并且可被同步或传送到其它端点。例如,当由实际文件具体化的域数据项被例如本地端点上的文件的用户更新时,该变更可被反映在新生成的或经更新的同步数据项中。在使用SSE和订阅源文档的实现中,该同步数据项可至少部分地通过执行SSE更新操作来生成,SSE更新操作例如可涉及更新同步数据项中的项信息以包括对文件的变更以及更新与同步数据项相关联的版本标识符。
在其中所考虑的一个或多个域数据项作为将同步数据体现到域数据项上的一部分而被修改的情况下,操作330的至少某些示例性实现还可确定所生成的同步数据应如何反映所接收到的原始同步数据且可能不必反映域数据项所 包括的数据。即,作为将同步数据体现到域数据上的一部分而做出的变更可以仅在特定端点上本地地可见,并且可以不被同步到其它端点。取而代之的是,同步到其它端点的数据可以是最初从其它端点接收到的数据(除了在体现了域数据之后本地地做出的任何变更之外)。
在某些实现中,在将同步数据体现到域数据上时所记录的数据可用于确定特定本地变更是否应被包括在所生成的同步数据中。这一记录的数据还可用作生成同步数据项的一部分,例如,它可替换与在将域数据项体现到同步数据项上时所做出的变更相关联的数据或可代替该数据来使用。
例如,再次考虑其中文件名在体现期间被修改以使实际文件具有符合特定文件***的要求的文件名的情况。在这一示例中,在生成同步数据项时所考虑的域数据项可具有与最初接收到的或存在于存储的同步数据中的文件名不同的文件名。如果该不同文件名是用户、进程或某一其它实体对域数据项(文件本身)做出的变更的结果,则该变更可能需要同步到其它端点且因此是所生成的同步数据项的一部分。然而,在其中文件名作为将同步数据项体现到域数据项上的一部分而被变更的情况下,可以不使该变更成为所生成的同步数据项的一部分。取而代之的是,例如,所传送并存储在本地同步数据中的原始文件名可被用作经更新的同步数据项的一部分。
现在转向图4,所示是一示例性***400,其示出了参与同步关系并包括用于将同步数据体现到域数据上的功能的端点的一个实施例。图4的此描述可参考其它附图来进行。然而,应当理解,参考图4所描述的各元素并不旨在限于用于参考其它附图所描述的元素。另外,尽管图4中的示例性图示表明特定元素,但在某些实现中,并非这些元素全部都存在,并且在某些实现中,可存在其它元素。此外,尽管该示例性图示示出各元素例如是特定端点或计算设备的一部分或由其包含,但应当注意,与特定端点相关联的一个或多个模块也可由一个或多个其它端点或计算设备来实现并通过足以交换任何必要数据的任何手段来连接到所示的示例性端点。
示例性***400可包含同步端点410、同步模块420、同步数据存储模块430、体现模块440和体现模块N 442、域数据存储模块450和域数据存储模块N 452、以及传入订阅源422、传入订阅源N 424、传出订阅源426和传出订阅 源N 428。
一般而言,在至少某些实现中,示例性同步端点410可以与如先前参考图1描述的端点A 110、端点B 120或端点C 130中的一个相似或相同。示例性同步端点可包含多个模块,包括所示的模块,作为允许数据共享和同步、同步数据到域数据的体现、以及从域数据对同步数据的生成的实现的一部分。此外,在至少某些实现中,端点可由包括以下参考图5所讨论的示例性计算环境在内的计算环境来实现。
在至少某些实现中,同步模块420可在一个或多个其它端点之间同步或传输同步数据。同步模块可使用各种通信机制,包括对特定计算设备本地的通信装置、允许与其它端点或计算设备通信的一个或多个网络或其它通信装置,等等。此外,同步模块可使用各种同步技术、协议等中的任一种,以及用于表示所传送或传输的同步数据的各种手段中的任一种。
在仅一个具体示例中,同步模块420可使用像先前介绍的由SSE所描述的那些技术那样的技术来同步信息。在这一实现中,示例性同步模块可获得一个或多个订阅源,包括可能有示例性传入订阅源422和传入订阅源N 424。在至少某些实现中,传入订阅源可使用像RSS或Atom订阅源文档那样的XML文档来表示。示例性传出订阅源426和传出订阅源N 428也可类似地表示。
给定一订阅源,同步模块可将该订阅源所表示的变更并入数据存储中。这一数据存储在某些实现中可包括示例性同步数据存储模块430所表示的存储。在某些实现中,先前描述的与图2相关联的操作215可由示例性同步模块作为并入订阅源所表示的变更的一部分来实现。在使用像SSE这样的技术的实现中,同步模块可通过执行如作为SSE合并的一部分的那些操作来并入同步数据。
在某些实现中,同步模块420还可在同步端点410所维护的同步数据或域数据变更时生成经更新的传出订阅源,包括可能有示例性传出订阅源426或传出订阅源N 428。在某些实现中,先前描述的与图3相关联的操作330可由示例性同步模块作为生成经更新的传出订阅源的一部分来实现。
如先前所介绍的,同步模块420可使用同步数据存储模块430来存储同步数据。这一同步数据存储模块一般可用各种各样的方式或格式中的任一种来存 储同步数据,并且可以用各种方式,包括通过使用一个或多个数据库、一个或多个文件等来实现。在使用像SSE这样的同步协议的仅一个示例中,同步数据存储模块可存储实际订阅源文档,包括像传入订阅源422或传出订阅源426这样的订阅源文档。它可将这些订阅源作为文件***中的文件,作为一个或多个数据库中的一个或多个记录,或使用任何其它数据存储机制来存储。尽管同步数据存储模块可由同步端点410来控制、维护或修改,且因此可被认为是“本地”数据存储,但在某些情况下,同步数据存储模块可实际使用位于同步端点远程的存储机制来存储信息。在这些实现中,这一远程存储可以使用各种通信手段中的一种或多种来访问。
诸如体现模块440或体现模块N 442等示例性体现模块可将同步数据体现到域数据上,或在某些情况下参与从所体现的域数据生成同步数据。在某些实现中,将同步数据体现到域数据上可至少部分地包括基于同步数据对域数据的修改(包括创建和删除)。在同一或其它实现中,将同步数据体现到域数据上还可包括将同步数据映射到所体现的域数据中所包含的一个或多个替换表示上,其中“替换”表明该域数据表示可能未使用存在于相应同步数据中的所有相同的数据。用于将同步数据体现到域数据上的一个这样的过程先前已参考图2更详细描述。
此外,当在将同步数据体现到域数据上时使用这些替换表示时,体现模块还可参与在变更域数据之后生成或更新同步数据。同步数据生成的一个这样的示例先前已参考图3更详细描述。
诸如可能示例性体现模块440或示例性体现模块442等体现模块可取决于体现模块所处理的同步数据以及域数据的一种或多种类型等用各种方式来操作。例如,体现模块可解释并体现特定类型的同步数据并且可以与特定类型的域数据交互。
在某些实现中,体现模块将同步数据体现到的域数据可被存储在域数据存储模块中,如示例性域数据存储模块450或示例性域数据存储模块452。例如,在其中同步数据定义目录和文件的情况下,域数据存储模块450可包括一个或多个文件***,且域数据可包括实际目录和文件。在这一示例中,“文件***体现模块”可使用包括如文件元数据以及文件内容等信息的同步数据来创建或 修改域数据存储模块所包含的文件***中的一个或多个位置中的实际文件。
文件***体现模块还可包括识别体现模块所处理的同步数据何时应或必须被修改以包括有效域数据并采取各种动作的逻辑、可执行代码等。例如,如先前所介绍的,体现模块可识别同步数据中的目录或文件何时具有在与体现模块相关联的文件***中无效或不允许的名称。在这一情况下,体现模块还可包括采取将解决这一问题或不兼容性的某种动作的逻辑或可执行代码,这一解决诸如通过在所体现的域数据中使用替换名称并且还可能在域数据稍后用于生成要同步到其它端点的同步数据的情况下映射回原始名称来进行。
在某些实现中,可存在对同一同步数据操作的多于一个体现模块。例如,当使用相同的同步数据时,例如可能在使用具有目录和文件信息的相同订阅源文档时,可存在多于一个体现模块,并且每一体现模块可不同地操作。例如,可存在以不同方式将同步数据体现到域数据上的不同体现模块。例如,一个体现模块可将目录和文件同步信息体现到使用特定类型的文件***的文件和目录上。另一体现模块可将(可能相同的)目录和文件同步数据体现到使用不同类型的文件***的文件和目录上。在另一示例中,一个文件***可允许名称中的特定一组字符,另一文件***可允许一组不同的字符,并且在端点之间传送的同步数据可支持又一组字符。在这一示例中,不同体现模块可具有生成符合体现模块所支持的域数据(本情况中的文件***)的特定要求和限制的域数据的能力,并且能够映射或以其它方式解决此类限制。
在某些实现中,该设计还可使现有体现模块能在不需要同步数据或其它体现模块变更的情况下变更,并且可使得能够添加可能支持新端点或表示同步信息的方式的新体现模块而不必变更同步数据、同步技术或其它端点。
如先前所解释的,在某些实现中,不同端点有可能包括接受并生成可由每一端点读取并解释的同步信息的不同体现模块。在某些实现中,使用同一同步数据的不同体现模块可在同一端点上操作。在一个这样的示例中,计算机***可具有使用不同文件***的不同存储设备。在这一环境中,与同一计算机***相关联的不同体现模块可使用同一同步数据来修改不同存储设备上的域数据(可能作为文件和目录)。即,相同的同步数据可导致两组不同的目录和文件,对每一文件***有一组。此外,由一个体现模块为一个文件***做出的变更可 以不必由另一体现模块为另一文件***做出。
在同一或其它示例中,端点可具有对同一目录和文件同步数据操作但修改不同类型的域数据(即,除了实际文件和目录之外)的一个或多个其它体现模块。不同类型的域数据和相应体现模块的一个示例可以是修改ZIP或其它具有在单个文件中表示多个文件和可能的目录的分层结构的能力的归档或文件类型的体现模块。采用这一体现模块,体现同步数据可包括创建包含作为同一同步数据的一部分传送的、可在别处用于修改分立文件和目录的目录和文件的一个或多个ZIP文件。
不同类型的域数据和体现模块的另一示例可以是“web投影”所使用的体现模块。在这一环境中,用户能够使用例如由一个或多个HTML页面组成的web界面来访问目录和文件。在一个示例中,HTML页面可显示用于文件的链接,并使用户能够通过点击所显示的链接之一来下载文件。尽管这一用户界面的一个实现可能简单地在比如web服务器上重新创建目录和文件(并且因此可能使用文件***体现模块来实现),但另一实现可使用可例如使用同步数据来填充数据库且因此生成HTM1界面并从该数据库来提供文件内容的体现模块。在这一示例中,数据库可被认为包括由体现模块所创建或修改的域数据的至少某一些。这一体现模块尽管对表示目录和文件的同步数据操作,但可能实际并不创建实际目录或文件。
再次应当注意,尽管多个前述示例是参考示例性目录和文件同步数据来解释的,但图4的元素也可或改为用于同步、存储和体现各种其它类型的数据。
示例计算环境
现在转向图5,该图和相关讨论旨在提供其中可实现此处所描述的各种技术的示例性计算环境的简要概括描述。尽管并非所需,但此处所描述的各技术中至少部分地在诸如程序模块等由控制器、处理器、个人计算机或如图5所示的计算设备500等其它计算设备来执行的计算机可执行指令的一般上下文中描述。
一般而言,程序模块包括执行特定任务、显示特定信息、或实现特定抽象数据类型的例程、程序、对象、组件、用户界面、数据结构等等。由程序模块 执行的操作先前已借助一个或多个框图和操作流程图来描述。
本领域的技术人员可以按可被包含在一种或多种形式的计算机可读介质中的计算机可执行指令的形式来实现该描述、框图和操作流程。如此处所使用的,计算机可读介质可以是可存储或包含以可由计算机访问和理解的形式编码的信息的任何介质。计算机可读介质的典型形式包括但不限于易失性与非易失存储器两者、包括可移动和/或不可移动介质在内的数据存储设备、以及通信介质。
通信介质具体化经调制数据信号如载波或其它传输机制中的计算机可读信息,并且包括任何信息传递介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。
图5所示的计算设备500在其最基本的配置中包括至少一个处理单元502和存储器504。在某些实现中,计算设备500可实现例如先前参考图1描述的端点,如端点A 110、端点B 120等中的一个的至少一部分。在同一或其它实现中,计算设备可实现先前参考图4描述的同步端点410的至少一部分。在某些实现中,处理单元502可以是存在于例如包括台式和膝上型计算机在内的各种计算机上的通用中央处理单元(CPU)。取决于计算设备的确切配置和类型,存储器504可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或是两者的某种组合。该最基本配置在图5中由虚线506来例示。另外,计算设备500还可具有附加特征和功能。例如,计算设备500还可包含附加存储(可移动和/或不可移动),包括但不限于磁盘、光盘或磁带。这样的附加存储在图5中由可移动存储508和不可移动存储510示出。
计算设备500还可包含允许计算设备500与其它设备和服务通信的一个或多个通信连接512。例如,计算设备可具有到各种通信装置或通信设备的一个或多个连接,包括例如到先前参考图1描述的端点的连接。这些连接在某些情况下可包括到先前同样参考图1描述的通信装置115的连接。计算设备500还可具有一个或多个输入设备514,如像照相机或扫描仪那样的图像输入设备、键盘、鼠标、笔、包括话筒阵列在内的语音输入设备、触摸输入设备等等。诸 如显示器、扬声器、打印机等一个或多个输出设备516也可以被包括在计算设备500中。
本领域的技术人员可以理解,此处所描述的技术可以用除图5所示的计算设备500之外的计算设备来实施。例如,但非限制,此处所描述的技术同样可以在包括移动电话和PDA在内的手持式设备、多处理器***、基于微处理器的或可编程消费电子产品、网络PC、小型机、大型计算机等中实施。这些计算设备中的每一个可以在某一细节水平由图5的***来描述,或可被不同地描述。
此处所描述的技术还能在其中操作由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于本地和远程设备中。
尽管此处被描述为以软件实现,但还可以理解,此处所描述的技术可替换地全部或部分被实现为硬件、固件、或软件、硬件和/或固件的各种组合。
尽管在附图中例示且在上文中描述了***和方法的一些特定实现,但将会理解,示出和描述的***和方法不限于所述的特定实现,而是能够在不脱离所附权利要求书阐述和定义的精神的情况下作出众多重新布置、修改和替换。