附图的简要描述
结合附图参考以下详细描述,可以更容易地领会并更好地理解本发明的上述方面以及附带优点,附图中:
图1是适合实现本发明的通用计算机系统的框图;
图2是虚拟文件夹系统的框图;
图3所示是用户提供查询的例程的流程图,通过该查询取回所选文件和文件夹;
图4所示是一例程的流程图,通过该例程依照默认默认查询或来自用户的查询构造并在屏幕上显示虚拟文件夹;
图5是依照硬盘上的物理文件夹排列的文件夹结构的树形图;
图6是虚拟文件夹结构的树形图;
图7是图6的虚拟文件夹结构的树形图,其中,客户栈进一步按照合同和年份过滤;
图8是图7的虚拟文件夹结构的树形图,其中,客户栈的合同进一步按照年份过滤;
图9是图6的虚拟文件夹结构的树形图,其中,合同栈进一步按照客户和年份过滤,客户仍进一步按照年份过滤;
图10所示是示出文档库的栈的屏幕显示的图示;
图11所示是示出图10的ABC Corp.栈中的文档的屏幕显示的图示;
图12所示是在其中对图11的文档选择堆栈功能的屏幕显示的图示;
图13所示是在其中对图12的堆栈功能选择“stack by author(按作者堆栈)”参数的屏幕显示的图示;
图14所示是在其中对图13的文件按照作者进行堆栈的屏幕显示的图示;
图15所示是在其中选择堆栈功能并再选择“stack by category(按类别堆栈)”选项目以便对图14的文件进行重堆栈的屏幕显示的图示;
图16所示是在其中按类别对图14的文件进行重堆栈的屏幕显示的图示;
图17所示是在其中选择用于显示物理文件夹的快速链接的屏幕显示的图示;
图18所示是在其中显示包含图17的虚拟文件夹栈的文件的物理文件夹的屏幕显示的图示;
图19所示是用户直接操作虚拟文件夹的例程的流程图;
图20所示是在其中将新的“West Coast”栈添加到图10的栈的屏幕显示的图示;
图21所示是在其中使用直接操作来将文件从“ABC Corp.”栈复制到图20的的“West Coast”栈的屏幕显示的图示;
图22所示是用于系统动态生成新过滤器条件的例程的流程图;
图23所示是用于系统基于过滤器条件的选择来过滤项目的例程的流程图;
图24所示是在其中按条件“AB”过滤图10的栈的屏幕显示的图示;
图25所示是在其中按条件“ABC”过滤图10的栈的屏幕显示的图示;
图26所示是在其中对图10的栈选择过滤器条件“year 2002(2002年)”的屏幕显示的图示;
图27所示是在其中按“year 2002”过滤图10的栈以及过滤器条件“month(月)”的进一步选择的屏幕显示的图示;
图28所示是在其中呈现选择用于过滤的月的列表的屏幕显示的图示;
图29所示是在其中按一月进一步过滤图10的栈并进一步显示过滤器条件“day(日)”的屏幕显示的图示;
图30所示是用于创建新快速链接的例程的流程图;
图31所示是基于图29的过滤创建名为“January Work(一月作品)”的新快速链接的屏幕显示的示图;
图32所示是在其中选择“All Authors(所有作者)”的快速链接的屏幕显示的图示;
图33所示是在其中呈现图32的所有作者的列表的屏幕显示的图示;
图34所示是在其中从图33的列表中选择“Author 1(作者1)”并且显示所有作者1的文档的屏幕显示的图示;
图35所示是用于创建新库的例程的流程图;
图36所示是在其中显示各种可用库的集合的屏幕显示的图示;
图37所示是用于定义虚拟文件夹集合的范围的例程的流程图;
图38所示是可以形成虚拟文件夹集合的范围的不同来源的框图;
图39所示是用于在虚拟文件夹集合中包括非文件项目的例程的流程图;
图40所示是显示包括在虚拟文件夹中的各种非文件项目的屏幕显示的示图;
图41所示是包括静态列表和一组引用的项目的存储器系统的框图;
图42所示是用于共享静态列表的例程的流程图;
图43所示是用于重新许可从静态列表中删除/添加的项目的例程的流程图;
图44所示是用于创建动态列表的例程的流程图;
图45所示是包括动态列表和一组引用的项目的存储器系统的框图;
图46所示是用于共享动态列表的例程的流程图;
图47所示是用于重新许可从动态列表中删除/添加的项目的例程的流程图;
图48所示是包括从其删除项目的动态列表的存储器系统的框图;
图49所示是包括向其添加项目的动态列表的存储器系统的框图;
图50所示是用于调用共享API的例程的流程图;
图51A-51L所示是可在文件共享系统中使用的编程接口的各种实现的框图;
图52所示是用于共享项目的例程的流程图;
图53所示是用于确保所选择的被共享者能够访问被选中来共享的项目的例程的流程图;
图54所示是用于验证存在可从其访问项目的文件共享的例程的流程图;
图55所示是用于验证设置了ACL和任何其它许可的例程的流程图;
图56所示是用于分解EFS和DRM的任何问题的例程的流程图;
图57所示是用于配置防火墙的例程的流程图;
图58所示是用于记录事务数据的例程的流程图;以及
图59所示是共享助手例程的页面之间的导航的框图。
较佳实施例的详细描述
提供了用于共享项目的系统和方法。项目可被个别地共享,或作为列表的一部分包括在内。可创建静态和动态列表作为虚拟文件夹的类型。虚拟文件夹使用当前用于文件系统的相同或相似的用户界面。虚拟文件夹基于其元数据而不是盘上的实际物理底层文件系统结构在不同的视图中向用户展现常规文件和文件夹(也称为目录)。创建了位置不相关的视图,使用户能够使用与当前用于管理文件系统类似的控制来操作其文件和文件夹。一般而言,这意味着用户能够基于文件本身的固有属性来组织并重排列文件,而不是将管理和组织作为系统的一个单独部分来完成。虚拟文件夹可以表示来自不同物理位置的文件或项目,如来自同一计算机内的多个盘驱动器、多个计算机之间或不同网络位置,使文件或项目的一个视图能够展现位于不同物理位置的文件或项目。在一个实施例中,仅需通过IP网络连接不同的项目或文件来将其包括在内。
虚拟文件夹建模也能够用于传统的非文件实体。应用之一是令类似于文件和文件夹的一组用户界面(即,对象和容器)来传统地显示非文件实体。这一非文件实体的一个示例是电子邮件,另一示例是来自联系人数据库的联系人信息。以这一方式,虚拟文件夹提供了一种位置不相关、基于元数据的视图系统,无论要显示的数据是来自文件还是非文件实体都可以工作。一般而言,这些方面在让用户操作其文件和数据方面允许更大的灵活性,既能够使用常见的用户界面技术(拖放、双击等等),又充分利用了不同数据类型的大量集成。
图1以及以下讨论旨在提供适合在其中实现本发明的实施例的计算环境的简要一般描述。尽管并非必需,本发明将在如由个人计算机执行的程序模块等计算机可执行指令的一般语境下描述。一般而言,程序模块包括例程、程序、字符、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。本领域的技术人员可以理解,本发明可以用其它计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器的或可编程消费者电子产品、网络PC、小型机、大型机等等。本发明也可以在分布式计算环境中实施,其中,任务由通过通信网络连接的远程处理设备执行。在分布式计算环境中,程序模块可以位于本地或远程存储器存储设备中。
参考图1,用于实现本发明的示例性系统包括常规个人计算机20形式的通用计算设备,包括处理单元21、系统存储器22以及将包括系统存储器22的各种系统组件耦合至处理单元21的系统总线23。系统总线23可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线结构的局部总线。系统存储器包括只读存储器(ROM)24和随机存取存储器(RAM)25。基本输入/输出系统(BIOS)26,包含如在启动时协助在计算机20内的元件之间传输信息的基本例程,可储存在ROM 24中。个人计算机20还包括用于对硬盘39进行读写的硬盘驱动器27、用于对可移动磁盘29进行读写的磁盘驱动器28以及用于对可移动光盘31如CD-ROM或其它光介质进行读写的光盘驱动器30。硬盘驱动器27、磁盘驱动器28以及光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33和光盘驱动器接口34连接至系统总线23。驱动器及其相关的计算机可读介质为计算机20提供了计算机可执行指令、数据结构、程序模块和其它数据的非易失存储。尽管这里描述的示例环境采用了硬盘39、可移动磁盘29以及可移动光盘31,本领域的技术人员应当理解,也可以在示例性操作环境中使用用于储存计算机可访问的数据的其它类型的计算机可读介质,包括盒式磁带、闪存卡、数字多功能盘、Bernoulli盒式磁盘、RAM、ROM等等。
众多程序模块可储存在硬盘39、磁盘29、光盘31、ROM 24或RAM 25中,包括操作系统35、一个或多个应用程序36、其它程序模块37以及程序数据38。用户可以通过输入设备,如键盘40和定位设备42向计算机20输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线23的串行端口接口46连接到处理单元21,但是也可以通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。监视器47形式的显示器也通过接口,如视频卡或适配器48连接到系统总线23。一个或多个扬声器57也可以通过接口,如音频适配器56连接到系统总线23。除显示器和扬声器之外,个人计算机通常包括其它外围输出设备(未示出),如打印机。
个人计算机20可以在使用到一个或多个远程计算机,如远程计算机49的逻辑连接的网络化环境中操作。远程计算机49可以是另一个人计算机、服务器、路由器、网络PC、对等设备或其它公用网络节点,并通常包括许多或所有上述与个人计算机20相关的元件。图1描述的逻辑连接包括局域网(LAN)51和广域网(WAN)52。LAN 51和WAN 52可以是有线、无线或其组合。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,个人计算机20通过网络接口或适配器53连接至局域网51。当在WAN网络环境中使用时,计算机20通常包括调制解调器54或用于通过广域网52,如因特网建立通信的其它装置。调制解调器54可以是内置或外置的,通过串行端口接口46连接至系统总线23。在网络化环境中,描述的与个人计算机20相关的程序模块或其部分可储存在远程存储器存储设备中。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。
如下文更详细地描述的,虚拟文件夹使用户可以更容易地共享文件并执行围绕文件操作和文件夹导航(浏览)的基本任务,并提供能够在新特征中被充分利用的更高级别的存储能力。虚拟文件夹基于其元数据而不是盘上的实际物理底层文件系统结构在不同的视图中向用户展现文件和项目。
图2是虚拟文件夹系统200的框图。如下文将要详细描述的,虚拟文件夹允许用户改变控制察看数据的方法的“数据透视表(pivot)”。作为示例,用户能够以所有歌曲的平面列表来察看他们的音乐,该列表可以按照专辑来分组。可选地,用户能够切换视图来仅显示流派或艺术家或年份等等。用户能够剪裁视图来仅察看适合现有的任务的对象。这带来了改进的浏览体验,取消了贯穿文件夹(向下和向上返回)的进一步导航的需要。同一教程和能力应用到不作为文件储存的其它数据类型的建模中。例如,可以用这一方法向用户展现联系人,从而给予用户熟悉的界面能力,以及比平面地址簿所提供的用于操作的更丰富的基础结构。
如图2所示,虚拟文件夹系统200包括文件夹处理器210、关系数据库230、虚拟文件夹描述数据库232、其它外壳文件夹组件234、文件夹处理器组件236以及外壳浏览器和察看组件240。文件夹处理器210包括本机处理代码组件212、处理器工厂组件214、属性书写器组件216、行集合语法分析器组件218、查询构建器组件220、枚举器组件222以及属性工厂组件224。
关系数据库230储存关于系统中所有文件的属性。它也完整地储存一些项目,如联系人(即,非文件项目)。一般而言,它储存关于其包含的文件和项目的类型的元数据。关系数据库230从查询构建器220接收SQL查询。关系数据库230也向行集合语法分析器组件218发送SQL行集合,对每一项目列发送一行,列是项目属性。
虚拟文件夹描述数据库232包括虚拟文件夹描述。虚拟文件夹描述数据库232向查询构建器组件220发送数据,包括要显示在文件夹中的类型列表、初始过滤器以及从其显示结果的物理位置(范围)。
对于其它外壳文件夹组件234,文件夹处理器210委托来自多种项目类型的现存外壳文件夹,这些项目包括所有用于处理器或属性的文件。其它外壳文件夹组件234向属性工厂224发送来自其它文件夹的属性。其它外壳文件夹组件也向处理器工厂214发送处理器。
文件夹处理器组件236为仅在数据库中存在的项目,如联系人提供代码行为。这允许非文件项目与文件相似地工作。文件夹处理器组件236向处理器工厂214发送处理器。
对于本机处理代码组件212,文件夹处理器210基于项目的属性直接实现某些处理器。本机处理代码组件212向处理器工厂214发送处理器。对于本机处理代码组件212以及文件夹处理器组件236,与所有名字空间一样,虚拟文件夹必须为其项目提供一组处理器(上下文菜单、图标、缩略图、信息提示、…)。对于这些(信息提示、数据对象、拖放处理器、背景内容菜单…)的大多数,虚拟文件夹提供用于它所容纳的所有类型的公用(本机)处理器。然而,还有类型的作者必须提供的其它处理器(在项目本身上的上下文菜单、可写属性存储、…)。默认处理器也可以被覆盖。虚拟文件夹对文件重复使用这一处理器并允许非文件项目执行同样的动作。
处理器工厂214采用ID列表并生成提供上下文菜单、图标等等的代码行为。一般而言,文件夹处理器210可以使用本机处理器、外部处理器或委托其它外壳文件夹来获得处理器,如上文关于本机处理代码组件212、其它外壳文件夹组件234以及文件夹处理器236所描述的。处理器工厂组件214向视图240中的外壳浏览器发送处理器,如视图所请求的。处理器工厂组件214向属性书写器216发送属性处理器。
属性书写器216将用户的意向,如剪切、复制和粘贴转换为对文件或项目正确的属性。外壳浏览器和察看组件240向属性书写器216发送数据,包括直接操作(剪切/复制/粘贴)或对元数据的编辑。一般而言,由于虚拟文件夹基于项目的属性呈现一组织,诸如移动和复制(拖放)等操作变为在那些属性上的编辑。例如,在按作者堆栈的视图中将一个文档从作者1移动到作者2表示改变作者。属性书写器组件216实现这一功能。
行集合语法分析器218采用数据库的行集合并将所有项目属性储存在外壳ID列表结构中。行集合采用虚拟文件夹的片段定义并生成之后可以发向数据库的SQL串。行集合语法分析器组件218向枚举器组件222发送ID列表。如上所述,行集合语法分析器组件218也从关系数据库230接收数据,包括SQL行集合,每一项目占一行,列为项目属性。
查询构建器组件220构建SQL查询。查询构建器组件220从枚举器组件222接收数据,包括来自导航的新过滤器。查询构建器组件220也从虚拟文件夹描述数据库232接收数据,包括要显示在文件夹中的类型列表、初始过滤器以及从其显示结果的物理位置(范围)。查询构建器组件220向关系数据库230发送SQL查询。
一般而言,查询构建器组件220包括一组行(亦即表)。就是运行该查询所产生的。行集合语法分析器组件218采用每一行,并使用列名称来将行转换为ID列表。ID列表是一种众所周知的外壳结构,用来引用名字空间中的项目。执行这一步骤允许虚拟文件夹正如外壳的其余部分的任意其它名字空间一样。而且,将这一数据高速缓存能够帮助将昂贵的数据库访问保持最小化。
枚举器组件222响应于到虚拟文件夹的导航而操作。如上所述,枚举器组件222从行集合语法分析器组件218接收ID列表,并将新过滤器从导航发送到查询构建器组件220。枚举器222也向外壳浏览器和察看组件240发送数据,包括返回以插入在导航之后的视图的ID列表。
属性工厂组件224采用ID列表和属性标识符,并返回那些属性的值。属性工厂组件224从包括属性处理器的处理器工厂组件214接收数据。如上所述,属性工厂组件224也从其它外壳文件夹组件234接收数据,包括来自其它文件夹的属性。属性工厂组件224也向外壳浏览器和察看组件240发送数据,包括项目属性,如视图所请求的。
外壳浏览器和察看组件240在视窗中显示文件夹的内容,并处理用户与所显示的文件或项目的所有交互,如点击、拖曳和导航。因此,外壳浏览器和察看组件240接收用户行动。外壳浏览器和察看组件240也获得其从文件夹(本情况下为文件夹处理器210)所需要的关于代码行为的数据。
如上所述,虚拟文件夹基于其元数据而不是盘上的实际物理底层文件系统结构在不同的视图中向用户展现常规文件和文件夹(也称为目录)。因此,系统能够采用储存在数据库中的属性并将其表示为类似文件夹的容器。由于用户已熟悉使用文件夹工作,通过以类似的方式呈现虚拟文件夹,用户可以更快地适应新的系统。
图3所示是用户提供项目查询的例程300的流程图,该查询取回所选的项目。在块302,文件夹处理器从用户获取查询。在块304,文件夹处理器将该查询传递到关系数据库。在块306,关系数据库将结果提供回文件夹处理器。在块308,文件夹处理器以虚拟文件夹和项目的形式向用户提供结果。
图4所示是例程320的流程图,通过该例程依照默认查询或来自用户的查询构造虚拟文件夹并在屏幕上显示。在块322,当用户首次打开虚拟文件夹时,使用默认查询。这一默认查询从注册表中取得。例如,音乐库的默认查询可以是显示按专辑分组的所有歌曲。在块324,文件夹处理器对这一查询构造查询对象,然后将这一查询传递到关系数据库。在块326,关系数据库生成查询的结果并将这些结果作为数据库行和列传递回文件夹处理器。
在块328,文件夹处理器采用这些结果,并将它们从数据的行和列转换为枚举器结构,以便由文件夹视图用经用户交互作用所得的虚拟文件夹和项目填充屏幕。在判定块330,用户判定是否要改变视图(通过发出不同的查询或“数据透视表”)。例如,用户能够发出“显示所有艺术家”的数据透视表。如果用户确实想改变视图,则例程返回至块324,其中文件夹处理器向关系数据库传递该新查询,并接收回结果的新行和列,并构造新的枚举器结构。过程然后如上所述地继续,使用枚举器清除并更新文件夹视图,来将“艺术家”对象拖曳到屏幕。
在一个示例中,提供了表示用户能够导航的容器的专辑对象。例如,双击“Beatles”专辑将导航视图来察看Beatles的所有歌曲。文件夹处理器向关系数据库发出“显示所有Beatles的歌曲”的查询,关系数据库交还这些歌曲的数据的行和列。文件夹处理器创建所有这些歌曲的枚举器,该枚举器然后被拖曳到屏幕。
用户也能够在浏览虚拟文件夹的任一点选择视图。从上述示例,在缩减到只显示Beatles的歌曲之后,用户能够改变视图来仅将歌曲显示为专辑。将项目的视图改变为另一表示的过程称为“堆栈”。这是由于项目在概念上基于该表示被排入“栈”。在这一情况下,对不同专辑的每一个,歌曲被重新排列到栈。用户然后能够导航到这些栈之一,仅察看来自该特定专辑的歌曲。再一次,用户能够基于属性(如分级)将这些剩余歌曲的视图重新排列到栈。如果选择了分级属性,来自Beatles专辑的歌曲将在栈中以一、二或三星等级显示。
每一查询的结果取决于范围内包括了哪些物理位置。例如,可以令范围仅包括用户“我的文档”文件夹中的文件夹。或者,范围可以包括计算机上的所有文件夹,或者甚至多个网络连接的计算机上的文件夹。用户能够通过范围属性表单察看并改变范围。在一个示例中,可以通过右键点击虚拟文件夹并选择“properties(属性)”来展现范围属性表单。用户能够向范围添加新的文件夹,或移除先前添加的文件夹。
虚拟文件夹向其提供特定实用程序的一组用户为知识工作者(knowledgeworker)。虚拟文件夹允许知识工作者在察看文档时方便地按照文件类型、项目、件号、作者等等来切换。由于每一知识工作者往往使用不同方法来组织文档,虚拟文件夹可以用来适应这些不同的偏好。
图5是依照硬盘上的物理文件夹排列的文件夹结构的树形图。这一物理文件夹排列基于传统的文件夹实现,可能基于NTFS或其它现有的文件系统。这类文件夹被称为物理文件夹,因为它们的结构基于盘上的实际物理底层文件系统结构。如后文所详细讨论的,这与虚拟文件夹相反,虚拟文件夹创建与位置不相关的视图,允许用户以与当前用来操作物理文件夹类似的方式操作文件和文件夹。
如图5所示,文件夹400是“我的文档”文件夹。在第一级,文件夹400包括文件夹410、420和430,分别对应于客户1、2和3。在第二级,文件夹410、420和430的每一个分别包含文件夹411、421和431,每一个都分别对应于所选择的客户的合同。在第三级,文件夹411、421和431的每一个分别包含文件夹412、422和432,每一个对应于2001年。在第三级,文件夹411、412和431的每一个也分别包含文件夹413、423和433,每一个对应于2002年。
可以理解,对于想要导航如图5所示的物理文件夹文件结构的用户来说存在许多障碍。例如,如果用户希望以用户产生的所有合同来工作,用户首先需要导航到文件夹411来达到客户1的合同,然后需要导航到文件夹421来达到客户2的合同,并且再一次需要导航到文件夹431来达到客户3的合同。这一排列令用户很难访问所有的合同,并且通常来说阻碍了所有合同的同时察看和操作。类似地,如果用户希望察看2001年生成的所有合同,用户需要分别导航并重导航到文件夹412、422和432。如后文将要详细描述的,本发明的虚拟文件夹提供了改进的文件系统结构。
图6是虚拟文件夹结构的树形图。如后文将要详细描述的,虚拟文件夹创建与位置不相关的视图,使用户能够方便地操作其文件和文件夹。如图6所示,虚拟文件夹表示为栈。虚拟文件夹500是“所有项目”文件夹。在第一级,虚拟文件夹500包含虚拟文件夹510、520和530,分别对应于客户、合同和年份。如后文将要详细描述的,这一结构允许用户依照所期望的参数来访问文件。
图7是图6的虚拟文件夹结构的树形图,其中,在第二级,虚拟文件夹510还包括虚拟文件夹511和512,分别对应于合同和年份。换言之,虚拟文件夹510的客户栈进一步按合同和年份来过滤。确定每一虚拟文件夹包含哪些文件和项目的过程在后文将详细描述。
图8是图7的虚拟文件夹结构的树形图,其中,在第三级,虚拟文件夹511包含虚拟文件夹513,对应于年份。换言之,虚拟文件夹511的合同栈进一步按年份过滤。尽管依照客户、合同和年份来构造虚拟文件夹510、511和513的虚拟文件夹结构,应当理解,虚拟文件夹允许出现其它结构顺序,如后文参考图9所详细描述的。
图9是图6的虚拟文件夹结构的树形图,其中,在第二级,虚拟文件夹520被进一步过滤为虚拟文件夹521和522,对应于客户和年份。在第三级,虚拟文件夹521被进一步过滤为虚拟文件夹523,对应于年份。图8和9的组织结构之间的对比帮助说明了虚拟文件夹系统的灵活性。换言之,在虚拟文件夹系统中,用户能够依照所期望的参数来导航虚拟文件夹,这与依赖于图5所示的与物理文件结构的位置相关的视图相反。
图10所示是示出文档库的栈的屏幕显示600的示图。如上所述,栈可以用来表示一类虚拟文件夹。如后文将要详细描述的,屏幕显示600包括快速链接元素610-613、过滤器元素620-626、活动元素630-633、信息和控件元素640-645以及虚拟文件夹栈651-655。
快速链接元素包括“all categories(所有类别)”的快速链接610、“all authors(所有作者)”的快速链接611、“January work(一月作品)”的快速链接612以及用于显示额外的快速链接的选择613。如后文将要详细描述的,用户能够选择快速链接来执行虚拟文件夹的所期望的导航。快速链接可以由系统提供,并且一些快速链接可由用户创建并保存。
过滤器元素包括“filter by(按……过滤)”指示器620、条目空白区621、“bydate(按日期)”指示器622、“year(年份)”指示器623、“pick an author(选择一个作者)”选择器624、“pick a category(选择一个类别)”选择器625以及“more filters(更多过滤器)”选择器626。“filter by”指示器620指示用户以下项目可以用来过滤虚拟文件夹或项目。条目空白区621提供了用户能够键入所期望的新过滤器条件的区域。“by date”指示器622指示用户通过从“year”选择器623选择日期可以按所选择的年份过滤虚拟文件夹或项目。“pick an author”选择器624允许用户依照特定的作者过滤。“pick a category”选择器625允许用户依照所选择的类别来过滤。“more filters”选择器626允许用户在显示器上弹出额外的过滤器。
活动选择器包括“create a new category(选择一个新类别)”选择器630、“activity(活动)”选择器631和632以及“more activities(更多活动)”选择器633。如后文将要详细描述的,所呈现的活动可用于一般所期望的功能,或专门针对对当前所显示的虚拟文件夹类型有用的活动。例如,用户能够选择“create a newcategory”选择器630来创建由新栈表示的新类别。
如上所述,活动选择器631和632可以更专门地针对正在显示的文件夹或项目的类型。例如,当前的显示是文档库,对于文档库,“activity”选择器631和632可针对专门为文档设计的活动,如编辑或创建附件。如果当前库为照片库,则“activity”选择器631和632可以是专门针对照片的行动,如组成照片相册或与其他用户共享照片。
信息和控件元素包括信息行640和641、控件行642、回退控件643以及信息行644和645。信息行640和641提供了虚拟文件夹或项目的当前导航的信息。在本示例中,信息行640指示当前导航为文档库,而信息行641指示更完整的导航,显示文档库处于存储区之内。控件行642提供了若干标准控件,回退按钮643允许用户通过导航返回。信息行644提供了关于当前导航的内容的数值信息。在本示例中,信息行644指示有41个项目,占用了文档库的栈中100MB。信息行645可用来提供额外的信息,如关于选择的文件的额外的信息。
文档库的栈包括“ABC Corp.”栈651、“backups(备份)”栈652、“businessplans(商业计划)”栈653、“XYZ Corp.”栈654以及“marketing reports(市场报告)”栈655。每一栈顶部的数字指示每一栈中有多少项目。例如,示出“ABCCorp.”栈651包括8个项目。栈的总项目数合计达信息行644所指示的项目数,如上所述本示例中为41。提供了选择框SB,可由用户用来选择所期望的项目。对“ABC Corp.”栈651的选择产生该栈的项目的视图,如后文关于图11所描述的。
图11所示是显示图10的“ABC Corp.”栈651中的项目的屏幕显示的示图。应当注意,信息行640和641现在指示当前导航显示了“ABC Corp.”栈。示出“ABCCorp.”栈651包括8个文档751-758,分别对应文档1-8。信息行644相应地指示有8个项目,占用20MB的存储器。图11的文档可以进一步排列为ABC Corp.栈内的栈。换言之,在由ABC Corp.栈651表示的虚拟文件夹内,可以组织另外的虚拟文件夹来容纳文档,如后文关于图12-16所描述的。
图12所示是在其中对图11的文档选择堆栈功能的屏幕显示的示图。如图12所示,用户能够弹出功能框760。功能框760包括“view(察看)”选择761、“arrangeicons by(按……排列图标)”选择762、“stacks(栈)”选择763、“refresh(刷新)”选择764、“open containing folders(打开包含的文件夹)”选择765、“cut(剪切)”选择766、“copy(复制)”选择767、“undo(撤消)”选择768、“new(新建)”选择769以及“properties(属性)”选择770。示出选择框SB围绕“stacks”选择763。
图13所示是在其中对图12的堆栈功能选择“stack by author(按作者堆栈)”参数的屏幕显示的示图。如图13所示,显示呈现各种堆栈选项目的框780。堆栈选项目包括“unstack(拆栈)”选项目781、“stack by category(按分类堆栈)”选项目782、“stack by author(按作者堆栈)”选项目783以及“stack by user(按用户堆栈)”选项目784。示出选择框SB围绕“stack by author”选项目783。
图14所示是在其中按作者对图13的文件进行堆栈的屏幕显示的示图。如图14所示,栈791和792分别对应作者Bob和Lisa。如每一栈的顶部的数字所指示的,Bob栈791包括2个项目,而Lisa栈792包括5个项目。项目758(对应于文档8)没有作者,因此不包括在“author(作者)”栈中。栈791和792说明栈可以在多级上组织,如在“ABC Corp.”栈651之内。因此,虚拟文件夹可以在多级上形成,如“Lisa”栈792处于文档库内的“ABC Corp.”栈之内。
图15所示是在其中进一步选择“stack by category(按分类堆栈)”选项目以对图14的文件重新堆栈的屏幕显示的示图。如图15所示,选择框SB围绕“stackby category”选项目782。由于一些项目已堆积进栈791和792中,选择“stack bycategory”选项目782将对项目进行重新堆栈,如下文参考图16所详细描述的。
图16所示是在其中按分类对图14的文件重新堆栈的屏幕显示的示图。如图16所示,栈793和794分别对应于“XYZ Corp.”和“marketing reports”类别。对应于文档1和文档2的项目751和752未被指定于任一额外的类别,因此不落入任一其他分类栈。
图17所示是在其中对物理文件夹选择快速链接的屏幕显示的示图。示出选择框SB围绕“all folders(所有文件夹)”快速链接616。如后文关于图18所详细描述的,“all folders”快速链接616提供了向物理文件夹的视图的切换。
图18所示是示出物理文件夹的屏幕显示的视图。示出的物理文件夹包含图17的虚拟文件夹栈的文件。换言之,包含在图17的栈651-655之内的项目也包含在系统的某些物理文件夹中。这些在图18中示出为位于当前计算机上的“MyDocuments(我的文档)”文件夹851、位于当前计算机上的“Desktop(桌面)”文件夹852、位于硬盘C:上的“Foo”文件夹853、位于服务器上的“My Files(我的文件)”文件夹854、位于外部驱动器上的“External Drive(外部驱动器)”文件夹855、位于另一计算机上的“My Documets(我的文档)”文件夹856以及位于另一计算机上的“Desktop(桌面)”文件夹857。
如图18所示,用户能够从图17的虚拟文件表示切换到图18的物理文件表示。这允许用户在虚拟文件表示和物理文件表示之间来回切换,取决于当前任务期望哪一表示。物理文件夹851-857的不同位置也说明虚拟文件系统的范围可以是相对宽广的,如后文所详细描述的。
图19所示是用户通过其能够直接操作虚拟文件夹的例程880的流程图。如后文将要详细描述的,为操作虚拟文件夹所提供的机制类似于当前用于操作常规文件夹(如点击和拖曳、复制、粘贴等等)的机制。如图19所示,在块882,系统提供定义的活动,用户可以执行这些行动来直接操作表示为显示对象的虚拟文件夹。在块884,用户执行定义的活动。如上所述,这一活动的一个示例可以是用户点击并拖拽虚拟文件夹以将其内容复制到另一虚拟文件夹。在块886,如用户执行的活动所指示的来操作虚拟文件夹和/或内容。
图20所示是在其中将新的West Coast栈656添加到图10的栈的屏幕显示的示图。West Coast栈656通过由用户创建新的“West Coast”类别来形成。在其初始创建时,新的West Coast栈656为空,且具有0项目。在图20的实施例中,将2个项目添加到West Coast栈656。一种用于向栈添加项目的方法是选择一个特定的项目,然后对该项目的分类元数据进行修改或者添加额外的类别,如添加类别“West Coast”到2个项目,如图20的实施例所完成的。这一过程说明类别数据是项目的元数据属性,是一种特别属性类型。换言之,这一类型的属性不具有任何隐含的意义,可以由用户赋予任意值。例如,类别“property(属性)”能够具有任意值,而“author(作者)”属性应当为人名。如后文参考图21将要详细的描述,也可以点击并拖曳项目以从其他栈复制到West Coast栈656(在这一情况下,项目的类别被自动更新来包括“West Coast”)。在这点上,图20示出选择框SB围绕ABC Corp.栈651,准备复制其内容。
图21所示是在其中使用直接操作以将文件从ABC Corp.栈651复制到WestCoast栈656的屏幕显示的示图。换言之,如图20所示,用户选择ABC Corp.栈651,然后如图21所示,用户点击并拖曳该栈来复制到West Coast栈656。由此,图20中具有2个项目的West Coast栈656现在显示为包括总共10个项目,包括来自ABC Corp.栈651的另外8个项目。当来自ABC Corp.栈651的项目被复制到West Coast栈656时,这通过将8个项目的类别描述修改为除包括原始的“ABCCorp.”类别之外也包括“West Coast”类别来实现。这说明了可执行的一种类型的直接操作。
直接操作的另一示例是右键点击一个项目并选择删除。在一个实施例中,当用户选择删除功能时,向用户查询该项目是否应当被一起删除,或仅从当前虚拟文件夹移除。如果如上所述仅从当前虚拟文件夹分类栈中移除,这可以通过从项目的元数据移除期望的分类来实现。换言之,如果从ABC Corp.栈651复制到West Coast栈656的项目的其中之一,然后将要从West Coast栈656中移除,这可以通过将特定文件的类别数据修改为不再包括“West Coast”分类来实现。
图22所示是用于系统动态生成新过滤器条件的例程900的流程图。过滤器条件用来操作虚拟文件夹。过滤器条件本质上用作用于缩减项目的集合的一组工具。在一个实施例中,过滤器包括元数据类别及其值(在用户界面中以可点击的链接或下拉菜单呈现给用户)。用户点击过滤器条件来过滤显示器上的项目的当前结果集合。
图22说明了如何动态地生成过滤器。如图22所示,在块902,审查当前显示上的集合中项目的属性(来自元数据)。在块904,基于项目的公共属性动态地生成建议的过滤器条件。在块906,向用户呈现建议的过滤器条件来对过滤项目目进行可能的选择。作为这一过程的一个示例,系统可审查一组项目的属性,如果项目一般具有“Authors(作者)”属性,则过滤器可以提供可供过滤的作者的列表。然后,通过点击特定的作者,不具备该作者的项目被从显示上的组中移除。这一过滤过程向用户提供了一种用于缩减显示器上的项目的集合的机制。
图23所示是用于系统基于所选择的过滤器条件过滤项目的例程920的流程图。在块922,用户或者输入新过滤器条件,或者选择系统呈现的过滤器条件之一。如上所述,过滤器条件可以由系统动态地生成,或可以被预设。在块924,评估来自显示器上的集合的项目,其所选择的属性是否匹配过滤器条件。例如,如果过滤器条件是对于作者为“Bob”的项目,则依照其作者属性是否包括“Bob”来评估该项目。在块926,其选择的属性不匹配过滤器条件的项目被从显示器的集合中移除。
图24所示是在其中按条件“AB”过滤图10的栈的屏幕显示的示图。如图所示,在过滤器区域621中,用户键入条件“AB”。信息行640和641指示显示器中的项目现在为按条件“AB”过滤的项目。如图所示,ABC Corp.栈651仍包含8个项目,而Backups栈652现在包含3个项目,XYZ Corp.栈654也包含3个项目。由此,信息行644指示总共有14个项目,占用总共35MB的存储器。
图25所示是在其中按条件“ABC”过滤图10的栈的屏幕显示的示图。对于图24的过滤器条件“AB”,用户仅需键入另外一个字母“C”来作出过滤器条件“ABC”。如图25所示,信息行640和641现在指示显示器上的项目是包含条件“ABC”的项目。仍示出ABC Corp.栈651包含8个项目,而Backups栈652现在仅包含2个项目。信息行644现在指示显示器上的栈中总共有10个项目,占用25MB的存储器。由此,图24和25提供了用户如何输入新过滤器条件以及之后如何使用这些过滤器条件来过滤显示器上示出的项目的示例。
图26所示是在其中选择系统提供的过滤器条件“year 2002(2002年)”的屏幕显示的示图。如上所述,在“by date(按日期)”指示器622下面,年份选择器623包括年份2000、2001或2002。示出选择框SB围绕年份2002,指示用户选择它作为所期望的过滤器条件。
图27所示是在其中应用过滤器条件“2002”的屏幕显示的示图。同时示出的还有对“pick a month(选择一个月)”选择器623A的选择。如图27所示,在应用过滤器条件“2002”之后,栈中的项目数被减少。更具体地而言,ABC Corp.栈651现在包含6个项目,Backups栈652现在包含8个项目,Business Plans栈653现在包含3个项目,XYZ Corp.栈654现在包含5个项目。信息行644现在指示总共有22个项目,占用50MB的存储器。信息行640和641现在指示显示器上的项目是被过滤以包含过滤器条件“2002”的项目。
图28所示是在其中呈现用于选择月份来过滤的列表屏幕显示的示图。提供了包括月份列表的框950。在显示上提供框950是由于用户选择了“pick a month”选择器623A。示出选择框SB围绕January(一月)这一月份。
图29所示是在其中图28的栈进一步按一月过滤的屏幕显示的示图,还示出了过滤器条件“day(日)”。如图29所示,信息行640和641现在指示显示上的项目是按条件“January”过滤的项目。示出Backups栈652现在包含2个项目,而Business Plans栈653也包含2个项目。信息行644指示显示器上总共有4个项目,占用总共10MB的存储器。如果用户希望进一步将结果过滤到一个特定的日,则提供了“pick by day(按日选择)”选择器623B。
图30所示是用于创建新快速链接的例程940的流程图。如后文将要详细描述的,快速链接是预定义的链接,用户能够点击该快速链接来创建用户选择的项目的集合的视图。在一个实施例中,快速链接可认为是一种数据透视表。快速链接提供了一种用于检索虚拟文件夹的机制。点击快速链接可以将用户带到所期望的文件夹(正如点击“favorites(收藏夹)”将用户带到web站点)。快速链接能够由系统预定义,或者由用户设定。例如,点击“all authors(所有作者)”将返回按作者堆栈的视图。点击“all documents(所有文档)”可返回所有存储区域的所有文档的平面视图。用户也可以创建其自己的快速链接。
如图30所示,在块942,用户在显示器上作出选择,指示应当从当前过滤器条件或导航形成新的快速链接。在块944,用户提供新快速链接的新名称。在块946,保存新快速链接并且在显示器上的快速链接部分中提供新快速链接名称。
图31所示是用于基于图29的过滤创建名为“Janauray Work(一月作品)”的新快速链接的屏幕显示的视图。如上所述,在图29,栈已由一月过滤。在图31,用户指示应当将图29的过滤保存为新快速链接,并将该新快速链接命名为“Januarywork”。由此,在显示器的快速链接部分中示出了新的“January work”快速链接612。对于形成新快速链接,一般向用户提供一选项目如“save this collection as aquick link(将该集合保存为快速链接)”。
图32所示是在其中选择“All Authors(所有作者)”快速链接的屏幕显示的视图。如图32所示,示出选择框SB围绕“All Authors”选择611。可由快速链接访问的集合的其他示例包括“all authors”、“recent documents(最近文档)”、“all documents I′ve shared(我共享的所有文档)”、“all documents I′ve authored(我创作的所有文档)”、“all documents not authored by me(不是由我创作的所有文档)”、“all documents not authored by me(不是由我共享的所有文档)”、“desktop(桌面)”以及“all types(所有类型)”。
图33所示是在其中呈现图32的项目的所有作者的列表的屏幕显示的示图。如图33所示,提供了信息行950,指示显示项目的名称、作者、修改日期、类型、大小以及项目的位置的列。示出了作者列表951-954,分别对应于Author 1-4(作者1-4)。
图34所示是在其中从图33的列表选择“Author 1(作者1)”的屏幕显示的示图。作者1的文档包括文档951A和951B,分别对应文档1和2。示出文档951A由作者1创作,在2001年7月11日修改,该文档是Microsoft Execl文件,占用282Kb的存储,并从位置
\\server1\folder2获得。示出文档951B由作者1创作,在2002年12月22日修改,该文档是Microsoft Word文件,占用206千字节的存储器,并且物理地储存在位置My Documents\folder1中。文档951A和951B的位置也说明本发明的虚拟文件夹可以包含来自不同物理的位置项目,如后文所详细描述的。
图35所示是用于创建新库的例程960的流程图。库的一个示例是上文参考图10描述的文档库。一般而言,库包括可以共同关联的文件的有用类型的大组。例如,照片可以是一个库,音乐可以是另一个库,文档可以是再一个库。库可以提供与特定类型的项目相关的工具和活动。例如,在照片库中,有许多与操作照片相关的工具和过滤器,如用于创建放映幻灯片或共享图片的工具和过滤器。如图35所示,在块962,创建新库,包括具有所选择的特征的项目。在块964,将所选择的项目分组为库。在块966,提供了与项目的所选择的特征或其他所期望的功能相关的工具和/或活动。
图36所示是在其中示出了可用库的集合的屏幕显示的示图。如图36所示,库包括文档库971、照片和视频库972、音乐库973、消息库974、联系人库975以及电视和电影库976,还有所有项目的库977。示出所有项目的库977包括275个项目,是来自所有其它组合的库的项目的总数。信息行644指示总共有275个项目,占用700MB的存储器。应当注意,文档库971是上文参考图10所描述的库。
图37所示是用于定义虚拟文件夹集合的范围的例程990的流程图。如后文所详细描述的,虚拟文件夹系统能够表示来自多个物理位置(如,不同的硬盘驱动器、不同的计算机、不同的网络位置等等)的项目,使得对用户而言,所有项目都是容易访问的。例如,可以在单个显示上向用户呈现来自多个物理位置的音乐文件,并且一次操作所有的文件。
如图37所示,在块992,定义了要从其提取项目的物理位置的范围。在块994,响应于查询,从范围中定义的物理位置提取项目。在块996,所有由查询提取的项目在单个显示器上呈现。
图38所示是可以形成虚拟文件夹集合的范围的不同源的框图。如图38所示,系统1000可包括当前计算机1010、另外的计算机1020、外部可移动存储1030以及网络1040上的位置。描述总体范围1001包括从其提取用户的项目来创建集合的所有物理位置。范围可由用户设定和修改。如上所述,其它示图说明了项目可以来自不同的物理位置,如图34示出来自服务器和当前计算机的My Documents文件夹的不同文档,而在图18中示出的物理地储存在多个位置的物理文件夹。
图39所示是用于在虚拟文件夹集合中包括非文件项目的例程1080的流程图。非文件项目与通常位于物理文件存储中的文件项目形成对比。非文件项目的示例是诸如电子邮件或联系人的项目。如图39所示,在块1082,使用数据库来包括可以由查询搜索的非文件项目以及文件项目。在块1084,响应于查询,提取非文件项目和文件项目来匹配该查询。在块1086,在显示器上呈现匹配查询的非文件项目和文件项目。
图40所示是显示各种非文件项目的屏幕显示的示图。如图40所示,项目被过滤为包含“John”的项目。示出的项目包括联系人项目1101、电子邮件项目1102以及文档项目1103和1104。联系人项目1101和电子邮件项目1102是非文件项目。本系统允许与常规文件一起包括这类非文件项目,使得它们能够如所期望的由用户组织并操作。如上文参考图2所描述的,这类非文件项目可以整体地包含在关系数据库230中,关系数据库230另外还包括关于文件的属性的信息。
如下文更详细地描述的,可以共享静态或动态的虚拟文件夹。静态和动态列表的共享允许用户共享所选择的项目。被共享者被授予对列表中的项目的许可,并且当列表改变时,更新这些许可,使得被共享者继续具有对列表的当前项目的访问权限。
图41所示是存储器系统4100的框图,包括静态列表和一组被引用的项目。存储器系统4100包括容纳静态列表的存储器位置4110、容纳项目A的存储器位置4210、以及容纳项目B的存储器位置4230。存储器位置4110处的静态列表包括对项目A的引用和对项目A的注释、以及对项目B的引用和对项目B的注释。这些注释不是实际项目的一部分,但是属于列表。静态列表类型的某些示例是购物列表、音乐播放列表和图片的幻灯片演示。
图42所示是用于共享静态列表的例程4200的流程图。在块4210,共享者指示静态列表应当被共享。在判别框4220,确定共享者是否具有共享每一项目的许可。如果某些项目不能被共享,则例程继续到块4320,其中在共享时通知共享者,被共享者可能无法访问所注明的项目。如果每一项目都可以被共享,则例程在块4250继续。
在确定共享者是否具有共享每一项目的许可的过程中,在一个实施例中,列表本身是对其确定许可的第一个项目。换言之,第一个步骤是确定共享者是否有共享列表本身的许可。如果共享者没有共享列表的许可,则通知共享者,他们没有共享列表的许可,例程结束。如果共享者的确具有共享列表的许可,则对由该列表引用的每一项目确定共享者是否有共享每一项目的许可。如果共享者没有共享特定项目的许可,则通知共享者,该项目不能被共享。在过程的结束,对于共享者没有许可来共享的项目的集合,例程在块4250继续。
在判别块4250,确定共享者是否指示了应当向被共享者提供与只读访问相反的读写访问。如果共享者指示不应当提供读写访问,则例程继续到块4260,其中,向被共享者提供只读许可。如果共享者指示被共享者应当具有读写访问,则例程继续到块4270,其中,向被共享者提供读写许可。在块4280,向被共享者授予对静态列表本身以及静态列表中引用的任何项目的指定访问权限。被共享者然后能够远程地从共享者的计算机访问静态列表及其引用的项目。
图43所示是用于对添加到静态列表/从静态列表中移除的项目重新许可的例程4200的流程图。在块4310,共享者从静态列表中添加或移除项目。在块4320,对项目进行重新许可,以向静态列表的被共享者授予或移除权限。作为一个示例,如果共享者从列表中移除了图片,则被共享者也应当失去对该图片的许可。或者,如果共享者向播放列表添加歌曲,则被共享者将被授予对该歌曲的访问权限。在一个替换实施例中,当向来往于静态列表时,项目也可以被动态地许可,因为静态列表的实际定义生存在数据库中,并且可以在它变化时被监视。
图44所示是用于创建动态列表的例程4400的流程图。在块4410,用户提供用于创建动态列表的范围和一组标准。在块4420,处理器将范围和该组标准传递到关系数据库。在块4430,关系数据库将结果提供回处理器。在块4440,处理器提供回结果,作为动态列表中的项目。
如上文相对于图10所详细描述的,某些虚拟文件夹,如库,依赖于动态列表来创建。例如,用户通常到他们的文档库以找出他们的文档。文档库是一种文档列表类型。列表的范围可以被设置为在本地机器上可用的数据存储,或者作为另一示例,可包括储存在网络上所有机器上的数据。
图45所示是存储器系统4500的框图,包括动态列表以及一组引用的项目。存储器系统4500包括容纳动态列表的存储器位置4510、容纳项目A的存储器位置4520、容纳项目B的存储器位置4530以及容纳项目C的存储器位置4540。储存在存储器位置4510处的动态列表具有包括存储器系统4500的所有的范围,并具有包括情况=X以及客户=100的标准。满足标准的所引用的项目包括对项目A的信用和对项目B的引用。储存在存储器位置4520处的项目A具有情况=X以及客户=100的属性,并且储存在存储器位置4530处的项目B具有情况=X以及客户=99的属性。由于项目C的客户=99的属性不匹配储存在存储器位置4510处的静态列表的规则,因此项目C不在列表中引用。
图46所示是用于共享动态列表的例程4600的流程图。在块4610,共享者指示动态列表要被共享。在判别块4620,确定共享者是否具有共享列表中的每一项目的许可。如果某些项目不能被共享,则例程继续到块4630,其中,在共享时通知共享者,被共享者可能无法访问所注明的项目。如果每一项目都能被共享,则例程继续到判别块4640。
在确定共享者是否具有共享每一项目的许可的过程中,在一个实施例中,列表本身是要对其确定许可的第一个项目。换言之,第一个步骤是确定共享者是否具有共享列表本身的许可。如果共享者没有共享列表的许可,则通知共享者,他们没有共享列表的许可,并且例程结束。如果共享者的确具有共享列表的许可,则对由列表应用的每一项目,确定共享者是否具有共享每一项目的许可。如果共享者没有共享特定项目的许可,则通知共享者,该项目不能被共享。在过程的技术,对于共享者没有共享许可的项目的集合,例程继续到判别块4640。
在判别块4640,确定共享者是否希望仅以静态列表格式共享项目。换言之,确定共享者是否希望以静态列表而非动态列表形式共享当前项目。如果要共享静态列表,则例程继续到块4650,其中,生成表示当前动态列表中的内容的静态列表,并且如上文相对于图42所描述的共享静态列表。如果共享者不希望仅以静态列表形式共享,则例程继续到块4660。
在块4660,满足动态列表的标准的所有项目被共享。这意味着项目被保留在发生共享的机器上其各自的存储位置,并且许可这些项目以允许被共享者能够访问这些项目。在该过程的结束,被共享者能够从共享者的计算机远程地访问列表机器引用的项目。
图47所示是用于重新许可从动态列表中移除或添加的项目的例程4700的流程图。在块4710,项目改变其属性,使得它满足或不再满足动态列表标准。在块4720,重新许可项目,以适当地授予或移除动态列表的被共享者访问权限。换言之,如果当前在动态列表上的项目改变了其属性,使得它不再满足动态列表的标准,则该项目被重新许可,以移除动态列表共享者的访问权限。以同一方式,如果先前不在动态列表中的项目改变其属性,使得它们现在落入该范围中,并满足动态列表的标准,则它们被重新许可,以向动态列表的被共享者授予访问权限。
图48所示是存储器系统4800的框图,包括从其移除了项目的动态列表。存储器系统4800包括容纳动态列表的存储器位置4810、容纳项目A的存储器位置4820、容纳项目B的存储器位置4830以及容纳项目C的存储器位置4840。存储器系统4800类似于图45的存储器系统4500。在图48的示例中,存储器位置4830处的项目B改变其客户属性,使得客户=99。由于这一改变,项目B不再满足动态列表要求客户=100的标准。由此,项目B从储存在存储器位置4810处的动态列表中移除。动态列表的被共享者由此不再具有对项目B的许可。
图49所示是存储器系统4900的框图,包括向其添加项目的动态列表。存储器系统4900包括容纳动态列表的存储器位置4910、容纳项目A的存储器位置4920、容纳项目B的存储器位置4930、容纳项目C的存储器位置4940以及容纳新的项目D的存储器位置4950、相对于图48的存储器位置4810处的动态列表,图49的存储器位置4910处的动态列表被示出为添加了对项目C和D的引用。出现这一情况是因为存储器位置4940处的项目C以及存储器位置4950处的项目D改变其客户属性,或将其设为客户=100。这一改变导致项目C和D现在满足存储器位置4910处的动态列表的标准,并且由此动态列表现在包括对这些项目的引用。这导致动态列表的被共享者现在被许可对项目C和D的访问。
图50所示是用于调用共享API的例程5000的流程图。如下文更详细地描述的,除列表之外,个别的项目也可被共享。在块5010,调用关于列表或个别项目的共享的共享API。在块5020,响应于调用,向个别项目或列表及列表所引用的项目提供许可。
诸如上文描述的编程接口可用作列表或个别项目的共享过程的一部分。如相对于图51A-51L更详细地描述的,诸如共享过程中使用的编程接口(或简称之为接口)可以被视为用于令代码的一个或多个片断能与由代码的一个或多个其它片断提供的功能进行通信或对其进行访问的任一机制、过程、协议。或者,编程接口可以被视为能够通信地耦合至其它计算机的一个或多个机制、方法、函数调用、模块等的系统的组件的一个或多个机制、方法、函数调用、模块、对象等。上述语句中的术语“代码片断”旨在包括代码的一个或多个指令或代码行,并包括,如,代码模块、对象、子例程、函数等等,无论应用的术语是什么、或代码片断是否被单独编译、或代码片断是否被提供为源码、中间码或对象代码、代码片断是否在运行时系统或进程中使用、或它们是否位于同一或不同机器上或跨多个机器分布、或由代码片断表示的功能是否完全由软件、完全由硬件或硬件和软件的组合来实现。
概念上,编程接口可以被一般地察看,如图51A或图51B所示的。图51A示出了接口“接口1”为管道,第一和第二代码片断通过该管道进行通信。图51B示出了接口包括接口对象I1和I2(可以是或不是第一和第二代码片断的部分),它们令系统的第一和第二代码片断能通过介质M进行通信。在图51B中,可以认为接口对象I1和I2为同一系统的单独接口,并且也可以认为对象I1和I2加上介质M构成了接口。尽管图51A和51B示出了双向流程以及该流程的每一侧上的接口,某些实现可仅具有一个方向上的信息流(或如下所述没有信息流),或仅具有一侧的接口对象。作为示例而非局限,诸如应用编程接口(API)、入口点、方法、函数、子例程、远程过程调用和组件对象模型(COM)接口等术语包含在编程接口的定义之内。
这类编程接口的各方面可包括第一代码片断向第二代码片断发送信息的方法(其中,“信息”以其最广泛的意义使用,并包括数据、命令、请求等等);第二代码片断接收信息的方法;以及该信息的结构、序列、语法、组织、模式、定时和内容。在这一点上,只要信息以接口所定义的方式传输,底层传输介质本身可以对接口的操作不重要,无论该介质是有线还是无线,或两者的组合。在某些情况下,在常规意义上,当一个代码片断仅访问由第二代码片断执行的功能时,信息可不在一个或两个方向上传输,因为信息传输可以是或者通过另一机制(如,信息被放置在与代码片断之间的信息流分离的缓存、文件等中)或者不存在。这些方面的任一个或所有可以在给定的情况下重要,如,取决于代码片断是否是松耦合或紧耦合配置的系统的一部分,并且因此该列表应当被认为是说明性的而非限制。
编程接口的这一概念对本领域的技术人员是已知的,并且可以阅读上述本发明的详细描述而清楚这一概念。然而,有其它方法来实现编程接口,并且除非明显地排除,这些方法也由所附权利要求书包含在内。这些其它方法看似比图51A和51B的视图更精密或复杂,但是它们仍执行类似的功能来完成同一整体结果。现在简要描述编程接口的某些说明性替换实现。
图51C和51D示出了分解实现。依照分解实现,可以通过将通信分裂成多个离散通信来间接地实现从一个代码片断到另一个的通信。这在图51C和51D中示意性地描述。如图所示,可以按照功能的可分组来描述某些接口。由此,可以分解图51A和51B的接口功能来达到相同的结果,如同可以在数学上提供24,或2乘2乘3乘2一样。因此,如图51C所示,可以细分由接口“接口1”提供的功能以将该接口的通信变换成多个接口“接口1A”、“接口1B”、“接口1C”等,而达到相同的结果。如图51D所示,由接口I1提供的函数可以被细分成多个接口I1a、I1b、I1c等,而达到相同的结果。类似地,从第一代码片断接收信息的第二代码片断的接口I2可以被分解成多个接口I2a、I2b、I2c等。当分解时,包括在第一代码片断中的接口的数量不需要匹配包括在第二代码片断中的接口的数量。在图51C或51D的任一情况下,接口“接口1”和I1的功能性精神分别与图51A和51B的保持相同。接口的分解也可遵从联合、通信和其它数学性质,使得分解较难识别。例如,命令操作可以是不重要的,并且因此由接口完成的功能可以在达到该接口之前由另一段代码或接口较好地完成,或者由系统的单独组件执行。此外,编程领域的普通技术人员可以理解有各种方式来作出不同的函数调用而达到相同的结果。
图51E和51F示出了重定义实现。依照重定义实现,在某些情况下,可能忽略、添加或重定义编程接口的某些方面(如参数),而仍达到预期的结果。这在图51E和51F中示出。例如,假定图51A的接口“接口1”包括函数调用Square(input,precision,output)(平方),它包括三个参数,input(输入)、precision(精度)和output(输出),并且由第一代码片断向第二代码片断发布。如果中间参数precision在给定的情形下无关紧要,如图51E所示,它也可以被忽略或甚至由meaningless(无意义)(在这一情况下)参数来替换。也可以添加无关紧要的additional(另外)参数。在任一情况下,只要在输入由第二代码片断平方之后返回输出,就可以达到square(平方)的功能。Precision也有可能对计算系统的某一下游或其它部分是极有意义的参数;然而,一旦认识到precision对计算平方这一有限目的不是必需的,它可以被替换或忽略。例如,不是传递一个有效的pricision值,而是在不对结果产生不利地影响的情况下传递诸如出生日期等无意义的值。类似地,如图51F所示,接口I1由接口I1′替换,它被重新定义来忽略或向接口添加参数。接口I2可类似地被重定义为接口I2′,它被重定义来忽略不必要的参数,或可在别处处理的参数。此处的要点是在某些情况下,编程接口可包括对某一目的而言所不需要的方面,诸如参数,因此可以忽略或重定义它们,或在别处处理它们用于其它目的。
图51G和51H示出了内嵌代码实现。依照内嵌代码实现,合并两个单独的代码模块的一些或全部功能也是可行的,使得它们之间的“接口”改变形式。例如,图51A和51B的功能可以被分别转化到图51G和51H的功能。在图51G中,图51A的先前的第一和第二代码片断被合并成包含两者的模块。在这一情况下,该代码片断仍可以彼此通信,但是该接口可以适用于更适合单个模块的形式。由此,例如,正式的调用(Call)和返回(Return)语句将不再必需,但是依照接口“接口1”的类似的处理或响应仍是有效的。类似地,如图51H所示,图51B的部分(或所有)接口I2可以内嵌地写入接口I1来形成接口I1″。如图所示,接口I2被划分成I2a和I2b,并且接口部分I2a内嵌在接口I1中书写代码来形成接口I1″。对于具体的示例,考虑图51B的接口1执行函数调用square(input,output),它由接口I2接收,在由第二代码片断处理传递到input的值(对其求平方)之后,它被使用output传递回已求平方的结果。在这一情况下,由第二代码片断执行的处理(对input求平方)可以由第一代码片断在不调用该接口的情况下执行。
图51I和51J示出了脱离实现。依照脱离实现,可以通过将通信分裂成多个离散的通信来间接地完成从一个代码片断到另一个的通信。这在图51I和51J中示意性地描述。如图51I所示,提供了中间件的一个或多个片断(脱离接口(DivorceInterface),因为它们从原始的接口脱离的功能和/或接口函数),以转化第一接口“接口1”上的通信,使得它们符合不同的接口,在本情况下为“接口2A”、“接口2B”和“接口2C”。这可以在这样一种情况中完成,例如,依照“接口1”协议设计应用的已安装基础与如操作系统进行通信,但是然后改变该操作系统来使用不同的接口,在本情况下为接口“接口2A”、“接口2B”和“接口2C”。要点是改变了由第二代码片断使用的原始接口,使得它不再与第一代码片断所使用的接口兼容,因此使用中介来令旧接口和新接口兼容。类似地,如图51J所示,可以使用脱离接口DI1引入第三代码片断以从接口I1接收信息,并使用脱离接口DI2引入第三代码片断以向例如接口I2a和I2b发送接口功能,重新设计接口I2a和I2b以使用DI2,但是提供相同的功能性结果。类似地,DI1和DI2可共同工作以将图51B的接口I1和I2的功能转换成一新操作系统,而提供相同或类似的功能性结果。
图51K和51L示出了重写实现。依照重写实现,再一种可能的变化是动态地重写代码,使用别的东西来替换接口的功能,而仍达到相同的总体结果。例如,可以有一种系统,其中,向执行环境(如由.Net框架提供的环境、Java运行时刻环境或其它类似的运行时刻类型环境)中的及时(Just-in-Time)(JIT)编译器或解释器提供了中间语言(如Microsoft IL、Java ByteCode等)中呈现的代码片断。可以书写JIT编译器以动态地将通信从第一代码片断转化到第二代码片断,即,令它们符合第二代码片断(原始或不同的第二代码片断)所需要的不同接口。这在图51K和51L中有描述。如图51K中所看见的,这一方式类似于上述的脱离情形。它可以在这样一种情况下完成,例如,依照“接口1”协议设计应用的已安装基础操作系统进行通信,然后改变该操作系统以使用不同的接口。JIT编译器可以用于令已安装基础应用的空中通信符合操作系统的新接口。如图51L所描述的,可以应用这一动态重写接口的方法以进行动态分解,或者改变接口。
也应当注意,上述通过替换实施例实现与接口相同或相似的结果的情形也可以以各种方式串行、并行或与其它干预代码组合。由此,上文呈现的替换实施例并非相互穷尽,并且可以被混合、匹配和组合以产生与图51A和51B中所呈现的一般情形相同或等效的情形。也应当注意,如同大多数编程构造,本发明可能未描述达到与接口相同或相似的功能的其它类似的方式,但是它们仍由本发明的精神和范围来表示,即,应当注意,它至少部分地是由作为接口的值的基础的接口表示的功能或由其启用的有利结果。
如下文参考图52-59更详细地描述的,除静态和动态列表的共享之外,个别的项目也可被共享出来。可以有许多用户希望共享单个文件的情形,例如,用户希望获取反馈的大演示。在这一情况下,用户可能不希望共享具有他们所有工作的文件夹,仅希望共享包含该演示的那个文件。其它示例可以是用户希望共享歌曲、联系人或电子邮件。
图52所示是用于共享项目的例程5200。在块5210,用户选择要共享的项目。在块5220,用户选择要与其共享项目的被共享者。在块5230,用户选择要分配给被共享者的许可。作为许可的一个示例,用户可能希望仅向特定被共享者给予对项目的访问权限。
图53所示是用于确保被选中来共享项目的被共享者能够访问项目的例程5300的流程图。在块5310,项目被保留在共享者机器上的原地,而系统开始确保被共享者能够访问项目的过程。换言之,当项目要被共享时,它们不从共享者的机器中移除,相反,向被共享者提供通过共享者的机器对项目的访问。
在块5320,系统验证存在从其可由被共享者访问项目的文件共享存在,如下文参考图54更详细地讨论的。在块5330,系统验证访问控制列表(ACL)和任何其它许可被设置,如下文参考图55更详细地讨论的。在块5340,系统完成工作以处理诸如加密文件系统(EFS)和数字全息管理(DRM)等保护系统的问题,如下文参考图56更详细地讨论的。在块5350,配置防火墙,如下文参考图57更详细地讨论的。在块5360,记录共享事务的细节,如下文参考图58更详细地讨论的。
图54所示是用于确保存在可从其访问被共享的项目的文件共享的例程5400的流程图。在块5410,系统验证在共享的项目上是否存在文件共享。在块5420,当已存在文件共享时,使用该文件共享来远程地使文件可用。在块5430,系统验证文件共享上的许可是正确的,以允许被共享者访问要共享的项目。
图55所示是用于验证设置了ACL和任何其它许可的例程5500的流程图。在块5510,当要将项目共享出来时,询问用户他们希望与谁共享项目。在块5520,询问用户他们希望给予被共享者什么许可。作为许可的一个示例,用户可能希望给予特定的被共享者只读许可,或者,可提供改变被共享的项目的许可。在块5530,基于对被共享者所请求的许可,系统在项目上设置安全ACL,以反映这一许可并授予共享者所请求的许可。
图56所示是用于完成处理EFS和DRM的任何问题的工作的例程5600的流程图。在判别块5610,确定要共享的项目是否由加密文件系统(EFS)或其它保护来保护。如果对于项目没有保护,则例程结束。如果对项目存在保护,则例程在判别块5620继续。
在判别块5620,对要共享的项目确定共享是否被机器上的政策或项目上的DRM允许。如果共享不被允许,则例程在块5630继续,其中,提供项目被保护并且不能被共享的通知。如果在判别块5620,确定共享是被允许的,然后例程继续到块5640,其中,解决EFS或其它保护的任何问题,以允许项目被共享。
图57所示是用于配置防火墙的例程5700的流程图。在判别块5710,确定是否启用了防火墙。默认地,在大多数计算机上启用了防火墙,并且期望用户仍能够在这种情况下安全地共享。如果在判别块5710确定未启用防火墙,则例程结束。如果启用了防火墙,则例程前进到块5720。在块5720,系统解决问题以确保防火墙将允许被共享者访问要共享的项目。
图58所示是用于记录共享事务细节的例程5800的流程图。在块5810,跟踪共享事务细节,包括诸如共享什么、与谁共享以及何时共享等细节。在块5820,记录共享事务细节,以供共享者稍后访问。换言之,该信息的记录允许共享者稍后检查并找出从其机器共享的所有项目是什么、他们与谁共享这些项目、以及这些被共享者具有什么访问权限。
可以理解,图53-58的例程执行了令要共享的项目对被共享者可用所需的任务。在一个实施例中,为令要共享的项目易于被找到,共享者也可令系统向被共享者发送用于直接从共享者机器访问共享的项目的链接。另外,系统也可向被共享者提供查询共享者机器来看共享者与他们共享了什么的能力。
图59所示是在用于共享项目的助手例程5900的各页面之间的导航的框图。在块5910,提供了助手页面1,用于“列表制作器集成”。一般而言,该页面仅当用户选择了一个以上项目来共享然后进入助手例程时显示。该页面的目的是允许用户看见被选中来共享的项目,并允许用户修改列表。换言之,如果用户选择了一个以上项目,然后选择共享任务,则然后启动共享助手例程,并且向用户呈现列表制作器集成共享页面。该页面向用户示出了被选中的项目的列表,并允许用户向列表添加或移除项目。在一个实施例中,列表视图的列可示出项目的名字、顺序、大小和标题。从块5910处的助手页面1,用户可选择“下一步”按钮5911来移至块5920处的助手页面2。
在块5920,提供了助手页面2,用于“EFS/DRM检查”。在一个实施例中,该页面仅当用户选择的一个或多个项目由EFS或DRM保护时显示。该页面的目的是通知用户,他们所共享的内容由EFS或DRM共享,并询问用户,他们是否仍希望试图共享该内容,并提供关于他们想要如何共享内容的选项目。在该页面上,如果文件用EFS来加密,则用户具有关于是保留该文件用EFS加密并让助手例程试图向被共享者给予对加密文件的访问权限,还是让助手例程从项目中移除加密的选择。从块5920处的助手页面2,用户可从选择“返回”按钮5921,以返回到块5910处的助手页面1,或者选择“下一步”按钮5922,以继续到块5930处的助手页面3。
在块5930,提供助手页面3,用于“人选取器/许可”。在一个实施例中,该页面总是被显示,并且是助手例程的主页面。从该页面,用户可选择他们希望与谁共享以及他们希望给予与其共享的用户什么许可。在一个实施例中,如果仅共享一个项目,则该项目的图标被显示,而如果共享了多个项目,则显示栈。在一个实施例中,助手页面3可以通过用户点击标签为“键入名字并点击‘添加到列表’”的图标来进入。一旦用户输入了行中的类型的名字,用户点击“添加到列表”图标,并将被共享者添加到他们希望与其共享项目的用户列表。在一个实施例中,“自动建议”下拉菜单可包含来自用户的个人联系人存储的人,以及用于存在SID的近来使用的所有联系人的高速缓存。在一个实施例中,存在可从一按钮来访问的模态地址簿,该按钮允许用户选取其机器上的其他人,以及其域或城堡(castle)上的其他人。用户能够选择一个或多个人或组。在一个实施例中,被共享者表的右边的列允许共享者对每一被共享者设置许可。另外,各种许可选项目可包括诸如阅读者、编辑者、所有者和移除访问等级别。默认许可可以是阅读者级别。对于移除被共享者,在一个实施例中,用户可以仅从列表中删除所选中的被共享者。从块5930处的助手页面3,用户可选择“返回”按钮5931以返回到块5920处的助手页面2,或可选择“前进”按钮5932以继续到块5940处的助手页面4,或选择“共享”按钮5933以继续到块5950处的助手页面5。
在块5940,提供助手页面4,用于“前进共享”。在一个实施例中,该页面仅当用户选择“前进”选项目按钮5932时显示。在一个实施例中,前进共享选项目可包括诸如:改变使用的文件共享的名字;设置对共享的连接数量的限制;设置共享的高速缓存行为;以及设置用户的自定义ACL而非仅预定义的角色。从助手页面4,用户可选择“返回”按钮5941或“下一步”按钮5942,以返回到块5930处的助手页面3。
在块5950,提供助手页面5,用于“共享进度”。在一个实施例中,该页面总是被显示为进度页面。该页面的目的是当用户的计算机正在完成共享所请求的项目的工作时显示进度。在一个实施例中,该页面仅当共享项目的操作花费了被指定的时间量(例如,2秒)更多的时间时被显示。换言之,当用户确认其选择并且选择块5930处的助手页面3的“共享”按钮5933时,安全子系统在项目上设置安全性,并创建必要的共享。对于大多数简单的分层结构,这将是一个快速的构成,然而对于花费更长时间量的过程,可显示块5950处用于“共享进度”的助手页面5。一般而言,该页面旨在提供指示系统正在运作的可是提示(例如,动画),并可具体地示出系统发生了什么。从块5950的助手页面5,用户可选择“取消”按钮5951以前进到块5960处的助手页面6,或可选择“下一步”按钮5952以前进到块5970处的助手页面7。
在块5960,提供助手页面6,用于“取消共享”。该页面当用户在块5950的助手页面5上点击“取消”按钮5951以取消共享操作时被显示。点击“取消”按钮停止共享所请求的项目的操作。在一个实施例中,如果用户取消共享过程,则提供一确认对话框,以告诉用户,用于共享的设置未完成应用。
在块5970,提供了助手页面7,用于“确认/通知”。在一个实施例中,该页面总是被显示为确认和通知页面。该页面的目的是告诉用户,项目被成功地共享,或者如果有任何错误,则也允许用户向被共享者发送适当的通知。在一个实施例中,用户可通过在链接上点击选择向被共享者发送邀请。在一个实施例中,如果选择了邀请,则使用默认邮件客户端发送通知。在一个实施例中,当改变共享时,仅被添加到共享的新的人可以在电子邮件通知中预填充,并且当共享被移除时,不发送任何消息。当发送电子邮件消息时,它包括到共享的项目或文件夹的路径,以及帮助接收者理解邀请/通知的文本,诸如“我已经与你共享了项目,因此你可以通过网络来访问它。为获得共享的项目,点击浏览器中的X或类型X”。助手页面7也用于显示当系统无法共享所请求的项目时可能会出现的显示错误。
尽管说明并描述了本发明的较佳实施例,可以理解,可以在不脱离本发明的精神和范围的情况下在其中作出各种变化。