CN101861578A - 网络操作系统 - Google Patents
网络操作系统 Download PDFInfo
- Publication number
- CN101861578A CN101861578A CN200880116335A CN200880116335A CN101861578A CN 101861578 A CN101861578 A CN 101861578A CN 200880116335 A CN200880116335 A CN 200880116335A CN 200880116335 A CN200880116335 A CN 200880116335A CN 101861578 A CN101861578 A CN 101861578A
- Authority
- CN
- China
- Prior art keywords
- data
- xml
- application
- assembly
- document
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明涉及网络操作系统。一般地说,本发明涉及一种提供利用计算机网络的连接性的更高效方式的网络操作系统。在一个实施例中,实现XML虚拟机以接受以XML编程语言编写的高级应用代码作为输入。提供用于将以XML编程语言编写的应用代码翻译或解释成适于跨计算机平台执行的代码的功能。此外,XML虚拟机支持模型视图控制器(MVC)设计模式,该设计模式便于从应用到公共数据模型的真实数据抽象。可以创建和执行多实例应用,这些实例的每一个潜在支持多个视图。
Description
相关申请的交叉引用
本申请要求以下申请的权益:2007年9月28日提交的临时申请No.60/976,216、2007年9月28日提交的临时申请No.60/976,222、2007年9月28日提交的临时申请No.60/976,246、2007年9月28日提交的临时申请No.60/976,249、2007年9月28日提交的临时申请No.60/976,252、2007年9月28日提交的临时申请No.60/976,258、2007年9月28日提交的临时申请No.60/976,266、2007年9月28日提交的临时申请No.60/976,269、2007年9月28日提交的临时申请No.60/976,275、2007年9月28日提交的临时申请No.60/976,281、2007年9月28日提交的临时申请No.60/976,283、2007年9月28日提交的临时申请No.60/976,292、2007年9月28日提交的临时申请No.60/976,301、2007年9月28日提交的临时申请No.60/976,304、2007年9月28日提交的临时申请No.60/976,308、2007年9月28日提交的临时申请No.60/976,311、2007年9月28日提交的临时申请No.60/976,312、2007年9月28日提交的临时申请No.60/976,320、2007年9月28日提交的临时申请No.60/976,325、2007年9月28日提交的临时申请No.60/976,327和2007年9月28日提交的临时申请No.60/976,339,通过引用将所有这些申请并入本文。
背景技术
被构造为根据例如互联网协议(“IP”)的公共协议交换数据的计算机网络日益用于执行远程系统与用户之间的各种任务。从计算机网络提供的连接性使组织等寻找便于参与协作过程的方案。在这点上,许多现有的Web站点、网络门户和分布式应用使用户能够以多种方法共享数据和进行协作。为了进一步支持协作,使得资源日益可作为网络的服务而获得。一般地说,服务是指可从与任何基础技术分离的网络进行访问的软件和硬件。相应地,网络服务常被描述为“松散耦合”到操作系统、编程语言和执行服务的硬件组件。结果,即使利用不同的基础技术,仍可以组合网络服务以创建分布式应用。
术语“云”计算常用于描述从网络获得越来越多的服务的趋势。随着网络带宽的增加以及连接性的提高,云计算的应用和经济刺激将必然继续扩张。然而,现有的系统利用以机器为中心的操作系统来管理网络上的通信以及帮助进行协作。在这点上,在开发出例如互联网的计算机网络之前,已经建立了以机器为中心的操作系统的核心设计。结果,现有的系统不能提供易于将网络通信集成到应用和用户体验的其它方面中的一般化协作环境。相反,开发便于共享和参与协作过程的应用仍然艰难并且最终对于大多数用户和/或组织来讲过于困难或昂贵。因此,需要一种提供补充支持计算机网络的连接性的更加有效的方法的网络操作系统。
发明内容
一般地说,本发明涉及一种提供补充支持计算机网络的连接性的更加有效的方法的网络操作系统。在一个实施例中,实现XML虚拟机,该XML虚拟机接受以XML编程语言编写的高级应用代码作为输入。提供用于将以XML编程语言编写的应用代码翻译或解释成适于跨计算机平台执行的代码的功能。此外,XML虚拟机支持模型视图控制器(“MVC”)设计模式,该设计模式便于进行从应用到公共数据模型的真数据抽象。可以创建和执行多实例应用,每个实例潜在支持多个视图。
附图说明
由于通过参考结合附图在下文进行的详细描述能够更好地理解本发明,将更易于理解本发明的上述方面以及许多附带优点,在附图中:
图1是适于示出本发明的各方面的包括服务器端数据中心和多个客户机计算机的网络环境的示例性图示表示;
图2是适于示出本发明的各方面的包括服务器端数据中心和多个客户机计算机的网络环境的示例性图示表示;
图3是示出适于实现本发明的各方面的计算装置的示例性硬件架构的框图;
图4A-C是可实现本发明的示例性平台环境的框图;
图5A-B是适于示出本发明的各方面的包括服务器端数据中心和多个客户机计算机的网络环境的示例性图示表示;
图6A-B示出适于示出本发明的各方面的与应用关联的示例性过程和UI XML文档;
图7A-C示出可视地表示基于语义在图6A-B内描述的应用的图形元素的示例性图形显示;
图8A-B是适于示出本发明的各方面的组件的图示表示;
图9是示例性管理器被构造为实现本发明的各方面的框图;
图10A-C是示出根据本发明的一个实施例的执行处理以打开应用包的示例性应用初始化例程的图;
图11是示出用于打开并启动在应用的过程代码内定义的逻辑的执行的例程的示例性流程图;
图12A-B示出了示出被构造为使得执行过程步骤内的操作的执行方法的示例性流程图;
图14A-14B是示出适于示出本发明的各方面的对象之间的交互的图;
图15示出了示出根据本发明的一个实施例的实现功能的动作处理例程的示例性流程图;
图16是根据本发明的一个实施例的将对象绑定至数据模型的绑定处理例程的图;
图17A-B是示出了根据本发明的一个实施例的使得响应于正激活的触发器执行应用代码的触发器激活例程的图;
图18是被构造为执行请求以基于求值指引应用执行的流程的判断处理例程的图;
图19是根据本发明的一个实施例的描述用于实现改变操作的逻辑的改变处理例程的图;
图20A-C是示出了根据本发明的一个实施例的实现用于修改数据模型的内容的逻辑的数据更新例程的图;
图21是根据本发明的一个实施例的描述用于在数据模型内设置组件规则的逻辑的设置规则例程的图;
图22是根据本发明的一个实施例的向对象通知数据更新的通知监听器例程的图;
图23是根据本发明的一个实施例的使得渲染应用视图的渲染例程的图;
图24示出了根据本发明的一个实施例的适于描述应用与各种示例性数据源进行交互的方式的框图;
图25示出了适于描述本发明提供的XML文件系统的框图;
图26示出了根据本发明的一个实施例的被构造为实现网络上数据的同步的消息服务器;
图27示出了根据本发明的另一个实施例的消息服务器的附加方面;
图28A-28D示出了用于从本发明提供的文件系统获取文件的示例性方法;
图28E示出了适于示出本发明的各方面的示例性文件的摘录;
图29示出了根据本发明的一个实施例的被构造为获取文件列表的方法;
图30A-30C示出了根据本发明的另一个实施例的在XML文件系统内创建文件的方法;
图31A-31E示出了根据本发明的另一个实施例的打开XML文件系统内的现有文件的方法;
图32示出了根据本发明的一个实施例的在客户机计算机上进行网络操作系统的启动的方法;
图33示出了根据本发明的另一个实施例的挂接网络操作系统组的方法;
图34A示出了根据本发明的一个实施例的将客户机计算机从联机状态转变到离线状态的方法;
图34B示出了根据本发明的另一个实施例的可用于网络协作的多个驱动器的示例性图示表示;
图35示出了根据本发明的另一个实施例的当客户机计算机已经在离线状态下操作时将客户机计算机转变回联机状态的方法;
图36示出了根据本发明的另一个实施例的按照有助于增强网络通信的方式处理创建新文件的请求的方法;
图37示出了适于描述本发明的附加方面的与聊天应用一起利用的共享数据文件;
图38示出了根据本发明的另一个实施例的由聊天应用利用的组件与数据模型之间的关系;
图39示出了根据本发明的另一个实施例的用于帮助聊天会话的共享数据文件的更新;
图40示出了根据本发明的另一个实施例的在聊天会话内执行的一组示例性通信;
图41示出了在多个客户机之间执行协作式通信时共享数据文件的使用;
图42示出了适于示出本发明的附加方面的示例性应用的用户界面;以及
图43示出了适于示出本发明的附加方面的示例性应用的用户界面。
具体实现方式
一般地说,本发明的各方面涉及便于开发互联网模式云计算的网络操作系统。在实际实施例中,这里所述的网络操作系统利用XML(可扩展标记语言)作为通用语言来表示数据。因此,下文提供的示例可以参考XML结构化数据和文档来描述网络操作系统的功能性。在这点上,在此上下文中,利用XML实现许多的好处和协同作用。然而,本领域技术人员等将认识到,在不脱离要求保护的主题的范围的情况下,可以利用这里所述之外的其它基础技术或技术组合实现本发明。此外,下文提供的说明性示例和描述并非是穷尽的或者要将本发明限制到公开的具体形式。相似地,下文所述的任何步骤可以与其它步骤或步骤组合进行互换以达到相同结果。
参照图1,下文旨在提供可用于实现本发明各方面的网络环境100的总览。如图1所示,网络环境100包括与服务器104关联的服务器端数据中心102。网络环境100还包括与用户112关联的多个客户机计算装置,这些客户机计算装置包括移动电话106、台式计算机108和瘦客户机110。在这点上,服务器端数据中心102被构造为经由网络114与移动电话106、台式计算机108和瘦客户机110进行通信,其中网络114可以被实现为局域网(“LAN”)、无线网络、例如互联网的广域网(“WAN”)等。本领域技术人员等知道,图1所示的计算装置可以被构造为在网络114上交换文件、命令和其它类型的数据。然而,由于本领域技术人员公知例如TCP/IP的网络通信协议,所以这里将不描述这些协议。
在现有系统中,在一种类型的计算装置上可用的应用程序可能与其它类型的装置不兼容。这种不兼容性产生各种问题。例如,在通用台式计算机上,用户可以利用特定应用来访问电子邮件消息。另一方面,为了在例如移动电话的有限资源装置上访问电子邮件,可能需要具有不同特征和界面的另一个程序。这种不兼容性无助于提供公同的用户体验以及使用户需要的知识量和技能最小化。此外,即使许多应用执行相似或相同的功能,针对不同类型的装置创建应用仍花费过多开发时间。
本发明的各方面可以应用于多个不同环境下,下文中的环境仅仅是一个示例。在一个实施例中,可从针对网络操作系统而启用的任何类型的计算装置访问用户的应用和数据。如图1所示,用户112可以从移动电话106、台式计算机108或瘦客户机110连接到网络114。作为响应,服务器端数据中心102将网络操作系统服务传递到适当的装置。更具体地讲,每当用户连接到网络时,可以传递和建立网络操作系统的客户机端组件和用户应用。应用在适当的客户机计算装置的本地执行而不在服务器104上执行。用户数据可以缓存在客户机计算装置上,但是将与由服务器端数据中心102保持的存储一致。因此,主要执行客户机计算装置106-110与服务器端数据中心102之间的通信,以获得文档和更新数据。例如,当客户机离线时,网络操作系统的客户机端组件使数据更新在本地缓存。当重新建立网络连接时,这些更新可以被发送至服务器端数据中心102并且与任何其它变化进行同步。
在一个实施例,网络操作系统可以提供在每一个用户计算装置上的公同体验。在这点上,在完全不同类型的计算装置上传递并建立公共桌面应用。从该公共桌面可以访问所有的用户应用程序和数据。例如,用户112可以从客户机计算装置106-110中的任何一个访问针对网络操作系统启用的单个电子邮件程序。由于可从服务器端数据中心102获得用户数据并且作为服务传递应用,不管正在使用哪个计算装置,都可以获得相同的应用(例如,电子邮件程序)和数据(例如,电子邮件消息)。
可以根据用户偏爱和其它变量定制由网络操作系统提供给客户机计算装置的服务。在这点上,维护配置数据,该配置数据定义将如何提供或者是否提供特定网络操作系统服务。例如,用户可以根据正在使用的计算装置建立偏爱以具有不同的可用应用程序或数据的集合。通过另一个示例,用户可以从包括不安全的无线连接的任何数目的接入点连接到网络114。在这种情况下,由于网络连接的不安全性质,可以建立安全属性以使得无法访问某些服务和/或数据。本领域技术人员等应该明白,上文提供的示例仅仅表示了可以利用本发明定制网络操作系统服务的一些方式。
为了方便,图1示出了可用于网络环境100中的服务器端数据中心102、服务器计算机104、移动电话106、台式计算机108和瘦客户机110,在网络环境100中可由通过网络114链接在一起的远程计算装置执行补充任务。然而,可以利用其它类型的客户机计算装置实现本发明,例如为但不限于:膝上型计算机、平板计算机、个人数字助理(PDA)、混合/嵌入式装置、机顶盒、媒体中心等。此外,本领域技术人员等将认识到,可以以不同的网络配置实现本发明并且图1所示的示例应该解释为示例性的。
现在参照图2,将描述可用于示出本发明的另外的方面的另一个网络环境200。如图2所示,服务器端数据中心202可以耦合到例如企业网络204的私有网络。在这种情况下,附加网络操作系统服务直接经由企业网络204被提供给客户机206、208和210。然而,仍然从服务器端数据中心216提供和管理网络操作系统,企业服务器端数据中心202仅仅提供附加服务。此外,相同的附加服务可以提供给企业网络204之外的客户机。在这个实例中,服务器端数据中心202经由互联网214向客户机212提供网络服务。与上文所述相似,客户机206-212可以是针对网络操作系统下启用的任何计算装置(移动电话、台式计算机、瘦客户机等)。在另一个实施例中,网络操作系统可由企业服务器端数据中心202及其附加服务直接提供,并且可以或可以不(取决于安全配置)允许对企业网络204以外的外部服务器端数据中心216进行访问。
网络操作系统被构造为便于参与协作过程。本发明的一个方面是XML文件系统,它用作能够存储包括XML文档、可执行文件、二进制文件、多媒体等的任何类型的数据的网络仓库。可在服务器端数据中心202或216实现XML文件系统以管理物理存储和数据访问。除了传统的文件系统功能以外,XML文件系统允许定义各种类型的协作空间。在示例性实施例中,所支持的协作空间的类型包括社团、组、好友以及现有协作空间内的子集(例如,子社团、子组等)。XML文件系统中的根文件夹用作建立的每个社团、组或其它协作空间的仓库。此外,可以在与各个用户关联的XML文件系统内创建文件夹和文件。在另一个实施例中,可以动态启用不同用户之间的协作,而不需要用户共享XML文件系统中的协作空间。如在下文中更加详细地描述的,提供允许用户产生和接受实时建立协作会话的请求的消息发送服务。这样,即使没有定义现有的协作空间,用户仍可以通过动态建立的协作会话来建立新的关系。
当网络操作系统的客户机端组件开始执行时,可以利用登录提示获得用户证明。为了便于透明访问,与用户关联的每个文件夹可以从XML文件系统映射为客户机上的虚拟驱动器。例如,如果用户是特定组的成员,则这个组文件夹将作为客户机上的虚拟驱动器出现。在一个实施例中,XML文件系统中的文件夹包括定义协作空间的共享资源的XML结构化数据。这些共享资源可以包括但不限于:应用、数据文档、访问和安全设置、用户列表、统计量、日历等。XML文件系统在一个实施例中还可以用作仓库或数据库以替代在网络操作系统环境上执行的一个或多个应用。如在下文中更加详细地描述的,通过本发明提供的事务管理可以对保持在协作和分布式数据库中的数据进行自动同步。通过利用这种类型的协作和分布式数据库建立应用,应用继承数据库的特征并且会易于共享数据。
由于XML文件系统遵照应用编程接口(API),所以可以有服务器端数据中心202的其它实施例。在这点上,在需要在企业内的遗留应用和数据库之上进行抽象从而能够提供新的应用或者集成在网络操作系统环境上执行的多个应用的情况下,希望可以从XML文件系统提供其它XML Web服务。XML文件系统的定制实现可以选择要支持的功能的等级。例如,在一个支持等级中,可以省去用于同步事务的支持。
除了管理数据访问以外,XML文件系统提供用于通过同步数据和协调数据更新的事务控制按便于协作的方式创建和定制用户之间的关联的集成框架。例如,应用连同任何关联的用户数据可由用户组(例如,好友)共享。共享的应用的功能和关联的用户数据连同其它资源可在保持在组或用户文件夹中的XML文档内进行表示。XML文件系统提供每个用户访问共享的应用和关联的用户数据的方法。通过这种方法,可以在多个客户机上传递和建立共享的应用,每个组成员操纵来自相同组或用户文件夹的数据。
如上所述,企业网络204以外的客户机(即,客户机212)可以从服务器端数据中心202获得服务。举例来讲,当在企业网络204之外时,雇员或其它用户可以访问企业资源。因此,客户机212可以是经由互联网214访问服务器端数据中心202的家庭计算机、移动电话等。在这点上,本领域技术人员等认识到,网络环境200可以包括图2所示的网络以外的附加网络,并且可以按许多方法重新构造图2中的示例性结构从而通过其它方法传递网络操作系统和附加XML文件系统二者。例如,客户机212的网络接入点可以源自局域网、无线网络、广域网等,这对于服务器端数据中心202和216也可以是这样的。
在另一个实施例中,客户机可以根据一个或多个变量从企业服务器端数据中心202获得不同类型的服务。不是向每个客户机提供相同的网络服务,可以根据客户机的网络接入点的位置构造网络服务。例如,可以向直接连接到企业网络204的客户机206-210提供该企业特有的附加定制服务。在企业网络204之外,可以从服务器端数据中心202向客户机212(例如顾客、供应商、雇员、或与企业有关的其它用户)传递外部服务。为了便于定制网络服务的安全传递,可以由服务器端数据中心202分配资源用于管理不同类型的客户机。在图2所示的实施例中,服务器端数据中心202包括硬盘驱动器220,硬盘驱动器220被分配用于向网络内部的客户机206-210提供定制服务。另一方面,硬盘驱动器222可被分配用于向例如客户机212的企业网络之外的客户机提供更一般化的服务。在其它实施例中,提供给客户机的服务可以取决于例如用户证明、设置信息、客户机类型等的其它变量。
在一个方面中,网络操作系统提供便于实时“企业到企业(business-to-business)”协作的更一般化的框架。可以创建协作空间以允许不同企业从公共数据存储来访问资源。在图2所示的示例中,客户机212可以与维护服务器端数据中心202的企业的伙伴企业关联。在这点上,通过与服务器端数据中心202交互的用户或软件代理来操作图2所示的客户机。当通过软件代理进行操作时,本发明的各方面有效创建EDI(电子数据互换)关系,在这种EDI关系中,与企业关联或单独的用户利用XML文件系统自动共享资源。还可以由可由公众获得的服务器数据中心216提供EDI服务,这取决于安全要求。可以在XML文件系统内创建组文件夹,用于存储共享的伙伴资源和/或定义EDI的业务规则。与上述的说明相似,组文件夹可以被映射为客户机212上的虚拟驱动器,由此提供对于企业网络204之外的共享资源的透明访问。值得注意,共享应用可以作为XML结构化数据从服务器端数据中心202传递到客户机206-212。客户机206-212中的每一个在本地建立并执行应用,将数据更新返回报告给XML文件系统内的共享文件夹或每个用户私有文件夹。在一个实施例中,服务器端数据中心202被构造为管理数据更新协调,以使得多个客户机可以同时访问和更新相同的文档。如果数据存储在XML文件系统内,则还可以由服务器端数据中心216进行该协调。
在一个方面中,网络操作系统使得客户机206-212可以对外部网络服务进行透明访问。利用应用编程接口(API)可以创建通信器,用于抽象出用于与任何(内部或外部)网络服务进行交互的数据处理功能。举例来讲,开发人员可以创建用于访问容留(host)XML Web服务、REST服务、XML资源、RSS或Atom feeds、文本、csv文本、基于Web站点的HTML(超文本标记语言)等的网络服务器的通信器。参照图2,可由客户机212对通信器或“通道”的实例进行实例化,以与Web服务218进行交互。在这个示例中,利用服务器端数据中心216作为代理服务器(proxy),使客户机212可以在公共网络(即,互联网214)上访问网络操作系统服务。此外,即使从私有网络(例如,企业网络204)提供网络操作服务,利用通信器仍可使客户机206-210访问Web服务218。在这种情况下,服务器端数据中心216用作代理服务器,该代理服务器管理客户机206-210与Web服务218之间的通信。因此,客户机可以利用通信器提取访问网络服务时的数据处理功能。由于不要求开发人员重复编写用于管理客户机与网络服务之间的通信的代码,所以本发明的这个方面简化了应用开发。
尽管图2示出了企业网络204,但是本领域技术人员等将认识到这仅仅是示例性的。另外,本发明可以帮助在其它类型的网络环境中的数据同步和协调。因此,除了例如互联网的广域网外,参照图2进行的描述可以同等地应用于由家庭和小企业保持的局域网。此外,参照向每个客户机206-212提供不同的网络服务的服务器端数据中心202举出上述示例。然而,服务器端数据中心202可以被构造为提供补充另一个装置或网络的资源或服务的网络服务。例如,小企业可以对连接到局域网的所有客户机保持一个网络驱动器。通过提供附加存储或者允许在公共网络装置出现故障的情况下进行备份,服务器端数据中心202可以提供数据存储服务以补充服务器端数据中心216处的公共网络驱动器。通过另一个示例,家庭网络可以利用媒体中心计算机向每个本机客户机提供对数字媒体的访问。为了补充媒体中心计算机的存储,服务器端数据中心202可以向连接到家庭网络的所有装置提供虚拟驱动器。在这点上,虚拟驱动器可以被构造为基于用户偏爱或其它配置变量,在媒体中心计算机与服务器端数据中心202之间分配数据的实际存储。
现在参照图3,将描述计算装置300的示例性硬件架构。当参照实现为网络上的客户机的计算装置描述图3时,下文的描述可应用于可用于实现本发明的服务器和其它装置。此外,本领域技术人员等将认识到,计算装置300可以是任何数目的当前可用或尚待开发的装置中的任何一个。在它的最基本的结构中,计算装置300包括通过通信总线306连接的至少一个中央处理单元(“CPU”)302和系统存储器304。根据装置的确切结构和类型,系统存储器304可以是易失性或非易失性存储器,例如只读存储器(“ROM”)、随机存取存储器(“RAM”)、EEPROM、闪存或相似的存储器技术。本领域技术人员等将认识到,系统存储器304通常存储可由CPU 302立即访问的和/或CPU 302当前正在操作的数据和/或程序模块。在这点上,CPU 302通过支持指令的执行,用作计算装置300的计算中心。
如图3进一步所示,计算装置300包括网络接口310,它包括经由网络与其它装置进行通信的一个或多个组件。如在下文中更加详细地描述的,本发明可以访问基本服务,这些基本服务利用网络接口310使用公共网络协议进行通信。在图3所示的示例性实施例中,计算装置300还包括存储介质308。然而,如在下文中参照图4A更加详细地描述的,可以利用不包括用于将数据保持到本地存储介质的装置的计算装置,访问网络操作系统服务。因此,由虚线表示图3所示的存储介质308,以指示存储介质308是可选的。在任何情况下,存储介质308可以是易失性的或非易失性的、可移动的或不可移动的,并且是利用能够存储信息的任何技术实现的,例如为但不限于硬盘驱动器、固态驱动器、CD-ROM、DVD或者其它盘存储、磁盒、磁带、磁盘存储等。
这里使用的术语“计算机可读介质”包括以能够存储信息(例如,计算机可读指令、数据结构、程序模块或其它数据)的任何方法或技术实现的易失性和非易失性以及可移动和不可移动介质。在这点上,图3所示的系统存储器304和存储介质308仅仅是计算机可读介质的示例。
包括CPU 302、系统存储器304、通信总线306、存储介质308和网络接口310的计算装置的合适实现方式是已知的和可购置的。为了易于例示并且由于对于理解要求保护的主题而言不重要,所以图3没有示出许多计算装置的一些典型组件。在这点上,计算装置300通常包括例如键盘、鼠标、麦克风、触摸输入装置等的输入装置。相似地,计算装置300还可以包括例如显示器、扬声器、打印机等的输出装置。由于所有这些装置在现有技术中是公知的,所以在这里不对它们进行描述。
现在参照图4A-4C,将描述可实现本发明的示例性平台环境。在这点上,图4A-4C示出了计算装置300(图3)的平台层之间的层级关系。更具体地讲,图4A-4B所示的计算装置300的平台层包括底层上的硬件平台402、中间层内的机器操作系统404和顶层上的应用平台406。当然,本领域技术人员应该明白,图4A-4C所示的计算装置300的平台层仅仅是示例性的。
由于在上文中参照图3描述了计算装置300的示例性硬件平台402,所以在这里将不提供对这些组件的附加描述。然而,如图4A-4B所示,计算装置300可以包括机器操作系统404。在这点上,机器操作系统404可以来自被构造为利用普通硬件的通用操作系统族(例如,Microsoft操作系统、Apple操作系统、UNIX操作系统、Linux操作系统、NokiaSymbian、GoogleAndroid等)中的任何一个。另外,机器操作系统404可以是针对利用非普通硬件的专用计算装置(例如,瘦客户机、移动电话、大型机、超级计算机等)构造的操作系统。此外,机器操作系统404可以是例如实时操作系统、嵌入式操作系统等的被设计为满足特定配置参数的操作系统。
机器操作系统的一个目的是提取访问硬件资源和以其它方式利用硬件资源的细节。因此,机器操作系统几乎都执行基本系统任务,例如,管理利用硬件组件的I/O(输入和输出)、存储器管理、任务调度等。在这点上,机器操作系统通常通过API向应用程序提供服务。通过API提供服务使应用开发人员不必管理访问或以其它方式利用基础计算机平台的实现细节。值得注意的是,本发明的各方面仅仅针对可从所有现代计算机平台获得的基本服务,利用机器操作系统404。在这点上,可以利用服务以与网络硬件对接并且利用TCP/IP协议建立用于通信的网络连接。
在图4A所示的实施例中,计算装置300包括在应用平台406的顶层上工作的Web浏览器408。如上所述,网络操作系统的客户机端组件410可以被传递和建立在计算装置300上。在图4A所示的实施例中,客户机端组件410被构造为在Web浏览器408的环境内工作。在这点上,Web浏览器408可以是被构造为利用TCP/IP网络通信协议与远程装置进行通信的任何数目的浏览器应用,包括但不限于MozillaFirefox、Microsoft的Internet Explorer等。
在图4A所示的实施例中,客户机端组件410不直接与机器操作系统404进行交互。代替地,从Web浏览器408访问由客户机端组件410使用的基本服务。本领域技术人员等将认识到,HTTP是高于TCP/IP的高级协议,其允许利用统一资源定位符(“URL”)请求/接收网络资源等。通常,Web浏览器产生HTTP请求以获得以标记语言(例如,超文本标记语言(HTML)、可扩展标记语言(XML))进行格式化或者利用JSON(“JavaScript对象标记”)和/或JavaScript进行格式化的Web页面。在一个实施例中,网络操作系统的客户机端组件410利用Web浏览器408执行使用HTTP的网络通信,并且渲染以可从Web浏览器获得的其它图形表示技术之中的HTML表示的图形元素。
在图4B所示的实施例中,网络操作系统的客户机端组件410不利用Web浏览器而直接访问机器操作系统404的服务。本发明的各方面允许在完全不同类型的计算装置上传递和建立应用。然而,Web浏览器通常被构造为根据预定的页面尺寸和/或布局来显示图形元素。因此,通用Web浏览器可能不太适于在可以实现本发明的每种类型的计算装置上渲染图形元素。例如,利用Web浏览器在小形状因数计算装置上渲染图形元素可能是有问题的。在这点上,给定可用形状因数,Web浏览器预期的预定页面尺寸和/或布局可能太大或者不适当。如图4B所示,网络操作系统的客户机端组件410可以被实现为孤立的应用或甚至实现为机器操作系统。在这种情况下,客户机端组件410被构造为不利用Web浏览器按照适当给出计算装置300的形状因数的方式执行图形渲染。此外,在这个实施例中,从机器操作系统404直接获得用于执行网络通信的基本服务或者将该基本服务内置在客户机端组件410中。
在图4C所示的实施例中,计算装置300不包括传统的机器操作系统。代替地,用于与硬件平台402交互的基本服务被内置到客户机端组件410中。在这个实施例中,客户机端组件410执行用于进行存储器管理、任务调度等的基本系统任务。通过将这些类型的基本机器服务内置到客户机端组件410中,易于定制和部署本发明的各方面以与特定硬件平台一起使用。换言之,客户机端组件410可以被构造为独立于由机器操作系统的提供商提供的服务。
如上所述,每当用户连接到网络时,客户机端组件410可以作为网络服务被传递和建立。如图4A-4C所示,客户机端组件410适于实现为孤立应用、机器操作系统或者在Web浏览器的环境下实现。在所有这些实施例中,服务器端数据中心202或216可以向客户机端组件410提供应用逻辑作为网络的服务。因此,不具有存储介质(例如,硬盘驱动器、CD-ROM、DVD等)的有限资源计算装置可被用于访问本发明提供的网络操作系统服务。在这点上,客户机端组件410和其它网络操作系统数据可以缓存在系统存储器(ROM、RAM等)中,而不必保持到本地存储介质。这样,由于应用可以作为服务传递,所以针对网络操作系统启用的应用不需要被“安装”在计算装置300上。
现在参照图5A-5B,描述根据本发明如何将公共数据模型用于传递网络操作系统服务。网络操作系统通过将应用组件分离到不同层(即模型、视图和控制器)中,支持模型视图控制器(MVC)设计模式。在实际的实施例中,XML文档是在网络操作系统环境中表示信息的“模型”或公共数据格式。从下文的描述可以清楚看出,在这种环境中利用公共数据模型(例如,XML文档)产生许多好处。
图5A-5B所示的网络环境500包括服务器端数据中心502,服务器端数据中心502经由网络508可通信地连接到客户机504和506的每一个。如上所述,网络操作系统的客户机端组件可以从服务器端数据中心502动态地传递到客户机504和506的每一个,或者可以安装在客户机504和506的任何一个的本地。在任一情况下,网络操作系统的客户机端组件提供XML虚拟机510,XML虚拟机510解释或产生要在客户机504和506上执行XML结构化应用。当作为服务传递时,本发明的各方面通过传递来自服务器端数据中心502的过程XML文档,使得网络操作系统“导入(boot)”。在这点上,过程XML文档提供描述客户机504和506的启动序列的逻辑。如在下文中更详细地描述的,该过程XML文档将在XML虚拟机510内执行。启动序列通常对XML虚拟机510内的一组对象进行实例化和操纵以使得可以执行其它应用。
如上所述,尽管XML可以用作在网络操作系统环境中表示应用逻辑和其它数据的“模型”或公共格式,但是也可以使用其它模型、数据格式和数据结构实现本发明。在一个实施例中,提供允许以非常高级别的抽象设计应用的XML编程语言。本领域技术人员等将认识到,XML是高度结构化、可转移、可变换的语言。这样,将高抽象等级的应用逻辑表示为XML结构化数据是存储器高效的(memory efficient)并且产生紧凑应用。具体地讲,提供用于执行在一个或多个良构(well-formed)的XML文档内表示的应用的逻辑的平台。根据MVC设计模式分离应用功能,由此消除由传统系统执行的重复任务。因此,与现有系统相比较,将应用代码从服务器端数据中心502传送至客户机504和506消耗少量的带宽。此外,由于利用XML虚拟机510执行应用逻辑,所以利用本发明执行应用逻辑消除或者显著降低消耗的带宽。直接在客户机504或506上处理本来通过执行服务器“往返”而处理的交互,而不必请求或者依赖于与服务器端数据中心502的网络通信。
本发明的一个方面是XML虚拟机510,它向客户机504和506提供用于执行和开发应用的平台和应用编程接口(API)。在这点上,以XML编程语言编写的高级应用代码被接受为输入,并且在客户机504和506的本地由XML虚拟机510执行。提供用于将高级应用代码翻译或解释成可解释代码、字节码或适于在任何平台上执行的其它低级语言的功能。在这点上,XML虚拟机510抽象出基础计算机平台和网络资源从而使得可以通过相同方式在任何类型的计算装置上执行应用。因此,XML虚拟机510是完全独立于平台和硬件的,并且可以利用任何数目的当前可用或者还在开发的编程技术(例如但不限于Microsoft.Net、Java、C、C++、HTML、JavaScript、AJAX、AdobeFlash、MicrosoftSilverLight等)实现XML虚拟机510。
现在参照图5B,将描述如何使用公共数据模型来提供网络操作系统服务的附加方面。图5B所示的网络环境500包括在上文中参照图5A描述的相同组件。此外,在服务器端数据中心502上绘出了提供存储和其它网络服务的XML文件系统512。因此,当正在提供网络操作系统服务时,客户机504和506可以访问保持在XML文件系统512内的数据。在一个方面中,本发明实现客户机端缓存器514,用于管理客户机504和506上的文档和其它运行时数据的存储。如图5B所示,XML虚拟机510易于访问存储在客户机端缓存器514中的数据。在一个实施例中,即使网络连接临时不可用或者客户机504和506离线,客户机端缓存器514也使XML虚拟机能够继续执行应用。举例来讲,当用户处于网络连接不可用的公共汽车、火车或者飞机和其它情况时,在客户机504和506上执行的应用可以继续离线工作。如在下文中更详细地描述的,当重新建立网络连接时,在客户机504或506上执行的数据变化将被同步到驻留在服务器端数据中心512上的XML文件系统512。
如上所述,本发明提供使得开发人员可以创建非常高的抽象等级的应用的编程语言。在实际实施例中,这些编程语言包括过程XML语言、用户界面(“UI”)XML语言和应用包XML语言。以这些编程语言编写的应用代码适于表示为XML结构化数据并且存储在XML文档内。在图5B所示的示例中,过程XML文档516、用户界面XML文档518和应用包XML文档520分别包含以这些编程语言编写的应用代码。因此,可以在保持在服务器端数据中心502处的一个或多个XML文档内定义应用。此外,应用将通常利用例如同样保持在服务器端数据中心502处的数据XML文档522的数据文档。在要求时,客户机504和506可以访问这些XML文档516-522从而可以利用XML虚拟机510执行应用。
在一个实施例中,UI XML语言用于定义应用的在MVC设计模式中的“视图”。在这点上,标记语言原先开发用于通过由Web浏览器渲染页面的方式描述Web页面的布局。标记语言的结构化性质允许在不影响Web浏览器或其它相关技术的实现的情况下修改Web页面的外观。在这点上,UI XML语言根据符合XML语法的模式(schema),定义应用用户界面的外观和行为。利用UI XML语言,开发人员可以创建具有存在于公共桌面应用中的相同图形元素(即,菜单、工具条、下拉框等)的应用。由于用户界面逻辑不依赖于特定客户机或者以特定客户机所特有的方式描述它的实现,所以UI XML语言适于开发跨不同平台工作的用户界面。此外,在UI XML语言中描述的用户界面和行为根据较高抽象等级的XML语法,根据MVC设计模式,描述这些元素。因此,UI XML语言中描述的用户界面和行为易于进行变换或修改,而不会影响其它系统。对UI XML语言进行变换的该能力允许基于一个或多个变量定制应用的功能性。例如,可以根据正在利用的装置的类型来定义变换以减小或消除应用功能的某些方面。通过另一个示例,可以在UI XML语言上定义变换以根据用户访问证明去除或限制某些功能,或者针对不同语言和/或市场对应用进行本地化。
在一个实施例中,过程XML语言用于定义MVC设计模式中的应用的“控制器”组件。在这点上,过程XML语言使开发人员可以在一组过程步骤中描述应用的逻辑。每个过程步骤包含近似等同于传统编程语言中的指令和/或方法调用的一个或多个操作。在MVC设计模式中,过程XML语言用作控制器或者用户界面(“视图”)逻辑与XML数据(“模型”)之间的粘结剂。因此,本发明的各方面使得能够利用抽象等级高于传统编程语言的过程XML语言描述应用逻辑。在这点上,用户界面逻辑(“视图”)与过程XML逻辑(“控制器”)完全分离。结果,本发明自动处理包括现有系统中的大多数应用代码的数据处理功能。具体地讲,使用过程XML语言,可以在视图逻辑与数据模型之间定义智能数据绑定。当执行应用时,网络操作系统自动处理到达本地缓存的数据模型和远程文件系统及任何远程监听器的I/O(输入和输出)或数据。由于开发人员不提供数据处理逻辑,所以更加快速地频繁开发利用过程XML语言创建的应用并且它包括少于传统应用的应用代码。如在下文中更详细地描述的,过程XML语言提供参照图5A描述的以外的用于在网络环境中创建和分布应用的其它优点。
除了上述的语言以外,还提供了应用包XML语言。应用包XML语言使开发人员可以描述由应用利用的资源。在这点上,可以在应用包内识别定义应用的功能性的UI和过程XML文档。应用包中的逻辑使开发人员可以以受控和安全的方式封装应用的资源并分发给客户机。此外,使用应用包使得可以按照使XML虚拟机510能够保证应用内安全性的方式创建应用的多个实例。
在一个方面中,本发明提供用于在网络环境中分发应用和软件更新的改进方法。利用现有系统,通常以可执行格式分布应用,该可执行格式当被执行时将“应用”安装在计算装置上。可执行文件通常将应用逻辑表示为特定计算平台所特有的机器指令。这样,可执行文件是应用的存储器密集型表示,其在网络环境中进行分发时消耗相对大量的带宽。因此,复杂和资源密集型系统需要使用可执行文件分发和安装应用。
用于在网络上分发应用和软件更新的改进方法被集成到网络操作系统中。针对网络操作系统启用的应用没有使用可执行文件被“安装”在客户机计算装置上。代替地,本发明允许完全以XML结构化数据表示应用逻辑。当客户机建立网络连接时,可以从可从互联网上的本地/私有服务器或任何Web服务器提供XML文档的服务提供商,自动获得在一个或多个XML文档中表示的应用。因此,提供用于在网络上向客户机分发应用的集成框架。此外,例如“补丁”的更新以及应用的较新版本也可以自动传播至客户机。在这点上,由于在作为网络服务而自动分发的XML文档内表示应用逻辑,所以对XML文档的任何修改也将作为网络服务传播至客户机。在网络操作系统环境中,与任何其它数据一样,应用逻辑可以在整个网络上进行同步。由于XML虚拟机510和XML文件系统512被构造为通过事务处理来同步数据和协调变化,所以可以实时地以协作方式执行对应用的改变。例如,可以打开保持在共享文件夹中的应用并在客户机504上执行。同时,与客户机506关联的用户可以修改应用逻辑并且将变化自动传播至客户机504。将实时实现对应用逻辑的改变,因此,当改变发生时易于在客户机504上观察到这种改变。
如上面参照图5A-5B所述,应用的XML表示由服务提供商分发并且在使用XML虚拟机的客户机上执行。结果,客户机可以“离线”地执行应用,而不用要求服务器端的运行时处理。在这种情况下,表示一个或多个应用的XML文档被缓存在客户机上的存储器内。在没有网络连接的情况下,XML虚拟机可以访问这些缓存的XML文档以继续执行应用。此外,当重新建立网络连接时,在离线时发生的数据更新也被缓存并被发送至服务器端。
值得注意的是,本发明提供网络操作系统服务,而不要求计算机资源的虚拟化。在这点上,用于对计算机资源进行虚拟化的多个技术正用于提供例如“云”存储的网络服务。一般地说,这些虚拟化技术对通常与远离基础平台的服务器关联的计算机资源进行抽象。所抽象的资源通常封装在适于从网络进行访问的独立于平台的接口内。在这点上,可抽象的计算机资源包括应用、硬件、桌面、机器操作系统等。然而,复杂系统需要以这种方式抽象和封装计算机资源。例如,可能需要对服务器基础硬件进行模拟并且对性能至少产生一些影响的虚拟化层。此外,这些虚拟化技术促进了以服务器为中心的模型,该模型将实现并执行资源的位置转移到服务器端。当向不断增多的用户提供网络服务时,在服务器上增加的处理和其它需求可能不成比例。因此,利用虚拟化技术实现网络服务可能需要一个统一数据中心,在该统一数据中心内,需要提供充足的服务器以保证可以按需获得服务。此外,由于在远程服务器上而非直接在客户机上执行应用逻辑,所以虚拟化技术消耗更多带宽并且导致更慢的用户体验。这还将导致当网络连接发生故障或者客户机“离线”时不能够获得应用。
在没有对计算机资源进行虚拟化的情况下实现网络服务提供大量优点。在这点上,提供一种更加可伸缩的架构,该架构使不断增加的用户可以访问网络服务。通过利用XML虚拟机在客户机端执行应用,可以更加全面地利用来自客户机的处理和其它资源。这种实现方式提供了一种更加可伸缩的架构,这是因为:在访问网络服务的用户的数目、带宽使用量、处理能力、以及可从客户机端获得以执行应用逻辑的其它资源之间存在自然对应关系。除了更加可伸缩以外,通过利用XML虚拟机在客户机上执行应用,使得在“离线”情况下用户仍能够容易地访问应用功能。当客户机“离线”时,在一个或多个XML文档内表示的应用和用户数据可以存储在客户机端缓存内。因此,所有的应用的逻辑是可用的并且可以利用缓存器中的数据执行,而不管是否存在有效网络连接。然而,在“离线”时应用不能够访问网络资源并且可能需要重新建立网络连接以实现所有的应用的功能。相反,当利用虚拟化技术实现网络服务时提供的“离线”功能是更加受限的。在这点上,一些现有的网络服务执行“离线”模式,在这种“离线”模式下,用户可以继续与用于访问网络服务的应用进行交互。然而,为了提供这个功能,在客户机上分布并安装应用的可执行的或其它低级表示。当用户“离线”时,在本地执行应用的该低级表示。然而,在客户机上安装应用以提供这种“离线”功能可能不是可行的或者方便的。例如,有限资源计算装置可能没有足够的存储空间用以“安装”应用的可执行的或其它低级表示。更一般地讲,在无有效网络连接的情况下在客户机上可用的功能限于已安装在本地的那些应用。然而,客户机可能没有足够的计算资源(存储器、内存、带宽等)来安装使用应用的可执行的或其它低级表示的每个期望应用。
在一个方面中,本发明实现了用于在移动、无线或不稳定网络上访问网络服务的改进方法。本领域技术人员将认识到,与有线网络相比,移动或无线网络较不可靠并且带宽更加受到限制。通过提供将应用逻辑表示为XML结构化数据的编程语言和被配置为自动执行重复数据处理功能的XML虚拟机510,能够产生高度紧凑和存储器高效的应用。在这点上,当实现应用逻辑时,应用能够共享XML虚拟机510的功能以及重用对象。结果,与现有的应用分布系统相比,分布针对网络操作系统启用的应用消耗一小部分的带宽。此外,本发明使应用的XML表示可以保持在客户机端缓存器中并且利用XML虚拟机510在本地执行。由于应用逻辑和数据可以缓存在本地,所以连续网络连接不是必需的。代替地,本发明非常适于在网络连接可能是间歇性的无线网络上提供对网络服务的访问。此外,由于在本地执行应用,所以可以提供具有一定服务保障的更加可靠的网络服务。例如,本发明还非常适于提供企业类应用作为例如互联网的网络的服务。在这点上,本领域技术人员等将认识到,即使网络连接暂时不可用或者互联网连接的质量影响对网络的访问,仍需要可以在企业内部访问企业类应用。这里所述的发明解决了这个问题。
网络操作系统的客户机端组件
本领域技术人员等将认识到,XML是可扩展语言,其提供了创建附加语言的基础。XML文档具有层级树结构,其中,树根标识文档,文档中的其它节点是根的后代。树的节点可以包含文档内容以及定义内容的结构的数据。除了由XML强加的语法以外,可以定义元素和它们的关联属性以建立对XML文档的结构和内容的其它语义约束。在一个实施例中,本发明实现对由XML强加的语法应用附加语义约束的模式和词汇表。利用本发明提供的XML语言,开发人员根据MVC设计模式按语义表示应用的逻辑。
MVC设计模式最初以Smalltalk编程语言实现并且从此被用于其它工程环境中。本领域技术人员等将认识到,MVC设计模式仅仅是用于描述用于将功能分离到多个层的一般架构模式。这样,在各种环境下实现MVC设计模式以消除依赖性和支持平台独立性。举例来讲,用于存储HTML数据、收集动态Web页面内容和渲染Web页面的现有系统被频繁描述为符合MVC设计模式。此外,根据MVC设计模式,用于创建Web应用的开发环境可以将功能分离到多个层中。在这种环境下,Web应用的图形用户界面与数据模型分离,以支持更加模块化的应用开发。然而,这些现有系统实现功能并利用比本发明更加域特定的基础数据模型。
与现有系统不同,本发明的各方面允许根据MVC设计模式创建任何类型的应用。换言之,用户界面与逻辑和基础数据模型的分离不限于Web应用、Web页面等。可以在网络操作系统环境中创建和执行多实例应用,使每个实例潜在支持多个视图。此外,这些应用实例均操纵来自公共数据模型的数据。由于开发人员不必提供用于设置和访问来自数据模型的数据以及管理用户界面(“视图”)与数据模型之间的同步和数据交换的程序逻辑,所以大幅简化了应用开发。
现在参照图6A-6B,将描述用于示出本发明的各方面的示例性过程和UI XML文档。图6A示出了提供“MyTasks”应用的控制器逻辑的语义描述的示例性过程XML文档600(“MyTasks.xml”)。如图6A所示,MyTasks.xml文档600包括在“<trigger>”XML元素内定义的触发器602。这个触发器602保持一组属性,包括视图、组件、事件和步骤属性。此外,以过程XML语言编写的应用逻辑可以定义过程步骤的序列。在这个示例中,MyTasks.xml文档600包括由“<step>”XML元素描述的多个过程步骤604-610。如图6A所示,两个属性与过程步骤604-610的每一个关联,包括编号属性(“id”)和名称属性。在每个过程步骤内,定义至少一个操作。举例来讲,与名称属性“InitializeApplication”(初始化应用)关联的过程步骤604包括由“<operation>”XML元素描述的三个操作612-616。
图6B示出了提供MyTasks应用的示例性“视图”逻辑的语义描述的UI XML文档(“MyTasks_gui.xml”)的摘录。如图6B所示,MyTasks_gui.xml文档650包括由“<button>”XML元素描述的两个按钮组件652和654。每个按钮元素保持一组属性,包括名称、文本和宽度属性。此外,MyTasks_gui.xml文档650包括由“<input>”XML元素描述的两个输入组件656和658。在这个示例中,输入组件656和658保持一组属性,包括名称、宽度和高度属性。
当启动应用时,用作XML虚拟机的本发明的各方面可以开始解释MyTasks.xml文档600。在一个实施例中,应用逻辑一次被解释一条语句,而非在执行之前被全部编译。然而,在另选的实施例中,以本发明提供的XML语言编写的应用代码可以编译成可执行代码或字节码。在这个示例中,MyTasks.xml文档600定义了触发器602,触发器602识别将响应于触发器的激活而执行的应用中的过程步骤606。最初,在所示实施例中当XML虚拟机开始解释MyTasks.xml文档600时,对触发器602进行登记从而使得响应于触发器的激活,流程可以导向适当的过程步骤606。
在图6A所示的MyTasks.xml文档600中,应用定义名称属性为“Initialize Application”的缺省过程步骤604,其中,一旦已登记了应用中的任何触发器,则控制流程被导向该缺省过程步骤604。名称属性为“open”以及值属性为“apps/mytasks_gui.xml”的操作612是将执行的初始化应用过程步骤604中的第一操作。执行打开(Open)操作612将使得在计算机显示器上解释并渲染在MyTasks_gui.xml文档650内表示的应用的视图。在这个示例中,应用的视图包括在MyTasks_gui.xml文档650内按语义定义的组件652-658。一旦打开了MyTasks_gui.xml文档650,则将执行名称属性为“action”并且值属性为“#MyTasks”的操作614。一般地说,一旦打开了MyTasks_gui.xml文档650,则执行动作(Action)操作614将从视图中隐藏按钮组件654。
现在参照图7A-7C,将描述与MyTasks应用关联的示例性图形显示700。具体地讲,图7A所示的图形显示700包括与按语义在MyTasks_gui.xml文档650内描述的按钮组件652-654对应的Button1组件702和Button2组件704。此外,图形显示700包括分别与输入组件656-658的语义描述对应的Input3组件706和Input4组件708。在这点上,图7A中的图形显示700表示MyTasks_gui.xml文档650的可视描述。如上所述,当启动MyTasks应用时,MyTasks.xml文档600中的过程逻辑使Button2组件704被隐藏。因此,在图7A中用虚线描绘Button2组件704以指示在执行动作操作614后最初用户看不见Button2组件704。
一般地说,示例性MyTasks应用被构造为显示存储在“data/tasks.xml”文档内的任务描述的列表。更具体地讲,当启动应用时,任务描述将缺省地显示在Input3组件706内。在一个方面中,用户可以通过直接与Input3组件706进行交互以及改变任务描述的条目来修改任务列表。在另一个方面中,用户可以向Input4组件708输入新的任务描述并且通过选择Button1组件702来激活触发器602。如果接收到有效输入,则新任务描述被添加到“data/tasks.xml”文档并且由Input3组件706自动显示。相反,如果用户仅仅选择Button1组件702而没有向Input4组件708提供任何输入,则Button2组件704显示请求用户提供有效任务描述的文本。
再次参照图6A,名称属性为“bind”并且值属性为“data/tasks.xml”的操作616是将执行的初始化应用过程步骤604中的下一个操作。一般地说,执行绑定(Bind)操作616,将使Input3组件706变成显示任务描述的列表的数据绑定组件。具体地讲,在绑定操作616及其关联的组件元素618中提供的逻辑将Input3组件706绑定到在“data/tasks.xml”文档内表示的任务描述的列表。在这个示例中,在“data/tasks.xml”文档内任务被定义为保持关联的描述属性的元素。由组件元素618提供的逻辑选择任务元素的“/tasks/task/@description”属性用于在Input3组件706中显示。如图6A所示,绑定操作616是执行的初始化应用过程步骤604中的最后一个操作。
现在参照图7B,将描述在执行绑定操作616后的图形显示700的状态。在这点上,图7B示出了在上文中参照图7A描述的相同的按钮和输入组件702-708。然而,在执行绑定操作616后,由Input3组件706显示一组任务描述。具体地讲,Input3组件706被绑定到在“data/tasks.xml”文档内定义的任务元素的描述属性。因此,在执行绑定操作616后,在数据模型(例如,文档对象710)中表示的分配到这些任务描述的值显示在Input3组件706内。
当执行初始化应用过程步骤604时,直到激活触发器才恢复在MyTasks.xml文档600中表示的应用逻辑的执行。在这个示例中,MyTasks应用定义触发器602,该触发器602在Button1组件702经历“选择”事件时,将执行流程导向过程步骤“2”。因此,响应于选择Button1组件702,触发器602将执行流程导向标题为“Press Button”(按下按钮)的过程步骤606。在这个示例中,名称属性为“decision”并且值属性为“#MyTasks#input4”的操作620是将执行的按下按钮过程步骤606中的操作。一般地说,当选择了Button1组件702时,判断(Decision)操作620执行测试以确定是否有任何文本输入到Input4组件708内。当选择了Button1组件702时,如果文本输入到Input4组件708内,则“<when>”XML元素622内的逻辑把执行流程导向过程步骤608。相反,当发生触发事件时,如果没有文本输入到Input4组件708,则判断操作620使执行流程继续进行到过程步骤610。
在这个示例中,当文本输入到Input4组件708时,执行流程进行到“Add Task”(添加任务)过程步骤608。因此,名称属性为“change”并且值属性为“data/tasks.xml”的操作624是将执行的下一个操作。改变(Change)操作624将使具有适当描述属性的新任务元素加入到“data/tasks.xml”文档。在这点上,改变操作624内的“<store>”XML元素626提供使在Input4组件708内输入的文本存储在新任务的描述属性中的逻辑。
现在参照图7C描述在输入新任务和选择Button1组件702后的图形显示700的状态。因此,图7C包括在上文中参照图7A-7B描述的相同的组件702-708。在这个示例中,用户将文本“purchase airlinetickets”输入到由Input4组件708提供的文本区域。上述的改变操作624将这个任务描述的值添加到利用对应文档对象710的“data/tasks.xml”文档。由于Input3组件706被绑定到受改变操作624影响的描述属性的选择,所以由Input3组件706显示的任务的列表自动在文档对象710中进行更新。换言之,开发人员不必提供用于处理Input3组件706与数据模型之间的同步和数据交换的应用代码。
在一个方面中,用户可以向Input4组件708输入新任务描述并且通过选择Button1组件702更新任务列表。此外,用户可以通过直接与显示在Input3组件706中的条目进行交互来修改任务描述。举例来讲,用户可以删除当前正由Input3组件706显示的“更新表示”任务描述。由于定义了数据绑定,所以删除将自动传播至“data/tasks.xml”文档。在这点上,一个或多个组件和/或本地或远程应用可以是对于在“data/tasks.xml”文档内表示的任务描述的数据监听器。响应于正删除“更新表示”任务,将由文档对象710通知和更新本地数据监听器的每一个。值得注意的是,任务的删除将传播至基础数据模型并且然后经由网络传播至任何数据监听器,而不需要开发人员提供用于处理数据更新的应用代码。
再次参照图6A,如果当选择Button1组件702时没有向Input4组件708输入文本,则执行流程进行到“Show Button”(显示按钮)过程步骤610。因此,名称属性为“action”并且值属性为“#MyTasks”的操作628是将执行的下一个操作。一般地说,执行这个动作操作628将显示初始隐藏(图7A)的Button2组件704。如在MyTasks_gui.xml文档650内表示的,Button2组件704将显示请求用户提供有效任务描述的文本串。
本领域技术人员等将会明白,参照图6A-7C描述的MyTasks应用是可用于示出本发明的各方面的一个应用的高度简化示例。可以在网络操作系统环境中创建和执行另外的应用。因此,参照这里的MyTasks应用所举的示例和进行的描述应该解释为是示例性的。
用于开发现代应用的编程语言(C++、JavaTM、PythonTM等)具有在应用的过程逻辑内创建和保持的用户界面组件。换言之,开发人员明确地提供创建和设置用户界面组件上的数据的逻辑。此外,开发人员在应用的过程逻辑内提供用于监听事件以及监视影响应用的用户界面的数据变化的代码。这些事件监听器使数据变化保持在应用的用户界面与域特定数据结构之间。然而,应用的用户界面与数据结构之间的输入/输出不是标准化的。因此,应用的用户界面上的数据的表示与如何在数据结构内表示数据紧密耦合。结果,对用户界面或数据结构的修改会影响应用的其它方面。
网络操作系统提供用户界面与基础数据模型之间的自动通信路径从而支持符合MVC设计模式的应用的执行。在这点上,开发人员可以定义用户界面组件(在其它编程环境语言中有时候称作控件或小工具(widget))与基础数据模型之间的绑定。本发明管理对基础数据模型的数据更新和影响组件的数据变化的协调,由此简化应用开发。如MyTasks应用的说明所示,如果在基础数据文档内表示的数据发生变化,则自动更新监听变化的任何数据绑定组件。更具体地讲,MyTasks应用中的绑定操作616提供用于将Input3组件706绑定到在数据模型内表示的一组数据的应用逻辑。因此,从基础数据XML文档删除“更新表示”任务被自动传播至包括在网络上监听同一文档的应用和组件的监听组件。此外,数据绑定便于本地用户界面组件之间以及网络上的远程客户机之间的数据的交换和同步。举例来讲,MyTasks应用中的改变操作624提供利用向Input4组件708输入的文本对基础数据文档进行更新的应用逻辑。在这点上,Input3组件706监听基础数据文档的变化。当文本输入到Input4组件708并且激活触发器602时,对Input3组件706的可视显示进行更新。在这个示例中,数据绑定和改变操作624的组合使得能够在用户界面组件之间进行数据的同步交换。
如上所述,绑定提供用户界面组件与基础数据模型之间的自动通信路径。在一个方面中,本发明允许在用户界面组件之间共享和/或转移绑定。在图8A-8B中表示本发明的这个方面,其中,图8A-8B示出了被构造为显示用户的文件系统文件夹的不同可视表示的组件800和850。具体地讲,图8A示出了被构造为以树结构显示用户的文件夹的组件800。如果用户产生请求将文件夹显示为列表的输入,则组件800的到基础数据的数据绑定可以转移到组件850,这将还转移组件800的状态。这个示例示出本发明从数据模型的结构中消除了数据的表示和处理之间的依赖性。此外,数据绑定的转移和共享不仅根据MVC设计模式提供应用层之间的自动通信路径,还提供用于开发应用的增强平台。
本发明提供一组用户界面组件(即,按钮、输入框、下拉框、显示面板等)。为了便于应用开发,标准框架允许从有关的用户界面组件建立应用。在这点上,用户界面组件可以从利用UI XML语言的父组件继承属性并且因此进行组合以表达更加复杂的用户界面元素。结果,应用可以包括以层级结构进行组织的一组相关组件,其中,每个组件知道相关组件。另选地,可以定义单个用户界面组件以表示应用的整个视图。此外,提供组件API(应用编程接口),其允许开发人员创建与本发明一起使用的新的用户界面组件。
在一个方面中,本发明支持使用过程XML语言的面向过程应用的开发。在这点上,MyTasks.xml文档600内的每个过程步骤表示过程执行流程的一部分。过程步骤内的操作可以定义正执行的应用的状态变化。通过对描述应用的运行时状态的数据的受控访问以及通过利用消息发送端口,支持过程之间的通信。开发人员可以以利用全局命名对象的表达式来引用视图、组件和其它运行时变量。在这点上,提供引用和操纵对象的表达式语言或公共方式。一般地说,表达式和过程XML语言共同对执行多实例应用的复杂性进行抽象。代替地,开发人员可以创建应用,就好像该应用仅存在于单个执行实例中一样。如MyTasks.xml文档600所示(图6A),表达式被构造为与XML语法兼容并且可以被划界或被标记以用于其它编程语言内。当对一表达式求值时,XML虚拟机根据接收的表达式执行识别、合并以及操纵被请求数据的工作。结果,即使正在执行应用的多个运行时实例,开发人员仍可以在应用代码中利用全局命名对象。
本发明提供在可进行“对象”实例化的多个“类”中实现的客户机端组件。换言之,可以利用例如使用面向对象编程特征的JavaScript的编程语言实现客户机端组件。另选地,可以利用例如C编程语言的非面向对象语言或者结构可表示为对象的任何其它语言实现本发明。本领域技术人员应该明白,从类创建的对象通常包括封装或隐藏实现对象的功能的算法的方法。替代暴露这些实现细节,对象提供其它模块可以用来访问其功能的接口作为抽象。因此,在利用面向对象和继承的对象的环境中出现根据本发明的一个实施例实现XML虚拟机的功能。
如上所述,客户机端组件用作执行以符合XML语法的语言编写的应用的XML虚拟机。在实际实施例中,XML虚拟机被构造为执行以过程建模语言(例如,过程XML语言)、用户界面建模语言(例如,UI XML语言)和应用包建模语言(例如,应用包XML语言)按语义描述的应用代码。值得注意的是,可以对XML虚拟机进行扩展以理解附加XML语言或基于XML的应用,从而提供这里未描述的功能。此外,应该明白,不使用这里所述的XML语言执行编程逻辑,其它实施例也是可行的。例如,JavaScript API或库能够用于建立实现相同功能的应用。因此,利用基于XML的语言仅仅是示例性的,并且可以利用传统的编程语言实现本发明。
在任何给定时刻,由XML虚拟机解释的应用可以被理解为处于特定的执行状态。过程XML语言使开发人员可以定义在状态之间进行转变的条件。除此以外,XML虚拟机通过下面的操作实现用于管理状态转变的功能:(1)定义描述执行中应用的状态的一组运行时变量/对象;(2)执行当应用状态将发生转变时进行驱动的逻辑;以及(3)提供实现应用状态的适当变化的低级构造。
现在参照图9,将描述实现XML虚拟机的客户机端组件以及类和对象的各方面。客户机端组件包括多个“管理器”或对象,这些“管理器”或对象通常在网络操作系统的客户机端组件的启动时被实例化并且在整个用户会话期间保持活跃。如上所述,根据所示实施例的由客户机端组件提供的对象利用面向对象和继承。在这点上,可对系统环境对象902进行实例化,它用作在运行时嵌入管理器和其它对象的占位符。因此,系统环境对象902可用于对图9所示的管理器(包括应用管理器904、过程管理器906、视图管理器908、事务管理器910、文档管理器912和事件管理器914)进行实例化。
每个管理器通常执行通过可从系统环境对象902访问的接口暴露的特定任务。因此,本发明实现的其它对象可以调用和利用管理器的功能来执行期望任务。例如,可以调用过程管理器906以对执行应用的过程代码的准备时的过程对象进行实例化。在另一个方面中,管理器允许在提供应用内和过程内安全性的基础的对象之间执行受控的实例化和通信。尽管参照特定管理器和管理器保持的关联对象提供这里的描述,但是本领域技术人员等将认识到,将功能封装到特定类型的管理器中是示例性的。在其它实施例中,可以在不进行封装的情况下执行关于特定管理器及其对应对象在这里中描述的功能,或者可以以与所述方式不同的方式封装这些功能。此外,这里所述的面向对象的编程语言和特征仅仅是说明性的,在不脱离要求的主题的范围的情况下可以利用其它工具。
如图9所示,客户机端组件包括提供用于管理应用的生命周期的逻辑的应用管理器904。在这点上,应用管理器904暴露用于创建、打开和终止应用的功能。可以在内部将应用表示为向应用管理器904进行“登记”的应用对象。当调度执行应用时,可以调用应用管理器904以创建对应的应用对象。因此,应用管理器904创建并保持对系统内的所有活跃应用的引用。
如上所述,开发人员可以按语义在使用应用包XML语言的应用包内描述一个或多个应用的属性。在应用包内描述的属性包括对由特定应用用来执行的资源和系统设置的引用。应用包内识别的资源通常包括提供应用的视图和过程逻辑的语义描述的XML文档。在一个方面中,应用管理器904被构造为当调度执行应用时从适当应用包提取信息并且获得识别的资源。另选地,包括UI和过程XML文档的任何XML数据资源可以直接嵌入到应用包内。在另一个方面中,由应用管理器904实现当客户机“离线”时使得应用可以继续执行的功能。在这点上,应用管理器904可以引用适当的应用包以识别由对应应用利用的资源。然后,从适当的服务提供商识别和获得还没有缓存在本地的任何资源。
图9所示的过程管理器906负责创建和保持用于执行应用中的过程步骤的内部过程对象。如上所述,以过程XML语言编写的应用逻辑可以定义过程步骤的序列,每个过程步骤均包括一个或多个操作。由过程管理器906创建和保持的过程对象负责循环遍历并调用一个或多个低级构造或操作处理器。与传统平台不同,网络操作系统的概念基础是基于对低级构造进行建模的面向过程操作。从这些低级构造构建例如模型工作流、产品生命周期管理、用户协作等的更高级构造。举例来讲,本发明提供的对低级构造进行建模的操作处理器的集合包括但不限于:打开操作处理器、绑定操作处理器、改变操作处理器、判断操作处理器等。此外,提供操作API从而使得开发人员可以定义另外的操作处理器。通过这种方式,可以扩展XML虚拟机以支持和执行另外的低级构造。另一方面,可用于应用中的操作限于根据操作API创建或者由本发明提供的那些操作。结果,由于仅仅有限和良定义的操作集合可用于执行应用逻辑,所以用户创建恶意软件或实现恶意功能的能力受到严格限制。一方面,由于操纵XML文档的方式的数目是有限的,所以需要提供相对较少数目的操作。由于XML是非常一般性的语言,所以可以利用这个语言描述任何应用或域。因此,本发明提供的过程XML语言及其对应操作能够描述任何类型的过程逻辑并且可用于描述任何类型的应用。
根据一个实施例,由本发明提供跟踪执行应用或实例的“运行时状态”的实例对象。本领域技术人员等将认识到,当执行逻辑时,执行中应用的运行时状态不断地进化。实例对象跟踪并管理执行中应用的运行时状态并且向用于实现XML虚拟机的其它对象提供环境。因此,实例对象将操作意义耦合到过程及其关联操作的执行。结果,即使应用实例的运行时状态不断变化,仍向操作处理器提供说明这些变化的数据。通过这种方法,本发明支持使用无状态的过程对象的应用逻辑的动态执行。换言之,即使可以存在应用的多个实例,但是仅需一个版本的应用代码,从而节省了内存。
如图9所示,客户机端组件包括视图管理器908,视图管理器908负责跟踪与执行中应用关联的“视图”或用户界面。视图管理器908提供用于创建用于渲染和更新应用的用户界面的内部视图对象的方法。根据MVC设计模式,可以利用UI XML语言按语义描述应用的用户界面。因此,可以在UI XML文档内表示应用的完整用户界面的组件和其它图形属性之间的关系。在渲染在UI XML文档内按语义描述的用户界面时利用由视图管理器908进行实例化和保持的视图对象。在一个实施例中,可以通过一系列的XML变换执行用户界面的渲染。然而,本领域技术人员等将认识到,可以不用执行XML变换而渲染用户界面并且以上提供的描述应该被解释为是示例性的。在任何情况下,视图管理器908被构造为创建视图对象并且保持对系统中的所有活跃视图的引用。
如图9所示,客户机端组件包括文档管理器912,负责实例化和保持对文档对象的引用。如上所述,XML文档是用作网络操作系统环境中的公共数据源的数据模型。在XML文档内表示应用逻辑、系统设置、应用状态等。在一个方面中,文档管理器912负责将文档加载或缓存在客户机计算机上的存储器内。因此,文档管理器912可以与例如通信管理器(下文描述)的其它管理器进行交互以获得文档。可以利用通信通道从远程网络位置获得文档,或者可以建立通道以访问保持在客户机计算机上的本地硬盘驱动器或其它非易失性存储器上的文档。在另一个方面中,文档管理器912用作用于跟踪加载到客户机计算机上的存储器中的每个文档的客户机端缓存器。当在本地获得文档时,可以对提供文档的结构化面向对象表示的内部文档对象进行实例化。在这点上,文档管理器912保持对系统内的所有文档对象的引用并且暴露用于对XML文档进行创建、检索、保存和重新命名等的方法。
图9中可视地示出的事件管理器914用作触发器事件总线,该触发器事件总线使XML虚拟机的各方面可以响应于触发器的激活而执行应用逻辑。一方面,过程对象可以利用通知器对象向事件管理器914登记触发器作为监听器。系统内例如组件对象的其它对象常常将它们自身直接作为监听器登记到事件管理器914。此外,通知器对象接收并存储用于识别响应于激活触发器而将执行的应用中的过程步骤的数据。此外,由通知器对象提供的数据将触发器与发起触发器激活的发起对象(即,通常是视图或组件对象)进行关联。另一方面,当激活触发器时,事件管理器914推送(push)对象(即,视图或组件对象)或者以其它方式通知登记的监听器。在这个示例中,组件对象将向事件管理器914通知并传递数据。作为响应,事件管理器914将针对激活的事件执行查询以识别监听器。然后,可以警告适当的通知器或其它监听对象并且向其提供使得应用执行进行到适当的过程步骤的数据。如在下文中更加详细地描述的,分立的应用实例均可以利用相同一组触发器和通知器对象。提供被构造为以这种方式重用相同资源的事件管理器914和关联系统既提高了性能又使使用的内存最小化。
这里使用的“触发器”是指将导致应用代码被执行的定义的触发事件的发生。因此,在上文中参照图6A所述的示例性过程XML文档600中,激活触发器602使得执行在应用代码中定义的特定过程步骤。与现有系统相反,当发生数据更新时,本发明实现的触发器通常不被激活。换言之,除了指定例如数据绑定的操作以外,开发人员不需要提供用于管理从应用用户界面到数据模型的输入和输出的逻辑。代替地,本发明通过单独的数据更新通知事件总线管理数据更新,并且数据更新不对应于触发器的激活。如下文中更加详细地描述的,本发明的各方面提供在文档对象内实现的分立事件总线,该事件总线自动地处理到组件和其它对象的数据更新事件的传播。
另外图9所示的事务管理器910提供用于创建和传播用于更新XML文档的内容的事务的接口。因此,当将执行对数据模型的改变时,这将产生事务。在这点上,事务表示相对变化并且可以被表示为包含用于实现或撤销对数据模型的改变的数据的XML数据片段。例如,在上文参照图6A所述的MyTasks应用中,向基础数据XML文档添加任务的改变操作624会导致事务的创建。事务中反映的数据更新可以保存到数据模型以及任何远程监听器。在一个实施例中,事务管理器910包括标识和创建事务时的时间戳数据,可用于“回滚(rollback)”事务中表示的数据更新以及识别产生事务的顺序。
现在参照图10A,将描述应用初始化例程1000,该应用初始化例程1000执行用于打开应用包的处理。可以响应于用户产生启动应用的命令而执行应用初始化例程1000。如上所述,本发明的各方面可以提供一种桌面环境,在这种桌面环境中,用户通过选择菜单项、图标等启动应用。响应于接收到这种类型的命令,可以向系统环境对象902内的数据类型识别器传递用于识别与应用包关联的文档、XML文档或二进制文件的位置的URL。如下文中更加详细地描述的,以多种方式利用数据类型识别器以识别动作并且将动作与特定类型的文档进行关联。在任何情况下,当数据类型识别器确定正打开与应用包对应的文档(例如,应用包XML文档)时,可执行应用初始化例程1000。
在图10A所示的应用初始化例程1000中,在块1002内,利用应用管理器904对应用对象进行实例化。均表示不同应用的多个应用对象可以由应用管理器904进行实例化和保持。在应用初始化例程1000的该次重复中,可以实例化例如表示字处理程序的第一应用对象。在应用初始化例程1000的一不同重复中,可以实例化表示不同程序(例如,电子邮件程序)的第二应用对象。通过控制对应用对象的实例化和访问,与一个应用关联的过程逻辑不能够访问与不同应用关联的内部对象(例如,视图对象、实例对象、过程对象等)。因此,当执行字处理程序的过程逻辑时,与电子邮件应用包关联的视图对象是不可访问的。如下文中更加详细地描述的,利用应用管理器904来实例化和保持应用对象是本发明提供的用于确保应用内和过程内安全性的较大框架的一部分。
在块1004内,获得在对应的应用包内指定的正打开的应用的资源。根据本发明形成的应用包内的逻辑提供应用的资源和设置的全部蓝图。因此,应用包XML文档可以识别与应用关联的过程和UI XML文档以及例如图像、数据文档、XSLT文档等的其它应用资源。包括应用包XML文档自身的由应用利用的资源可以缓存在客户机上的存储器内或者可以利用通信通道(下文描述)从服务提供商获得。除了资源和设置管理以外,应用包XML语言使开发人员可以以更先进的方式配置应用包。仅作为示例,应用包XML文档内的条件逻辑可用于实现能够从失效备援(failover)网络位置获得资源的更加容错的网络服务。在主要网络位置不可用的情况下,应用包能够识别可获得资源的另选的网络位置。然而,这仅仅是本发明使开发人员可以利用包XML语言构造应用包的方式的一个示例。
如在图10A中进一步所示,在判断块1006内,应用初始化例程1000确定是否允许应用的附加运行时实例。应用包XML语言使开发人员可以建立用于限制可创建的应用实例的数目的配置。因此,在块1006进行的确定取决于在应用包XML文档内定义的配置。如果在块1006内确定不允许附加实例,则应用初始化例程1000进入块1008,在块1008内,处理用于启动不允许附加实例的应用的命令。在这点上,在块1008内处理命令可包括刷新应用的现有运行时实例。附加地或另选地,处理命令可包括通过对话框通知用户:应用的附加实例不被允许。然后,当处理命令时,应用初始化例程1000进入块1014,在块1014内应用初始化例程1000终止。
另一方面,如果在块1006内确定应用的附加实例被允许,则应用初始化例程1000进行到块1010。在块1010内,对用于跟踪和管理正启动的应用的运行时状态的实例对象进行实例化。当创建过程和视图对象时,本发明的各方面将这些对象与它们的对应实例进行关联。在块1010内实例化的实例对象保持用于跟踪过程和视图对象的结构、别名和其它运行时变量。因此,实例对象知道与这个应用实例关联的过程和视图对象。通过对象的受控实例化和引用,可以建立本地化关系层级以界定应用实例的边界。如在下文中更加详细地描述的,这个框架将过程和视图对象与对应的实例进行关联并且对从本地化关系层级之外对这些对象的访问进行划界。
在块1010内实例化的实例对象提供的环境可以关于应用的运行时状态实现功能。在一个方面中,实例对象实例化和保持用于对在正进行解释的应用代码内遇到的表达式进行求值的本地表达式引擎。过程对象可以利用对应实例对象和该实例保持用以对表达式求值的本地表达式引擎。此外,当执行操作时为了将操作意义耦合到过程逻辑的执行,可提供在块1010内实例化的实例对象。
如在图10A中进一步所示,在块1012内,利用在块1002内实例化的应用对象打开和初始应用的过程和视图逻辑的执行。在下文中而不在这里描述用于打开和初始化过程和UI XML文档内的逻辑的执行的例程。值得注意的是,每当启动与应用包关联的应用时,将提供新的实例对象以跟踪应用的运行时状态。例如,每当启动字处理应用的实例时,表示字处理程序的应用对象将提供不同的实例对象。通过以这种方式利用应用对象,本发明的各方面能够控制对与执行中应用关联的对象的访问。然后,应用初始化例程1000进行到块1014,在块1014应用初始化例程1000终止。
现在参照图10B,将详细描述利用应用对象封装应用并且提供应用内安全性。当启动应用包中的应用时,应用管理器904实例化应用对象,该应用对象提供该应用的封装表示。如图10B所示,应用管理器904可以实例化应用对象A 1030、应用对象B 1032和第N应用对象1034。在一个实施例中,利用应用对象实例化和保持一个或多个实例对象。在图10B所示的示例中,应用对象A 1030可以实例化和保持实例对象A1 1036、实例对象A2 1038和实例对象A-N 1040。相似地,应用对象B 1032可以实例化和保持实例对象B1 1042和实例对象B-N1044。在这点上,图10B所示的对象之间的单向实箭头指示:发起箭头的源对象保持由箭头指针识别的目的地对象。因此,从应用管理器904到应用对象1030-1034的实箭头指示这些对象由应用管理器904保持。从图10B所示可见,应用管理器904、应用对象1030-1034以及它们的对应实例对象1036-1044之间的关系是明显的。
图10B所示的对象之间的关系示出了本发明如何能够保证应用内安全性。由暴露用于创建、打开和终止应用的方法的应用管理器904控制对应用对象的访问。当应用对象被实例化时,应用管理器904将该应用对象隔离到分离的存储器空间中。通过防止应用对象共享存储空间,一个应用的代码不会注入或者以其它方式影响分配给不同应用的存储器空间。此外,应用对象提供可隐藏与应用关联的内部数据的、应用的封装表示。通过创建暴露的方法,控制应用的所有功能以及对内部数据的访问。通过以这种方式隔离和封装应用,使得与一个应用关联的内部对象(例如,视图对象、实例对象、过程对象等)对于一个不同应用不可访问。因此,当执行使用应用对象A 1030的代码时,不可以访问与应用对象B 1032关联的内部对象。尽管不可以访问应用的内部数据,但是可以利用基础数据模型共享数据。因此,如果用户有足够的访问权,则文档可由多个应用共享。换言之,本发明提供的应用内安全性框架没有阻止使用基础数据模型的应用之间的数据的授权共享。
现在参照图10C,将详细描述利用实例对象实现本地化关系层级。通过定义本地化关系层级,本发明的各方面使得可以安全执行多实例应用。图10C中的图示包括应用对象1050和实例对象1052。此外,图10C描述了当打开应用的过程和UI XML文档时实例化的过程对象1054、视图对象1056、组件对象1058和对话框对象1060。在一个实施例中,当发起应用的执行时,应用对象1050提供实例对象1052。从应用对象1050到视图对象1056和过程对象1054的虚线单向箭头指示在提供的实例对象1052所特有的本地化关系层级内创建这些对象。在这点上,实例对象1052保持迷你视图管理器1062和迷你过程管理器1064。当打开应用的过程XML文档时,向实例对象1052提供对利用迷你过程管理器1064进行跟踪获得的过程对象1054的引用。相似地,当打开应用视图时获得的视图对象1056被提供给实例对象1052并且由迷你视图管理器1062保持。因此,对迷你过程管理器1064和迷你视图管理器1062更新使实例对象1052可以跟踪和识别与特定应用实例关联的对象。
贯穿描述应用的逻辑的代码,开发人员可以利用全局命名对象来定义应用的逻辑。可以根据本发明提供的表达式语言来引用这些全局命名对象。然而,分配给应用代码中的对象的全局名称可以引用属于不同实例的运行时对象。例如,可在应用代码中使用下面的表达式来引用视图对象1056:“#MyTasks”。此外,下面的表达式可用于引用在上述的视图对象1056的环境内创建的组件对象(例如,按钮):“#MyTasks#button1”。为了避免歧义和增强安全性,本发明的各方面实现关于适当实例对在应用代码内遇到的全局命名对象进行求值的功能。在这点上,在不创建重复的过程或UI XML文档的情况下执行全局命名对象的求值。代替地,应用的过程和UI文档被共享并用于建立多个应用实例的运行时对象。从下文的描述可清楚看出,本地化关系层级的实现提供了用于当对表达式求值时识别和/或提供适当实例以及访问实例内的适当视图对象的基础。
在图10C所示的示例中,在实例对象1052与视图对象1056之间示出了双向箭头。一方面,双向箭头指示实例对象1052知道视图对象1056与这个特定应用实例关联。当被实例化时,视图对象1056可被提供给实例对象1052并且由迷你视图管理器1062保持。另一方面,当创建应用视图时提供实例对象1052的标识符从而使得视图对象1056知道它的关联实例。结果,当接收到将使得执行数据更新或应用逻辑的输入时,可以识别适当实例。例如,当视图对象1056用于打开应用视图时,可以实例化组件对象1058。由于在应用视图的环境内创建组件对象1058,所以它可以与视图对象1056进行通信。结果,例如当用户提供将使得执行应用代码的输入时,组件对象1058可以识别适当的实例对象1052
在图10C所示的示例中,在实例对象1052与过程对象1054之间示出了单向箭头。在一个实施例中,利用过程对象1052执行应用中的过程步骤。通过利用和更新迷你过程管理器1064,实例对象1052知道了它的关联的过程对象1054。然而,本发明提供的过程对象在过程步骤的执行之间是无状态的。结果,向过程对象提供来自单个实例对象1052的环境。换言之,在过程步骤的执行之间过程对象1052不知道关联的实例对象1052。然而,过程对象1054可利用由提供的实例对象1052保持的表达式引擎(下文描述)的服务。图10C所示的本地化关系层级和关联描述示出了本发明如何能够在仍支持多实例应用的同时确保过程内安全性。当重复过程步骤中的操作时,可以仅仅从一个实例对象1052向过程对象1054提供环境。基于建立关系以使得从单个实例对象1052向过程对象1054提供环境的这个框架,能够在与不同实例关联的对象之间实现严格分离。因此,当执行应用代码时,过程对象1054不能够访问不同实例的本地化关系层级内的对象。
本发明的各方面能够在由父实例建立的本地化关系层级内创建子实例。在这个实施例中,在父实例的本地化关系层级内创建子实例及其获得的子视图对象和子过程对象。由子实例描述的本地化关系层级对于在父实例的关系层级内创建的对象是可见的。然而,在子实例内创建的运行时对象不知道与父实例或其它子实例关联的对象。在父实例内嵌套子实例的这个能力向建立更加模块化的代码的应用开发人员提供了较大的灵活性以及利用不同的作用域的能力。
现在参照图11,将描述用于打开和初始化在应用的过程代码内定义的逻辑的执行的过程初始化例程1100。当产生打开包含过程逻辑的文档的调用时,可执行过程初始化例程1100。在一个实施例中,打开文件的调用可以被发送至从主调对象接收URL的数据类型识别器。传递至数据类型识别器的URL可以对应于任何类型的文档,包括但不限于应用包XML文档、过程XML文档或UI XML文档。当打开包含过程逻辑的文档时,数据类型识别器可以使得执行特定动作以帮助应用的执行。在图11所示的示例性实施例中,数据类型识别器确定提供的文档是过程XML文档并且使得执行该文件类型特有的动作。
图n所示的过程初始化例程1100示出了可打开过程XML文档的两个示例性情况。然而,由于在不脱离要求保护的主题的范围的情况下可以在其它情况下打开过程XML文档,所以下文提供的示例应该解释为示例性的。如图11所示,过程初始化例程1100在块1102或块1104开始。在一个示例性实施例中,例程1100在块1102开始,在块1102内,数据类型识别器接收用于打开与应用包关联的过程XML文档的调用。在这个实施例中,应用对象在块1102内接收到的调用内提供先前创建的实例对象。如下文中更加详细地描述的,在预期执行在过程XML文档内定义的过程步骤时,过程初始化例程1100将实例化过程对象。对这个过程对象的引用可在以后提供给在块1102接收到的调用内提供的对应实例。
在一个另选实施例中,过程初始化例程1100在块1104开始,在块1104内,数据类型识别器接收用于打开表示孤立应用的过程XML文档的调用。应用不需要与应用包进行关联。在这个实施例中,数据类型识别器在块1104在打开过程XML文档的调用内不接收提供的实例。以这种方式构造为孤立的应用不支持多个实例执行并且使得应用可以共享至少一些存储空间。
在块1106内,数据类型识别器执行处理以识别将打开的文档的文件类型。在这个示例中,由数据类型识别器执行的分析将确定与接收的调用关联的文档是过程XML文档。如上所述,数据类型识别器可以将动作与特定文件类型进行关联。当遇到打开过程XML文档的请求时,在块1108,数据类型识别器被构造为调用过程管理器906,指示已经接收到打开过程XML文档的请求。
在判断块1110,过程管理器906内的逻辑确定这个过程XML文档的过程对象是否缓存在存储器内。在一个方面内,当最初启动应用时,过程初始化例程1100负责实例化新的过程对象。一旦被实例化,过程初始化例程1100实现使得新实例化的过程对象执行过程步骤的逻辑。由于过程对象是无状态的,所以它可被重用。这样,相同过程对象可用于执行来自应用包的相同实例或者嵌入在过程XML文档内的其它过程的应用代码。因此,通过过程管理器906可将在启动应用时实例化的过程对象缓存在存储器内。如果过程管理器906先前针对仍在存储器内的这个应用实例化了过程对象,则在块1110执行的测试的结果为“是”,并且过程初始化例程1100进行到块1120,这将在以后进行更加详细的描述。相反,如果确定将实例化新的过程对象,则过程初始化例程1100进行到块1112。在实例化新过程对象之前,应该在本地可获得正打开的过程XML文档。为此,在块1112,过程管理器904产生经由文档管理器912路由以获得适当的过程XML文档的调用。
在块1114,确定由过程管理器904请求的过程XML文档是否加载在客户机计算装置的存储器内。如上所述,文档管理器912用作客户机端缓存器,跟踪加载在客户机上的存储器内的每个文档。如果确定正打开的过程XML文档在由文档管理器912保持的客户机端缓存器内被引用,则过程初始化例程1100进行到块1118,这将在以后进行更加详细的描述。相反,如果请求的过程XML文档没有加载在客户机端缓存器内,则过程初始化例程1100进行到块1116,在块1116,基于文档管理器912从服务提供商获得请求的过程XML文档。更具体地讲,在块1116,文档管理器912利用通信管理器(下文所述)请求从由提供的URL识别的网络位置获得适当的过程XML文档。
一旦可从客户机端缓存器获得该过程XML文档,则在块1118实例化新的过程对象。具体地讲,在预期执行应用代码时利用过程管理器904内的逻辑来实例化新的过程对象。然后,在块1120将新过程对象作为监听器登记在它的对应过程XML文档上。如下文中更加详细地描述的,通过作为监听器在数据模型中的文档上进行登记,当对文档执行指定的数据更新时,对象可以被通知并且采取某动作。
在块1122,针对应用中的每个触发器实例化通知器对象。具体地讲,可以执行解析以识别在正打开的过程XML文档内定义的触发器元素。举例来讲,MyTasks应用定义触发器602(图6A),其将导致在块1122内实例化通知器对象。触发器可以被定义为过程XML文档内的元素,每个触发器包括视图、组件、事件和步骤属性。分配给视图和组件属性的值识别将激活触发器的应用视图和/或组件。相似地,分配给事件属性的值识别将激活触发器的事件的类型。此外,分配给步骤属性的值识别将响应于触发器而执行的应用的过程代码内的过程步骤。对于应用中的每个触发器,过程管理器906内的逻辑实例化通知器对象并且缓存通知器对象中可接下来用于执行特定过程步骤的数据。
另外如图11所示,在块1124,定义在应用中的每个触发器向事件管理器914进行登记。在一个实施例中,事件管理器914保持将一组触发器数据与监听通知器对象进行关联的内部哈希数据结构。因此,可以通过更新由事件管理器914保持的哈希数据结构来登记触发器。如下文中更加详细地描述的,当发生与登记的组件的事件和事件类型匹配的事件时,事件管理器914通知适当的监听对象和通知器对象。
另外如图11所示,在块1126确定是否将实例化新实例。当打开过程XML文档时,可以提供实例。具体地讲,当打开过程XML文档时,上述的应用初始化例程1000可以实例化和提供实例。另外,为了支持模块化应用开发以及使得不同过程共享环境,可以在其它环境中提供实例。在这些实施例中,将不实例化新实例,并且过程初始化例程1100进行到块1130,这将在以后进行更加详细描述。相反,如果没有提供实例对象,则过程初始化例程1100进行到块1128,在块1128,实例化实例对象。具体地讲,在块1128,过程管理器906内的逻辑产生实例化新实例对象的调用。
在块1130,产生执行在过程XML文档内定义的过程步骤的调用。在实际实施例中,过程对象被构造为基于两个接收的参数执行过程步骤:(1)表示应用的运行时状态的提供的实例;和(2)将执行的过程步骤的标识符。在这点上,可在应用包或孤立应用的环境内创建要提供给过程对象的实例。在另一个实施例中,过程初始化例程1100被构造为向过程对象提供参数,在执行在过程XML文档内定义的每个过程步骤时,所述参数使得可以对于多个实例重用该过程对象。然后,过程初始化例程1100进行到块1132,在块1132它结束。
当将执行过程步骤时,控制流程导向在过程对象内编码的执行方法。一般地说,执行方法循环遍历并且使得执行在过程步骤内定义的每个操作。换言之,执行方法是对根据过程操作API开发的过程操作的接口。这样,为了执行在MyTasks应用内定义的过程步骤“1”,过程初始化例程1100可以调用执行方法。作为响应,执行方法将执行处理以使得执行这个过程步骤604内的打开、绑定和动作操作612-616。
现在参照图12A-12B,将描述执行方法1200,该执行方法1200被构造为使得执行过程步骤内的操作。如图12A所示,执行方法1200在块1202开始,在块1202,识别过程步骤内的新操作。在一个实施例中,通常顺序识别和执行过程步骤内的操作。当遇到新操作时,在块1203选择在操作的值属性中提供的表达式以进行求值。例如,在上述的MyTasks应用中,MyTasks文档600(图6A)定义初始化应用过程步骤604。在这个过程步骤604内,第一操作是具有值属性“apps/mytasks_gui.xml”的打开操作612。在对执行方法1200的该次重复中,在块1203选择表达式“apps/mytasks_gui.xml”以进行求值。
参照图12进行的描述提供了顺序执行过程步骤内的操作的示例。然而,本发明的各方面支持操作的异步执行从而使得可以不顺序地执行过程步骤内的每个操作。例如,如果第一操作请求了仅仅可从远程网络位置获得的资源,则可在异步地获得资源的同时执行其它操作(不取决于第一操作的结果)。
另外如图12A所示,在块1204内,在块1203选择用于求值的表达式被求得为XBind。这里所用的XBind是包括URL、基路径(例如,引用由指定URL识别的文档内的XML片段的XPath表达式)和选择(例如,多个XPath表达式)的数据类型。在MyTasks应用中定义的示例性打开操作612内,在块1204,“apps/mytasks_gui.xml”表达式将被求得为下面的XBind:
URL=apps/mytasks_gui.xml
Base path=/
Selection=
这个XBind的URL引用提供应用的用户界面的语义描述的UIXML文档。尽管这里提供的示例利用URL作为用于识别资源的格式,但是这应该被解释为是示例性的。结合本发明可以实现能够唯一识别资源的任何系统。如在下文中更加详细地描述的,网络操作系统提供用于访问XML文件系统、数据库和使用URL的XML Web服务的协议和抽象。然而,可以想到,其它协议可用于识别URL以外的资源位置。以上XBind的基路径是“/”,其引用在URL内识别的UI XML文档的根元素。当打开应用视图时,基路径可以引用UI XML文档内的片段。在这种情况下,视图逻辑的语义描述不与UI XML文档的根节点关联。因此,针对该变化的XBind将包括引用与视图逻辑对应的节点的基路径。由于针对这个示例性XBind的选择不包含数据,所以它是“null”(空)。一旦对表达式进行了求值,执行方法1200进行到块1206,这将在以后进行详细描述。
现在参照图12B,将描述当对表达式求值时发生的交换。图12B中的图示包括一组对象,其包括实例对象1250、过程对象1252和视图对象1254。与以上参照图10C提供的描述相似,图12B中所示的虚箭头指示过程和视图对象1252-1254先前与实例对象1250所特有的本地化关系层级关联。在执行方法1200内,过程对象1252可利用实例对象1250来对遇到的表达式求值。由于当发起过程步骤的执行时提供实例对象1250,所以过程对象1252可以利用过程步骤内的实例对象1250从而具有由表达式引擎1260求得的表达式。
在一个实施例中,本发明实现表达式引擎1260,表达式引擎1260被构造为对由实例提供的环境内的表达式进行求值。具体地讲,可在实例对象1250的环境内使用封装在表达式引擎1260内的功能,将表达式1262求得为XBind 1264、XML格式化数据或纯文本。一旦被求值,由表达式引擎1260识别的XBind 1264可以从实例对象1250传递至过程对象1252。通过利用实例对象1250实例化和保持本地表达式引擎1260,关于由实例或任何子实例提供的环境易于执行表达式的求值。此外,以这种方式利用本地表达式引擎1260使得可以在多链接作用域深度内执行实例和作用域处理。因此,可以根据正在执行的应用实例,不同地对表达式求值,并且开发人员不需要解决管理多实例或作用域的复杂性。将在下文中更加详细描述在表达式引擎1260内实现的功能和可由本发明求得的表达式的类型的附加描述。在这点上,表达式引擎1260可用于对在操作内定义的多个表达式求值。在调用操作处理器之前对操作内的这些表达式的每一个求值,这将在下文中进行更加详细地描述。
再次参照图12A,在块1206,执行方法1200发起适当的操作处理器的执行。如上所述,本发明提供多个操作处理器。每个操作处理器实现对于可能遇到的操作的类型特定的功能。因此,如果当前操作是打开操作,则在块1206执行方法1200调用打开操作处理器。然而,实现了可在执行方法1200内调用的其它操作处理器(绑定、判断、动作、改变等)。因此,执行方法1200被构造为传递适于利用良定义的过程操作API进行调用的特定操作处理器的变元,这将在下面的示例中进行讨论。然而,每个操作处理器当被调用时,向该操作处理器提供至少实例和过程对象以及求得的XBind。
在判断块1208,执行方法1200确定是否将执行过程步骤中的另外的操作。因此,如果先前没有执行当前过程步骤内的所有操作,则执行方法1200返回到块1202,并且重复执行块1202-1208直到执行了每个操作。值得注意的是,过程步骤可以包括引导应用执行流程的语句。例如,“调用”语句可被定义为过程步骤内的语句,一旦执行了当前过程步骤中的所有操作,该语句将执行流程导向一个不同的过程步骤。更具体地讲,提供“调用”操作,该“调用”操作使开发人员能够将一个过程步骤的操作之间的执行流程导向一个不同的过程步骤。当定义“调用”操作时,流程进行到新的过程步骤,并且当完成时返回到发起过程步骤内的位置。在实际实施例中,可利用“调用”操作产生异步调用、时间延迟调用和时间重复间隔调用。然后,一旦执行了所有操作,执行方法1200进行到块1210,在块1210它结束。
如上所述,当解释应用逻辑时,执行方法1200发起特定操作处理器的执行。继续参考上述的MyTasks应用,将描述由特定操作处理器实现的功能。由于操作处理器实现状态改变,所以提供操作处理器利用的所有数据。此外,本发明的各方面被构造为使得操作处理器不返回数据。这样,操作处理器可被实现为被提供用于执行的任何事物而不返回数据的孤独功能。因此,可在本地执行应用中的过程操作。然而,由于操作处理器是孤立功能,所以可从服务器端数据中心作为Web服务提供操作处理器。
现在参照图13,将描述利用打开操作处理器的示例性打开处理例程1300。在上述的示例性MyTasks应用(图6A)中,应用定义打开操作612,打开操作612具有在执行方法1200(图12A)内可被求得为XBind的值属性。因此,可调用打开操作处理器执行打开操作612。在一个实施例中,变元可在调用内传递至包括先前求得的XBind的打开操作处理器和适当的实例和过程对象。
如图13所示,在块1302,在打开操作处理器内调用数据类型识别器以打开文档。如上所述,先前求得的XBind可以指向文档或正打开的文档内的片段(节点)。此外,打开操作处理器向数据类型识别器传递识别在调用内正打开的文档的这个先前求得的XBind。当接收到调用时,数据类型识别器在块1304执行处理以识别在接收的XBind内引用的文档的文件类型。在示例性MyTasks应用内,传递到数据类型识别器的XBind引用标题为“MyTasks_gui.xml”的文档。在这个示例中,数据类型识别器将文件类型识别为UI XML文档。如上所述,在数据类型识别器内提供将动作与特定文件类型进行关联的逻辑。在下文描述当利用数据类型识别器打开UI XML文档时启动的动作的示例性集合。
在打开处理例程1300的块1306内,数据类型识别器向视图管理器908传递命令以指示已经接收到打开UI XML文档的请求。具体地讲,调用视图管理器908以创建将用于渲染新的用户界面或应用视图的视图对象。如上所述,可以在UI XML文档(例如,“MyTasks_gui.xml”)内按语义描述应用的用户界面。在这点上,多视图对象可与每个应用实例关联。因此,在对视图管理器908的调用内,可由数据类型识别器提供适当实例的标识符和描述新视图的UI XML文档。
另外如图13所示,在块1308内,启动提供新应用视图的语义描述的逻辑的执行。如上所述,视图管理器908负责实例化视图对象并且执行使得可以渲染在UI XML文档内描述的应用视图的任务。为了渲染新应用视图,利用视图对象实例化组合和对话框对象。如下文中参照图23进行更加详细地描述的,本发明提供的这些对象实现使得在计算机显示器上渲染在UI XML文档内按语义描述的图形元素的功能。然后,打开处理例程1300进行到块1310,在块1310它结束。
现在参照图14A-14B,将更加详细描述在打开过程和UI XML文档时对数据类型识别器的利用。图14A示出了当打开UI XML文档时进行交互的过程对象1400、打开操作处理器1402、数据类型识别器1404、实例对象1406、视图管理器908和视图对象1408。因此,图14A所示的框图可以对应于由在上文参照图13描述的打开操作处理例程1300利用的对象。可由过程对象1400启动应用视图的打开,过程对象1400调用打开操作处理器1402来打开由求得的XBind识别的特定文档。当接收到调用时,打开操作处理器1402利用数据类型识别器1404识别文件类型并且使得执行适当动作。在该实施例中,当UI XML文档从打开操作处理器1402传递至数据类型识别器1404时,定义便于打开和启动应用的视图逻辑的执行的动作。此外,利用数据类型识别器1404将获得的视图对象1408与适当的实例对象1406进行关联。
在图14A所示的示例中,当接收到用于打开UI XML文档的调用时,数据类型识别器1404调用视图管理器908。为了打开和执行UIXML文档内的逻辑,视图管理器908实例化视图对象1408并向其提供实例对象1406的标识符和引用适当UI XML文档的XBind。通过以这种方式传递数据,视图对象1408变得知道它的关联的实例。一旦实例化视图图像1408,利用与上述的过程初始化例程1100(图11)相似的功能,启动提供新应用视图的语义描述的逻辑的执行。具体地讲,视图管理器908可以将适当UI XML加载到客户机端缓存器内。然后,视图对象1408可被实例化并用于渲染应用的用户界面组件和对话框。然而,与过程不同,多个视图对象可被实例化并且与同一实例进行关联。
在实际实施例中,本发明的各方面支持应用的UI逻辑的惰性加载和/或渲染。为此,根据由万维网联盟定义的标准实现的XLinks可用于执行一个或多个UI XML文档的惰性加载和/或渲染。本领域技术人员等将认识到,XLink可被包括在描述不同XML资源之间的链接的XML文档内。与在链接Web页面时内向用户提供意义的传统的基于HTML的超链接不同,XLinks更易于由软件系统和计算机解释。值得注意的是,XLinks可以包含定义将激活XLink的条件和当激活时采取的动作的逻辑。结果,XLinks适于执行应用UI逻辑的按需和/或惰性渲染。不是当启动应用时加载所有的应用的UI逻辑,可定义XLinks从而按需要链接到适当的XML资源。例如,在上述的示例性MyTasks应用中,在加载和渲染所有的应用的用户界面逻辑后,“隐藏”Button2组件704。利用XLinks在需要时加载和/或渲染Button2组件704的UI逻辑,可以实现等同的功能和改进的性能。在这个示例中,与MyTasks_gui.xml文档650中的Button2组件704关联的用户界面逻辑可以包括引用定义相关用户界面逻辑的本地或远程资源(例如,另一个UI XML文档)的XLink。当由应用逻辑规定时,这个XLinks可用于加载和/或渲染与Button2组件704对应的UI逻辑。
一旦打开操作处理器1402完成,获得的视图对象1408被返回到数据类型识别器1404。然后,数据类型识别器1404将视图对象1408与适当实例进行关联。具体地讲,当创建新的应用视图时,数据类型识别器1404将获得的视图对象1408传递至实例对象1406。作为响应,迷你视图管理器1412被更新,从而将视图对象1408与对应实例进行关联。与由迷你视图管理器1412分配给相同对象的名称相比,在视图管理器908内分配给视图对象1408更加复杂的名称。具体地讲,视图管理器908内分配给视图对象1408的名称包括对应的实例对象1406的标识符。如下文中更加详细地描述的,通过实现以这种方式对对象进行命名的系统,可以在多个应用实例之间区分相同视图。通过以这种方式控制数据的传递,本发明的各方面实现了界定应用实例的边界的本地化关系层级。
现在参照图14B,将更加详细描述在打开过程XML文档时对数据类型识别器1404的利用。与图14A相似,图14B示出了过程对象1400、数据类型识别器1404、实例对象1406、以及过程管理器906。因此,图14B所示的框图可对应于由过程初始化例程1100(图11)利用的对象。当打开过程XML文档时,在应用包或者孤立应用的环境中利用数据类型识别器1404来识别文档的文件类型。在这个示例中,数据类型识别器1404定义便于在过程XML文档内描述的逻辑的打开和启动执行的动作。具体地讲,执行流程从数据类型识别器1404进行到对过程对象1400进行实例化的过程管理器906。一旦打开了过程XML文档,对获得的过程对象1400的引用可被返回到数据类型识别器1404。然后,数据类型识别器1404向实例对象1406提供对获得的过程对象1400的引用。作为响应,迷你过程管理器1414被更新,由此将过程对象1400与对应实例进行关联。
参照图15A-15B,将描述提供关于利用迷你视图管理器以便于过程执行的示例的动作操作。一旦执行了MyTasks应用中的打开操作612,执行流程进行到动作操作614(图6A)。在这点上,参照图15A-15B描述动作处理例程1500,图15A-15B示出了逻辑以及实现例程1500所涉及的对象之间的交互。
如图15A所示,在块1502,在动作操作614的值属性内表示的表达式被求得为XBind。在示例性MyTasks应用中,动作操作614包含值属性“#MyTasks”,这个值属性“#MyTasks”在块1502被求得为XBind。现在具体参照图15B,实例对象1552可利用封装在表达式引擎1550内的功能将“#MyTasks”表达式求得为XBind。在这个示例中,表达式引擎1550被构造为针对命名为“MyTasks”的视图对象在迷你视图管理器1554内执行查询。当创建新的应用视图时,获得的视图对象被传递至对应实例,该对应实例相应地更新迷你视图管理器1554。在这点上,MyTasks视图对象被分配由实例保持的迷你视图管理器1554内的直接名称,而非用于全局视图管理器908内的视图的更加复杂的标识符。由于复杂名称用于区分属于不同实例和应用的视图,所以在这个实例内不需要更复杂的名称。由于迷你视图管理器1554保持它自己的视图,所以这个信息是实例及其迷你视图管理器1554已经知道的事物。通过提供这种架构,在迷你视图管理器1554的帮助下,表达式引擎1550能够在与不同实例和应用关联的视图之间进行区分。因此,在示例性MyTasks应用内,迷你视图管理器1554将包括名称为“MyTasks”的视图对象。视图对象还包括对这个视图对象所关联的实例的引用。在对“#MyTasks”表达式求值时,表达式引擎1550将MyTasks视图对象1558识别为操作的源或“发射器”。具体地讲,与实例对象1552关联的MyTasks视图对象1558被识别为发射器而非与一个不同实例关联的“MyTasks”视图对象。由于表达式引擎1550关于实例对表达式求值,所以利用迷你视图管理器1554识别作为事件源的正确MyTasks视图对象1558。
在这个示例中,返回到过程对象1556的XBind将包括引用MyTasks_gui.xml文档650和MyTasks视图对象1558的URL。指示器将包括在XBind内用于指示MyTasks视图对象1558是正执行的操作的发射器或源。在迷你视图管理器1554内的查询没有识别与在表达式中引用的对象的匹配的情况下,表达式引擎1550被构造为在视图管理器908内进行查询以获得相关的视图对象。
在例程1500的块1504内,过程对象1556启动动作操作处理器1560的执行。在示例性MyTasks应用内,利用表达式引擎1550先前求得的XBind和发射MyTasks视图对象1558由过程对象1556传递至动作操作处理器1560。然后,在块1506,动作操作处理器1560使得执行在应用过程逻辑内指定的方法。在这个示例中,MyTasks应用内的动作操作614定义用于识别要执行的动作的方法和目标的下面“<component>”XML元素:
<component name=″button2″action=″hide″value=″″></component>
通过定义这个元素,应用代码导向隐藏名称为“button2”的组件。在一个方面中,利用用于对视图对象的关联用户界面组件执行状态操纵(包括但不限于启用、禁用、隐藏和显示方法等)的普通方法,对视图对象进行编码。由于MyTasks视图对象1558被传递至动作操作处理器1560,所以可以在对象1558上直接调用这些普通方法。在这个示例中,动作操作处理器在MyTasks视图对象1558上调用“隐藏”方法并且将Button2组件1562识别为将要隐藏的目标组件。然后,动作处理例程1500进行到块1508,在块1508它结束。
现在参照图16,将更加详细描述绑定操作处理器的实现。一旦执行了MyTasks应用中的打开和动作操作612-614,执行流程进行到绑定操作616(图6A)。如图16所示,在块1602,在绑定操作616的值属性内表示的表达式被求得为XBind并且被返回到适当的过程对象。与上文提供的描述相似,过程对象利用实例本地的表达式引擎对提供的表达式求值。在示例性绑定操作616内,在块1602,“data/tasks.xml”表达式将被求得为下面的XBind:
URL=data/tasks.xml
Base path=/
Selection=
这个XBind的URL引用用于存储任务描述的数据文档。此外,基路径引用与URL对应的数据文档的根节点并且这个示例性XBind的选择为空。
在绑定处理例程1600的块1604,用于执行当前过程步骤的过程对象启动绑定操作处理器的执行。在这个调用内,绑定操作处理器接收先前求得的XBind以及适当的过程和实例对象。如上所述,开发人员能够根据定义功能调用参数的过程操作API和可位于操作的主体内的XML语义结构,创建操作处理器。在这个示例中,绑定操作616(图6A)定义下面的“<component>”XML元素618:
<component view=″MyTasks″name=″input3″select=″/tasks/task/@description″>
因此,绑定操作处理器(在块1604进行调用)负责对这个逻辑进行解释以将特定组件绑定到XML文档内的片段。更一般地讲,每个操作处理器负责对在操作元素的子元素内定义的逻辑进行解释。在这点上,过程操作API使开发人员可以定义操作的主体内的XML语法从而可以根据需要构造在操作处理器内执行的逻辑。
在块1605,与将绑定到基础XML文档的组件对应的视图对象被识别并被返回到绑定操作处理器。在这个示例中,由绑定操作处理器解释的组件元素618将“Input3”识别为创建在“MyTasks”视图对象的环境内。由于适当的实例对象被提供给绑定操作处理器,所以可以易于识别正确的视图对象。具体地讲,执行实例的迷你视图管理器1554内的查询,并且将“MyTasks”视图对象直接返回到绑定操作处理器。
如图16所示,在块1606,在绑定操作处理器内创建翻译的XBind。传递至绑定操作处理器的XBind识别存储由MyTasks应用利用的内容的文档(“data/tasks.xml”)。然而,仅仅识别的XML文档内的数据的一个子集将被绑定到Input3组件。因此,在这个示例中由绑定操作616执行的绑定被构造为将Input3组件的绑定缩减至由XPath表达式识别的“data/tasks.xml”文档内的数据的片段。具体地讲,组件元素618内的选择属性包括XPath表达式,该XPath表达式限定绑定操作616的值属性内的表达式。在这个示例中,XPath表达式识别用于将进入的XBind限定到绑定操作处理器并且创建下面翻译的XBind的XML文档内的适当片段:
URL=data/tasks.xml
Base path=/tasks/task/@description
Selection=
上述翻译的XBind可以以速记符号写为“data/tasks.xml#/tasks/task/@description”。在这点上,翻译的XBind的URL引用存储相关任务描述的数据模型内的XML文档。在由URL识别的XML文档内,基路径引用任务元素及其对应的描述属性。如下文中更加详细地描述的,XBind还可以包括提供引用数据模型内的片段时的附加特征的“Selection”。
在绑定处理例程1600的块1608内,调用由适当用户界面组件提供的设置数据功能。在这个示例中,Input3组件是绑定操作616的对象并且将被绑定至任务描述的列表。组件API可用于定义用于对特定组件设置数据的某些方法。在一个实施例中,Input3组件可包括在块1608内调用的设置数据方法。值得注意的是,当调用绑定操作处理器时,可以基于视图对象和对在块1604接收的组件名称的引用,识别适当组件。
当被调用时,设置数据方法通常将执行管理功能和错误处理以确保组件还没有绑定至数据模型内的XML文档。然后,在块1612,作为绑定操作616的对象的Input3组件被作为更新监听器添加到“data/tasks.xml”文档。如上所述,本发明提供了文档对象形式的XML文档的结构化面向对象表示。在一个实施例中,文档对象用作由Web浏览器和XML解析器利用的DOM(“文档对象模型”)对象的包装器。在这点上,在本发明提供的文档对象内编码增强特征,这些增强特征包括添加存在于网络操作系统环境内的任何对象作为对数据模型进行的更新的监听器的能力。仅作为示例,可以是数据更新监听器的对象包括但不限于过程、视图、组件、通信通道等。在块1612,执行调用以将Input3组件作为更新监听器添加到与“data/tasks.xml”文档对应的对象。在这点上,每个文档对象保持将响应于数据更新而被通知的监听器的列表。通过在块1612发出调用以添加更新监听器,Input3组件将变成同一文档对象上的潜在许多数据更新监听器之一。
在判断块1614,确定作为更新监听器添加到文档的组件是否使用规则。在一个方面中,本发明支持使得规则与数据绑定组件关联的功能。在这点上,规则处理器可以被包括在数据模型内,用于定义组件和其它对象将如何解释它们的数据绑定。如在下文中更加详细地描述的,规则使得普通组件根据数据模型内的内容来解释、学习和采取适当动作。因此,具有不同元素、属性和层级的任何XML语义或语言可以理解和/或被绑定至相同类型的普通组件。换言之,不需要针对某数据模型具体地创建使用规则的组件。代替地,规则使得普通组件组能够与任何类型的基础数据一起使用,并且因此便于MVC设计模式内的真实数据抽象。组件不需要理解基础数据模型的结构并且可利用规则来解释内容以实现期望功能。当建立与使用规则的组件的绑定时,实现用于设置和/或更新规则处理器从而使得可以应用规则的功能。在添加组件作为更新监听器的调用中,可以包括标志以指示组件是否是规则用户。因此,如果接收的标志指示组件不是规则用户,则在块1614执行的测试的结果是“否”,并且绑定处理例程1600进行到块1618,这将在下文进行更加详细地描述。相反,如果接收的标志指示组件是规则用户,则测试的结果是“是”并且绑定处理例程进行到块1616。在块1616,执行设置规则例程1600,其将数据绑定组件的规则施加和并入到在数据模型内保持的规则处理器。在这点上,在下文中参照图21更加详细描述由设置规则例程执行的逻辑。
在绑定处理例程1600的块1618中,产生调用以更新作为绑定操作的对象的组件的用户界面。根据组件API定义的方法可用于执行用户界面的更新。具体地讲,组件API使开发人员提供用于实现组件的“Update( )”方法的逻辑。在这点上,在下文中参照图22更加详细描述可在“Update( )”方法内实现的逻辑。在这个示例中,与Input3组件关联的“Update( )”方法将导致在数据模型内保持的任务描述被显示。然后,绑定处理例程1600进行到块1620,在块1620它结束。一旦绑定操作616完成执行,向新数据绑定组件通知影响数据模型(“data/tasks.xml”)的更新。
在示例性MyTasks应用(图6A)内,绑定操作616是执行的初始化应用过程步骤604内的最后一个操作。当执行绑定操作616时,MyTasks应用的处理保持空闲,直到发生触发事件。在这点上,在下文参照图17描述触发器激活例程1700。然而,在讨论触发器的使用之前,将更加详细描述由本发明提供的表达式引擎实现的功能的说明。
在现有平台内,向开发人员提供用于查询数据并且定义应用的计算逻辑的相同编程工具。在这点上,在性质上强制的编程语言最终将所有的应用的逻辑表示为有序语句的序列。尽管强制编程工具的有序性质非常适于实现计算逻辑,但是强制语言的数据查询能力不太健壮。代替地,非强制语言编程工具将更加适于查询或以其它方式访问数据。为此,提供表达式语言以使得当执行I/O时开发人员可以利用非强制编程工具。在这点上,表达式被构造为与XML语法兼容并且被划界用于本发明提供的基于XML的编程语言内。在这里提供过程XML语言如何能够容易地使用表达式的特定示例。然而,由于表达式可被合并以用于其它XML语言内并且还直接从对象内的程序代码进行求值和使用,所以这些示例应该解释为是示例性的。
实现被构造为执行符合MVC设计模式的应用的开发平台,关于访问可在运行时演变的数据提出了挑战。在一个实施例中,XBind提供用于引用存储器内对象、文档、数据子集等的标准化手段。如上所述,XBind是三维数据类型,包括URL、基路径(例如,可引用XML文档内的片段或整个XML文档的XPath表达式)、和选择(例如,多个XPath表达式)。从下文所述的示例可清楚看出,XBind数据类型提供可在运行时演变的对象传送它们的状态的标准化方法。这样,XBind允许松散耦合的系统的不同部分可以以标准化方法高效地传送它们的状态信息。在这点上,XBind提供向用户界面组件绑定数据的简单直接的方法。通过利用选择,能够在XBind内描述组件的状态,该状态可以作为输入提供给其它系统。更一般地说,可以在任何时间针对描述对象的状态的XBind,查询网络操作系统环境内的每个对象。因此,可以对不同对象设置描述对象(例如,组件)的状态的XBind以“克隆”或传达组件的状态。在另一个方面中,可以在网络上同步与对象关联的XBind。结果,可利用XBind更新在远程计算机上执行的对象以保持同步的状态。这是本发明的各方面能够在网络上实现实时协作的一种方式。
在一个实施例中,可由表达式引擎应用XPath求值。本领域技术人员等将认识到,XPath是提供用于识别和选择在XML文档内的特定位置处的数据的语言的万维网联盟(W3C)标准。此外,XPath建立用于形成对特定值的表达式求值的约定。例如,XPath表达式“/tasks/task/@description”用于MyTasks应用内,它包括用于选择名称为“description”的属性的“@”符号的缩写语法。这个语法符合XPath约定并且用于引用满足特定选择或匹配参数的XML文档内的数据的子集。
本发明提供的表达式语言使开发人员可以引用会在运行时经历状态改变的存储器内对象。例如,“#MyTasks”和“#MyTask#input3”表达式分别引用不同的视图和组件对象。利用简单符号,开发人员能够在对这些存储器内对象和它们的数据绑定的引用之间进行区分。例如,如果开发人员访问绑定到“Input3”组件的数据而非对对象自身的的引用,则可利用“{#MyTasks#input3}”表达式。这个特定表达式将求得为在在与MyTasks视图内的Input3关联的XBind内引用的XML文档内发现的值。当遇到包含大括号的表达式时,表达式引擎将绑定至识别的对象的一个或多个XML节点转换成文本或XML。在这点上,本发明提供的视图和组件对象知道它们的数据绑定并且总能够针对它们的XBind进行查询。通过关于实例对表达式求值,在对这些类型的表达式求值时,表达式引擎能够识别适当的对象和对应的数据绑定。因此,表达式语言使开发人员能够利用相同的简单符号引用存储器内对象以及它们的数据绑定。此外,表达式可以引用由URL识别的外部资源,该URL是利用通信通道自动获得的。
与利用XPath对文档内的数据进行导航和选择的现有系统不同,本发明的各方面可以利用XPath约定引用存储器内对象和它们的关联数据。假定名称为“Input1”的组件存在于称作“MyView”的应用视图内,下面将是由本发明求得的有效表达式:
{#MyView#input1#@name}
在引用XML文档、变量或者存储器内对象后,在关于组件XBind的表达式中的最后一个“#”字符后应用XPath约定。当遇到有关XPath表达式时,组件内的基路径或选择将与参照绑定处理例程1600(图16)描述的所提供的XPath合并。在上述的示例性表达式中,最后一个“#”指示XPath表达式(例如,“@name”)是相对的,从而使得这个XPath表达式将与组件的XBind合并。然而,本发明求值的XPath表达式还可以是绝对的。在对以“/”为开始字符表示的绝对XPath表达式求值时,本发明的各方面将忽视组件的XBind的任何基路径或选择。本发明的各方面通过上述方法之外的其它方法利用XPath约定。可以在于2007年9月28日提交的题目为“Network-Based Operation System”的共同受让的美国临时专利申请No.60/976,339内发现XPath约定的使用的另外示例以及可由本发明进行求值的其它类型的表达式,通过引用将该临时专利申请的内容明确并入本文。
在一个实施例中,可利用表达式语言访问存储器内对象的性质。可根据下面的语法在不管这些性质的数据类型的情况下访问这些性质:
#MyView.id
#MyView#input1.name
还可以利用表达式语言调用对存储器内对象执行动作的方法。在这点上,可通过多种方法对本发明提供的存储器内对象进行编码。利用表达式语言,可直接在这些对象上调用方法。例如,下面是本发明求值的在对象上调用方法的表达式的类型。
#MyView#maximize( )
#MyView#input1.clear( )
此外,由本发明对接受其它表达式作为变元的高级表达式求值。换言之,表达式语言支持符合非强制编程技术的表达式的递归求值,如下面的示例所示:
#MyView#{#MyView#input1.getName()}
在这个示例中,首先在使用getName( )方法的内部表达式内求得Input1组件的名称。识别组件名称的递归求值的表达式然后被提供作为外部表达式的参数。这仅仅是与本发明提供的XML编程语言结合地进行集成和使用非强制编程工具的方法的一个示例。
在网络操作系统环境内,可响应于触发事件的发生执行过程步骤和关联的操作。换言之,过程步骤的执行可由事件驱动。因此,当打开MyTasks.xml文档600时,对触发器602进行登记从而使得当激活触发器时可将流程导向适当的过程步骤。将参照图17A-17B描述触发器激活例程1700,图17A-17B示出了用于实现例程1700的对象之间的流程和交互。如上所述,MyTasks.xml文档600定义下面触发器602。
<trigger view=″MyTasks″component=″button1″event=″select″step=″2″>
图17所示的触发器激活例程1700假定用户选择了在这个触发器元素内识别的Button1组件,由此在块1702激活触发器602。
在块1704,响应于触发器被激活,发生触发事件的组件对象向事件管理器914传递通知监听器调用。在这个调用中,适当的组件对象提供一组事件数据并且指引事件管理器914通知登记了通知器对象或与提供的数据匹配的其它对象的所有事件监听器。具体参照图17B,在块1704,与MyTasks视图对象1752关联的Button1组件对象1750将向事件管理器914传递通知监听器调用。在这个调用中,提供识别发起触发器事件的组件的表达式(例如,“#MyTasks#button1”)以及事件类型(例如,“select”)。
在块1706,事件管理器914向一个或多个监听对象警告事件的激活。具体地讲,事件管理器914执行从Button1组件对象1750传递的事件数据与当登记时间监听器时先前提供的数据进行匹配的查询。在这点上,过程初始化例程1100(图11)提供对象如何在事件管理器914内登记时间监听器的描述。在一个实施例中,当初始启动应用时,在过程XML文档内遇到的每个触发器将使得对应通知器对象作为事件监听器预先缓存在存储器内。在预计一个或多个应用实例将激活触发器时,当初始启动应用时,通知器对象预先缓存在存储器内。预先缓存的通知器对象与视图名称、组件名称和事件类型关联,所述视图名称、组件名称和事件类型共同用作在块1706内执行查询的唯一关键字。换言之,仅当指定视图内的组件经历在触发器内识别的类型的事件时,才向对应通知器对象通知事件激活。这样,与正在执行的应用实例的数目无关,针对在过程XML文档内定义的触发器,仅仅单个通知器对象将登记在事件管理器914内。即使存在应用的多个实例,该架构也使每一个应用实例能够重用相同通知器对象。因此,由于仅仅一个触发器按照随后由多个应用实例共享的通知器对象的形式登记事件监听器,所以这个架构使事件管理器914能够更加高效地重复和通知监听器。换言之,在块914执行的查询的性能不取决于正在执行的应用实例的数目。
在触发器激活例程1700的块1708内,识别与激活的事件(触发器)关联的适当实例。当被警告发生事件时,变元被传递至事件管理器914,用于识别适当的监听对象和受到影响的实例。在这个示例中,识别Button1组件对象1750的表达式被提供给事件管理器914并且可用于通过访问保持对所属于的实例的引用的组件视图对象,来识别适当的实例。如上所述,当打开应用视图时,对实例的引用被提供给获得的视图对象。因此,MyTasks视图对象1754知道它的关联的实例对象1758。由于在视图的环境内创建组件对象,所以在块1708内,Button1组件对象1750可利用MyTasks视图对象1754识别适当的实例。一旦知道了适当实例,实例对象1758被提供给过程对象内的执行方法。
图17B所示的架构和上文提供的描述示出了本发明如何能够在支持应用逻辑的事件驱动执行的系统内支持过程步骤的无状态执行。如上所述,利用单个过程XML文档执行多个应用实例。在这点上,不同应用实例可以重复地重用过程对象,从而提供执行应用的高效平台。即使针对应用内的每个触发器预先缓存仅仅一个通知器对象1756,本发明仍能够向过程对象1700提供适当的实例。在这点上,当事件管理器914接收到与包括视图、组件和事件类型的唯一关键字匹配的事件时,通知器对象1756被激活。此外,事件管理器914能够利用提供的组件、视图或事件监听对象,识别并向通知器对象1758提供适当实例对象1758。在触发器激活例程1700的块1712内,产生执行应用内的过程步骤的调用。如上所述,将执行的过程步骤被缓存在通知器对象1756内或者由事件监听对象获知。因此,一旦提供了适当实例,通知器对象1756可以在块1712调用执行方法(图12),从而提供(1)表示应用的当前运行时状态的实例对象1758和(2)将执行的应用的过程逻辑内的过程步骤(例如,“2”)。然后,触发器激活例程1700进行到块1714,在块1714它结束。其它事件监听对象也可以调用过程对象步骤或者直接执行它自身的定制代码。
当激活MyTasks应用内的触发器时,执行流程进行到判断操作620。一般地说,当触发器602被激活时,判断操作620内的逻辑执行测试以确定任何文本是否输入到Input4组件内。在这点上,将参照图18描述实现判断操作620的判断处理例程1800。如图18所示,判断处理例程1800在块1802开始,在块1802内,表达式被传递至表达式引擎以进行求值。在这个示例中,判断操作620包含在块1802将被传递至表达式引擎以进行求值的“#MyTasks#input4”的值属性。如上所述,开发人员可以利用本发明提供的表达式语言引用存储器内对象。具体地讲,在块1802被选择并传递至表达式引擎以进行求值的“#MyTask#input4”表达式引用随应用执行而经历状态改变的组件对象。
在判断块1804,确定正被求值的表达式是否引用与数据绑定关联的组件。在一些实例中,可定义数据绑定,其中,由组件输入和/或显示的数据自动在组件与数据模型之间传播。另一方面,组件可以是“原子的”或者不与现有的数据绑定关联。当对引用原子组件的表达式求值时,表达式引擎实现在操作处理器的逻辑内访问从组件输入/输出的数据或者影响组件的状态的其它数据的功能。通过实现这个功能,表达式引擎使得总可以利用基于XML的表达式访问这个数据。
为了在块1804确定组件是否与数据绑定关联,表达式引擎可以利用实例识别名称为“Input4”的组件对象。如上所述,本发明提供的组件对象知道它们的数据绑定。因此,一旦识别了适当组件对象,表达式引擎可以容易地确定组件是原子的还是与数据绑定关联。如果执行的测试的结果指示在表达式内引用的组件不与数据绑定关联,则判断处理例程1800进行到块1808,这将在下文中进行更加详细的描述。相反,如果在块1804执行的测试的结果指示表达式引用与数据绑定关联的组件,则判断处理例程1800进行到块1806。
如果到达块1806,则在遇到的表达式内引用的组件与数据绑定关联。在这个实例中,对表达式求值而不因数据绑定的不存而创建临时XBind。更具体地讲,表达式引擎在块1806对“#MyTasks#input4”表达式求值并且从Input4组件请求XBind。在这个示例中,由表达式引擎返回的XBind将向操作处理器提供执行所需的任何事物。
在一个实施例中,开发人员可以提供XML语义描述以访问数据或以其它方式执行I/O。然而,表达式可以实际请求仅仅可从以脚本语言(例如,JavaScript)实现的存储器内对象获得的数据。因此,即使组件不与绑定关联,本发明仍使表达式可以利用对应的存储器内对象来操作和访问与组件关联的数据。例如,MyTasks应用内的判断操作620包括下面的“<when>”XML元素622。
<when test=″text( )=″″step=″3″/>
<otherwise step=″4″/>
when元素622包括XPath表达式“text( )”,其应用XPath求值约定来请求向Input4组件内输入文本。由于组件是原子的,所以利用现有的数据绑定无法获得被请求的数据。代替地,本发明对基于XML的表达式求值并且即使被请求的数据当前没有保持在数据模型内仍允许访问数据。代替地,针对对象(例如,组件)创建临时XBind以引用系统提供的状态文档内的片段。如下文中更加详细地描述的,系统提供的状态XML文档可包含相关组件的所有的状态信息。
在判断处理例程1800的块1808内,从与原子组件关联的存储器内对象获得被请求的数据。在操作处理器内实现的逻辑可以利用包括原子组件的状态的数据。例如,如果到达判断处理例程1800的块1808,则Input4组件是不与数据绑定关联的原子组件。因此,判断操作620的主体内的XPath表达式“text( )”请求包括没有绑定至数据模型内的已知文档的组件的状态的数据。为了对这种类型的表达式正确求值,应该可从数据模型获得被请求的数据。在这点上,由于在表达式内请求的XBind不存在,所以表达式引擎能够向Input4组件查询相关数据。
在一个实施例中,每当在正被求值的表达式内引用原子组件时,利用组件的当前状态更新系统提供的状态XML文档。如下文中更加详细地描述的,然后可以创建临时XBind,其指向系统提供的状态XML文档内的可获得被请求的数据的适当片段。另选地,可以利用封装在状态管理器内的功能,不断地向系统提供的状态XML文档传播系统内的每个组件的状态(不管组件是原子的还是与数据绑定关联的)。在这个实例中,如下所述,已经可从数据模型获得被请求的数据并且可利用翻译的XBind访问该被请求的数据。值得注意的是,该实施例便于在多个客户机计算机上进行应用的状态的同步。此外,通过以这种方式自动向数据模传播状态信息,如果应用被关闭并随后打开,则可容易地恢复应用的状态。
在块1810,产生用于访问从原子组件获得的数据的临时XBind并且将其返回到适当的过程对象。当应用包括利用原子组件的操作时,可直接从组件对象直接获得数据并将其存储在系统提供的状态文档内。产生临时用于对这个表达式求值的翻译的XBind,以引用状态文档内的可获得被请求的数据的位置。在对“#MyTask#input4”表达式求值时,表达式引擎可以产生与下面相似的XBind:
URL=#State
Base path=/states/state[@qid=′#MyTasks#input4′]
Select=
这个XBind的URL引用被分配用于存储组件状态信息的系统提供的状态XML文档。此外,在块1808,基路径指向状态文档内的存储输入到Input4组件的文本的节点。一旦被求值,临时XBind从表达式引擎返回到适当过程对象。通过以这种方式存储状态信息并产生临时XBind,本发明的各方面使开发人员可以利用基于XML的表达式来引用组件和它们的数据,而不管组件是否与数据绑定关联。更一般地讲,访问XML文档的所有操作处理器还能够与不与数据绑定关联的原子对象一起工作并且对其进行引用。如上文示例所示,表达式中对对象(例如,组件)的引用被求得为XBind。结果,本发明的各方面使组件可以彼此绑定。当定义这种类型的绑定时,第二组件有效“克隆”第一组件的XBind。换言之,从第一组件向第二组件提供同步的XBind。当绑定的目标是原子组件时,仍可在组件之间进行数据绑定。在这个实例中,第二组件将与引用描述第一组件的状态的系统提供的状态文档的XBind进行关联。由于第一组件是原子的,所以这将有效创建两个组件之间的主从关系。
另外如图18所示,在块1812调用判断操作处理器以执行在判断操作606内定义的求值。在这点上,在调用中向判断操作处理器传递参数,如果操作涉及原子组件,则所述参数可包括临时XBind。在一个实施例中,开发人员能够根据定义功能调用参数的操作API和可存在于操作的主体内的XML语义结构来创建操作。在判断操作620内,定义用于基于对XPath表达式求值的结果指引程序执行的流程的元素。在这个示例中,在判断操作处理器内执行串比较以确定文本是否输入到Input4组件内。因此,在判断操作处理器内,XPath表达式(例如,“text( )”)被求得为文本。在当正被求值的表达式从原子组件引用数据的实例中,为了对特定表达式求值而翻译的临时XBind被用于获得被请求的数据。具体地讲,传递至判断操作处理器的XBind可包括对可访问从Input4组件先前提取的状态数据的系统提供的状态文档的引用。
然后,在块1814,产生执行应用中的适当过程步骤的调用。在判断操作处理器内执行的求值的结果确定是否将执行流程导向过程步骤608或610。当调用判断操作处理器时,接收XBind以及过程和实例对象。这些接收的变元使判断操作处理器可以基于求值的结果容易地启动下一个适当过程步骤的执行。在这点上,接收的变元可由判断操作处理器进行修改或直接传递。然后,判断处理例程1800进行到块1816,在块1816它结束。
如上所述,当发生触发事件602时,如果在Input4组件内没有输入文本,则判断操作620使得执行流程进行到过程步骤610。仅仅过程步骤610中的操作是使得按钮组件被显示的动作操作628。在这点上,可利用参照图15A-15B在上文描述的动作操作处理器执行动作操作628。因此,在这里中将不会更加详细描述当程序流程导向过程步骤610时实现的功能的附加描述。
当发生触发事件602时在Input4组件内输入了文本时,MyTasks应用的执行进行到过程步骤608。在过程步骤608内定义的操作是改变操作624,改变操作624使输入到组件的文本添加到XML文档。在这点上,将参照图19描述利用改变操作处理器实现数据更新的示例性改变处理例程1900。
如图19所示,改变处理例程1900在块1902开始,在块1902执行表达式求值。具体地讲,在块1902,改变操作624的值属性内的“data/tasks.xml”表达式被求得为XBind。在这个示例中,从求值获得的XBind将包括引用“data/tasks.xml”文档的根节点的基路径和URL。
如上文描述所示,针对应用中的每个操作,操作的值属性中的表达式被求得为XBind。在一个实施例中,可在由操作处理器实现的逻辑内对操作的主体内的表达式求值。另选地,可在调用适当操作处理器之前对操作的主体内的表达式求值。尽管两个实施例都被支持,但是在操作处理器的逻辑内对操作的主体内的表达式求值是优选的,这是因为它更高效。在这点上,改变操作624包括下面的“<store>”XML元素626:
<store type=″append″select=″tasks/task/@description″value=
″{#MyTasks#input4}″
在块1904,存储(store)元素626内的″{#MyTasks#input4}″表达式被求得为文本。如上所述,本发明提供的表达式引擎使开发人员能够利用大括号符号对用于求值的表达式进行划界。可以在属性中、元素之间以及应用代码内的其它位置定义这些表达式。在这个示例中,表达式引擎内的逻辑使″{#MyTasks#input4}″表达式被求得为文本。
通常,本发明实现的改变操作向开发人员提供用于对XML文档的内容执行所有必要修改的原始数据操纵工具。在这点上,提供实质上与万维网联盟的DOM标准一致的多个数据操纵原语(primitive)。此外,本发明的各方面提供包括替换文本(replaceText)和删除子原语的附加数据操纵原语。因此,可利用本发明提供的改变操作执行下面的示例性原语以修改XML文档的内容:替换、替换文本、后附加、前附加、插入、去除、去除孩子、新建、和删除。本领域技术人员等将认识到,可对这些提供的原语进行利用和组合以对数据模型执行所有必要的修改。如下文更加详细地描述的,影响数据模型的任何改变操作将使得在事务管理器910内创建描述将执行的确切更新的事务。
在改变处理例程1900的块1906内,由适当过程对象调用改变操作处理器。当到达块1906时,执行当前过程的过程对象能够将先前求得的XBind以及适当实例和过程对象传递至改变操作处理器。如下文中更加详细地描述的,改变操作处理器利用接收的变元来修改XML文档的内容。
在改变处理例程1900的判断块1908内,确定正执行的改变操作是否定义了数据变换。在改变操作624内定义的值属性识别作为改变操作的对象的文档(例如,“data/tasks.xml”)。在存储元素626内,选择属性可以包含XPath表达式(例如,tasks/task/@description),这个XPath表达式引用指定的XML文档内的将执行数据修改的位置。此外,选择属性可以包括对将被后附加、替换或包括在XML文档内的内容进行求值的表达式(例如,“{#MyTasks#input4}”)。在一个实施例中,本发明的各方面使得能够在将数据后附加、替换或加入到数据模型之前在改变操作内对数据进行变换。例如,存储元素626可包括引用用于执行特定数据变换的XSLT(可扩展样式表语言变换)的变换属性。当定义了这种类型的数据变换时,在块1908执行的测试的结果为“是”并且例程1900进行到块1910。然而,示例性MyTasks应用中的改变操作624不包括变换属性。在此实例中,在块1908执行的测试的结果将是“否”,并且例程1900将进行到块1912,这将在下文更加详细描述。
在块1910,基于在改变操作内定义的逻辑应用数据变换。在实际实施例中,改变操作中的存储元素可包括引用XSLT文档的变换属性。在块1910,XSLT文档内的逻辑可被应用于将数据从源格式变换成目的格式。传统上,XSLT已用于变换数据以支持Web页面的动态创建和修改。此外,XSLT还用于在XML商业格式语言以及它们的作为电子数据交换(EDI)集成服务器的一部分的对应结构之间进行变换。然而,这些示例仅仅是示例性的,并且XSLT用于其它实例中。此外,结合本发明可使用其它变换语言并且XSLT的使用不应该解释为是限制性的。在任何情况下,本领域技术人员等将认识到,XSLT是基于XML的语言,用于定义各种标记语言(XML、HTML、XHTML等)之间以及XML模式和实现不同XML模式的XML文档或DTD(文档类型定义)之间的变换。在这点上,在块1910,改变操作处理器可利用XSLT处理器来施加数据变换。通过以这种方式支持变换的动态应用,提供了一种增强开发平台,其中,更好地配备应用以交换数据、交互以及集成/重用功能。
计算机用户将通常采取多个应用,诸如电子邮件、Web浏览器、日历应用、字处理器、媒体播放器等。然而,利用现有系统,由不同应用利用的数据格式和逻辑很少兼容。例如,电子邮件程序允许用户定义用于存储和访问与另一个用户相关的信息的“联系人”。另一方面,日历应用允许用户创建和跟踪涉及其它用户、组等的会议和约会。响应于查阅来自在电子邮件程序内定义的联系人的消息,用户可能想自动在日历应用内创建新的会议。然而,利用现有系统不易于执行以这种方式使得不同应用进行交互的支持功能。
在执行改变操作的原始数据操纵之前,在块1910内应用的数据变换发生。通过支持这种类型的数据变换的动态应用,本发明的各方面向应用开发人员提供利用从其它应用获得的功能和数据的更好机会。在上文提供的示例中,可以执行易于使电子邮件和日历应用进行交互的数据变换。例如,可定义XSLT变换用于将接收的电子邮件和/或联系人转换成描述新的约会的数据项。在这点上,变换可利用联系人信息、电子邮件消息的内容、和/或来自用户的输入来建立会议的属性。在改变操作内,可应用这种类型的XSLT变换,使得即使利用不同的基础模式和XML结构,不同的应用仍能够进行通信。
在改变处理例程1900的块1912内,对适当URL对象进行用于执行在改变操作内表示的特定数据更新的调用。如下文更加详细地描述的,本发明提供的URL对象用作暴露用于执行由改变操作处理器支持的不同类型的数据修改原语(上述)之中的每一个的方法的轻量指针。因此,改变操作处理器利用接收到的XBind和改变操作626内的逻辑,识别适当URL对象以进行调用。应该恰当理解,仅仅实现URL对象的利用以掩盖与文档交互的细节并且可以通过其它方式容易地实现本发明。一旦执行了对URL对象的调用,执行流程进行到在下文参照图20描述的数据更新例程2000。然后,改变处理例程1900进行到块1914,在块1914它结束。
现在参照图20A-20C,将描述数据更新例程2000和例程2000使用的对象之间的交互。图20所示的数据更新例程2000示出了在执行数据更新的块2002或块2004开始的两个实例。在当数据更新例程2000在块2002开始的实施例中,URL对象接收在改变操作处理器1250的环境内执行数据更新的调用。如上所述,应用可以包括用于修改XML文档的内容的改变操作。因此,改变处理例程1900(图19)可以产生在块2002接收到的对指定的URL对象1253执行数据更新的调用。
当例程2000在块2004开始时,对指定的URL对象1253执行数据更新的调用源自用户界面组件。当定义了绑定时,组件变得知道与绑定关联的URL和XML文档。例如,当执行绑定操作616时,MyTasks应用中的Input3组件将接收与“data/tasks.xml”文档对应的URL对象。如下文更加详细描述并且根据一个实施例,可采用利用HTML DOM的Web浏览器来渲染用户界面。在这个实施例中,在对应视图对象的环境内创建的组件对象使各种事件监听器登记在由Web浏览器利用的HTML DOM上。组件可以监听例如当用户提供输入或者以其它方式与由Web浏览器显示的用户界面进行交互时发生的影响HTML DOM的事件。具体参照图20B,组件1252对接收的数据进行解释并且产生对它的URL对象1253的调用以实现数据更新事件。例如,当在示例性MyTasks应用内删除“更新呈现(Update Presentation)”任务时,创建并调用与“data/tasks.xml”文档对应的URL对象以从数据模型删除任务描述。如下文更加详细地描述的,URL对象1253然后将数据更新传送至事务管理器910。继而,事务管理器910将数据更新传播至实际上使得数据更新得以实现的基础XML文档对象。除了实现数据更新外,文档对象1254将使得数据更新传播至所有适当的监听数据更新对象。这些监听对象常常是组件,但也可以是其它类型的对象。在监听XML文档对象发生变化的远程计算机之间可以共享XML文档。然而,在数据更新被传播至任何远程监听器之前,实现对保持在客户机端缓存器内的本地文档对象1254的数据更新。换言之,在本地实现数据更新以后,执行全网络更新。
在数据更新例程2000的块2006,与将更新的文档对象1254对应的URL对象1253使得产生新的事务。在这点上,在块2006,调用事务管理器910以创建表示XML文档的相对变化的新的“事务”或XML片段。在一个实施例中,事务管理器910包括用于实现和回复相对变化的XML片段内的信息。此外,不管数据更新是源于改变操作处理器还是组件的环境,串行化成XML的XBind被包括在在块2006创建的事务内。如下文更加详细地描述的,事务管理器910使得数据更新既在本地实现又传播至任何远程监听器。在任一情况下,提供XBind,用于识别数据模型内的将执行数据更新的位置和包含用于回复请求的数据操纵操作(这里称作为执行“回滚”)的逻辑的XML格式化数据。
在块2008,事务管理器910使得数据更新在本地执行。事务可以表示由对数据模型的多个和潜在不同类型的修改构成的会话。因此,在数据通知事件中,创建一个或多个更新事件对象以表示描述对数据模型的修改的单位。另一方面,事务全面描述对数据模型进行的一个或多个改变以及用于回复这些变化的逻辑。此外,除了发出数据通知事件以外,文档对象提供用于修改在更新事件对象内表示的基础XML文档的实际内容的方法。具体地讲,在由URL对象1253、事务管理器910和文档对象1254提供的对应方法内,实现可对XML文档执行的每个数据操纵原语(替换、后附加、前附加、插入等)。
另外如图20所示,在块2012,事务管理器910调用通信管理器1256向任何远程监听器传播事务。在这点上,通信管理器1256使得应用可以实例化对与远程网络服务的通信进行抽象的通道。基于接收的XBind,通信管理器1256将识别用于在网络上发送事务的适当通信通道(如果有的话)。如下文更加详细地描述的,通信通道在由URL标准定义的不同协议下进行操作。例如,可以在在例如“http://”、“xios://”或“database://”的URL内识别的协议内,识别适当的通信通道。利用根据通信器API获得的逻辑,从事务管理器910接收的数据被翻译成远程网络服务理解的格式。在这点上,将在下文中更加详细描述利用通信通道执行网络通信的系统和方法。值得注意的是,独立于与在网络上发送对应事务,并且在此之前执行用于通知和更新本地数据监听器的逻辑。在一个实施例中,本发明被构造为在网络上异步传播事务。结果,网络通信固有的网络迟滞或其它延迟不会妨碍应用逻辑在本地的执行。然后,一旦事务提供给适当通道,数据更新例程2000进行到块2014,在块2014它结束。
现在参照图20C,将描述适于示出事务如何在远程客户机之间进行传播的示例性网络环境。如上所述,事务管理器910使得表示在本地存储的文档的相对变化的事务或数据片段被传播至任何远程监听器。在图20C所示的示例中,由客户机2080和2082发起的事务被连续发送至保持在服务器端数据中心的XML文件系统2084。具体地讲,客户机2080和2082的每个向活跃共享的文档2093传播事务2086-2088以及2090-2092。在客户机端缓存器2098内在本地执行的对文档对象2094或2096的任何数据更新被识别并传播至XML文件系统2084,以使得客户机2080和2082能够实时共享数据。
现在参照图21,将描述关于如何应用规则以提供更加智能的组件的附加描述。当被绑定至数据时,在数据模型内应用与组件关联的任何规则并且向其分配唯一名称空间。一般地说,规则使得普通组件可以根据数据模型内的内容进行解释、学习和采取适当动作。换言之,不需要针对特定数据模型创建使用规则的组件。在这点上,上述的绑定处理例程1600(图16)可以确定特定组件利用规则。在这个实例中,可以调用参照图21描述的设置规则例程2100以应用和合并与新组件的数据绑定关联的规则。在一个实施例中,组件规则的唯一XML名称空间被合并入数据模型中并且易于由被绑定至数据模型的组件获得。在一个另选实施例中,可以远程存储与组件关联的规则并且可以经由Web服务或附加XML文档对其进行访问。
如图21所示,设置规则例程2100在块2102开始,在判断块2104,确定是否定义了适当文档的规则处理器。在这点上,规则处理器允许关于相同数据执行与不同组件关联的规则。绑定至XML文档的每个规则使用组件向保持在数据模型内的对应规则处理器提供逻辑(例如,“规则”)。因此,如果利用规则的组件先前被绑定至相关文档,则对应规则处理器将存在,并且例程2100进行到块2108,这将在下文进行更加详细描述。在这点上,如果多个规则使用组件被绑定至相同文档,则相同规则处理器用于所有这些组件。相反,如果规则使用组件没有先前绑定至相关文档,则例程2100进行到块2106。另外如图21所示,在块2106,创建新的规则处理器用于保持绑定至相同基础数据的每个组件的规则。
如上所述,提供由现代基于图形的应用使用的类型的一组普通组件。通过定义规则,本发明提供的普通组件不需要理解关于基础数据模型的任何事情。在这点上,图8A示出了树组件800,树组件800以可视方式示出了文件系统内的文件夹的层级并且包括文件夹名称、图标等。可定义提供用于利用保持在数据模型内的内容组建普通树组件的逻辑的规则。例如,本发明的各方面可以在folders.xml文档内描述文件系统的内容,在folders.xml文档内,文档内的每个元素表示不同文件夹。可以根据文件夹元素内的属性识别例如标识符、图标等的与特定文件夹关联的数据。仅仅作为示例,可定义下面的规则来解释folders.xml文档内的内容以在图8A所示的树组件800内进行显示。
<tree name=″folder tree″>
<rule match=″folder″display=″@id″/>
<rule match=″folder[@id=′email′]″display=″@id″icon=
″icons/mailicon.png″/>
</tree>
在这点上,匹配(match)属性为“folder”并且显示(display)属性为“@id”的第一规则元素使得将folders.xml文档内的“id”属性的内容显示为文件夹名称。因此,可利用规则来定义分配给图8A所示的树组件800内的文件夹的名称。匹配属性为“folder[@id=′email′]”的第二规则元素使得对名称属性为“email”的文件夹分配与电子邮件消息关联的特定图标,如图8A所示。应该恰当明白,上面提供的规则仅仅是示例性的并且仅仅包括实际用于构建树组件800的内容的逻辑的子集。在修改folder.xml文档的结构的情况下,组件的规则易于进行更新以说明变化。此外,按照与其它数据更新相同的方式,向规则使用组件通知变化。具体地讲,可以利用在下文更加详细描述的数据更新事件通知总线的通知监听器例程2200,创建事件更新对象并将其用于向组件通知变化。
再次参照图21,在块2108应用绑定至数据模型的组件的规则。一旦创建了规则处理器,作为绑定操作的对象的组件将它的规则提供给适当的规则处理器。在这点上,规则处理器用作数据模型的扩展并且管理绑定至相同文档的不同数据绑定组件的规则。在一个实施例中,可以在数据模型内分配名称空间,其分离使用组件或对象的不同规则的词汇表。通过利用名称空间分配和管理组件规则,规则处理器能够按照防止在数据模型内出现冲突的方式执行所有组件规则。
在块2108应用新规则时,调用规则处理器并且使得执行绑定至相关文档的每个组件的规则。换言之,关于数据模型的当前版本执行与潜在多个数据绑定组件关联的规则。然后,一旦执行了所有的规则,作为绑定操作的对象的组件就知道它的对应的由规则处理器分配的名称空间。具体地讲,规则处理器向与新数据绑定关联的组件传递用于识别分配给组件的规则的数据模型内的名称空间的引用。
在设置规则例程2100的块2110,与作为绑定操作的对象的组件关联的规则被与其它组件的规则进行合并。开发人员可以利用本发明提供的基于XML的语言定义组件的规则的语义逻辑。举例来讲,规则可以包括XPath表达式、UI XML逻辑引用、描述其它组件、变量、别名的元素以及对规则名称空间的容器外的数据的其它引用。在这点上,不同组件的数据绑定由于它们的关联的应用和规则逻辑可具有可递关系。因此,在相同基础数据上工作的不同组件的规则也保持在数据模型内。一旦使组件知道它的名称空间,产生调用以对组件设置新的数据。在这种情况下,用于对组件设置新数据的调用使得在与关联于其它组件的规则分离的名称空间内将组件的规则的语义逻辑包括在数据模型内。
在块2112,产生调用以将在数据模型内反映的数据更新传播至任何数据更新监听器。如上所述,文档对象保持响应于数据更新而通知的监听器的列表。当在块2010发生向数据模型加入新规则时,将向对应监听器通知数据更新。在这点上,在下文中参照图22更加详细描述用于向监听器通知更新的逻辑。然后,设置规则例程2100进行到块2114,在块2114它结束。
在以上示例中,定义绑定以使得组件自动显示保持在数据模型内的内容。通过以这种方式利用绑定,开发人员不必在应用代码内提供用于对用户界面组件设置和更新数据的逻辑。然而,以上示例是高度简化的并且仅仅反映本发明的一个示例性方面。在这点上,绑定和它们的对应XBind能够实现更加复杂的功能。
在一个实施例中,本发明提供对象进行描述、存储和传送它们的当前状态的标准化方式。举例来讲,图8A示出了使得用户可导航并从文件系统选择文件夹的树组件800。可以在XBind内描述用户选择,这提供网络操作系统环境内的标准化变量格式。在图8A所示的示例中,用户进行一系列的选择以导航至标题为“video_encoding”的文件夹。可以在下面的XBind内描述关于这个特定文件夹的选择的树组件800的状态:
URL:folders.xml
XPath:/
Selection:/folders/research/work/video_encoding/
以上提供的示例是简化的并且仅仅用于说明的目的。在实际实施例中,描述树组件800的状态的XBind实际上是:
URL:folders.xml
XPath:/
Selection:/fs:folder/fs:folder[@name=′research′]/fs:folder[@name=′work′]/fs:folder[@name=′videoencoding]
这里所述的所有的XBind可用于引用数据,而不管数据存储在哪里。因此,如果基础数据保持在网络位置,则可以在下面的XBind内描述以上选择:
URL:http://www.networkdomain.com.folders.xml
Base path:/
Selection:/folders/research/work/video_encoding/
在任何情况下,其它对象将常常利用将用户选择描述为用于执行动作或以其它方式实现应用功能的基础的XBind。如图8B所示,列表组件850显示可以基于从树组件800进行的用户选择的文件系统数据。例如,列表组件850可被构造为基于在树组件800内选择的文件夹显示文档(例如,“whitepaper.txt”、“testresults.xml”和“blog.html”)。描述所述选择的XBind被输出到由树组件800共享的数据模型。继而,这个XBind可以被提供作为其它监听对象(例如,列表组件850)的输入。因此,提供给一个对象(即列表组件850)的输入与来自不同对象(即树组件800)的先前保存到数据模型的输出相交织。XBind的实现提供了实现I/O的这种交织的普通变量格式,其中从数据模型访问的值取决于先前I/O的值。在这点上,实现XML虚拟机的对象的内部计算逻辑与它们的与其它对象和系统的交互去耦合。在一个方面中,XBind提供用于对交互建模并实现这种去耦合的标准化变量格式。本发明提供的XBind不包含到被请求的数据的值。代替地,XBind引用能够获得数据的位置,从而使得不同对象和系统可以利用相同的基础数据进行工作。此外,还可以对XBind进行变换、合并和串行化以用于基于XML的系统。如这里描述所示,XBind用作利用XBind的选择方面的对象状态信息的载体。值得注意的是,由于XBind引用可获得对象状态信息的位置,所以在没有警告或改变引用的信息或对象的任何一个的情况下传送状态信息。
当用户在文件系统内进行导航时,树组件800可以利用XBind的所有维度(dimension)描述选择。例如,如果用户要选择树组件800内的“whitepaper.txt”和“testresults.xml”这两个文档,则可以在下面的XBind内描述该选择。
URL:folders.xml
Base path:/folders/research/work/video_encoding/
Selection:/folders/research/work/video_encoding/document[@name=′testresults.xml′]
/folders/research/work/video_encoding//document[@name=′whitepaper.txt′]
再次,以上示例用于例示目的并且不表示本发明的实际实施例。这个XBind的URL引用描述文件系统的基础XML文档,并且基路径限制至“video_encoding”文件夹的绑定。此外,这个XBind的选择包括识别用户选择的每个文档的XPath表达式的阵列。与以上提供的描述相似,这个XBind可用作其它对象执行动作的基础。举例来讲,用户能够产生删除选择的文档的事件。描述树组件800的选择状态的以上XBind将作为输入提供给实现文件删除的系统。
如上所述,可以响应于数据模型的变化而通知组件和其它对象。本发明的各方面使组件可以登记为针对对特定文档执行的数据更新的监听器。当发生数据更新时,向文档对象登记的每个监听器被通知数据更新并且可以因此更新它们的用户界面。现在参照图22,将描述向监听组件传播数据更新的通知监听器例程2200。尽管参照监听组件对象描述通知监听器例程2200,但是由于其它对象可以是数据更新监听器,所以这仅仅是示例性的。
如图22所示,通知监听器例程2200在块2202开始,在块2202,对XML文档执行数据更新。如以上示例所示,可以在不同情况下执行对数据模型的数据更新。当与数据绑定组件进行交互时,用户可以产生通过组件自动保存到数据模型的输入。另一方面,作为执行在改变操作内定义的应用逻辑的结果,可以执行数据更新。此外,当利用共享的数据模型和绑定作为通信接口时,实现XML虚拟机的对象执行数据更新。例如,组件的规则的语义描述可保存到数据模型,这使得不同的组件可以解释相同基础数据。
在判断块2204,确定是否是对具有对应的规则处理器的文档执行数据更新。如果由于规则使用组件没有先前绑定至该文档而没有定义规则处理器,则在块2204执行的测试的结果是“否”并且通知监听器例程2200进行到块2208,这将在下文进行更加详细描述。相反,如果相关文档具有对应的规则处理器,则通知监听器例程2200进行到块2206。
在块2206,调用与经历数据更新的文档关联的规则处理器。通过调用该规则处理器,实现逻辑以确保由每个数据绑定组件理解的规则名称空间是当前的并且保留数据模型的完整性。在这点上,在块2002执行的数据更新可以涉及在规则处理器中加入逻辑或者对逻辑进行修改。例如,当定义了新数据绑定时,设置规则例程2100(图21)使得与数据绑定关联的新组件的规则与其它组件的规则一起合并在数据模型内。在通知监听器例程2200内向绑定至相同基础文档的任何监听组件通知对规则处理器的数据更新。
在上述的设置规则例程2100(图21)内,规则处理器使得执行在数据模型的当前版本内反映的所有规则。然后,向与新数据绑定关联的组件提供与数据模型内的组件的对应规则相关的当前名称空间信息。然而,由于加入新规则会影响其它规则使用组件的绑定,所以更新通知也提供给这些规则使用组件。因此,当在块2206被调用时,规则处理器使得执行在数据模型的当前版本内反映的所有规则。结果,规则处理器能够将当前名称空间信息和最新的规则提供给作为规则用户的任何监听组件。继而,对组件设置这个新数据,由此使得能够在监听组件的数据绑定内反映新规则的数据更新。
一旦规则处理器完成,在块2208调用与监听组件关联的“Update( )”方法。由于根据一组组件API定义组件,所以在“Update( )”方法内执行的逻辑是可配置的。换言之,每个组件将不会实现它的“Update( )”方法内的相同逻辑。代替地,开发人员可以采用这个逻辑并且创建有效扩展XML虚拟机的能力的新组件。因此,参照由本发明提供的组件提供下文描述并且下文描述仅仅代表可在“Update( )”方法内实现的逻辑。
在判断块2210,确定是否在块2202执行了初始数据更新。在一个实施例中,通过事务管理器910指引数据更新。可以创建表示用于实现数据更新的原子单位的一个或多个事件更新对象,并且接下来在对监听组件的“Update( )”方法(在块2208接收的)的调用中提供所述事件更新对象。在一个实施例中,如果在对“Update( )”方法的调用中接收到事件更新对象,则数据更新不是初始更新,并且通知监听器例程2200进行到块2214,这将在下文进行更加详细的描述。如果在对“Update( )”方法的调用中没有接收到事件更新对象,则例程2200确定正执行初始数据更新并且进行到块2212。
在块2212,利用绑定至组件的基础数据的完整表示,以可视方式渲染组件的用户界面。如果到达块2212,则正执行初始数据更新,并且应该在组件的用户界面内反映组件上设置的所有数据。在这点上,在下文中参照图23更加详细描述使得在组件的用户界面内渲染XML格式化数据的例程。然而,应该适当明白,如何执行渲染取决于开发人员而不是由组件API进行规定。如下文中更加详细地描述的,可以利用各种技术(包括但不限于XSLT、JavaScript、HTML、VML/SVG或AdobeTM Flash)进行渲染。
如上所述,当调用监听组件的“Update( )”方法时,可以提供一个或多个事件更新对象。如图22所示,选择表示描述数据更新的原子单位的接收的事件更新对象以用于块2212的处理。在一个实施例中,实现逻辑以使得在监听组件的用户界面内反映在一个或多个更新对象内表示的数据更新。
在判断块2214,确定选择的事件更新对象是否表示影响监听组件的数据更新。如上所述,发起数据更新的组件或操作提供XBind,该XBind引用数据模型中的受数据更新影响的位置。描述对数据模型执行的改变的这个变量被包括在传播至每个监听组件的事件更新对象内。在这点上,XBind还用于描述数据到监听组件的用户界面的绑定。在一个实施例中,描述监听组件的数据绑定的XBind可与提供的描述数据更新的XBind进行比较。利用公共变量格式(例如,XBind)使监听组件可以执行比较并且确定组件的用户界面是否受到数据更新的影响。如果这个比较的结果指示监听组件没有受到数据更新的影响,则通知监听器例程2200进行到块2222,这将在下文进行更加详细描述。相反,如果监听组件的用户界面的数据绑定受到数据更新的影响,则通知监听器例程2200进行到块2216。
在一个方面中,本发明支持对组件的用户界面的可视显示的局部更新。在判断块2216,确定监听组件是否可以执行局部更新。在这点上,如果在监听组件的“Update( )”方法内提供支持局部更新的逻辑,则通知监听器例程2200进行到块2220,这将在下文进行更加详细描述。相反,如果监听组件不支持局部更新,则通知监听器例程2200进行到块2218,在块2218,“Update( )”方法基于在组件数据绑定内反映的所有数据渲染组件的用户界面。在这点上,在下文中参照图23更加详细描述在组件的用户界面上渲染格式化XML的例程。
在通知监听器例程2200的块2220内,执行对组件的用户界面的局部更新。当支持局部更新时,仅仅利用受数据更新影响的组件数据绑定中的数据执行局部更新。在块2220,利用提供的XBind,可以识别该数据并且对组件设置该数据。组件的“Update( )”方法使得基于现在在组件数据绑定内反映的局部更新,渲染组件的用户界面。
在判断块2222,确定是否将在组件的用户界面内反映任何附加更新。因此,如果先前没有选择在对“Update( )”方法的调用中接收的任何事件对象,则例程2200返回到块2212,并且块2212-2220进行重复直到选择和处理了每个事件更新对象。然后,一旦在组件的用户界面内反映了在数据更新内表示的所有改变,例程2200进行到块2224,在块2224它结束。
如以前参照图4A-4B所述,可以在Web浏览器的环境内在客户机计算机上实现网络操作系统,作为孤立应用或机器操作系统。在这点上,将参照图23描述渲染例程2300,渲染例程2300执行处理从以图形方式渲染并初始化应用的组件和对话框。尽管在下文中具体参照特定Web浏览器技术,但是应该适当明白,可以在不利用Web浏览器的情况下实现本发明。此外,在一个另选实施例中,可以不同地实现渲染例程2300以解决浏览器特有的变化。因此,在下文参照图23提供的描述仅仅是示例性的并且可以在各种平台上不同地执行。
如图23所示,渲染例程2300在块2302开始,在块2302,实例化和调用视图对象以渲染新应用视图。如上所述,本发明提供的数据类型识别器可使得当打开UI XML文档时可以实例化新的视图对象。然后,在块2304,视图对象产生获得新对话框对象的请求。一般地说,对话框用作应用的组件的框并且包括用于对应用的视图的可视表示进行最小化、扩展和操纵的控件。在一个实施例中,提供对话框管理器,其被配置为回收对话框对象,由此减小消耗的内存量。因此,如果先前创建的对话框对象不再使用但仍保持在存储器内,则现有的对话框对象将被重新分配给新的应用视图。
在渲染例程2300的块2306,视图对象作为监听器登记在对应的view.xml文档上。与用户界面组件相似,视图对象可以登记为针对对描述视图的数据模型执行的数据更新的监听器。如下文更加详细地描述的,当发生源于Web浏览器的指定事件时,在其中视图对象登记为监听器的view.xml文档将被更新。通常,当提供输入或者用户以其它方式与系统进行交互时,事件将是用户产生的。
在渲染例程2300的块2308,应用的用户界面的基于XML的描述被变换和转换成基于HTML的表示。如上所述,本发明使开发人员能够利用UI XML编程语言按语义描述应用的视图的可视表示。在这点上,UI XML编程语言不需要开发人员提供任何计算或脚本逻辑。代替地,在应用的UI XML文档内仅仅提供图形元素及其关系的抽象描述。在利用Web浏览器的实例中,可以定义XSLT以将UI XML逻辑变换成HTML或适于由Web浏览器渲染的其它标记格式。值得注意的是,当在块2308对UI XML逻辑进行变换时,与应用的组件关联的唯一标识符被包括在由Web浏览器渲染的结果HTML DOM文档内。一旦执行了变换时,Web浏览器将渲染与应用的视图关联的图形元素。
在块2310,实例化包含组件的计算逻辑的对象并且将它与对应的视图对象进行关联。在一个实施例中,遍历描述应用用户界面逻辑的UIXML文档。选择在UI XML文档内表示的每个组件并且实例化对应的组件对象。在一个实施例中,本发明提供组件的计算逻辑与它的图形表示之间的分离。换言之,组件的可视表示的UI XML描述不包括任何计算逻辑并且可以通过各种方式以及针对不同平台进行变换,而不会影响组件的行为。在这点上,在块2310实例化的组件对象对组件的计算逻辑进行编码,其中,可以以脚本编程语言(例如,JavaScript、SilverLight或AdobeTM Flash)表示组件的计算逻辑。然而,开发人员没有使用脚本语言定义组件的行为。代替地,开发人员使用UI XML语言定义组件的期望行为。如果需要新的组件,开发人员可以根据组件API创建新的组件。在这点上,每个组件对象实现基于根据组件API接收的信息的某些方法。这些方法包括用于对组件设置数据的“Initialize( )”方法和用于对组件的用户界面执行更新的“Update( )”方法。可以在组件内实现未在这里进行讨论的许多方法,例如,当关闭应用视图时去除组件的“Unload( )”。然而,只要存在由组件API定义的基本方法,就能够利用任何可用的渲染技术实现组件。换言之,组件不需要利用XSLT到HTML渲染它们的用户界面,即使这是在这里中主要描述的实施例。另外,能够通过使用传统编程逻辑的组件描述渲染逻辑。
在块2312,初始化在块2310实例化的组件对象的计算行为。当对应用的视图的UI XML逻辑进行变换时,与一个或多个组件关联的标识符被包括在由Web浏览器渲染的结果HTML DOM文档内。在块2312初始化组件的行为时,使用view.xml文档,视图对象识别HTML DOM内与组件有关的适当引用。通过解释view.xml文档,视图对象能够实例化与产生的HTML DOM对应的组件对象并且将每个组件对象连接到对应的用户界面。这样,在组件的用户界面上调用组件的计算行为和逻辑。一旦组件与它的各用户界面关联,根据利用组件API在每个组件内实现的“Initialize( )”方法设置组件的缺省状态和/或值。当在应用的UIXML文档内表示的所有组件已被初始化时,渲染例程2300进行到块2314,在块2314它结束。
一般地说,由渲染例程2300执行的功能使视图对象便于在基于XML的应用与由Web浏览器利用的HTML DOM之间进行通信。响应于Web浏览器内事件的发生,可以通知受到影响的组件和视图对象,并且在处理后,将事件传播至适当事件监听器(例如,过程XML文档中的触发器或事件监听对象)。如上所述,一旦定义了绑定,当调用组件对应的“Update( )”方法时,能够以全部更新或局部更新的方式改变Web浏览器内的组件的图形表示。
值得注意的是,组件API仅仅需要组件实现一组基本的计算逻辑。结果,组件可易于被构造为使用HTML之外的渲染技术并且仍知道数据更新,并且能够绑定到数据。在一个另选实施例中,可以利用AdobeFlash、MicorsoftSilverLight、JavaApplet或者能够在执行每个客户机端组件计算逻辑的XML虚拟机的计算逻辑内进行调用的任何其它渲染技术来初始化并且渲染组件。此外,当在不同类型的计算装置上实现本发明时,可以通过不同方式执行上述的渲染例程2300。当没有利用Web浏览器时,可以渲染应用的用户界面逻辑而不需要在块2308执行XML与HTML之间的变换。代替地,可以提供图形基元,这些图形基元适于被实现和调用以在“Initialize( )”和/或“Update( )”方法内渲染组件的用户界面,并且利用传统的编程语言(如C、C++、Java或MicrosoftSilverLight)来建立。
XIOS通信总览
针对网络操作系统编写的XIOS应用利用模型-视图-控制器(MVC)模型。为此,XIOS应用主要与数据模型(数据源的内容的抽象)进行交互。XIOS应用与数据源之间的这个抽象层允许将XIOS应用与在数据源内进行的变化进行隔离。换言之,数据源中的变化并不一定要求XIOS应用中的变化。
图24示出了在这个框架内XIOS应用2402如何与各种示例性数据源进行交互的一个实施例的总览。在MVC条件下,XIOS应用2402主要与数据模型进行交互。在这种架构的一个实施例中,XIOS应用2402通过与表示每个数据源的数据模型的XML文档进行交互,与各种数据源的数据模型进行交互。在另一个实施例中,XIOS应用2402直接与暴露上述的数据模型的编程对象进行交互。下文描述主要涉及XIOS应用2402与XML文档进行交互的实施例,但是本领域技术人员将认识到,可以替换MVC模式的其它实施方式。
通过通信管理器2412处理与给定数据源的通信,其中,在运行时通信管理器2412可以嵌入在系统环境对象902(图9)内。通信管理器2412管理一组通信器实例,这组通信器实例中的每一个实现通信器API2410。通信器API 2410暴露可应用于任何给定数据源的普通操作。例如,通信器API 2410使得XIOS应用2402可以加载、修改、创建或删除文档,表示连接到数据源、修改存储在数据源内的数据、在数据源内创建新的数据,从数据源查询或去除数据等。
基于只利用URL就能够访问任何数据源的思想建立通信器API2410。实现通信器API 2410的通信器能够经由URL访问它的数据,并且返XIOS应用2402能够作为数据模型进行操纵的XML文档。利用这种简单方法,使用返回的XML文档的XIOS应用2402不需要知道文档从哪个通道到达或者创建了它的基础数据源的种类。具有使用、操纵和创建数据的统一方式,简化了应用开发以及数据抽象方案的实现。XIOS应用2402还可易于从一个数据源改变成另一个数据源和/或对数据源进行变换。
通信管理器2412实例化给出的通信器,由此响应于从XIOS应用2402接收到对URL的请求而创建通道。提供通道的名称或类型作为URL协议,并且URL的其余部分向通道提供信息。通道然后以通道特有的方式处理信息。例如,web搜索通道可以接受例如“websearch://example+search+terms”的URL。协议“websearch”能够指示通信管理器2412向web搜索通道传递URL,并且web搜索通道能够利用位置“example+search+terms”建立要提交给web搜索引擎的搜索查询。作为另一个通道的示例,当传送了例如“imap://servername/user1/inbox/message1”的URL时,可以以相似方式经由IMAP通道访问IMAP文件夹存储的收件箱内的消息。
在一些情况下,简单URL可被传递至由特定通信器实现的通信器API 2410的功能,例如,加载功能或保存功能。在另外情况下,动作URL可被传递至通信器。当需要提供由通信器API 2410提供的标准数据读取/编辑/写入/后附加操作以外的附加功能时,动作URL可用于通信器内。动作URL能够提供通信器特有的功能,这些通信器特有的功能使用基础数据模型、其它资源或者基础数据模型及其它资源。一个示例可以是使得通信器执行基础数据模型的复杂处理的动作URL,由此使程序员不必在程序代码内执行该处理。另一个示例可以是提供基于基础数据源之外的数据或功能的功能性。动作URL的格式与传递至通信器API 2410的任何其它URL的格式相似:“channel_name://function(param1,param2,...param n)”,其中,“channel_name”确定处理动作URL的通信器,“function”由通信器用于确定执行什么处理,“param1,param2,...param n”是要传送至函数的参数的列表。在一个实施例中,对动作URL的请求返回XML文档。
在图24中示出了数据模型文档、通信器和数据源的三个示例。一个示例是数据模型文档2404和用于与例如Google、Yahoo!、MSN LiveSearch等的web搜索服务2426进行通信的通信器2414。XIOS应用2402从文档管理器912请求web搜索模型文档2404,该web搜索模型文档2404抽象与web搜索服务2426的通信。当XIOS应用2402与web搜索模型文档2404进行交互时,文档管理器912利用通信器API2410与web搜索通信器2414进行通信。继而,web搜索通信器2414将经由通信器API 2410提交的请求翻译成由暴露web搜索服务2426的功能的SOAP接口2420理解的格式。因此,当XIOS应用2402从文档管理器912请求例如“websearch://example+search+terms”的URL时,返回表示搜索结果的例如web搜索模型文档2404的XML文档。
图24所示的另一个示例是SQL模型文档2406。与web搜索模型文档2404一样,XIOS应用2402操纵SQL模型文档2406。这个文档的变化使文档管理器912通过通信器API 2410调用SQL通信器2416。SQL通信器2416将来自通信器API 2410的调用翻译成SQL web服务2422理解的格式。SQL web服务2422是允许对SQL数据库2428进行访问的SQL API 2432的前端。
作为图24所示的又一个示例,XIOS应用2402可以请求例如IMAP模型文档2408的文档。当XIOS应用2402操纵IMAP模型文档2408时,文档管理器912通过通信器API 2410与IMAP通信器2418进行通信。IMAP通信器2418将来自通信器API 2410的请求翻译成IMAP web服务2424理解的格式。IMAP web服务2424是IMAP服务器2430上的标准IMAP接口2434的前端。
由客户机端组件2400的通信管理器2412容留例如web搜索通信器2414、SQL通信器2416和IMAP通信器2418的各通信器实例。通信管理器2412负责从文档管理器912接收包含URL的请求以及响应于每个请求实例化所需通信器以形成通道。例如,如果通信管理器2412接收到对以imap://开始的URL的请求,则通信管理器2412将实例化IMAP通信器2418(如果当前没有实例化IMAP通信器2418)并且将请求传递至该IMAP通信器2418。
如图24所示,可以通过基于web的前端(例如,SOAP接口2420、SQL web服务2422和IMAP web服务2424)访问每个数据源(web服务2426、SQL数据库2428和IMAP服务器2430)。当客户机端组件2400仅仅与可经由HTTP访问的数据源进行通信时,客户机端组件2400得到能够重用大量现有通信功能(例如包含在标准web浏览器、代理服务器、防火墙等内的功能)的好处。然而,还可以创建不需要HTTP使能数据源作为后端的通信器。例如,利用适当的通信器,可以去除IMAP web服务2424或SQL web服务2422,并且IMAP通信器2418和SQL通信器2416然后能够分别直接与IMAP接口2434或SQL API 2432进行通信。
XIOS文件系统—服务器端组件
图25示出了XML文件系统服务器端组件2500的一个实施例的总览。如图24所示,客户机端组件2400包括在XML-FS模型文档2502内实现的、可通过文档管理器912由XIOS应用2402获得的数据模型。当XIOS应用2402与XML-FS模型文档2502进行交互时,文档管理器912通过通信器API 2410与由通信管理器2412容留的XIOS通信器2504进行通信。XIOS通信器2504继而与服务器端组件2500进行通信。服务器端组件2500包括客户机接口组件2506和数据存储组件2514。
客户机接口组件2506是与XIOS通信器2504进行通信的主要组件。XML web服务2510(连同它的基于web的HTTP前端2508)和事务协调器2522是XIOS通信器2504与服务器端组件2500进行通信的主要方式。XML web服务2510暴露XML文件系统内的功能,例如,文件创建、文件恢复、文件删除、文件搜索等。事务协调器2522(将在下文中进行更加详细描述)帮助在超过一个的客户机当前访问相同文件时协调数据存储2514中的文件的变化,并且用作缓存机构。消息服务器2512(同样将在下文中进行更加详细描述)用于经由XIOS通信器2504向客户机端组件2400通知XML文件系统2500内由XIOS通信器2504已订阅的对象的变化。
如图中所示,XIOS通信器2504与XML web服务2510之间的通信是双向的。换言之,XIOS通信器2504既向XML web服务2510发送信息又从XML web服务2510接收信息。相反,消息服务器2512主要向XIOS通信器2504推送信息。
数据存储组件2514包括文件服务器2516、索引服务器2518和文件夹数据库2520。在一个实施例中,XML文件系统在三个分立的部分存储文件数据。包含在文件内的原始数据作为文件存储在文件服务器2516上。文件名、作者、修改日期、访问控制表(ACL)和与每个文件关联的其它公共文件信息被存储在文件夹数据库2520内。文件夹数据库2520还存储文件在其中进行组织的文件夹层级,包括每个文件夹的ACL以及例如相关图标、文件夹渲染类型(例如,指示文件夹包含图片,并且因此应该利用图片缩略图进行渲染)等的附加文件夹元数据。索引服务器2518存储用于例如通过利用全文搜索来搜索元数据而识别和定位文件的附加元数据。
尽管在图25中这些组件的每个被描述为一个服务器上的分立组件,但是本领域技术人员将认识到,可以在分立的物理硬件上容留这些组件中的一个或多个。另选地,这些组件中的一个或多个可以被分离成多个组件,在服务器端组件2500内进行复制,或者将它们的功能组合到一个组件中。例如,可以在同一物理机器上全部容留XML web服务2510、消息服务器2512、事务协调器2522、索引服务器2518、文件服务器2516和文件夹数据库2520。作为另一个示例,文件夹数据库2520可以与其余组件分离,作为独立的基于SQL的数据存储,或者文件服务器2516可以位于专用的高容量文件存储系统上。另外,XML文件系统可以仅仅包括一个服务器端组件2500或者可以包括很多个。
在一个实施例中,XIOS通信器2504可以总与相同服务器端组件2500进行通信。服务器端组件2500然后将利用包含在由XIOS通信器2504请求的URL内的信息,确定适当的XML web服务2510、消息服务器2512等以对请求提供服务。通过XIOS通信器2504进行接触的服务器端组件2500还可以向更适当的服务器端组件2500转发请求。这样,使客户机端组件2400与由服务器端组件2500实现的任何负载平衡、冗余、或者定标架构的复杂性隔离。
图26示出了消息服务器2512的内容的一些细节的一个实施例。消息服务器2512包含使用XML文件系统的每个客户机的订阅列表。例如,图26示出了两个客户机:客户机1 2606和客户机2 2608。客户机1 2606与客户机1订阅列表2602关联,客户机2 2608与客户机2订阅列表2604关联。
每个订阅列表包含当更新对象时客户机希望被通知的由服务器端组件2500存储的对象的列表。客户机1订阅列表2602指示客户机1 2606希望被通知foo.doc(文件)、bar.doc(也是文件)的变化、用户3状态的变化、组1文件夹列表的变化,以及由服务器端组件2500存储的其它对象和信息的变化。当由另一个客户机更新、删除、重命名、打开foo.doc和bar.doc中的任一个或者它们通过某其它方式被改变时,对这些文件的订阅将使得消息服务器2512更新客户机1 2606。当用户3的状态改变时,例如,用户3上线或离线,用户3指示他忙、用户3输入空闲状态等,关于用户3的状态的条目将使得客户机1 2606被更新。当更新、删除属于组1的文件夹或者对这些文件夹添加项目或者通过某其它方式改变这些文件夹时,关于组1文件夹列表的条目将使得客户机12606被更新。客户机2订阅列表2604中的条目与客户机1订阅列表2602中的条目相似并且以相似的方式运转,但是与客户机1 2606相对,将使得客户机2 2608被更新。在一个实施例中,通过消息服务器2512经由长轮询发送通知,但是代替地可以使用向客户机推送信息的其它合适的技术。
当例如客户机1 2606的客户机初始连接到服务器端组件2500时,客户机1 2606可以通过XIOS通信器2504请求向订阅列表添加对象。在一个实施例中,XIOS通信器2504向它的内部订阅列表添加文档,并且作为响应,文档管理器912(或者客户机端组件2400的另一个子组件)向XML web服务2510发出请求。XIOS通信器2504与XML web服务2510进行通信,指示消息服务器2512向客户机1 2606的订阅列表添加对象。由于之前客户机1 2606尚未连接过,所以消息服务器2512为客户机1创建新的订阅列表,例如,客户机1订阅列表2602。这个列表将通过关键字2610进行识别。关键字2610包括优选地难以猜测的唯一标识符。这个关键字2610然后经由XML web服务2510和XIOS通信器2504被发送回客户机1 2606,从而使得客户机1 2606知道关键字2610。在一个实施例中,XML web服务2510和消息服务器2512简单在一起工作以产生关键字2610,这个关键字2610然后被发送给客户机1 2606。在这个实施例中,客户机1 2606(与XML web服务2510相对)指示消息服务器2512向客户机1 2606的订阅列表添加对象。
如上所述,例如客户机1 2606的客户机当登录时将由XML文件系统进行认证以提供安全性。在一个实施例中,该认证在消息服务器2512与客户机1 2606之间不重复。除了先前的认证以外,这个实施例中的关键字2610的难猜性质针对窃听客户机1订阅列表2602的第三方应该提供了足够的安全性。与更加资源密集的认证技术相对,利用关键字2610对消息服务器2512的客户机提供安全性的另一个优点在于减小了消息服务器2512上的负载。
图27示出了消息服务器2512的操作的一个实施例的另一个方面。在这幅图中,利用下面的三个订阅列表来描述消息服务器2512:客户机1订阅列表2602、客户机2订阅列表2604和客户机3订阅列表2702。在XML web服务的操作的过程中,当被监视的对象发生变化时通知事务协调器2522。事务协调器2522然后通知消息服务器2512:应该将通知发送给订阅了该对象的所有客户机。
本领域技术人员将认识到,由于消息服务器2512包含使用XMLweb服务的每个客户机的订阅列表并且每个订阅列表包含关联的客户机正在监听的每个对象的条目,所以存储在消息服务器2512上的数据量和必须由消息服务器2512发送的通知的数目将随着连接到XML web服务的客户机的数目而非常快地增涨。减小消息服务器2512所需的工作量的一种方式是通过利用消息链2704。消息链2704是将监听给定对象的每个订阅列表进行关联的链表。例如,在图27中,消息链2704将正在监听对象bar.doc的消息服务器2512上的每个订阅列表进行链接。通过利用这个消息链2704,当向消息服务器2512通知bar.doc发生变化时,消息服务器2512首先通过通知客户机1,然后通过通知客户机2,然后通过通知客户机3,仅需遍历消息链2704的链表。这去除了消息服务器2512确定大量的订阅列表中的哪一个包含对bar.doc的引用的需要,由此节省了处理时间并且提高了消息服务器2512的效率。尽管为了简化而在图27中仅仅示出了一个消息链2704,但是应该明白,可存在与XML文件系统内当前正由客户机监视的每个对象关联的一个消息链。
XIOS文件系统—文件操作
如上所述,XML文件系统存储表示存储在文件夹数据库2520中的系统内的文件夹的层级的信息。XIOS应用2402可以通过由XIOS通信器2504从XML web服务2510取回的folders.xml文件,与文件夹层级进行交互。
图28A-28D示出了用于取回folders.xml文件的示例性方法2800的一个实施例。从开始块2802开始,方法2800进行到块2804,在块2804,XIOS应用2402创建对folders.xml文件的文件请求并且将该文件请求提交给文档管理器912。在一个实施例中,这个请求包括文件夹标识符(“文件夹ID”),该文件夹标识符既唯一识别文件夹又提供服务器端组件2500可用于指示文件夹数据库2520的存储文件夹信息的位置的信息。folders.xml文件可以包含属于与文件夹ID关联的文件夹的信息以及与该文件夹内的子文件夹关联的信息。如上所述,folders.xml文件还可以包含与每个文件夹关联的附加元数据。在一个实施例中,由XIOS应用2402提交的请求采取URL的形式。在另一个实施例中,XIOS应用2402可以简单地从文档管理器912请求folders.xml文件,文档管理器912将形成表示请求的URL。
在一个实施例中,文档管理器912可能已经具有folders.xml文件的缓存副本,在这种情况下,文档管理器912将简单地向XIOS应用2402提供文档的缓存副本。然而,本文的其余部分假定在文档管理器912内不存在请求的文档的缓存副本。方法2800进行到块2806,在块2806,文档管理器912从通信管理器2412获得XIOS通信器2504并且将文件请求传递至XIOS通信器2504的加载功能。方法2800然后进行到块2808,在块2808,XIOS通信器2504将对folders.xml文件的请求发送至服务器端组件2500的适当XML web服务2510,所述请求包括文件夹ID。接下来,在块2810,服务器端组件对用户进行认证,并且将请求路由至XML web服务2510。方法2800然后进行到块2812,在块2812,XML web服务2510至少部分地基于文件夹ID的内容,确定容留与文件夹ID关联的文件夹树的文件夹数据库。方法2800然后进行到继续终端(“终端A1”)。
从终端A1(图28B)开始,方法2800进行到块2814,在块2814,XML web服务2510查询适当的文件夹数据库2520以取回与请求的文件夹关联的信息。这个取回的信息可以包括文件夹访问控制表(ACL),并且还可以包括附加的文件夹元数据信息。接下来,方法2800进行到继续终端(“终端B”),然后进行到块2816,在块2816,XML web服务2510向folders.xml文件添加文件夹信息。在一个实施例中,添加到folders.xml文件的文件夹信息不包括文件夹ACL。代替地,folders.xml暗示请求用户至少已经读取访问了folders.xml文件内的每个文件夹。可以在这个实施例中经由独立的请求获得关于文件夹的ACL的更加详细的信息。这种技术的一些优点的示例为foiders.xml文件的大小以及由服务器端组件2500执行的处理的复杂度保持为最小。
在这点上,由XML web服务2510构建的folders.xml文件包含仅仅属于由文件夹ID识别的文件夹的信息。对folders.xml文件的对给定文件夹的请求还将返回属于被请求的文件夹的子文件夹的信息。由于多个文件夹(这些文件夹中的每个可能具有不同的关联许可(因此具有不同的ACL))的文件夹信息将在一个folders.xml文件中被返回给客户机,所以重要的是仅仅关于具有匹配ACL的文件夹的信息被包括在给定的folders.xml文件内。然后,方法2800进行到块2818,在块2818,XML web服务2510查询文件夹数据库2520以取回与由文件夹ID识别的文件夹的直接子文件夹关联的信息,包括每个子文件夹的文件夹ID和ACL。然后,利用该查询的结果,方法2800进行到从块2820开始的FOR循环和指示FOR循环的开始的继续终端(“终端C”)。从终端C开始,方法2800进行到块2822,在块2822,XML web服务2510将子文件夹的ACL与被请求的文件夹的ACL进行比较。方法2800然后进行到另一个继续终端(“终端A2”)。
从终端A2(图28C)开始,方法2800继续到判断块2824,在块2824,执行测试以确定子文件夹的ACL是否与被请求的文件夹的ACL匹配。如果判断块2824的测试的结果为“是”,则方法2800返回终端B,在块2816将当前子文件夹添加到folders.xml文件,并且方法2800对当前子文件夹的任何进一步的子文件夹进行递归处理。否则,如果判断块2824的测试的结果是“否”,则方法2800进行到块2826,在块2826,与关于子文件夹的任何其它信息相对,XML web服务2510向folders.xml文件添加引用子文件夹的XLINK。方法2800然后进行到判断块2828,在块2828,执行测试以确定是否还存在任何其它子文件夹。
利用XLINK向客户机提供足够信息以请求包含具有不同ACL的子文件夹的新folders.xml文件,而不会向客户机暴露要求单独许可检查的信息。这是重要的,因为如上所述,folders.xml文件包含客户机至少已经读取访问了包含在folders.xml内的每个文件夹的隐式断言。如果一子文件夹具有与被请求的文件夹不同的ACL(例如,如果该子文件夹被一不同的用户拥有,如果该子文件夹在一不同组内进行共享等),则对于该子文件夹这种隐式断言可能不为真。利用XLINK允许在仍保持这种隐式断言的真实性的同时向客户机提供关于该子文件夹的最小信息。
如果在判断块2828的测试的结果是“是”,则方法2800进行到继续终端C,并且对下一个子文件夹进行处理。否则,如果在判断块2828的测试的结果是“否”,则方法2800进行到另一个继续终端(“终端A3”)。
从终端A3(图28D)开始,方法2800进行到块2830,在块2830,XML web服务2510缓存完整的folders.xml文件的副本以加快对相同文件夹的未来请求的处理(假定在客户机请求之间没有对文件夹层级进行改变,在这种情况下,将重新产生缓存的folders.xml文件)。接下来,在块2832,XML web服务2510将完整的folders.xml文件返回到XIOS通信器2504。方法2800然后进行到块2834,在块2834,XIOS通信器2504向文档管理器912提供folders.xml文件。接下来,在块2836,文档管理器912缓存folders.xml文件,并且向XIOS应用2402提供folders.xml文件。方法2800然后进行到完成块2836并且结束。
图28E示出了由上述的方法2800的实施例产生的folders.xml文件2840的一个示例。为了图28E,假定XML文件系统2500存储例如在图8A的树组件800内描述的文件夹层级的文件夹层级,并且用户已经对文件夹“RESEARCH”请求了folders.xml文件。另外,在图28E中描述了一组行号2842,以便于进行讨论。
如图28E所示,方法2800响应于请求创建了folders.xml文件2840。文件2840的第1-4行包含用于识别文档剩余部分的xML版本和模式的头信息。方法2800创建被请求的文件夹“RESEARCH”的条目(第6行),然后列举被请求的文件夹的子文件夹以添加具有匹配的ACL的任何其它文件夹。在这种情况下,在图8A中以及在文件2840的第7、8和12行的文件夹“PERSONAL”、“WORK”和“LETTERS”分别被发现具有匹配的ACL。该方法还继续添加同样具有匹配的ACL的这些文件夹的任何子文件夹。在这种情况下,文件夹“PERSONAL”和“LETTERS”不具有任何子文件夹,但是文件夹“WORK”具有带有匹配的ACL的两个子文件夹,即,在第9和10行发现的“BROWSERS”和“VIDEO ENCODING”。对于每个文件夹,方法2800向文件2840添加有限的元数据信息。在这里所示的实施例中,方法2800添加包括每个文件夹的“name”(名称)、“id”和“type”(类型)的元数据,但是在其它实施例中,可以添加更多或更少的元数据。另外,尽管为了简化所示的“id”元素是整数值,但是“id”值可以包含如上所述的用于指示存储文件夹信息的文件夹数据库2520的更加复杂的信息。另选地,例如整数值的简单值可用于“id”元素,并且可执行查询以确定存储文件夹信息的文件夹数据库2520。
方法2800还创建文件夹“EMAIL”的条目,文件夹“EMAIL”不具有与“RESEARCH”文件夹的ACL匹配的ACL。第13-19行所示的“EMAIL”文件夹的条目包含关于该文件夹的最小信息,仅仅显示它的“name”元素。它还包含XLINK,用户可遍历该XLINK以产生包含“EMIAL”文件夹(以及具有与“EMAIL”文件夹ACL匹配的ACL的任何子文件夹)的信息的新的folders.xml文件。
在一个实施例中,folders.xml文件包含关于文件夹层级的信息,但不包含关于文件夹内的各个文件的信息。图29示出了当folders.xml文件不包含文件列表信息时取回给定文件夹内的文件的列表的方法2900的一个实施例。从开始块2902开始,方法2900进行到块2904,在块2904,XIOS应用2402创建文件列表请求并且将文件列表请求提交给文档管理器912,该文件列表请求包括指定文件夹的文件夹ID。如上所述,文件夹ID包含指示存储关于指定文件夹的内容的信息的文件夹数据库2520的信息。文件列表请求还可以包括其它选项,例如,期望文件类型的过滤器、排序偏爱、日期范围过滤器等。接下来,方法2900继续到块2906,在块2906,文档管理器912从通信管理器2412获得XIOS通信器2504,并且将文件列表请求传递至XIOS通信器2504。接下来,在块2908,XIOS通信器2504向服务器端组件2500的适当XML web服务2510发送查询。方法2900然后继续到块2910,在块2910,服务器端组件2500对用户进行认证并且将请求路由至XML web服务2510,XML web服务2510检查对被请求的文件夹2910的许可。为了检查对被请求的文件夹的许可,XML web服务2510可以查询文件夹数据库2520以取回给定父文件夹的ACL,并且确定该ACL是否向认证的用户授权访问。
一旦用户得到认证并且许可得到验证,方法2900进行到块2912,在块2912,XML web服务2510确定与被请求的文件夹ID对应的索引服务器2518并且向索引服务器2518发送查询。如上所述,XML web服务2510可利用包含在文件夹ID内的信息确定对应的索引服务器2518。接下来,在块2914,索引服务器2518查询索引以获取被请求的文件夹的文件列表,并且处理关于列表内的每个文件的ACL的结果。在一个实施例中,索引服务器2518的索引是文件信息的全文索引,并且每个文件的索引字段之一包含父文件夹的文件夹ID。通过对关于列表内的每个文件的ACL的结果进行处理,保证仅仅认证的用户访问的文件被添加到文件夹列表。在一个实施例中,为了节省处理时间省去了这个处理,并且改为当用户尝试访问这些文件之一时强制用户许可。
接下来,在块2916,索引服务器2518将由索引返回的文件的列表以及从索引获取的有限的文件元数据进行格式化为合适格式(例如,ATOM、RSS或者其它合适格式)的溃源(feed),并且将其返回给客户机端组件2400。有限的文件元数据可以包括例如最后修改日期、作者、文件类型等的项目。方法2900然后继续到结束块2918并且结束。
由于数据以协作方式存储在XML文件系统内并且多个客户机可以更新给定的父文件夹或者创建相同文件,所以在一些实施例中在XML文件系统内的文件的简单创建可以包括文件创建客户机与服务器端组件2500之间的协调。图30A-30C示出了用于在XML文件系统内创建文件的方法3000的一个实施例。从开始块3002开始,方法3000进行到块3004,在块3004,XIOS应用2402指定新文件的文件名称和目的文件夹,并且对原始文件数据内容进行初始化。对原始文件数据内容进行初始化可以创建新的空文件,或者可以将现有的内容插入到原始文件数据内(例如当用户首先保存她已经开始创建的内容时)。接下来,在块3006,XIOS应用2402向文档管理器912提交文件创建请求,该文件创建请求包括文件名称、目的文件夹ID和原始文件数据内容。在一个实施例中,这个请求的至少一部分被格式化为URL。方法3000然后进行到块3008,在块3008,文档管理器912从通信管理器2412获得XIOS通信器2504,并且将文件创建请求传递至XIOS通信器2504。接下来,在块3010,XIOS通信器2504向服务器端组件2500的XML web服务2510发送创建新文件的请求。方法3000然后进行到块3012,在块3012,服务器端组件2500对用户进行认证并且将请求路由至XML web服务2510。
接下来,方法3000然后进行到块3014,在块3014,XML web服务2510确定容留目的文件夹的文件夹数据库,并且检查用户具有在目的文件夹内创建文件的许可。如上所述,目的文件夹的文件夹ID包含使得XML web服务2510确定包含与目的文件夹关联的信息的文件夹数据库的信息。同样如上所述,XML web服务2510通过查询文件夹数据库2520以获取目的文件夹的ACL并且确定该ACL是否向认证的用户授予了适当权限,能够保证用户具有创建文件的许可。方法3000然后进行到继续终端(“终端A1”)。
从终端A1(图30B)开始,方法3000进行到块3016,在块3016,XML web服务2510检查指定的目的文件夹是否是特殊文件夹。在一个实施例中,在XML文件系统内存在两种类型的文件夹:存储文件夹和特殊文件夹。由于存储文件夹主要用于存储文件和其它文件夹,所以存储文件夹更像传统文件系统内的文件夹。与之相对,XML文件系统利用特殊文件夹来抽象另一种形式的通信。这使得XIOS应用2402可以按照它与存储内的文件进行交互的相同方式,与该另一形式的通信进行交互,从而简化了应用开发。例如,特殊文件夹可被指定为电子邮件特殊文件夹,并且在电子邮件特殊文件夹内创建新的文件将使得发送一个电子邮件。在一个实施例中,对于每个用户存在两个特殊文件夹:入局特殊文件夹或“收件箱”,以及出局特殊文件夹或“发件箱”。在其它实施例中,存在更多或更少的特殊文件夹。
方法3000继续到判断块3018,在判断块3018,执行测试以确定指定的目的文件夹是否是特殊文件夹。如果判断块3018的测试的结果是“是”,则方法3000进行到块3019,在块3019,请求被发送至与特殊文件夹关联的服务器过程以进行进一步处理。在下文中关于图36所示的方法3600以及所附文字,讨论这种处理的实施例的一个示例。方法3000然后进行到继续终端(“终端B”)。
尽管图30B示出了当在特殊文件夹内创建新文件之前发生例如方法3600的方法,但是并非一定是这种情况。在一个实施例中,可以改为在创建文件以后(例如在终端B(图30C)后)执行在判断块3018执行的测试。在这种实施例中,与直接对来自客户机的请求进行操作相对,监视特殊文件夹的服务器过程将对在特殊文件夹内创建的文件进行操作。通过对特殊文件夹的内容进行轮询能够向服务器过程通知文件的创建。另选地,通过创建与消息服务器上的过程关联的订阅列表,向订阅列表添加特殊文件夹,并且由此例如在方法3000的块3030从消息服务器接收关于文件的创建的通知,能够向服务器过程通知文件的创建。
如果判断块3018的测试的结果是“否”,则方法3000进行到块3020,在块3020,文件服务器2516在与文件服务器关联的存储位置为新文件的原始文件数据分配空间,并且将初始的原始文件数据存储在该存储位置。接下来,在块3022,文件夹数据库2520在文件夹数据库内为新文件创建条目,该条目包含与文件关联的有限的元数据,包括文件名、创建日期、唯一文件ID、存储位置等。在一个实施例中,文件可以具有与一个文件ID关联的多于一个的文件流。在这种情况下,文件服务器2516为每个流分配在存储位置的独立空间,并且存储在文件夹数据库2520内的元数据将文件ID与所有的存储位置进行关联。XML文件系统通过文件的可用元数据向客户机暴露与文件关联的所有流。
方法3000然后进行到块3024,在块3024,文件夹数据库2520将新文件与指定的目的文件夹进行关联。在父文件夹与新文件之间创建的关联使得当搜索包含在文件夹内的文件时,XML web服务2510能够利用文件夹ID查询文件夹数据库2520和索引服务器2518以发现文件。方法3000然后进行到另一个继续终端(“终端A2”)。
从终端A2(图30C)开始,方法3000进行到块3026,在块3026,XML web服务2510将新文件的元数据发送至索引服务器2518。这个元数据可以是由文件夹数据库存储的相同元数据,它被复制到索引服务器2518以便于元数据的快速全文搜索。发送至索引服务器2518的元数据还可以包括存储在文件夹数据库内的信息之外的有利于全文索引的另外信息,例如,用户或应用指定的特性、作者信息、用户评论等。发送至索引服务器2518的元数据还可以包括直接从与文件关联的一个或多个文件流提取的信息。
接下来,在块3028,XML web服务2510向消息服务器2512发送在指定的目的文件夹内创建新文件的通知。另选地,当检测到新文件与父文件夹的关联时,可由文件夹数据库2520或索引服务器2518发送这个通知。方法3000然后进行到块3030,在块3030,消息服务器2512向在订阅列表内具有指定的目的文件夹的每个客户机发送更新通知。接下来,在块3032,客户机通过XML web服务2510向消息服务器2512发送请求,以向客户机的订阅列表添加新文件,这个请求包括文件ID。接下来,在块3034,消息服务器2512向客户机的订阅列表添加新文件。然后,方法3000进行到终端B,然后进行到结束块3036,在结束块3036方法3000结束。
图31A-31E示出了用于打开XML文件系统内的现有文件的方法3100的一个实施例。从开始块3102开始,方法3100进行到在继续终端(“终端B”)与退出终端(“终端C”)之间定义的一组方法步骤3104。这组方法步骤3104描述了打开没有进行共享的现有文件(换言之,当前没有由另一个客户机打开的文件)的方法。从终端B(图31B)开始,方法3100进行到块3110,在块3110,第一客户机上的XIOS应用2402从文档管理器912请求文件,这个请求包括文件ID。在一个实施例中,请求是URL的形式。该请求可以包括被并入新产生的URL内的文件ID,或者第一客户机可以已经获得了能够对文件寻址的URL,例如包括在文件列表内的文件URL。在一个实施例中,URL可以不包含文件ID自身,但是改为包括可导出文件ID的信息。
接下来,在块3112,文档管理器912从通信管理器2412获得XIOS通信器2504并且向XIOS通信器2504传递文件请求。方法3100然后进行到块3114,在块3114,XIOS通信器2504向服务器端组件2506的适当XML web服务2510发送对文件的请求,这个请求包括文件ID。如上所述,请求可以是包括文件ID的URL的形式,或者代替地可包括可导出文件ID的信息。接下来,在块3116,服务器端组件2506对用户进行认证并且将请求路由至XML web服务2510。
在一个实施例中,包含在请求内的文件ID或文件URL还包含指示文件所驻留的文件服务器2516的信息,以帮助XML web服务2510确定适当的文件夹数据库2520、文件服务器2516或事务协调器2522以获得文件。在另一个实施例中,该请求还可以包括父文件夹的文件夹ID,并且XML web服务2510可以基于包含在文件夹ID内的信息,确定用于获得文件的适当数据存储服务器。对于一个文件请求必须进行联系的不同服务器的数目以及相应地在文件ID或文件URL内提供的信息量,取决于如何对数据库进行划分,从而取决于由特定实施例提供的可伸缩性的量。
接下来,在块3117,XML web服务2510检查第一客户机的用户具有打开文件的许可,并且将对文件的请求提交给适当的事务协调器2522。在一个实施例中,XML web服务2510通过从适当的文件夹数据库2520获取文件的ACL并且通过检查该ACL是否允许认证的用户访问文件,来检查客户机许可。接下来,在块3118,事务协调器2522指示消息服务器2512向第一客户机的订阅列表添加被请求的文件。方法3100然后进行到块3119,在块3119,事务协调器2522确定当前是否共享该文件。方法3100然后进行到继续终端(“终端B1”)。
从终端B1(图31C)开始,方法3100进行到判断块3120,在判断块3120,执行测试以确定当前是否共享文件。如果判断块3120的测试的结果是“是”,则方法进行到继续终端(“终端D1”)。否则,如果判断块3120的测试的结果是“否”,则方法3100进行到块3122,在块3122,事务协调器2522查询适当的文件夹数据库2520以确定存储原始文件数据的文件服务器2516。接下来,在块3124,事务协调器2522从适当的文件服务器2516获取原始文件数据。然后,在块3126,事务协调器2522将原始文件数据返回到XML web服务2510并且将共享标志设置为“假”。接下来,在块3128,XML web服务2510将原始文件数据返回到第一客户机的XIOS通信器2504并且将共享标志设置为“假”。方法3100然后进行到块3129,在块3129,XIOS通信器2504向文档管理器912提供对原始文件数据的访问,文档管理器912继而向XIOS应用2402提供对原始文件数据的访问。方法3100然后进行到另一个继续终端(“终端C”)。
从终端C(图31A)开始,方法3100进行到在终端D与终端E之间定义的一组方法步骤3106,这组方法步骤3106描述了打开正由另一个客户机共享的现有文件的方法。为了说明,这组方法步骤3106假定第一客户机已经执行了这组方法步骤3104,并且因此第一客户机已经打开了被请求的文件。
从终端D(图31D)开始,方法3100进行到块3130,在块3130,第二客户机上的XIOS应用2402经由文档管理器912和XIOS通信器2504向服务器端组件2514发送文件请求,这个文件请求包括文件ID。如上所述,请求可以是包括文件ID的URL的形式,或者可以是包括可导出文件ID的信息的URL的形式。由于在上文中详细描述了包括块3130的动作的各个动作,所以为了简短在这里省去了这些更加详细的描述。接下来,在块3132,服务器端组件2514对第二客户机的用户进行认证,并且向XML web服务2510路由请求。方法3100然后进行到块3134,在块3134,XML web服务2510检查第二客户机的用户具有打开文件的许可,并且将对文件的请求提交给适当的事务协调器2522。方法3100然后进行到块3136,在块3136,事务协调器2522指示消息服务器2512将文件添加到第二客户机的订阅列表。本领域技术人员将认识到,到此时,关于在块3110-3116之间以及对应块3130-3136之间定义的方法的相似度,在用于打开被共享的文件和用于打开没有被共享的文件的方法之间几乎没有差别。
接下来,在块3138,事务协调器2522确定当前正共享被请求的文件。此刻,用于打开被共享的文件的方法与用于打开没有被共享的文件的方法不同。方法3100进行到终端D1,然后进行到块3140,在块3140,事务协调器2522查询文件夹数据库2520以确定存储原始文件数据的文件服务器2516。接下来,在块3142,事务协调器2522从适当的文件服务器2516获取原始文件数据的副本并且进行缓存。接下来,在块3144,事务协调器2522指示消息服务器2512向第一客户机通知文件现在被共享。方法3100然后进行到另一个继续终端(“终端D2”)。
从终端D2(图31E)开始,方法3100进行到块3146,在块3146,事务协调器2522向XML web服务2510发送原始文件数据并且将共享标志设置为“真”。这将通知XML web服务2510和XIOS通信器2504,与文件没有被共享的情况不同地对待原始文件数据。接下来,在块3148,XML web服务2510将原始文件数据返回到第二客户机并且将共享标志设置为“真”。方法3100然后进行到块3150,在块3150,消息服务器2512至少向第一客户机通知文件现在被共享。方法3100然后进行到块3152,在块3152,响应于接收到文件现在被共享的通知,第一客户机将任何先前未提交的事务发送给XML web服务2510。
如下所述,当第一客户机上的文件数据模型发生变化时,第一客户机的事务管理器910可以收集这些变化,而不立即将它们发送至XMLweb服务2510以进行存储。这在第一客户机在离线模式下操作的情况下是尤其有可能的,但是由于高网络延迟、高处理器负载等它也可能会发生。当第一客户机接收到文件现在被共享的通知时,事务管理器910取得任何未提交的事务并且将它们发送给XML web服务2510。
在方法3100的块3154,XML web服务2510在接收到这些事务以后,将未提交的事务发送给事务协调器2522,事务协调器2522向由事务协调器2522存储的原始文件数据的缓存版本提交未保存的事务。这些事务将最终被提交给文件服务器2516上的原始文件数据。在一个实施例中,当保持文件的客户机执行保存命令时,事务将被提交。在另一个实施例中,在预定时段后改变将被提交。在另一个实施例中,在文档的所有客户机用户已经断开连接后改变将被提交。接下来,在块3156,事务协调器2522指示消息服务器2512向所有监听客户机通知提交的改变。方法3100然后进行到块3158,在块3158,第一客户机和第二客户机从消息服务器接收提交的改变的通知。接下来,方法3100进行到终端E并且结束。
网络操作系统客户机组件启动
图32A示出了启动网络操作系统的客户机端组件2400的方法3200的一个实施例。从开始块3202开始,方法3200进行到块3204,在块3204,客户机端组件2400的引导加载器实例化系统环境对象902(图9)及其关联的管理器,并且启动到XML文件系统2500的通信通道。在一些实施例中,由于XML虚拟机已经包含在客户机端组件2400内,所以不需要利用引导加载器。例如,这将是在Web浏览器之外作为独立应用(例如在移动装置内,在机顶盒或瘦客户机组件上)实现客户机端组件2400的实施例中的情况。这还将是作为不需要主机操作系统进行执行的机器操作系统实现的实施例的情况。网络操作系统能够通过经由任何网络连接(包括但不限于在互联网上利用HTTP协议)获取文件(包括定义启动过程的文件)进行工作。即使没有在方法3200中描述的启动过程,网络操作系统仍将工作,但是将通过用户人工执行配置步骤驱动任何初始配置。
与传统的操作系统不同,客户机端组件2400的一些实施例可以容留在另一个程序内,例如位于现有的Web浏览器内。对于这些实施例,可以通过利用主机程序、HTTP查询参数、HTTP cookies或者与客户机关联的其它配置参数(例如,IP、位置、机器、浏览器ID等)而导航到的位置URL,来确定关于启动序列的特定设置,包括与哪个特定XML文件系统2500进行连接或者启动哪个通信通道。例如,将Web浏览器导向http://os1.icloud.com可使得客户机端组件2400连接到第一XML文件系统2500,并且将Web浏览器导向http://os2.icloud.com可使得客户机端组件2400连接到在与第一XML文件系统2500不同的位置处容留的第二XML文件系统2500。
在一个实施例中,在启动序列期间,客户机端组件2400可以启动到XML文件系统2500以外的数据源的通信通道(或这两者),或者可以连接到远程数据源或者可以访问本地数据源。例如,一个文件系统可以是通过服务提供商数据中心提供的全局XIOS文件系统。在启动序列期间连接的另一个文件系统可以安装在企业网络的本地。在启动序列期间连接的第三文件系统可以提供对用户的本地硬盘驱动器的访问。图32B示出了在启动期间作为驱动器由客户机端组件2400绑定的数据源的几个示例。例如,本地机器的驱动器已经被绑定作为“本地驱动器”。另外,XML文件系统2500内的文件夹被绑定作为“共享族文件夹”。作为另一个示例,组的根文件夹已被绑定作为“1992级重聚”。重要的是,尽管这些数据源的每个存储在不同地方并且经由不同技术进行访问,但是从XIOS应用2402隐藏了这些差别,从而将每个数据源简单看作可访问的驱动器。尽管这些示例不是穷尽的,但是它们意图显示启动序列可以连接到一个或多个文件系统。一旦用户被认证,启动序列可以以用户特定的启动序列继续,该用户特定的启动序列可以包括对附加文件系统的连接以及附加通道的初始化。
在另一个程序内容留的网络操作系统和传统的操作系统的实施例之间的另一个差别在于,关于主机程序执行的操作可以中断客户机端组件2400的执行。例如,在用户成功地完成启动序列并且登录到网络操作系统后,主机程序可以执行重新加载客户机端组件2400的操作。在一些实施例中,客户机端组件2400通过使得在重新加载后的客户机端组件2400可以获得重新加载之前的网络操作系统的登录状态以恢复其状态,来处理这种情形。为此,在块3206(图32A),客户机端组件2400检查用户是否已经登录。方法3200继续到判断块3208,在判断块3208,执行测试以确定用户是否已经登录。如果判断块3208的测试的结果是“是”,则方法3200进行到继续终端(“终端A”),从而跳过启动方法的登录部分。
如果判断块3208的测试的结果是“否”,则方法3200进行到块3210,在块3210,客户机端组件2400打开与通信通道关联的登录应用。可以通过通信通道确定要启动的特定登录应用,但是通常登录应用将安全地请求用户的证明,例如用户名称和密码。存在登录过程的其它实施例,其中,在开始引导加载之前请求登录信息并且将该登录信息直接传递至通信通道以进行认证而不需要另外的用户交互。在没有引导加载器的实施例中,客户机端组件2400可以将登录信息直接传递至通信通道以进行认证。还可以有变型,其中,在直接加载后,引导加载器自己请求登录信息并且然后将该信息传递至通信通道,而不利用单独的登录应用。接下来,在块3212,通信通道对用户证明进行处理。通信通道可以通过将用户证明发送至认证服务或者通过在本地对它们进行处理,来对用户证明进行处理。
方法3200然后进行到终端A。从终端A开始,方法3200进行到块3214,在块3214,通信通道向客户机端组件2400提供用户的settings.xml文件,客户机端组件2400利用settings.xml文件执行用户特定的启动序列并且安装所有指定的虚拟驱动器。通信通道可以从远程数据源获得settings.xml文件,从本地数据源获得settings.xml文件,或者基于通信通道特定的缺省值产生缺省settings.xml文件。settings.xml文件包含用于配置网络操作系统的用户特定设置的集合。这些设置可以包括但不限于:用户名称、电子邮件地址、各种应用的设置、当启动时要安装的虚拟驱动器(通信通道)以及关联的根文件夹ID的集合(包括组,如下所述)、好友列表和启动序列。包含在settings.xml文件内的启动序列指定在成功登录后客户机端组件2400应该启动哪些程序,包括打开哪个桌面管理器、控制台或开始应用。接下来,方法进行到结束块3216并且结束。
在一些实施例中,settings.xml文件胜于表示网络操作系统内的各个项目的元数据的被动容器,并且启动应用在驱动启动序列时发挥更加重要的作用。例如,在一个实施例中,启动应用被执行,然后执行第二应用(例如桌面应用)以向用户显示桌面。尽管在这个实施例中将由启动应用来执行这个序列,但是启动应用也可以通过咨询settings.xml文件来确定要执行哪个第二应用。
网络操作系统组和好友
在网络操作系统中,组用于迅速高效地在用户之间实现协作和文件共享。与其它系统不同,在网络操作系统内创建新组以及实现协作和文件共享的负担非常轻。例如,在一个实施例中,用户仅需右击以创建新组,这将自动创建公共存储文件夹并且使得组的成员可以交换消息,创建新身份以与组的其它成员进行交互,并且彼此实时协作。
一个组当创建时存储组信息的集合。这个组信息包括根文件夹ID,如上所述,根文件夹ID用作对XML文件系统2500内的存储位置的引用。仅仅组成员可以访问位于该存储位置的文件夹和文件。如上所述,当启动客户机端组件2400时,对于登录用户获得settings.xml文件。这个settings.xml文件包含对用户为其成员的组的引用的集合。通过向通信管理器2412提供对期望组的引用从而启动适当的通信器和通信通道,客户机端组件2400然后可利用这些引用挂接组,就像它是任何其它存储位置或文件系统一样。
图33示出了用于挂接网络操作系统组的方法3300的一个实施例。从开始块3302开始,方法3300进行到块3304,在块3304,客户机端组件2400对组启动通信通道。接下来,在块3306,通信通道对与用户关联的用户证明进行处理。通信通道可以针对组特有的任何附加证明(例如,成员资格名称和密码)提示用户,或者它可以针对容易的单次签注(sign-on)重用用户登录。假定通信通道能够验证用户证明,方法3300然后进行到块3308,在块3308,通信通道利用从用户settings.xml文件获得的根文件夹ID获得组folders.xml文件。接下来,在块3310,客户机端组件2400向客户机上的现有folders.xml文件添加对组folders.xml文件的引用。(在上文中关于图28A-28D更加详细描述了现有folders.xml文件的创建,并且在启动期间经由该过程或另一个过程的实施例创建至少一个folders.xml文件)。这个引用可以表示到通信管理器XML文档#CommunicatinManager的虚拟通道,这个文档包含客户机上的所有开放通信通道的列表。接下来,在块3312,如果存在一个组的autostart.xml文件则通信通道获得这个autostart.xml文件,并且客户机端组件2400执行在autostart.xml文件内指定的指令或应用。该autostart.xml文件使组管理员能够指定当登录到组时总由组成员执行的公共程序,例如,审核程序、欢迎屏幕、公共桌面配置、表示组的社团等。组还可以指定用户可选择作为当登录系统时的它们的用户启动序列的另选启动序列。方法3300然后进入结束块3314并且结束。
在一些实施例中,由于文件存储位置具有大多数的与组的特征相同的特征,所以方法3300还可用于挂接文件存储位置。文件存储位置缺少具有作为文件存储位置的成员(在上文中针对组描述)的关联的概念,但是挂接文件存储位置以及访问这个位置内的文件的过程是非常相似的。文件存储位置甚至可以包括如上所述的autostart.xml文件。
组功能或文件存储位置还可用于实现社团。文件存储位置可用于创建社团而不需要特定的成员资格。换言之,所有用户将自动成为社团的成员。另一方面,组功能可用于创建仅仅成员资格社团。
上述的组信息还可以包括成员资格的集合。成员资格是用户与组之间的关联,并且表示用户是组的成员的事实。每个成员资格可以具有将向组的其它成员显示的关联名称,由此当在组内进行交互时为用户创建新的身份。由于当用户加入组时用户可以创建成员资格名称,所以用户能够在保持它们的私密的同时加入具有多变主题的组。例如,名称为“组1”的组可以具有成员资格的集合,用于指示用户名称为“Alice”的用户和用户名称为“Bob”的用户均是组1的成员。指示Alice是组1的成员的第一成员资格可以与Alice的用户名称相同或相似,例如为“AliceGroupOne”。指示Bob是组1的成员的第二成员资格可与Bob的用户名称不同,例如为“AnonymousGroupMember”。当Alice搜索其它组成员时,她访问成员资格名称的列表而非关联的用户名称。于是,她将看见“AnonymousGroupMember”是组的成员,但是她不会知道“AnonymousGroupMember”实际与“Bob”关联。另选地,组中的成员可以选择使得关联的用户名称公开,在这种情况下,Alice将能够识别“AnonymousGroupMember”与“Bob”关联。
消息发送服务能够处理用户间通信中的多个用户身份。由于一个用户能够以两个不同条目的形式在他的好友列表内保持同一好友,而不知道这实际是同一个人,所以对于系统的好友处理这也是这样的。用户还将从两个不同的条目接收不同的即时消息而不知道它们都是由同一人发送的。
联机状态与离线状态之间的转变
在网络操作系统的一些实施例中,客户机端组件2400能够在正常的联机状态下以及在离线状态下工作,其中在离线状态下,客户机端组件2400没有访问任何服务器端资源。在客户机端组件2400内提供这个功能的一个优点在于:它帮助客户机端组件2400无缝支持一个在联机模式和离线模式下都操作的应用,同时将应用开发人员支持这两种模式所需的工作量最小化。
图34示出了第一客户机的客户机端组件2400从联机状态转变到离线状态的方法3400的一个实施例。这个方法3400假定第一客户机的客户机端组件2400先前经由例如方法3200的方法启动并连接到XML文件系统2500。从开始块3402开始,方法3400进行到块3404,在块3404,第一客户机的客户机端组件2400通过向XML文件系统2500的XML web服务2510发送通知,将第一客户机的状态设置为离线状态。然后其它客户机利用相同的XML web服务检查这个状态以确定第一客户机是离线的。接下来,在块3406,XML web服务2510指示消息服务器2512向订阅第一客户机的状态的所有其它客户机发送第一客户机离线的通知。通常,连接到XML文件系统2500并且与与第一客户机相同的组关联的其它客户机将向消息服务器2512上的他们的订阅列表添加第一客户机。消息服务器2512通过实质与在上文中更加详细描述的关于文件更新的通知相同的方式发出通知。
客户机端组件2400以及由客户机端组件2400执行的应用为了在无法访问XML文件系统2500的情况下继续工作,客户机端组件2400必须在第一客户机上缓存来自XML文件系统2500的任何所需资源。为此,方法3400进行到块3408,在块3408,第一客户机的应用管理器904下载在与当前由客户机端组件2400执行的每个实例关联的应用包内指示的所有仍存在的尚未下载的资源。应用开发人员可以指示客户机端组件2400应该缓存应用包中的哪些资源以实现应用的离线使用。另选地,客户机端组件2400可以通过分析由应用包的组件使用的引用,自动确定应该缓存什么资源。
在一些实施例中,应用管理器904可以执行用于确定应该在第一客户机上缓存什么资源的附加的可选步骤。例如,方法3400可进行到块3410,在块3410,第一客户机的应用管理器904下载由每个实例动态加载的任何资源。这些资源将不由与实例关联的应用包引用,但是将改为在执行时由实例进行确定。方法3400然后可以进行到块3412,在块3412,第一客户机的应用管理器904下载与每个打开的视图文件关联的资源。如动态加载的资源一样,每个打开的视图文件可与没有由应用包进行引用的资源进行关联。方法3400还可以进行到块3414,在块3414,应用管理器904相似地下载与每个过程关联的资源。本领域技术人员将认识到,由于块3410-3414是可选的,所以可以在方法3400的实施例中执行这些块中的一个、多个或者不执行这些块中的任何一个。
在块3408内以及在块在3410-3414中的多个块内或者零个块内下载资源后,方法3400然后进行到块3416,在块3416,第一客户机的客户机端组件2400设置指示第一客户机离线的系统标志。这个系统标志可用于改变客户机端组件2400以及在第一客户机上执行的应用的行为。例如,在一个实施例中,方法3400进行到块3418,在块3418,第一客户机的客户机端组件2400对后来的文件操作进行排队,并且第一客户机的每个通道缓存后来的描述对文件的修改的事务,而不是立即向XML文件系统2500发送文件操作和事务。由于客户机端组件2400在离线时对文件操作进行排队并且缓存事务,所以对于网络操作系统的用户看起来在第一客户机离线时并没有发生任何变化。
由客户机端组件2400执行的应用还可以基于系统标志,例如通过禁用需要网络连接的功能来改变它们的行为。如果第一客户机的用户尝试执行需要网络连接的动作,则客户机端组件2400自身可以例如通过显示错误消息来进一步改变它的行为。方法3400然后进入结束块3402并且结束。
图35示出了当第一客户机已经执行了例如方法3400的方法并且已经在离线状态下操作时返回联机状态的方法3500的一个实施例。从开始块3502开始,方法3500进行到块3504,在块3504,第一客户机进行联机,并且第一客户机的客户机端组件2400向XML web服务2510发送联机状态的通知。第一客户机可以通过针对不限于局域网、无线网、拨号网络等之一建立或重新建立连接进行联机。另选地,当已经建立了网络连接时,当用户指示希望进行联机时第一客户机可以进行联机。接下来,在块3506,XML web服务2510指示消息服务器2512向订阅第一客户机的状态的所有客户机发送第一客户机联机的通知。
方法3500然后进行到块3508,在块3508,第一客户机的事务管理器910从XML web服务2510下载缓存在第一客户机上的文档的任何变化。在一个实施例中,这些下载的变化是在第一客户机离线时由其它客户机对XML文件系统2500内的文档进行的变化。接下来,在块3510,第一客户机的事务管理器910解决缓存的文档与下载的变化之间的任何冲突。在一个实施例中,事务管理器910仅仅检测到冲突存在,并且提示用户人工解决冲突(通过创建新文件以包含缓存的变化,以取消缓存的变化而选择下载的变化等)。在另一个实施例中,事务管理器910执行判断应该保留哪些变化以及应该丢弃哪些变化的算法。
接下来,在块3512,第一客户机的事务管理器910向XML web服务2510发送任何排队的文件操作。例如,如果在离线时第一客户机的用户尝试创建、删除或重命名XML文件系统2500内的任何文件,则此刻这些文件操作将被发送至XML文件系统2500。在一个实施例中,XML文件系统2500将检测与由其它用户进行的变化的任何冲突(例如,对先前删除的文件进行重新命名的尝试等)并且适当地进行回应。
方法3500然后进行到块3514,在块3514,第一客户机的客户机端组件2400通过XML web服务2510联系消息服务器2512以向第一客户机的订阅列表重新添加任何监视对象。接下来,在块3516,第一客户机的客户机端组件2400设置指示第一客户机处于联机状态的系统标志。在一个实施例中,设置这个系统标志使客户机端组件2400和应用返回到它们的正常的网络连接的操作状态。方法3500然后进行到结束块3518并且结束。此刻,第一客户机的XML文件系统然后与网络操作系统的服务器端组件2500进行同步并且联机。
XML文件系统特殊文件夹
如上所述,XML文件系统2500内的某些文件夹可被指定为特殊文件夹。在一个实施例中,特殊文件夹的条目以与普通文件夹的条目相同的方式被存储在文件夹数据库2520内,但是设置标志以指示该文件夹是特殊文件夹。在一个实施例中,特殊文件夹在文件夹数据库2520内的条目还包含处理在特殊文件夹内创建文件的请求的许多服务器过程之一的指示。在另一个实施例中,一个服务器过程处理在特殊文件夹内创建文件的所有请求,并且基于例如文件的文件类型的文件的内容来确定如何处理文件。
这些特殊文件夹不是提供文件存储,而是可以用作对例如用户之间的异步消息发送的一些其它数据处理例程的抽象。这种异步消息发送的一个示例是用于接收和处理向其它用户发出的消息的发件箱文件夹的使用。用于用户间通信的特殊文件夹的使用提供了许多优点。例如,它简化了客户机应用开发。XIOS应用2402可以通过简单使用熟悉的文件创建例程,利用与特殊文件夹关联的消息发送协议,并且不需要艰难对付通信协议的基础细节。作为另一个示例,如上所述,用于用户间通信的特殊文件夹的使用使XIOS应用2402能够补充支持包括在XML文件系统2500内的组功能。于是,使用特殊文件夹进行消息发送的XIOS应用2402不需要增加用于实现安全性、组成员资格、好友列表、寻址、匿名等的额外代码,这是因为对于这些特征它可以简单依赖XML文件系统2500的基础功能。
图36示出了处理在发件箱特殊文件夹内创建新文件的请求的方法3600的一个实施例。尽管这种请求对于在客户机上执行的XIOS应用2402而言看起来如同它是创建文件的请求,但是服务器将把这个请求视为向第二用户发送消息的请求。从开始块3602开始,方法3600进行到块3604,在块3604,与第一用户的发件箱文件夹关联的服务器过程接收在发件箱特殊文件夹内创建新文件的请求。接下来,在块3606,服务器过程从该请求提取预期收件人的地址。方法3600然后进行到块3608,在块3608,服务器过程识别与预期收件人的地址关联的第二用户。
上述的XML文件系统2500的组和好友列表功能允许多个不同类型的寻址以识别第二用户。例如,第一用户可以直接将消息寻址到第二用户的用户名称。作为另一个示例,第一用户可以将消息寻址到与第二用户关联的成员资格名称。在这种情况下,第二用户的匿名将被保护,但是第一用户仍能够将消息寻址到第二用户。作为又一个示例,第一用户可以将消息寻址都例如电话编号的存储在与第二用户关联的元数据中的地址。服务器过程将确定已利用哪种类型的寻址并且将由此识别第二用户。
接下来,在块3610,服务器过程确定第二用户的收件箱文件夹ID。在一个实施例中,这仅涉及在文件夹数据库2520内搜索与第二用户关联的收件箱文件夹。方法3600然后进行到块3612,在块3612,服务器过程利用收件箱文件夹ID在第二用户的收件箱文件夹内创建新文件,这个新文件包含包括在请求内的数据。在在特殊文件夹内已经创建文件的实施例中(与服务器过程直接处理文件创建请求相对),服务器过程简单地将新文件从第一用户的发件箱文件夹移动至第二用户的收件箱文件夹。接下来,方法3600进行到结束块3614并且结束。
示例应用-聊天
如上所述,网络操作系统的一个优点在于嵌入在网络操作系统内的特征使得可以迅速开发出可重用、可伸缩、跨平台的包含充分安全性和匿名功能的协作组件。利用这些特征的许多优点的示例性应用的一个实施例是下文所述的聊天应用。
图37以高级别示出了聊天应用3700及其对应的共享数据文件3710的一个实施例。替代对新通信协议和认证方案进行设计和编码,聊天应用3700通过利用驻留在XML文件系统2500内的共享数据文件3710执行聊天会话中的参与者之间的通信。聊天应用3700的界面包括四个主要组件:主窗口组件3712、文本显示组件3702、文本输入组件3704和按钮组件3706。当开始聊天会话时,文本显示组件3702经由绑定3708被绑定至共享数据文件3710,从而使得在聊天会话中由任何参与者对共享数据文件3710进行的改变将被反映在文本显示组件3710内(为清楚而从图37省去了这个文本)。
图38以高级别示出了聊天应用3700的文本显示组件3702和按钮组件3706也被绑定至共享数据文件3710。当用户向文本输入组件3704输入文本并点击按钮组件3706时,共享数据文件3710中发生变化。这种变化将然后被传播至绑定至共享数据文件3710的所有组件,包括文本显示组件3702。
图39以高级别示出了第一用户3902的聊天应用与第二用户3904的聊天应用之间的聊天会话中的共享数据文件3710的更新。在这幅图中,第一用户3902的聊天应用的文本显示组件3702和第二用户3904的聊天应用的文本显示组件3702被绑定至共享数据文件3710,并且因此显示共享数据文件3710的内容。第一用户已经向文本输入组件3704输入了文本并且点击了按钮组件3706。按钮组件3706与触发器关联,其中,当点击按钮组件时,这个触发器使得执行从文本输入组件3704读取文本,将文本3906后附加到共享数据文件3710,并且从文本输入组件3704清除文本的步骤。
用于更新共享数据文件3710的这个过程帮助显示网络操作系统的至少一个优点:开发人员仅需将上述的四个组件进行关联并且创建绑定至文本输入组件的规则,以实现这个功能。在这些场景后面,网络操作系统将处理更新共享数据文件3710的大量细节。例如,在一个实施例中,缓存的共享数据文件3710的副本由文档管理器912存储在客户机端缓存器内。对应的URL对象接收更新共享数据文件3710的请求,这使得事务管理器910创建表示所述改变的事务。事务管理器910通过使得事务经由XIOS通信器2504和XIOS通道被提交给XML web服务2510,将事务传播至远程监听器。XML web服务2510注意到文本被共享并且将提交的事务转发至事务协调器2522。事务协调器2522然后提交事务,更新XML文件系统2500内的共享数据文件3710。
图40以高级别示出了聊天应用3700的一个实施例中的经由共享数据文件3710的变化的传播的、聊天消息的发送。如上所述,第一客户机3902的聊天应用和第二客户机3904的聊天应用的文本显示组件3702都被绑定至共享数据文件3710。于是,当XML文件系统2500更新共享数据文件3710时,向绑定组件的每个通知变化并且相应地对其进行更新。
有利的是,这使开发人员能够使UI组件通过数据更新事件传播总是自动显示与共享数据文件3710同步的正确信息,并且由此不需要编写任何代码而改为通过简单地将组件绑定至共享数据文件3710就完成了聊天通信。如同共享数据文件3710的更新一样,网络操作系统处理这个事务的大量细节。例如,在一个实施例中,当事务协调器2522提交事务时,它指示消息服务器2512向订阅共享数据文件3710的变化的每个客户机通知:共享数据文件3710已经被更新。消息服务器2512向每个客户机发送这些通知,该客户机从通知提取更新的信息或者联系XML文件系统2500以获得文件的最新版本。在这点上,第一客户机的事务管理器910将认识到第一客户机提交了改变,并且将不会重复更新它的共享数据文件3710的缓存版本。其它客户机的事务管理器910将使得这些变化被并入它们各自的共享数据文件3710的缓存版本。当其它数据更新发生时,任何监听组件(包括第一客户机3902的聊天应用和第二客户机3904的聊天应用的文本显示组件3702)将被通知文件已经被更新。文本显示组件3702然后将相应地以添加的内容3906被自动更新。
图41示出了通过针对客户机之间的协作式通信利用共享数据文件3710实现的附加特征。也就是说,当对给定的共享数据文件3710的更新被传播至订阅共享数据文件3710的任何数目的客户机时,在超过两个的参与者之间进行协作式通信不需要额外工作。如图41所示,任何数目的其它客户机(例如,第三客户机4102和第四客户机4104)能够加入第一客户机3902与第二客户机3904之间的会话,而不需要任何另外的设计变化。如上所述,每个客户机将绑定至共享数据文件3710并且接收更新。
向给定的用户的聊天好友列表添加联系人以及建立单独聊天会话还可以示出包含在网络操作系统内包含的许多特征。在一个实施例中,第一用户可以仅仅发送或从第二用户(其是第一用户的好友列表的成员并且同意与第一用户进行聊天通信)接收聊天消息。第一用户的好友列表可以存储在XML文件系统2500内的文档内,或者可以作为settings.xml文件的一部分进行存储和发送。为了向好友列表添加第二用户,第一用户首先必须搜索用户。在一个实施例中,为了保留属于组的用户的匿名,第一用户将仅仅能够搜索成员资格名称,这些成员资格名称的每个与用户和第一用户所属的组关联。在一个实施例中,第一用户还将能够搜索全局组,在这个全局组内,存在用户的真实名称的指示,但是没有与在组内发现的名称的联系。
在任一情况下,搜索将与第二用户关联的地址返回到第一用户。第一用户然后将向第二用户的地址发送:向第一用户的好友列表添加第二用户的请求。在一个实施例中,利用与上述的方法3600相似的方法完成这个操作,其中,第一用户在第一用户的发件箱文件夹内创建构成好友列表请求的文件,这个文件然后通过服务器过程被路由和传送到第二用户的收件箱文件夹。在第二用户的客户机上,从第二用户的收件箱获取该请求,并且显示对话框以询问第二用户她是否希望允许第一用户将她添加到他的好友列表。当第二用户回应时,消息以相似方式被发送回第一用户以完成将第二用户添加到第一用户的好友列表,并且第一用户然后将能够开始与第二用户的聊天会话。
对于开始与第二用户进行聊天会话的第一用户,发生相似过程。第一用户的聊天应用创建共享数据文件3710,将它的文本显示组件3702绑定至共享数据文件3710,并且向第二用户的地址发送开始聊天会话的请求。请求如上所述被传递。如果第二用户接受请求,则通知被发送至第一用户的聊天应用,第一用户的聊天应用然后向第二用户的聊天应用发送共享数据文件3710的文档ID。第二用户的聊天应用将它的文本显示组件3702绑定至共享数据文件3710,并且聊天会话可以如上所述进行。
尽管关于聊天描述了这些特征,但是本领域技术人员认识到,能够利用共享数据文件实现例如消息板、电子邮件等的其它形式的服务器中介通信。另外,共享数据文件能够用于协调不需要服务器进行中介的其它形式的通信。例如,第一用户和第二用户能够利用共享数据文件针对例如VOIP或视频会议的对等通信,协商带宽设置、加密设置等。
另外,尽管为了简化,以上聊天的描述假定聊天应用处理到达收件箱文件夹的所有消息,但是客户机上的附加组件可以管理进入的消息。在一个实施例中,客户机上的组件对出现于收件箱文件夹内的每个消息进行分析,并且确定用于处理该消息的适当应用。组件然后启动该应用并且将消息传递至该应用以进行进一步处理。通过这种方式,不用已经运行聊天应用,就能够处理进入的聊天请求或伙伴列表请求。
图42示出了在创建XIOS应用时利用可重用组件的另一个优点。此图示出了在Web浏览器内容留的网络操作系统的一个实施例,并且还可以代表在例如客户机端组件2400的孤立应用或机器操作系统实现方式的其它实施例内网络操作系统的样子。Web浏览器内的每个框表示用可重用组件(例如,电子邮件组件、时钟组件、web搜索组件、组消息组件和天气报告组件)创建的XIOS应用2402。与只在孤立聊天应用内的情况相对,右下方的框显示在这个web浏览器内聊天应用组件的重用。由于可重用组件不需要重新编写以在不同环境下工作,所以使用可重用组件能够迅速开发这种复合成应用。能够创建合成应用的另一个优点在于:从数据模型提供给应用的基础数据可从多个完全不同的源合并而成,于是使得应用能够从大量数据源的合成品进行工作。
示例应用-重聚
图43示出了利用系统的实施例容易创建的示例协作。1992级重聚应用是能够呈现给组的成员的功能的一个示例。如以上关于图42所述,图43示出了引用多个数据源的组件的集合。1992级重聚应用示出了能够作为当绑定组文件夹时加载的autostart.xml文件的一部分进行启动的组件的集合。如以上图32B所示,1992级重聚组文件夹可作为数据源由客户机进行绑定,在这种情况下,它将被显示为用户界面内的驱动器。当用户之后打开那个数据源时(或者当用户首先绑定数据源时),与组文件夹关联的autostart.xml文档将使得显示例如活动调度、重聚活动地图、重聚倒计时等的组件的集合。
除了这些组件的自动显示以外,组功能还将提供安全性。例如,仅仅组的成员能够观看相册内的条目,它可以仅是存储在组文件夹层级内的文件夹的视图。如在显示组的其它联机成员的图43的聊天组件中所示,组功能还将提供与组的其它成员的容易的协作,而不用首先要求用户向好友列表添加其它组成员。
尽管示出和描述了说明性实施例,但是应该明白,在不脱离本发明的精神和范围的情况下可以进行各种改变。
权利要求书(按照条约第19条的修改)
1.一种计算机可读介质,具有用于在数据网络上对数据进行同步的计算机可执行组件,所述计算机可读介质包括:
客户机端组件(2500),包括事务协调器(2522)和消息服务器(2512),事务协调器(2522)用于帮助多个客户机计算装置同时使用文档,消息服务器(2512)用于向监听客户机推送数据更新;以及
客户机端组件(2400),包括数据更新事件总线(1254)和事务管理器(910),数据更新事件总线(1254)用于将数据更新从应用自动地传播至共享数据模型,事务管理器(910)用于创建并使得描述数据更新的事务通过网络被发送至服务器端组件(2500)。
2.根据权利要求1所述的计算机可读介质,其中,向监听客户机推送数据更新包括:
保持识别客户机已经登记为监听器的被订阅对象的、与监听客户机关联的订阅列表(2602);
接收被订阅对象已经历了数据更新的通知;以及
在与被订阅对象关联的消息链(2704)内执行查询并且向与在该消息链(2704)内识别的订阅列表关联的监听客户机发送通知。
3.根据权利要求1所述的计算机可读介质,其中,客户机端组件(2400)还包括通信通道(2504),通信通道(2504)被构造为对与网络服务的通信进行抽象并且将由事务管理器(910)创建的事务翻译成所述网络服务理解的格式。
4.根据权利要求1所述的计算机可读介质,其中,帮助多个客户机计算装置同时使用文档包括:当已经由第一客户机打开文档时响应于第二客户机的请求提供文档(2502),并且建立向第一和第二客户机两者通知文档被共享的设置。
5.根据权利要求1所述的计算机可读介质,其中,帮助多个客户机计算装置同时使用文档包括:
使得第一客户机作为监听器向服务器端组件(2500)订阅对文档(2502)的修改;
使得第二客户机端计算机作为监听器向服务器端组件(2500)订阅对文档(2502)的修改。
6.根据权利要求5所述的计算机可读介质,其中,使得第二客户机作为监听器向服务器端组件(2500)订阅包括:
向第一客户机通知文档(2502)由第二客户机活跃地共享;
修改第一客户机的配置以立即向服务器端组件(2500)传播表示数据更新的任何事务。
7.根据权利要求6所述的计算机可读介质,其中,消息服务器(2512)还被构造为从第一客户机接收表示对文档(2502)的数据更新的事务,确定第二客户机是针对该数据更新的监听器,并且将该事务传播至第二客户机。
8.根据权利要求7所述的计算机可读介质,其中,第二客户机上的客户机端组件(2400)被构造为接收表示数据更新的事务,对文档(2502)执行数据更新,并且自动将数据更新从文档(2502)传播至一个或多个用户界面组件。
9.根据权利要求1所述的计算机可读介质,其中,将数据更新从应用自动地传播至共享数据模型包括:
识别在应用代码内遇到的绑定操作的语义描述;
对与该绑定操作关联的表达式求值;以及
将与应用关联的用户界面组件绑定至在所述表达式内引用的文档(2502)。
10.根据权利要求1所述的计算机可读介质,其中,所述数据更新是用户界面组件的状态变化,事务管理器创建描述该状态变化的事务。
11.一种在将与应用关联的运行时对象绑定至文档的计算机可执行指令内实现的方法,包括:
接受数据绑定的语义描述,所述语义描述包括用于识别运行时对象和运行时对象将绑定的文档的一个或多个表达式;
对提供文档的抽象表示的文档对象(1254)进行实例化;
将运行时对象作为数据更新监听器登记(1600)在文档对象(1254)上;
接收(2004)数据更新,该数据更新修改绑定了运行时对象的文档内的数据;以及
在运行时对象上设置说明所述数据更新的新数据(2008)。
12.根据权利要求11所述的方法,其中,所述一个或多个表达式识别运行时对象将绑定的文档内的数据的子集,并且其中,将运行时对象作为数据更新监听器登记(1600)包括将在应用代码内定义的XPath表达式与URL进行合并。
13.根据权利要求12所述的方法,其中,在由XML虚拟机(510)提供的不向主调过程返回数据的孤立功能内执行XPath表达式与URL的合并。
14.根据权利要求11所述的方法,其中,对提供文档的抽象表示的文档对象(1254)进行实例化包括:
确定在表达式内引用的文档是否缓存在本地;以及
如果在表达式内引用的文档没有缓存在本地,则从网络服务获得基于表达式内的协议标识符识别的文档。
15.根据权利要求11所述的方法,其中,将运行时对象作为数据更新监听器登记在文档对象(1254)上包括:
确定运行时对象是否利用一个或多个规则来解释数据模型内的内容;
如果运行时对象利用了规则,则将与运行时对象关联的规则传播(2100)至保持在数据模型内的规则处理器;以及
根据名称空间词汇表,对由运行时对象的规则影响的数据模型内的内容进行标记。
16.根据权利要求11所述的方法,其中,所述数据更新对多个运行时对象绑定的文档修改一个或多个规则,并且其中,设置说明所述数据更新的新数据包括:更新绑定至所述文档的每个运行时对象的名称空间词汇表。
17.根据权利要求11所述的方法,其中,所述运行时对象是从由过程、视图、用户界面组件和通信通道组成的组中选择的一个运行时对象。
18.根据权利要求11所述的方法,其中,所述运行时对象是用户界面组件,并且在运行时对象上设置说明所述数据更新的新数据包括执行(2218)在用户界面组件内可视地渲染的数据的全更新。
19.根据权利要求11所述的方法,其中,所述运行时对象是用户界面组件,并且在运行时对象上设置说明所述数据更新的新数据包括:
识别(2214)受数据更新影响的正显示的数据;以及
执行在用户界面组件内可视地渲染的受数据更新影响的数据的部分更新。
20.一种在向计算装置提供对网络文件系统的访问的计算机可执行指令内实现的方法,所述方法包括:
响应于从计算装置接收到访问网络文件系统内的根文件夹的请求,认证(3212)用户是具有访问根文件夹的权限的组的成员;
如果所述用户被认证为组成员,则获得(2800)与根文件夹关联的信息,该信息包括在根文件夹的层级内创建的文件和子文件夹的描述;以及
产生并向计算装置发送(2832)描述根文件夹的内容的文档。
21.根据权利要求20所述的方法,还包括使得根文件夹作为虚拟驱动器挂接在计算装置上,其中,描述根文件夹的内容的文档使得利用浏览器应用对所述虚拟驱动器进行导航。
22.根据权利要求20所述的方法,还包括:
从计算装置接收加载文件的请求;
获得文件的原始内容以发送至计算装置,文件的原始内容独立于与根文件夹关联的信息的发送被发送至计算装置。
23.根据权利要求20所述的方法,其中,从计算装置接收访问网络文件系统内的根文件夹的请求包括:创建对计算装置与提供对网络文件系统的访问的网络服务之间的通信进行抽象的通信通道(2504)。
24.根据权利要求23所述的方法,其中,由通信通道(2504)提供的用于对网络文件系统上的文件执行操作的方法包括由加载文件、创建文件和保存文件组成的组中的至少一个方法。
25.根据权利要求23所述的方法,其中,通信通道(2504)被构造为接受并向网络服务发送动作URL,所述动作URL至少包括识别网络服务将执行的类型处理的功能名称。
26.根据权利要求20所述的方法,其中,获得文件的描述包括:对包含与原始文件数据分离地存储的关联文件描述和文件夹层级信息的文件夹数据库(2520)进行查询。
27.根据权利要求20所述的方法,其中,文件内的原始数据可以是任何格式,并且其中,网络文件系统被构造为通过向保持文件的一个或多个文件夹附加访问该文件权限,实现多个用户的文件共享。
28.根据权利要求20所述的方法,其中,文件内的原始数据提供应用的语义逻辑,并且其中,响应于根文件夹作为虚拟驱动器挂接在计算装置上,自动启动应用的执行。
29.根据权利要求20所述的方法,其中,产生描述根文件夹的内容的文档包括:
确定用户是否具有与针对根文件夹的访问权限相同的访问子文件夹的权限;
如果存在访问子文件的相同权限,则在文档内插入子文件夹的描述;以及
如果根文件夹与子文件夹之间存在不同的访问权限,则在文档内插入指向执行访问权限的单独认证的文件夹的XLink。
30.这里所示和所述的计算机可读介质、方法、计算装置、系统和设备。
Claims (5)
1.一种具有用于在数据网络上对数据进行同步的计算机可执行组件的计算机可读介质,包括:
服务器端组件,包括用于帮助由多个客户机计算机同时使用文件的事务协调器和用于向监听客户机推送文件更新的消息服务器;以及
客户机端组件,包括用于自动从应用向共享数据模型传播数据更新的数据更新事件总线和用于创建并使得描述数据更新的片段在网络上发送至服务器端组件的事务管理器。
2.根据权利要求1所述的计算机可读介质,其中,向监听客户机推送文件更新包括:
保持识别客户机已经登记为监听器的被订阅对象的、与监听客户机关联的订阅列表;
接收被订阅对象已被更新的通知;以及
在与被订阅对象关联的消息链内执行查询并且向与在该消息链内识别的订阅列表关联的客户机发送通知。
3.根据权利要求1所述的计算机可读介质,其中,客户机端组件还包括通信通道,该通信通道被构造为对与网络服务的通信进行抽象并且将由事务管理器创建的片段翻译成所述网络服务理解的格式。
4.根据权利要求1所述的计算机可读介质,其中,帮助由多个客户机计算机同时使用文件包括:当文件已经由第一客户机打开时,响应于第二客户机的请求提供该文件,并且建立向第一和第二客户机两者通知文件被共享的设置。
5.一种如这里所述和所示的计算机可读介质。
Applications Claiming Priority (41)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US97631107P | 2007-09-28 | 2007-09-28 | |
US97628307P | 2007-09-28 | 2007-09-28 | |
US97631207P | 2007-09-28 | 2007-09-28 | |
US97629207P | 2007-09-28 | 2007-09-28 | |
US97630107P | 2007-09-28 | 2007-09-28 | |
US97630407P | 2007-09-28 | 2007-09-28 | |
US97625807P | 2007-09-28 | 2007-09-28 | |
US97628107P | 2007-09-28 | 2007-09-28 | |
US97626907P | 2007-09-28 | 2007-09-28 | |
US97626607P | 2007-09-28 | 2007-09-28 | |
US97621607P | 2007-09-28 | 2007-09-28 | |
US97625207P | 2007-09-28 | 2007-09-28 | |
US97630807P | 2007-09-28 | 2007-09-28 | |
US97632007P | 2007-09-28 | 2007-09-28 | |
US97627507P | 2007-09-28 | 2007-09-28 | |
US97632707P | 2007-09-28 | 2007-09-28 | |
US97632507P | 2007-09-28 | 2007-09-28 | |
US97633907P | 2007-09-28 | 2007-09-28 | |
US97622207P | 2007-09-28 | 2007-09-28 | |
US60/976,312 | 2007-09-28 | ||
US60/976,252 | 2007-09-28 | ||
US60/976,327 | 2007-09-28 | ||
US60/976,266 | 2007-09-28 | ||
US60/976,269 | 2007-09-28 | ||
US60/976,311 | 2007-09-28 | ||
US60/976,339 | 2007-09-28 | ||
US60/976,216 | 2007-09-28 | ||
US60/976,258 | 2007-09-28 | ||
US60/976,222 | 2007-09-28 | ||
US60/976,275 | 2007-09-28 | ||
US60/976,292 | 2007-09-28 | ||
US60/976,325 | 2007-09-28 | ||
US60/976,304 | 2007-09-28 | ||
US60/976,320 | 2007-09-28 | ||
US60/976,249 | 2007-09-28 | ||
US60/976,281 | 2007-09-28 | ||
US60/976,246 | 2007-09-28 | ||
US60/976,301 | 2007-09-28 | ||
US60/976,308 | 2007-09-28 | ||
US60/976,283 | 2007-09-28 | ||
PCT/US2008/078164 WO2009043029A2 (en) | 2007-09-28 | 2008-09-29 | Network operating system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101861578A true CN101861578A (zh) | 2010-10-13 |
CN101861578B CN101861578B (zh) | 2012-11-28 |
Family
ID=42946623
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008801163352A Active CN101861578B (zh) | 2007-09-28 | 2008-09-29 | 网络操作系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101861578B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107172130A (zh) * | 2017-04-25 | 2017-09-15 | 武汉票据交易中心有限公司 | 一种mvc注册实现方法及服务器 |
CN107396186A (zh) * | 2017-08-11 | 2017-11-24 | 四川长虹电器股份有限公司 | Linux设备WebOS系统应用管理方法 |
CN107690000A (zh) * | 2012-02-24 | 2018-02-13 | 三星电子株式会社 | 用于处理移动终端的数据的装置和方法 |
CN108027828A (zh) * | 2015-09-14 | 2018-05-11 | 微软技术许可有限责任公司 | 与无状态同步节点的托管文件同步 |
CN111355620A (zh) * | 2018-12-20 | 2020-06-30 | 双子星云端运算股份有限公司 | 云服务测试及发布自动化系统 |
CN111868696A (zh) * | 2018-03-23 | 2020-10-30 | 三菱电机株式会社 | 报知系统 |
CN114845312A (zh) * | 2022-04-02 | 2022-08-02 | 四川安迪科技实业有限公司 | 一种基于tdma卫星网管自动搭建组网环境的方法 |
CN115038089A (zh) * | 2022-08-09 | 2022-09-09 | 广州博今网络技术有限公司 | 一种基于信息抽取的多端数据监听采集方法 |
CN115714782A (zh) * | 2022-10-26 | 2023-02-24 | 郑州云智信安安全技术有限公司 | 可离线交互的数据同步方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6968346B2 (en) * | 2001-04-23 | 2005-11-22 | International Business Machines Corporation | XML-based system and method for collaborative web-based design and verification of system-on-a-chip |
US10110632B2 (en) * | 2003-03-31 | 2018-10-23 | Intel Corporation | Methods and systems for managing security policies |
-
2008
- 2008-09-29 CN CN2008801163352A patent/CN101861578B/zh active Active
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107690000A (zh) * | 2012-02-24 | 2018-02-13 | 三星电子株式会社 | 用于处理移动终端的数据的装置和方法 |
US11943291B2 (en) | 2015-09-14 | 2024-03-26 | Microsoft Technology Licensing, Llc | Hosted file sync with stateless sync nodes |
CN108027828A (zh) * | 2015-09-14 | 2018-05-11 | 微软技术许可有限责任公司 | 与无状态同步节点的托管文件同步 |
CN108027828B (zh) * | 2015-09-14 | 2022-04-08 | 微软技术许可有限责任公司 | 与无状态同步节点的托管文件同步 |
CN107172130B (zh) * | 2017-04-25 | 2020-07-03 | 武汉聚风天下科技有限公司 | 一种mvc注册实现方法及服务器 |
CN107172130A (zh) * | 2017-04-25 | 2017-09-15 | 武汉票据交易中心有限公司 | 一种mvc注册实现方法及服务器 |
CN107396186B (zh) * | 2017-08-11 | 2019-11-08 | 四川长虹电器股份有限公司 | Linux设备WebOS系统应用管理方法 |
CN107396186A (zh) * | 2017-08-11 | 2017-11-24 | 四川长虹电器股份有限公司 | Linux设备WebOS系统应用管理方法 |
CN111868696A (zh) * | 2018-03-23 | 2020-10-30 | 三菱电机株式会社 | 报知系统 |
CN111868696B (zh) * | 2018-03-23 | 2023-12-19 | 三菱电机株式会社 | 报知系统 |
CN111355620A (zh) * | 2018-12-20 | 2020-06-30 | 双子星云端运算股份有限公司 | 云服务测试及发布自动化系统 |
CN114845312A (zh) * | 2022-04-02 | 2022-08-02 | 四川安迪科技实业有限公司 | 一种基于tdma卫星网管自动搭建组网环境的方法 |
CN114845312B (zh) * | 2022-04-02 | 2023-05-16 | 四川安迪科技实业有限公司 | 一种基于tdma卫星网管自动搭建组网环境的方法 |
CN115038089A (zh) * | 2022-08-09 | 2022-09-09 | 广州博今网络技术有限公司 | 一种基于信息抽取的多端数据监听采集方法 |
CN115714782A (zh) * | 2022-10-26 | 2023-02-24 | 郑州云智信安安全技术有限公司 | 可离线交互的数据同步方法和装置 |
CN115714782B (zh) * | 2022-10-26 | 2024-03-05 | 北京云智信安科技有限公司 | 可离线交互的数据同步方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101861578B (zh) | 2012-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240223653A1 (en) | Network operating system | |
CN101861578B (zh) | 网络操作系统 | |
US20090172101A1 (en) | Gesture-based collaboration | |
CN101952815A (zh) | 基于姿态的协作 | |
CN101861580A (zh) | 网络操作系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |