CN1669018A - 手持终端框架系统 - Google Patents
手持终端框架系统 Download PDFInfo
- Publication number
- CN1669018A CN1669018A CNA03816776XA CN03816776A CN1669018A CN 1669018 A CN1669018 A CN 1669018A CN A03816776X A CNA03816776X A CN A03816776XA CN 03816776 A CN03816776 A CN 03816776A CN 1669018 A CN1669018 A CN 1669018A
- Authority
- CN
- China
- Prior art keywords
- terminal system
- terminal
- script
- proxy client
- server
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/565—Conversion or adaptation of application format or content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9577—Optimising the visualization of content, e.g. distillation of HTML documents
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/289—Intermediate processing functionally located close to the data consumer application, e.g. in same machine, in same home or in same sub-network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
- H04L67/303—Terminal profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5682—Policies or rules for updating, deleting or replacing the stored data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种手持终端框架系统提供了一个服务器代理终端,该服务器代理终端为网络上获得的信息服务终端请求,确定最合适的服务器来提供被请求的信息,以及在因特网和/或内部网上将信息请求包发送给该服务器。信息请求的服务器响应由服务器代理终端接收。该服务器代理终端将响应信息分离成合适的数据组件。将数据组件发送给合适的终端。表示层和逻辑组件临时存储在终端的单级后台缓存中。一个终端将继续使用已经按照或者处于单级后台缓存中的表示层和逻辑组件服务当前的用户请求。当用户随后使用时,通过终端可检索由服务器代理终端发送并存储在单级后台缓存中的任何更新。该终端的状态由服务器代理终端保存,使得当用户例如从有线连接改变为无线连接时终端不会掉线。本发明包括一种脚本语言,通过允许主机在任何时候修改终端行为或者添加新的特征,该脚本语言可提供终端的逻辑组件,并赋予终端极大的灵活性。
Description
技术领域
本发明涉及在个人电子设备中的数据传送和变换。更特别地,本发明涉及使用适用协议和服务器代理终端检索和传输在网络上获得的数据给个人设备。
背景技术
在如今技术推动的社会中个人数据设备已经成为很普通的辅助设备。当PDAs、中文传呼机、手机和个人计算机第一次进入市场时,每一设备都具有其自己的定制体系结构。最初的系统为大量的通信和操作系统标准铺平了道路。
然而,各种设备在软件行业方面产生了很多问题。程序设计员必须将它们的程序载入每一设备的操作系统和显示性能。例如,使用Palm OS的PDA可能具有160×160象素的单色显示屏,而使用WinCE的PDA具有180×240的彩色显示屏。
当程序设计员为其程序设计出用户界面时必须考虑每一设备的限制。例如,各个设备之间的不同图形处理能力使得很难在不同的平台上实现相同的GUI外观和感觉。程序设计员必须考虑到一些可以容易地在一个设备上显示但不能在另一设备上显示或者不能在两个设备之间看到同一内容的方面。
CPU的速度也会影响应用程序。必须为每一平台调整应用程序的效率,从而使得程序可以运行。用户不希望在它们的个人数据设备上使用很慢的程序。
此外,个人设备在可利用的内存方面具有很大的差异,而不论客户软件是否存储在ROM中。RAM很少将难以管理数据。如果对于通常的消费者是可能的话,当使客户软件存储在ROM中会使得难以升级。
所有这些限制都给程序设计员提出了很多问题。
设计多个不同版本的程序来支持不同的个人数据设备的结果是其在支持不同的编码基数方面会产生大量令人头痛的事。必须调试、更新和支持每一版本的代码。当数据包协议或操作系统改变时,也必须对该系统改变编码基数。
一个实例是微软公司的.NET框架,其试图在服务器和终端中将XML网页服务链接在一起。该.NET框架要求所有的服务器和终端使用XML通信并在XML中传递信息。其结果是得到紧密构成的XML服务网络。然而,该方法要求终端设备处理由用户请求并显示的各个方面的数据。该方法还要求为每一不同的平台提供和支持应用程序。此外,当应用程序的复杂程度增加时,在客户系统上的处理命令要求更大功率的处理器。
有利的是提供一种手持终端框架系统,其提供一种容易从主机系统更新并减少在终端系统上的处理命令的终端框架。还有利的是提供一种手持终端框架系统,其提供了容易在多个终端平台上支持的程序语言。
发明内容
本发明提供一种手持终端框架系统。该系统提供一种容易从主机系统更新并减少在终端系统上的处理命令的终端框架。此外,本发明提供一种容易在多个终端平台上支持的程序语言。
本发明的一个优选实施例提供一种为网络得到的信息提供客户请求服务的服务器代理终端。该服务器代理终端确定最接近的服务器,并在因特网和/或内部网上提供被请求信息和发送信息请求给该服务器。
信息请求的服务器响应由服务器代理终端接收。服务器代理终端将响应信息分成合适的数据组件。将数据组件发送给合适的客户。将表示层和逻辑组件临时存储在终端上的一个单级后台缓存。终端使用服务器代理终端校验对于即将进行的特殊任务该终端使用最新版本的表示层和逻辑组件。如果终端没有使用最新的版本,那么它请求从服务器代理终端进行更新。终端继续使用当前存在于单级后台缓存的表示层和逻辑组件,以便提供当前的用户请求服务。用户利用随后使用的终端检索由服务器代理终端发送并存储在单级后台缓存中的任何更新。
使用服务器代理终端保存终端的状态使得例如当用户从有线连接改变为无线连接时终端不会停止。用户将不必重新验证终端和服务器代理终端,并且只要没有中断用户会话就将持续。
本发明包括一脚本语言,该脚本语言通过允许主机在任何时刻修改终端行为或添加新的特征从而赋予终端极大的灵活性。在终端运输后能够将该特征集配置在服务器代理终端的各行程中。利用服务器代理终端将终端脚本更新发送到终端。
结合附图通过下面详细的描述本发明的其它方面和优点将变得很明显,该描述通过实例的方式示出了本发明的原理。
附图说明
图1是根据本发明在不同的通信介质上与终端设备通信的本发明的服务器代理终端的示意性方框图;
图2是根据本发明包含股票行市响应的流对象的示意图;
图3是根据本发明的按钮对象的示意图;
图4是示出了根据本发明优选实施例的五个层的示意性方框图;
图5是根据本发明的终端设备和服务器代理的优选实施例的连接透视图的示意性方框图;
图6是根据本发明表示对象来源的示例性分级对象树;
图7是根据本发明的表格对象的示意图;
图8根据本发明的按钮对象的示意图;
图9是根据本发明包含按钮对象的表格对象的示意图;
图10是根据本发明包含股票行市响应的流对象的示意图;
图11根据本发明的根对象的示意图;
图12是根据本发明的包含数据和逻辑对象的表格对象的示意图。
具体实施方式
本发明包含一种手持终端框架系统。根据本发明的系统提供了一个容易从主机系统更新并减少在终端系统上的处理命令的终端框。此外,本发明提供一种容易在多个终端平台上支持的程序语言。
本发明提供一种脚本语言和终端引擎,该终端引擎可赋予主机灵活性,从而动态改变终端系统的行为和外观。该终端引擎容易适用于不同的终端结构和用户界面。主机系统包括一个进行对终端系统获得的大量数据的数据处理的代理终端。
参考图1,本发明提供了一种在便携(和非便携)设备例如PDAs、中文传呼机、手机和个人计算机102、103、104上运行应用的主机可控结构。还提供服务器代理终端101将数据和会话的表示层方面分离,并将其独立发送给终端102、103、104,使得没有表示层也可以获得数据,例如为了独立使用表示层。终端设备102、103、104可以通过有线网络105、电话线106或者卫星/无线连接107与服务器代理终端101连接。
服务器代理终端101通过因特网和/或内部网108获得终端请求的数据。数据可由服务器代理终端101接收,并在发送给终端102、103、104之前由处理成终端需要的原始数据。显示的数据的表示层方面可以独立地存储在服务器代理终端和代表对特殊终端应用程序特有的显示属性上。分离数据和表示层组件允许终端102、103、104为其它显示表格重新使用数据或者为其它应用程序重新解释数据。
本发明还在保存终端102、103、104的状态的服务器代理终端101提供一个持久代理终端(即服务器代理终端的代理终端组件),这可提高有效性,例如,通过允许用户从一种传输如Ethernet切换到另一种传输如Ricochet,同时不会改变状态或者重新验证用户。
本发明由上述的终端框架和服务器代理终端101组成。终端框架的目标是通过使终端行为由主机修改从而提供最大的灵活性。这允许将新特征快速添加到平台,该平台可能没有直接更新终端代码的可用方式,例如其终端代码是内置的PDA。
本发明通过将表示层、逻辑层和数据组件分离可实现该灵活性。这使每一组件能够独立更新,由此减少网络信息流通量和对服务器多余的请求。此外,该框架能够平衡多个平台,从而为具有新型的、最优化的、经过测试的编码基数的终端减少开发时间和错误数量。
服务器代理终端101处理来自终端102、103、104的所有请求,并以相同的协议返回响应。这极大地简化了终端102、103、104的响应性,它不再需要理解多桌面中心协议,例如HTTP、IMAP和SMTP。可配置来自服务器代理终端101的附加特征,因为它们在要求时由终端102、103、104展开和接收。
本发明提供公共的框架,用于在不同的平台如Palm OS、WinCE、Linux、Macintosh和Windows上建立主机控制的终端。只要已经给客户发布了具有烧录到ROM中的终端代码的设备,最多是难以更新终端。本发明的框架定址该问题和几个其它的涉及在便携设备上创建多个客户的难题。
框架的主要目标是允许服务器代理终端控制和修改终端行为和特征集,而不必更新该终端代码。此外,通过共享公共的、最优化的和经过测试的代码路径,公共的框架能够利用终端开发平衡从而减少错误数量和开发时间。
本发明的基础结构使用XML数据模型将终端数据、表示层和逻辑层分离到不同的组件中。当终端发出请求给服务器代理终端时,来自该服务器代理终端的响应作为二进制串行化了的XML数据流传输,该数据流可保存其内容的语义信息。这允许由脚本限定的终端逻辑层确定响应的特定组件,然后进行修改并以任意形式使用数据。此外,发送到终端的数据能够不依赖于表示层存储。这意味着可以通过其它形式重新使用和在稍后的时间利用终端逻辑层以任何形式显示或重新解释。
参考图2,对股票报价请求201的响应作为值树202返回,每个值都具有一个名字标签。利用终端上的逻辑层能够使用该信息202来仅仅提取显示的请求的期望组件。
终端的表示层组件也是由对象和属性组成的XML数据流。属性可以是简单的,例如整数、字符串和布尔值,或者复杂的例如脚本,或包含用于图像的象素数据的二进制,或者新闻故事的多信息文本。对象可以是UI窗体,例如按钮、文本区、或弹出式菜单,该菜单具有内置的整数属性,例如顶部、左边、高度和宽度。附加的内置属性可以包括用于内容标题的字符串。
为了更好地利用本机特征例如字体、大小、颜色和样式,本机应用程序能够添加对特定平台有用的内置属性。这种灵活性是固化在本发明设计的数据流的统一处理中。
参考图3,数据模型代表作为一个简单树302的对象和属性301,该简单树表示包含在当前表格中的单个窗体的配置。
当用户点击表格上的按钮时,它能够激活发送请求给服务器代理终端的脚本,例如股票报价,并使逻辑层处理处理服务器代理终端的响应的内容,以便提取公司名称和当前价格并使用这些值填充文本区属性。然而,由于终端存储了原始表格,所以对该服务的后来请求将立刻显示该表格,但是仍然允许用户发出交互式请求,例如对股票报价或不同地址规定不同的符号以便获得一个地图。这些表格或特征没有烧录到终端中,但是它们可通过服务器代理终端从终端获得。
本发明的结构包括一种下面描述的脚本语言,其提供了终端的逻辑组件。脚本似乎具有表格中的另一种属性,但是它可提供终端智能操作。当用户按压表示层中的按钮时,与按钮关联的脚本属性就执行(如下面描述的)。脚本能够执行许多任务,从确认表格上的输入到发出请求给服务器代理终端,到由对象调用并从响应提取期望的部分,然后将其插入到表示层的适当位置。它还可以修改UI组件的位置,以便对来自服务器代理终端的特定响应调整,或者它可以修改响应中的数据,从而满足特定终端的显示限制。
通过允许服务器代理终端在任何时间修改终端行为或者添加新特征,该脚本语言赋予了终端极大的灵活性。特征集对于终端不再是一个开发问题,但是相反能够在运输终端之后从服务器代理终端正式使用。
具有激活(active)终端侧的逻辑的另一个优点是在终端的性能中表明其自己,从而提供其大部分的功能而不必与服务器代理终端连接。因此,终端还能够在中断或丧失覆盖率的过程中获得服务器代理终端连接,通过允许用户看到在中断或丧失覆盖率的过程中其断线的地方进一步丰富用户的经验。最后,通过允许当不能直接更新终端代码时利用脚本定址某些错误,这种从服务器代理终端更新终端的能力增强了终端的耐用性和稳定性。
本发明的优势是它提供了一种开发能够在其发布之后修改和更新终端的方式。这一点必须完全地描述。看起来好像本发明是一种表示层插件,但是这是由于本发明必须将表示层、数据和逻辑层隔开。为此,终端的功能和特征可以由本发明的表格定义,该表格可通过服务器代理终端从终端获得。终端上的激活逻辑层允许特征集比简单的HTML更加丰富,并且对特定终端进行剪裁。此外,本发明的内部结构表示开发者仅仅例示了需要的和适用于特定终端部分,从而可以快速有效地制造质量轻且稳定的终端。
建立一个使用本发明的框架的终端涉及两个主要方面。首先必须给系统内核一种访问设备的某些公共的特征的方式,通常这必须通过操作系统(OS)路由。其次,如果期望支持表示层,终端的本地实现必须定义可在设备上得到的用户界面窗体。
参考图4,本发明的框架划分为五个层401。即表示层402,包含本发明的Nachos对象404和系统对象403的对象层,对象运行时间层405,包含传输抽象407和存储抽象406的抽象层,以及引导应用程序408。
该引导应用程序408包含本发明内核的本地实现,并执行需要用于在设备例如传输和存储上操作的异常分支指令。引导应用程序408能够安装对象到运行时间,以便显示对设备特定的服务。附加地该层408能够以功能性为主机,该功能性与本发明不相关或者结合其它本发明还不支持的特征。或者,它能够用作简单的“粘合(glue)”层,以便处理设备具体的问题例如通信,并通过从本发明的表示层402导出多个类补充大量的用户经验。
本发明定义了一个称为Nachos系统界面(NachosSystemInterface)的抽象基类。终端必须从该基类导出类并定义所有在本发明的框架和设备的本机OS之间提供粘合的虚拟函数。在该类中的虚拟函数包括定义基本文件系统的存储函数的入口、发送数据包给AOL的方式,用于该设备的图像显示和在UTC中的当前时间。通过这些机构,本发明提供诸如缓存和数据库中的固定存储的基本函数。该存储器可以RAM、快速存储器、或者甚至是桌面终端上的硬盘的形式实现。本发明对本机代码提供的实现不作假定,它仅仅是以在Nacho系统界面基类中描述的方式工作。尽管没有这些也能够运行,但是这将使终端响应请求更慢,并且不能在会话之间保存优先选择或其它信息。
开发本发明的本地实现的第二部分需要集成用户界面(UI)组件。本发明定义了一组表示层对象402,该对象是公共的UI窗体的抽象表示层,例如按钮、编辑和静态文本区、图像、选择框、弹出式菜单等等。本地终端不需要执行所有本发明定义的窗体,但是任何被执行的窗体必须通过寄存器类()方法和运行时间对象405注册。这允许终端灵活地仅支持对特定设备有用的窗体,而不用将各个命令硬编码成本发明的内核。
本机代码必须为每一个其执行的窗体从本发明的基类中导出,并提供一个显示该窗体的方式。本发明不进行任何命中测试、绘图或对屏幕上的本地窗体的改变。相反,导出的类必须处理事件例如系统同级的创建和消除、由于用户输入而改变窗体的属性的通知,以及通知基类窗体被单击或选择的能力。本发明从本地终端代码中的导出类接收的改变和操作的通知提供了在该特定设备上接收事件和输入的方式。
本发明的结构还规定了一种服务器代理终端以便通过统一所有与终端的通信为单一协议来简化终端应用程序的响应性。通过消除分析多种协议的需要,这减小了终端的大小和复杂程度。这也意味着通过改变服务器代理终端而不必更新终端代码就能够定址新的协议。
本发明已经设计成使其固有地稳定。在本发明层级上的非本地操作能够破坏终端。类似地,本发明的虚拟机(VM)将仅仅取消当前的脚本,如果它发现任何不期望的数据、字节码或者非法访问。此外,如果能够对这种复杂的环境检验所有条件,这是很困难的。存在几个记录统计信息的编译器开关,并且调试有关本发明的大多数方面的信息,包括但不限于脚本编译器、脚本运行时间VM和信息中心。
终端能够保存一个通过本发明可访问的本地数据库。该数据库将用作会话之间的持久性存储,以便保存状态信息、用户界面和局部超高速缓存。
服务器代理终端将是所有终端通信的唯一的一点。其结构必须稳定并可升级。服务器代理终端将与在后台的任何数量的其它服务器通信,以便创建其发送给终端的数据流。然而,许多终端没有与服务器的直接连接,而代替的是通过一些无线网络通信。终端和服务器都可以解决这种问题如有效的等待时间或间歇覆盖率。
服务器代理终端变成本发明的保存中心点。只要已经使用了终端,对于大部分其功能性来说,它取决于服务器代理终端。终端内容的开发需要定义请求和响应数据流格式、服务器组件,从而处理单个的请求,并为设备形成具体的表示层。
本发明可定址许多应用于微型终端约束,该微型终端是一个质量轻、交叉平台的终端框架。将数据、表示层和逻辑分离允许每一组件独立地保存和修改。大量的终端特征从本地终端代码发送到VM。因为这个,在终端上的末端用户的校验能够提高,并且不用更新终端自身就可以修改。
参考图5,其示出了本发明的终端设备501和服务器代理终端509的接口透视图。数据请求或者通过连通性介质1510从终端501发送到连通性网关1模块502,通过直接连接503,或者通过连通性介质2511发送到连通性网关2模块504到达协议处理程序模块505。连通性网关模块从任何连通性介质需要的具体协议转换Internet协议,然后前进到服务器代理终端509中的协议处理程序模块505。该协议处理程序模块505翻译请求的信息,然后或请求代理系统模块506,或者如果请求是用于系统内容的(例如表示或者层或逻辑组件),从内容存储器设备507检索系统内容。
服务器代理终端509中的协议处理程序模块505和代理系统模块506包含网络主机模块508和终端501之间的终端会话的当前状态。该终端会话状态独立于终端501和协议处理程序模块505之间的连通性的状态。终端会话状态能够自由地在连通性介质1510、连通性介质2511、或者之间连接503之间转换,而不需要重新校验,所以对其它用户来说,会话不会中断。
代理系统模块506管理与网络主机模块508的多个连接。代理系统模块506提供协议处理程序模块505使用和实现的应用界面。数据请求通过协议处理程序模块505与来自代理系统模块506的响应相关,然后根据本发明的协议格式化数据,或者通过连通性网关1模块502然后通过连通性介质1510,通过直接连接503,或者通过连通性网关2模块504然后通过连通性介质2511将数据发送给终端501。
通过从内容存储器设备507装入内容流处理对协议处理程序模块505的内容请求。该请求不会有关在终端设备501缓存的内容状态的信息,如果可适用。如果缓存的数据是最新的,则发送一个简单的响应,这使终端重置缓存的数据的到期数据。如果缓存的数据不是最新的,则根据本发明的协议格式化该数据,然后或者通过连通性网关1模块502然后通过连通性介质1510,通过直接连接503,或者通过连通性网关2模块504然后通过连通性介质2511将数据发送给终端501。在格式化数据之前,或者在格式化(在要求时)之前编译数据或预编译并存储在存储器设备507上,该选项的选择取决于在要求时编译是否会变成代理系统模块506中的瓶颈。
通过上述的缓存损坏结构可以更新终端501上的内容。将新版本的内容公布给内容存储器设备507,当终端501发出内容请求时,新的版本自动从内容存储器设备507检索,并发送给终端501。内容可以是数据、表示层、逻辑或三者的组合。尽管将新的版本发送给了终端501,但是老版本的表示层和/逻辑将由终端501使用来消除末端用户可能经历的等待时间。
将新版本的表示层和/逻辑导入终端501上的单级后台缓存。下一次用户请求内容时,终端501将检测单级后台缓存来看看是否存在适用于该特殊内容的版本。当终端501从单级后台缓存检索内容时,它首先检测内容是否已经到期。终端501将总是使用来自缓存的当前缓存版本的表示层和/逻辑。如果内容已经到期,终端501将使用代理系统模块506检测看看是否可获得新的版本。如果代理系统模块506确定终端501具有最新的版本,则将发送一个应答给终端501,以便重置缓存内容的到期数据。如果代理系统模块506确定可以获得新的版本,则将新版本的表示层和/逻辑发送给终端501,并导入终端501的单级后台缓存中。如果新版本公布在内容存储器设备507上,则重复上述的版本请求处理。
终端的结构设计成是有效的、便携的和灵活的。期望的是允许公共的编码基数平衡多个不同的平台。
假设的本发明内核的设计,在新终端上开始的开发者所作的远比通常的终端开发少。本发明的内核自身将关注更多的逻辑和应用程序的功能性。开发者主要需要着重于两个方面:UI集成和系统“粘合”。
对于UI集成,本发明提供一组表示层对象,它们是公共UI窗体的抽象表示。这些对象包括如按钮、矩形、图像、选择框等。然而,这些对象仅仅是逻辑实体。终端开发者的任务是使用钩入目标平台上的UI层的型式扩展这些对象。
表示层对象是基于使用本地同级的概念。即,对于每一NachosButton,内核预期终端开发者提供代码,以便在目标平台的期望UI工具包中创建按钮。还需要的是本地按钮将接受从NachosButton到同级的改变,并从同级到NachosButton传送用户相互作用。
终端开发者不需要为所有的表示层对象实现类。仅仅那些需要支持在目标平台上的期望程序必须存在。然而,也鼓励开发者尽可能地实现许多对象。由终端开发者在表示层对象中创建的任何类应该使用运行时间的registerClass()方法进行注册。这就是内核知道如何钩入对给定版本的终端程序存在的类,并且不会尝试使用不被支持的对象。
主要的祖先类是NachosUIObject。这为粘合到本地同级提供了支持。两个非常重要的方法是createSystemPeer()和_destroySystemPeer()。这些函数必须在任何时候适当地处理调用(包括在_createSystemPeer之前的_destroySystemPeer调用)。_createSystemPeer()必须确实从其附属的对象属性得到其初始状态。内核将根据需要调用这些函数,以便在目标平台的UI中保存一个存在。一般地,任何数据和状态应该存储于对象的子类中,以便释放内核,从而根据需要破坏和再创建本地同级。
NachosUIObject的子类包括Nachos表格(NachosForm)and Nachos窗体(NachosWidget)。在Nachos中NachosForm是其中可以构造UI的主容器。NachosWidget是所有窗体例如按钮、图像、矩形等的基类。NachosUIObject的非窗体子类包括NachosTimer和NachosItemsObject。
每一对象都具有内置的和运行时间属性。内置属性不能删除或重新命名,并保证在任何情况下存在。对象的任何附加属性将是其子类。这些子类可以是UI对象、数据对象或其它属性,例如脚本、二进制、整数、布尔值或字符串。
参考图6,其示出了一个表示本发明中对象导出的示例性分层对象树601。
Nachos表格具有以下内置的属性:
标题-在标题区域中显示的表格的字符串标题
模式-把表格标记为模式或非模式的布尔值
保持白色书写板-当载入表格时,用于将数据保存在白色书写板上的标志
冻结-当情况是真时,UI不应该绘制表格
持久性-甚至在该表格和其数据没有显示之后也将其保存
Nachos窗体具有以下内置的属性:
左边-UI中窗体的左边缘的位置
顶部-UI中窗体的顶端的位置
宽度-窗体的宽度
高度-窗体的高度
可见-如果窗体当前是可见的,则为真
激活-如果窗体是激活的且可以响应用户输入则为真
来自NachosWidget的其它对象具有附加的内置属性。例如,按钮具有用作标记按钮、或者矩形窗体的标题属性,该属性是一个可表示矩形的填充色的整数。
左侧和顶部的座标是显示区域的绝对座标。为表格的标题保存的显示的任何部分不会计算显示区域中的座标。例如,如果表格标题区域在表格的顶部,top=0将放置一个窗体在表格标题区域下方的第一象素。
一些UI工具包将本地窗体放置在绝对空间,一些关于它们的父类放置。终端开发者的工作是确保座标的任何要求的变换在NachosWidget和其本地同级之间进行。
终端开发者实现的其它重要部分是将本发明“粘合”到目标平台的代码。当初始化时需要提供一种NachosSystemInterface实现给NachosRuntime。然后内核使用该实现与目标平台进行其相互作用。这包括局部存储器和网络访问。
如果在目标平台上支持存储器,则应该提供NachosDataStreamInterface的实现,以及来自NachosSystemInterface的实现附加需要的方法。
下面示出了本发明的脚本语言的示例性说明。
介绍
本发明的终端框架提供了一种主机可控的智能终端。主机可控性的概念在静态终端上具有明显的优点。它允许在平台上快速添加新特征到终端,该平台可能没有直接更新终端代码的可行方式,例如具有使其终端代码被烧录的设备。此外,通过从主机修改终端行为可以防止或消除使用终端的不期望问题。附加地,由于终端只不过是简单显示来自主机的信息的非智能终端,因此它保存大部分的主机功能性,甚至当没有与主机连接时。这在具有高潜在连接或需要完全脱机运行的终端上尤其是有用的。
通过使用XML数据模型将表示层、逻辑和数据彼此分离,本发明可以实现这种灵活性,这使得每一组件可以彼此独立地由主机修改或更新。本文将解释本发明的一些主要原理,并着重论述本发明的脚本。为了有效地使用脚本语言,编剧需要理解有关本发明的属性的数据模型、有关本发明的窗体的表示层组件以及最后是脚本语言自身的性能。
脚本属性
脚本语言的主要构成块是属性。每一属性具有一个名称和值。名称用作当引用该属性时可以使用的标记。属性的名称可以是任意的长度,并由任何可打印的字符组成。然而,名称以字母或下划线开始,随后是任何级数的字母、数字或下划线,这种名称是最容易从脚本语言访问的名称。属性的名称是区分大小写的。属性名称的实例有:
Homer//this is fine
homer//this is good,but is the same name as Homer
_bart//okay,this isgood
_labc//starting with an underscore is acceptable
155 Springfield Lane//this is a valid property name as well,
//but rather difficult to access from a script
属性的值可以是几种类型中的一种。简单值的类型有整数、字符串和布尔值。这些都是最普遍使用的和要直接从脚本检查或修改的属性。
HomersHometown“Springfield”//a string property
SimpsonCount5//an integer property
HomerHungery True//a Boolean property
有许多复杂的属性,例如脚本和二进制。一般地,复杂属性的内容不能从脚本修改,但是可以移动、复制或删除复杂属性自己。二进制属性可用于图像、大的文本正文和任何具有大的数据“斑点”的地方。
最后一种属性应该得到特殊的考虑。它就是对象属性。
对象
因为对象用作其它属性的容器,所以它是唯一的。对象是唯一的,因为它用作其它实现的容器。像所有属性一样,对象具有属性名称,但是也具有“类(class)”。由类名指定的对象的类定义了某些有关对象的属性,例如缺省时包含什么属性,以及其包含哪种类型的附加属性。
参考图7,可以使用编辑器工具创建名称为“untitled”702的“表格(form)”对象701。当框架创建表格对象701时,它会添加一些不能删除或重新排序的内置属性。表格将总是具有名称为caption703的字符串属性、名称为modal704的布尔值属性、keepWhiteboard705、frozen706以及persistent707。其中每一属性控制表格的特征和行为,例如当它显示时是否应该保存其状态(如果persistent707是真),或者它应该为内部表格通信清空全局区域(如果keepWhiteboard705是假)。“form”的是对象类的一个实例,但是存在许多的类。另一个公共的类是“button”。
参考图8,实际上所有的UI窗体是恰好具有某些内置属性控制其外观的对象。按钮801具有可在任何时候调用的脚本802,按钮对象801接收下面描述的“操作”信息。
参考图9,其示出了在表格901中创建的按钮对象902。通过在另一对象的内部创建一个对象,属性不再表示为一个简单列表。现在代替表格901作为一个层级在父对象拥有每一属性的地方出现。按钮myButton902拥有名称为left908和在其下方的所有项的属性,而表格拥有名称为caption903、modal904、keepWhiteboard905、frozen906、persistent907和myButton902的属性。
除了保存,对象的其它响应性是信息处理。
信息
通信单元是一个“message”类对象。该信息具有一个源对象和一个目的对象,源对象被发送给目的对象,且通常在称为parameters的类“stream”的对象中包含一些附加信息。该parameters对象用作对请求或响应需要的信息容器。例如,如果脚本发送对“AOL”请求股票报价的信息,其发送的信息的parameters对象将具有称为“sym”的属性,其字符串值为“aol”。
参考图10,示出了一个来自服务器1001的响应。在这种情况下,parameters 1002包含称为具有股票报价的stream1003的另一“data”类对象。通过名称或指针该脚本能够单独地访问这些属性中的每一个。
信息还具有类“stream”的echo对象,其包含特别地包括在发送端想要在应答中接收的原始信息中的任何属性。这可以用于复制产生给应答接收者的请求的数据。例如,在邮件程序中,脚本可以发送“fetchBody”信息给沿信息ID作为回应传送的主机,使得当应答返回信息时,能够将响应与邮件联系,而不需要事务(transactions)的ID地图。
许多信息具有一个对应的应答信息。例如,load信息请求将返回在reply信息中的结果。类似地,save信息发送具有reply信息的完成通知。大多数脚本使用块调用等待响应,所以通常是不需要应答的名称的。然而,很多时候当发送端期望对异步请求超越缺省的应答名称,这些异步请求可能需要具体的应答名称,所以合适的脚本能够处理响应。这可以通过设定replyName属性为期望的信息名称实现。这可用于返回到对象的信号分离响应,与回应参数非常相似的是以一种很少见且常常更容易使用的方式。
运行时间根
参考图11,为了要显示的表格或要接收信息的对象,它必须具有已知的如runtime1101的对象。该运行时间是类“root”的对象,它用作所有激活对象的层级源。
兴趣的第一个对象是表格堆栈forms1102。当运行时间显示一个“form”对象时,通过将其导入表格堆栈中运行时间具有新表格的所有权。创建并显示表格的UI窗体(如果布尔值属性visible是真。)在所有已经创建窗体之后,运行时间将发送“displayed”信息给表格,所以表格能够在显示后立即执行任何动作。从这点来看,表格具有发送和结束信息的能力,只要它由运行时间控制。
services对象1103提供了能够在运行时间注册的许多特征的入口。一个由缺省提供的服务是database对象1104,它可提供持久性存储。数据库可以用于保存偏好、高分数或应该从会话到会话如用户的文件夹或地址本的其它数据。
在services1103下面的aol对象1105用作和主机连接。从服务器请求数据的信息都将以对应于请求的合适的信息名称发送到aol对象1105。例如,图10中的股票报价是发送到aol的名称为“getStockQuote”的信息的响应。
trash对象1106用作一个用于删除的属性和本地创建的对象的临时休息处。trash对象1106的内容将不会删除,直到所有脚本已经完成运行,因为删除的属性可能被另一个挂起的或封锁的脚本引用。
whiteboard对象1107也可以用作表格之间的通信的临时存储器,但是其内容的有效期由不同的结构控制。表格对象的内置属性中的一个是称为keepWhiteboard的布尔值。每当运行时间显示具有设定为假的keepWhiteboard的表格时,运行时间删除whiteboard对象1107的内容。这允许数据从表格传送到表格,只要下一个表格想要它(即keepWhiteboard是真)。
脚本概述
在终端设备上,应用程序通过表格提供多个特征和服务给用户。如上所述,表格包含UI窗体,例如文本区、选择框、弹出式菜单和按钮。通过单击按钮、改变文本或者旋转列表中的项,用户与窗体相互作用,表格需要作用在该事件上。通过发送信息给合适的窗体可以实现上述操作,但是它自身不能实现所有的事件。窗体需要具有一个对应于被接收的信息的脚本。例如,按钮接收“action”信息,当用户单击它时。如果按钮窗体具有称为action的脚本属性,那么将执行该脚本来处理“action”信息。类似地,如果该脚本发送一个“load”信息给aol以获得股票报价,则调用“reply”的应答信息发送回按钮,该按钮能够使用称为reply的脚本处响应,reply可以显示从报价例如从当前价格选择的属性。
脚本是表格的逻辑组件,该逻辑组件可赋予终端智能行为。通过在服务器上创建新的表格,并简单地通过将表格装入和显示表格,终端能够获得新的或更新的功能性。这样的灵活性缩短了终端的开发周期,并且通过在已经分布终端之后添加终端的特征集增加了它的使用期。
脚本基础
为了开始设计脚本,程序员必须熟悉表示数据、变量和表达式的约定。接下来的几段将定义语言的结构,并示出如何使用它们的简单实例。
能够再使用脚本将增加可靠性和缩短开发新特征需要的时间。然而,并不是所有的代码都写得很好,因此脚本允许像在C++中一样使用双斜线对脚本进行说明。
//This is a comment
//each comment runs until the end of the line
.simpsonKidIQs=.iq.bart+.iq.lisa //Maggie hasn’t been tested yet!
此外还有C结构的程序块说明。显著的区别是该程序块说明嵌套在脚本中。这是对C语言最大的改变。
/*This is a comment
that can span
several lines*/
/*Because block comments nest /*this comment won’t end the block*/
Instead you have to balance the end of the blocks with a closing
Comment marker.-->*/
整数、布尔值和字符串的文字值的表示如下:
.lisa.age=8 //Lisa in eight years old
.lisa.says=“I’m going to my room”//Time to do homework
.lisa.likesSchool=true //She seems to
.bart.age=Oxa //Bart is ten
.bart.says=“Ay Carumba!” //What else would he say
.bart.likesSchool=false //gonna be a rock star…
可以使用关键字newline添加回车到字符串值上。
.homer.excuse=“Doh!”& newline &“It was like that when I got here”
//The string will appear as
//Doh!
//It was like that when I got here
还可以使用字符串中的转义序列,用反斜杠‘\’后面紧跟着表示新行的‘n’、
表示跳格的‘t’或者紧跟着两位十六进制的值。
.homer.excuse=“Doh!\n\tIt was like that when I got here\x2a”
//The string will appear as:
//Doh!
//It was like that when I got here*
脚本中的语句用回车结束。在语言中没有分号。实际上,词法分析程序将关闭其经过的第一次错误的标点。然而,如果语句过长,通过输入反斜杠作为在该行的最后一个字符可以在下一行继续。
.homer.profile=“Springfield Nuclear Power Plant safety inspector”&“,bowler”&\
“,beer drinker”&“,astronaut”//that was just too much for one line totake
这对启动程序应该是足够的,但是为了访问数据我们需要了解如何沿层级中的路径得到给定的属性。
标志符和路径
脚本允许访问诸如字符串、整数和能够存储在属性中的布尔值的值,这些值存在于表格、数据库或白色书写板中。或者,可以将这些值放在临时变量中,该临时变量仅在执行脚本的过程中存在。临时变量必须以字母或下划线开头,随后可以是任意序列的字母、下划线或数字。
BartAge=10 //sets the variable BartAge to the
//integer10
_santasLittleHelper=true //the dog
Simpson5=“new band” //this is fine
5donuts=“Homer’s breakfast”//illegal,cannot begin with a digit
路径是规定层级中的属性位置的方式。周期是类似于Unix中的目录分隔符的路径分隔符。基本路径组件可以是明确的名称、指针或者名称表达式。
参考图12,Bart的年龄1204可以使用下面的表达式进行设置。
me.simpsons.Bart.age=10 //sets the age to 10
.simpsons.Bart.age=“10” //Astring automagically converts to int
.simpsons.bart.AGE=Oxa //This is 10 too
form.simpons.Bart.age=10 //an absolute path
这些表达式的每一个将Bart的年龄属性的值设置为10。第一表达式以me开始,其从包含脚本的同一对象中的路径开始。在这种情况下,表格对象theSimpsons1201包含脚本。从此往后,表格具有simpsons数据对象1202,该数据对象具有包括age1204的Bart1203。
通过从具有周期的路径表达式开始,第二表达式使用me的简写形式。第三表达式示出了路径分大小写。最后一个路径于脚本无关,但是其从表格的顶端theSimpsons1201开始。
现在考虑Bart1203中的annoy1205脚本。为了改变相对于Bart1203的Lisa1206中的属性,路径需要上移层级。可以按照下面的方式操作:
form.simpsons.Lisa.says=“Bart,quit it!”//absolute path
parent.Lisa.says=“Bart,quit it!” //backs up to simpsons first
..Lisa.says=“Bart,quit it!” //this is shorthand for parent
每个都与前面的相同,但是父类(或“..”)路径组件使路径从当前位置或者从包含该脚本的对象上升层级的一个水平,如果该路径组件看来是作为路径的第一部分。
另一种访问路径组件的方式是使用属性的指针。在路径中,使用方括号运算符作为指针的参考属性。
Form.simpsons[1].location=“Moe’s”//sets simpsons.Homer.location
form.simpsons[2].busy=true //sets simpsons.Marge.busy=True
form.simpsons[3][1]=10 //sets simpsons.Bart.age to 10
另一种访问属性的方便方式是按照使用表达式的名字。这允许脚本在运行时间在不同的属性上操作,而不必直接修改脚本。使用在一个周期或卷曲花括号之前的括弧来使用一个表达式作为路径名称。例如,从
Bart.annoy:
//.who=“marge”
parent.(.who).says=“go outside and play”//parent.marge.busy=true
//.who=“lisa”
parent{.who}.says=“leave me alone”//
还有几个表示脚本中的特定对象的前缀。下面在表中给出。
路径前缀和特定对象 | |
me or“.” | 包含脚本的对象 |
parent or“..” | 包含脚本的父对象 |
form | 包含脚本的表格 |
params | 调用脚本的信息参数对象 |
whiteboard | 用于为内部方式通信存储数据的特定位置。最近显示的表格的keepWhiteboard属性调节数据的使用期限。 |
database | 用于偏好、高分数以及会话之间的状态信息的持久存储器。 |
formstack | 包含所有当前显示的表格的对象。 |
error | 错误对象可以仅在捕捉块中参考。其包含字符串属性(信息)和整数属性(类型)。 |
eparams | 在包含回应参数的应答信息中的对象,回应参数存在于原始请求信息中。 |
services | 在运行时间中的services对象。通常是不需要的,因为VM将对其不能解析的任何路径校验services对象。 |
表达式和运算符
在脚本中最常用的运算符是计算表达式的值。应使用对大多数程序员和脚本作者都熟悉的运算符来书写表达式。可以分别使用运算符“*”、“/”、“+”和“-“来作乘法、除法、加法和减法。运算符“=”在语言中具有双重功能,既可用作赋值运算符又可用作等式运算符。
.homer.job=“nuclear engineer”//assigns a string to.homer.job
if.homer.job=“office assistant”
//this doesn’t assign“office assistant”to.homer.job
//instead,the equals operator does a case insensitive
//compare on string values
end
与C和C++不同,脚本不是一种优势类型的语言。当将一个整数赋予给一个字符串属性时,脚本会促进该整数转化为字符串。如果将表示整数的字符串值赋予给一个整数属性,那么该字符串将在赋值前转化为一个整数。如果字符串不表示基本的十个数字,那么它将作为零的整数值处理。当从布尔值转化时,字符串值为“真”和“假”,整数值为1和0。当转化为布尔值时,只有不分大小写的字符串值“假”和整数值0将作为假处理。字符串或整数的所有其它的值为真。
HalfDozen=“6” //A local variable .homer.donutsEaten=“none” //donutsEaten is a string property .homer.donutsEaten=6+halfDozen //converts to an int(6+6=12)then back to a string=”12” .homer.donutsEaten=.homer.donutsEaten+1 //now a baker’s dozen“13” .donutCount=5+“fistful more”//this is like 5+0 .homer.hungry=true // hungry is a Boolean property .homer.hungry=“true” //this converts to true .homer.hungry=1 //this is also true .homer.hungry=“false” //this is False!
如果赋值的左侧是一个不存在的属性,那么将作为表达式的表观类型创建该属性并赋予其表达式的值。
.homer.job=“safety inspector”
//only the.job property will be created.
//if.homer doesn’t exist that is always an error!
如所预期的应用优先次序的典型规则。
.doh=4+3*2 //=10
.doubleDoh=(4+3)*2 //=14
.dohAgain=6+4/2 //=8
.fuguFish=(6+4)/2 //=5
字符串串联运算符“&”对脚本是特殊的。可以使用该运算符添加字符串在另一个字符串上。
.homerSays=“D”&“oh”&“!”//“Doh!”
.homerSays=.homerSays&“We are out of donuts!”
//“Doh!We are out of donuts!”
逻辑运算符是字,而不是符号,除了逻辑非,其可以写成“not”或者“!”。
.homer.hungry=not.homerSleeping //if Homer is awake,he’s hungry
.homer.hungry=!.homerSleeping //just like I said
.homer.sleeping=.noDonuts and.remoteControlMissing
//if no donuts and can’t change the channel,he will sleep
.homer.annoyed=flander.ned.present or(.noDonuts and\
!.homerSleeping) //he is easily annoyed
比较运算符“=”试图将其运算数转换成整数,但是如果左边和右边的运算符是字符串时,它将进行不分大小写的比较。
某些运算符可以结合赋值运算符得到简单的表达式。
.Bart.playtime+=.bart.studytime //adds studytime to playtime
//same as.Bart.playtime=.Bart.playtime+.bart.studytime
此外,可以使用自加和自减运算符作为语句,但是不能在表达式上使用。
//all the sam___
.homer.donutsEaten++
++.homer.donutsEaten
.homer.donutsEaten+=1
.homer.donutsEaten=.homer.donutsEaten+1
//not legal!
.homer.donutsEaten=.donutCount--//not an expression level operator
下面以优先次序列出运算符的全部列表:
运算符 | 说明 |
() | 圆括号。更高的优先次序 |
+,-,not(same as“!”) | 加号,减号,逻辑非 |
*/% | 乘法,除法,模数 |
+- | 加法,减法 |
<><=>= | 小于,大于,小于等于,大于等于 |
=!= | 等于,不等于 |
& | 字符串串联 |
and | 逻辑与 |
or | 逻辑或 |
*=,/=,%=,+=,-=,&= | 运算赋值 |
*=,/=,%=,+=,-=,&= | 首先计算RHS然后操作赋值 |
语句运算符 | |
++.-- | 前置或后置的自加和自减 |
条件语句
脚本具有类似于其它语言的条件语句,但是其语句块需要用关键字end结束。
其语法是::
if expression
statements
end
注意:这种形式的条件语句的实例有:
if.homer.atHome
.donutCount=.donutCount-1
//decrease every time Homer returns
end
if.bart.inTrouble
.bart.location=“Principle Skinner’s Office”//just like home
.marge.grayHair=.marge.grayHair+1//might be blue hair…
end
也可以在关键字结束之前添加else子句到if语句中,如下:
if expression
statements
else
statements
end
该语法的实例有:
if.duffCount>0 .duffCount=.duffCount-1//don’t mind if I do else .homer.location=“Moe’s Tavern”//store is too far end if.lisa.homework=true .lisa.busy=“studying” //highly motivated else .lisa.busy=“playing saxophone” //and well-balanced end
脚本和C/C++中的条件语句之间的显著区别是多个布尔表达式不能是短路的。通过计算整个表达式得到的字节码比在每一布尔运算符后面使用条件转移之后插入到校验中的小得多。这意味着:
if exists(.foo)and(.foo>5)
//careful!(.foo>5)will ALWAYS be executed
//resulting in a thrown exception if it doesn’t
end
此外,可以使用下面的语法将任何数量的条件语句链接在一起:
if expression
statements
else if expression
statements
end
例如:
if.time=“5:00PM”//this works as a case-insensitive string compare
.homer.busy=“going home”
else if.time=“3:00PM”
if.homer.location=“work”
.homer.busy=“napping”
else
.homer.busy=“watching TV”
end//terminates the inner if
end//terminates the whole if/else if block
循环
脚本可提供几种结构以利于语句块的重复。第一种形式的重复按照下面的语法执行固定次数的循环:
repeat integer_expression
statements
end
一些实例有:
repeat99
.homer.drink(.duffCount)//calls the drink script99 times
end
repeat.donutCount //does NOT decrement.donutCount
.homer.eat() //calls the eat script
end
只要表达式为真或者只要表达式为假,第二中类型的循环语句将继续执行。
repeat while boolean_expression
statements
end
repeat until boolean_expression
statements
end
其实例有:
repeat while.lisa.homework
.lisa.homework=.lisa.study()
//returns false if there is no more homework
end
repeat until.quittingTime
.homer.checkNuclearSafety() //that’s what I’m here for
.homer.checkVendingMaehine () //need some pork rinds
.quittingTime=.home.checkClock()//done at 5:00
end
也许最熟悉形式的循环语句是一个使用重复变量并如下设置开始和结束的语句:
repeat with identifier=integer_expression[down]to
integer expression
statements
end
仅仅在循环的开始计算一次边界表达式。如果使用了down关键字,可以或者从更低的界限向更高的界限计算,或者从更高的界限向更低的界限计算。
.count=0 repeat with i=1 to 10 .count=.count+i//sum the numbers from 1 to 10 end foward=“Smithers” backward=“” repeat with k=length(forward)down to 1 //reverses the string backward=backward & getChar(forward,k) end //backward=“srehtimS”
类似于C或C++,也存在一些语句继续到循环的下一个重复或者完全中断循环。当结果如上时,它们可以分别是“continue”和“break”语句。它们可以在任何循环语句内部出现。
repeat with k=1 to 10
if!.lisa.homework
break;//done with study loop
else if.lisa.nextTopic()
next;//don’t study this time,just rest
end
.lisa.study()//going for straight A’s
end
最后一种类型的循环语句接触给定的对象和在其下面的所有子类所有的属性以便可选择地规定深度。如果没有规定深度选项,那么仅可以访问对象的直接子类(immediatechildren)。或者,如果需要访问在任意深度所有的嵌套属性,可以通过使用infinity关键字实现上述访问。最后,可以使用objectsOnly关键字过滤属性。这将跳过其它属性和只重复对象。
repeat with identifier in path[to depth{integer_expression/infinity}][objectsOnly]
statements
end
如果期望脚本设置所有的simpsons的.busy属性为图6中的“sleeping”。可以使用下面的循环来实现。
repeat with person in form.simpsons to depth 1 objectsOnly
//every simpson must rest
person.busy=“sleeping”
end
通过包含在表格中的所有属性是对象的注释“法”可以简化该循环,所以可以不需要过虑对象唯一性(objectsonly)。此外,因为缺省的重复深度仅仅访问起始对象的直接子类,该深度不必设定为一个单值。
//this will also put every one to sleep exactly like
//the example above.
repeat with person in form.simpsons
//every simpson must rest
person.busy=“sleeping”
end
数组
本发明提供一个数组属性,该数组属性允许有效地处理大块的同类数据。可以存储在数组中的这种类型的信息被限制为字符串、整数或布尔值。使用下面的语法可以创建数组:
create array of{int|string|bool}as path
//The type of the array is specified when it is created
path可以是一个局部变量或者是在包括要创建的数组属性的名称的层级中的期望位置的一个路径。
create array of string as form.simpsons.Homer.excuses
//creates an array of strings in the Homer objects called“excuses”
既然已经创建了数组,需要将元素添加到数组的方法。利用具有下面语法的插入语句可以实现在数组中创建新的元素:
insert expression in path at int_expression
插入语句将创建一个新的同一类型的数组元素,其值由在int_expression给出的指针处的表达式规定。该数组是一个基址的(based),而不是C/C++形式的零基址数组。因此,如果给出零作为插入的指针,那么它将得到一个附加运算。
lameExcuses=form.simpsons.Homer.excuses//save path in local var insert“I don’t know!”in lameExcuses at 1//add excuses insert“It was like that when I got here!”in lameExcuses at 1 insert“How should I know?”in lameExcuses at 2 insert“Don’t ask me.”in lameExcuses at 0//0 index does append //results in the following array //“It was like that when I got here!” //“How should I know?” //“I don’t know!” //“Don’t ask me.”
利用方括号运算符“[]”可以访问数组元素。
LameExcuses[2]=“I didn’t do it!”//replaces“How should I know”
利用下面描述的删除语句可以删除单个的数组元素。
处理多个属性和多个对象
通过计算该属性的路径可以实现访问单个属性的内容,但是如果想要移动或删除一个属性或者甚至复制整个对象会发生什么?脚本具有具体用于这些操作的多个语句。
为了删除对象、属性或者数组元素,可以使用delete语句。在属性的情况中,实际上将移动由path规定的属性或对象到垃圾对象中,直到所有的脚本完成执行。需要防止脚本链接到不再存在的属性引用上,或者更糟糕的是,当脚本删除其自身或包含有脚本的对象时需要防止出错。
delete path
delete.homer.job //removes the job property from.homer
detele form.simpsons//they are leaving Springfield
该delete运算符还能够用于数组中的元素。与删除属性不同,数组元素可以直接删除而不必放在垃圾中。使用方括号“[]”运算符来规定应该删除数组中的哪个元素。
//from the example above___
delete form.simpsons.Homer.excuses[2]
//removes“I didn’t do it!”from the array
通过指定源路径和目的路径使用copy语句将属性或对象从一个位置复制到另一个位置。复制指令的选择参数是目的名称和目的指针,其中目的名称是一个用于对在新位置的属性重命名的字符串表达式,目的指针是一个用作指针的整数表达式,在该指针处将属性插入到层级中。如果未提供目的自变量,可以使用原始属性名称。类似地,可以将属性复制到对象当前包含的所有属性后面的对象中。可以省略这些选择参数中的任何一个,但是如果省略了两个,它们就必须以示出的次序使用。
copy source_path to dest_path<as dest_name><at dest_index>
//copy the homework property to bart without changing the name
.lisa.homework to.bart
//copy the location property to homer and rename it destination
copy.donuts.location to.homer as“destination”
//copy the location property to homer as the third property
copy.donuts.location to.homer at 3
复制语句不会重写属性或对象如果其在目的对象中已经存在。在这种情况下,脚本必须在复制新属性之前删除在目的地的属性。
使用move语句将属性放置在层级中任何其它适当的地方。其语法和功能与copy语句相似,除了原始属性或对象在其从前的位置不再存在。
move source_path to dest_path<as dest_name><at dest_index>
//move the porkchop property from the microwave to homer
//renaming it as dinner
move.kitchen.microwave.porkchop to.homer as“dinner”
//the cash property will be renamed allowance and owned bv bart
move.homer.wallet.cash to.bart as“allowance”
前面三个语句每一个可以使用简单的属性(字符串、整数、布尔值、脚本或别名)或对象工作。给一个具有不存在的最终属性的路径赋值将创建一个简单属性,但是不能采用相同的方式自动产生对象。通过提供期望对象的类别名和录以及要创建的对象名称,由create语句创建对象。
create“class_name”as dest_path
//create a new button at the top level of the form
create“button”as form.newButton
//create a data object called Flanders for Ned and family
create“data”as form.neighbor.Flanders
处理长的路径可能是麻烦的并且容易出错,所以脚本的最后一个特征使编剧能够简化操作复杂的路径。通过将对象的路径赋值给一个局部变量,该变量变成一种访问包含在路径中的属性的方式。每当使用变量时可以不重新计算路径,这就提高了性能。
pet=form.Springfield.simpsons.santasLittleHelper //pet now refers to santasLittleHelper repeat.bart.freetime //bart plays with the dog when not busy pet.playtime=pet.playtime+1 <dp n="d27"/> //check to see if the pet has played enough if pet.tired() //don’t wear the little guy out break end end
简化操作具有独特的性质,在于即使将对象移动到层级中的另一点,它们也将跟随对象。
pet=form.Springfield.simpsons.santasLittleHelper //pet now refers to santasLittleHelper move pet to form as“lostPet” //now the object has been moved and renamed as lostPet if for form.Springfield.simpsons.santasLittleHelper.tired() //this object got moved so this path isn’t valid //which will throw an exception end if pet.tired()//now calls form.lostPet.tired pet.goHome() end
调用脚本和发送信息
脚本常常要处理它从窗体接收的信息,例如动作脚本处理按钮被点击或者计时器到期的信息,但是那些脚本将依靠其它脚本来执行一些工作。此外,对数据和表格的服务器请求常常以函数调用的形式编写。一种函数调用使用下面的语法:
script_path([parameters][echo echoParameters][options optionParameters])
调用脚本的动作实际上构成了一条具有调用名称的NACHOS信息,并将其发送给由路径规定的对象。
参考图11:
form.simpsons.Bart.annoy()//calls the annoy script
//which actually creates an annoy message and sends it
//to the object called“Bart”
该函数调用的最后一个组件annoy实际是脚本的名称或被发送的信息。
许多调用仅仅具有参数而没有附加的回应参数或信息选项。信息的接受者可以检验这些参数。例如,为了得到股票报价我们可以调用:
quote=aol.getStockQuote(sym:”aol”)
在上面的实例中,aol是处理信息“getStockQuote”的对象。此外,我们来看命名参数的第一个实例。函数的参数列表是一个逗号分开的表达式列表。每一表达式可以在名称之后然后是一个冒号。在这种情况下,sym是参数名称,“aol”是参数的值。实际上,可以使用作为信息对象“getStockQuote”的属性的值创建和复制每一参数,这就是为什么应该给参数命名。另一方面这允许信息的处理程序按照名称查询参数,而不是依靠在参数列表中出现的次序。如果没有提供名称,则创建一个参数作为称为“param”的属性。
另一个实例是:
database.save(path:”homerSimpson”,stream:form.simpsons.homer)
这将homer对象在数据库中保存为homerSimpson。该保存的数据库信息需要两个参数:路径,即在数据库中保存属性的录,和流:将保存的对象或属性的路径。因为已经命名了这些参数,所有能够毫无意义地颠倒次序。
database.save(stream:form.simpsons.homer,path:”homerSimpson”)
//same as the above call
一些信息需要定义附加的选项,以便规定一些事项,例如或者应该对信息加密,或者在由于系统没有接收到响应而暂停之前应该等待多长时间。可以将这些参数输入到信息的选项框中。
aol.sendPrivateMessage(dest:myBuddy,message:text,\
options encrypt:true)
这将允许本地实现在发送信息之前可以处理各个选项。只有由内核处理的选项是“timeout”,它以毫秒规定了内核在给出异常之前应该等待响应多长时间。回应参数可以用于下面讨论的异步信息。
按照值而不是按引用传送所有的简单属性(例如字符串、整数、布尔值、二进制、脚本)。通常对象可传送用作一个隐含引用的别名。修改包含在作为参数接收的对象中的属性将修改原始对象。如果包含别名的信息离开本地层级,例如发送给主机的请求,那么信息中的别名将由别名引用的对象副本替换。通常这是期望的行为,但是通过使用@运算符还能够超越这个。
//saves a copy of‘me’in the database
database.save(path:”test1”,stream:me)
//saves an alias to ‘me’in the database
database.save(path:”test2”,stream:@me)
有时对象可以具有响应信息的代码。如果该对象具有这种能够响应给定信息的本地代码,并且包含对同一信息的脚本处理程序,那么脚本处理程序将超越本地代码。假想地,本地应用程序可能具有代码处理称为shutdown()的信息,但是脚本可能用于截取该信息,并确定是否调用程序具有特权来发布这种命令。在这种情况下,在确认调用程序的特权之后,脚本可以代替效用函数passMessage(),它将在调用点取消脚本,并允许对象以其本地代码处理信息。
当别名用作信息中的参数时其具有特定的行为。如果信息的接受者对象是本地的(即对象在与和发送端相同的运行时间根的条件下存在于某处),那么别名属性将作为信息中的别名发送。因为接受者能够解析对象的别名,从而获得别名引用的对象拥有的任何属性,所以会发生这种情况。然而,如果信息被发出本地环境,那么别名属性将由其引用的对象替换。这可能导致信息的大小急剧增加,因为底层的对象和其包含的所有属性将被复制到信息中。在许多情况中,这是期望的结果,但是如果当在电线上发送时则不应该解析别名,可以使用@运算符将其标记为一个持久别名。
aol.setUpdateListener(listener:@form.proxy)//this will send an
//alias of the proxy object in the setUpdateListener message to the
//aol service,rather than an copy of the proxy object.
块调用
函数调用的缺省行为是阻塞直到函数被调用返回。这允许调用脚本直接处理脚本而不是使另一个脚本处理响应。再参考图9,股票报价的最后一个值可以使用如下的库程序debug()显示:
debug(aol.getStockQuote(sym:”aol”).stream.aol.lastValue)
debug(“finished”)
//output
//45.300000
//finished
在该最后的语句中有许多运行的程序(going on)。首先,发送getStockQuote信息给services.aol对象。脚本将等待直到在执行任何更多的语句之前响应返回。只要应答信息返回,那么后缀路径.stream.aol.lastValue可从信息的参数对象得到期望的数据。这可以使用库程序debug()显示。
异步调用
通过将反转的字async放在函数调用前面,脚本将发送信息给对象并继续执行而不是等待响应。这更像是发送信息而不是调用函数。通常这意味着另一个脚本也将处理信息的响应。使用异步发送信息并在另一脚本中处理响应的两个脚本可以创建上面的实例。
//1st script async aol.getStockQuote(sym:”aol”) debug(“finished”) //2nd script-loadComplete //contained in the same object that sent the request //handles the response message debug(params.stream.aol.lastValue) //output- //finished //45.300000
应该注意第一脚本显示“finished”而不是等待响应信息。
异步调用提出了一个在块调用中没有发现的问题:处理响应的脚本与启动请求的脚本不同。有时处理响应的脚本必须知道某些关于原始请求的信息,以便适当地处理响应。在这种情况下,回应参数有利于将信息从请求传送到响应。在回应块中被传送的任何参数将被移动到信息响应并送还。在块或回应参数之前如下使用echo关键字:
async aol.ping(payload:..data echo timestamp:myServices.time())
//a hypothetical call to ping the server.
//the response would have the timestamp parameter as an
//echo parameter.Serveral pings could be sent asynchronously
//and the response round trip time could be determined as well
//as seeing if they came out of order
应该谨慎地使用回应参数,因为所有的回应参数是在网络上来回发送的。
返回值
return语句允许脚本在到达结尾之前结束运行或者将值传送回调用程序。计算跟随return语句的任何表达式,其结果将返回到调用了当前运行脚本的脚本。
return //terminate the script
return expression //pass the value of expression back
异常处理
脚本允许程序员使用try/catch块处理脚本中的运行时间错误。其语法如下:
try
statements
catch
statements
end
在try和catch语句之间产生的任何错误将导致脚本跳出跟随catch语句的语句列表的开头。在catch块内部通过规定路径error,脚本能够引用特定的对象。该对象具有整数属性type和字符串属性message,这两个属性分别给出了错误数量和错误的简略说明。
try
//.busy will be created if it doesn’t exist,but___
.homer.busy=.homer.study
catch
//error if homer.study does not exist
//error object only accessible within a catch block
debug(“***error“&error.type&“:”&error.message)
end
库函数
VM为公共使用的特征例如字符串操作和随机数字的产生提供了一组内置的函数。这些函数的名称是不分大小写的。然而,与发送信息或代替脚本不同,这些库函数的参数不能命名,而是依靠在自变量列表中的出现次序。一些参数具有如下面具体列出的缺省值。当调用特定函数时通过包括该参数能够超越该缺省值。当存在两个缺省的参数时,使用参数的表观类型来判别哪个值正在被超越。一个实例是find()函数,其具有源字符串、搜索模式、缺省的开始位置和忽略情况的缺省布尔值。如果在调用中仅仅列出了三个参数,那么整数值将规定开始位置,而布尔值将表示不分大小写。
效用函数
Void beep(int count=1) |
int count 峰鸣的次数。缺省值:1 |
说明: 该函数将调用系统蜂鸣count次数 |
实例: beep() //将蜂鸣1次beep(3) //将蜂鸣3次 |
Void debug(string text) |
string text 要显示的文本 |
说明: 该函数将在系统窗口或调试记录中显示文本 |
实例: debug(“hello”)//输出--hellodebug(“are you”&“there”)//你在那儿吗 |
Void gotoURL(string url) |
string url 要发送的URL字符串 |
说明: 该函数将url转换为NACHOS信息,并将其发送给services.aol。该url可以规定信息的名称和其参数,但是如果url没有规定名称,它将作为装入信息进行构造。它可以用于将新的表格装入表格存储栈。 |
实例:gotoURL(“nachos://aol/quoteform”)//将表格“quoteform”装入表格存储栈gotoURL(“nachos://aol/getstockquote&sym=aol”)//发送具有“sym”的信息“getStockQuote”//参数设定为“aol” |
Void throw(string error) |
string error 正文串将从捕捉块中的错误对象获得。 |
说明: 给出了一个异常,其将取消当前的脚本和所有调用的脚本直到捕捉块处理由于该给出的异常结束了的信息或线程。通过使用error.message可以在捕捉块中获得该文本。 |
实例: throw(“you toss,you catch”) //将蜂鸣1次throw(“illegal parameter”) //将蜂鸣3次 |
void passMessage() |
说明: 结束当前脚本并传送信息,该信息产生本地对象代码的脚本。这可以用于在使对象响应具有其本地代码的信息之前过虑具有脚本的信息。 |
实例:passMessage()//让对象处理它 |
void yield() |
说明: 这允许脚本将控制转给另一个线程或让新产生的线程处理排队的用户输入。这对于设计具有无穷循环的脚本不是一个好的方法,但是将yield语句放在长的循环中将防止VM由于超过对无穷循环的时间检查而结束线程。 |
实例: yield()//让另一个脚本处理信息 |
void sleep(int milliseconds) |
说明: 这将使脚本阻塞,但是可以防止脚本超时。只要规定的时间一过,脚本将在下一个语句重新开始运行。 |
实例: sleep(1500)//块脚本持续1.5秒 |
property loadURL(string url) |
string url 要发送的URL字符串 |
说明: 该函数将url转换为NACHOS信息并将其发送给services.aol。该url可以规定信息的名称和其参数,但是如果url没有规定名称,它将作为装入信息进行构造。该调用的结果将传送回脚本。 |
实例: X=loadURL(“nachos://aol/quoteform”)//将表格“quoteform”装入变量x |
数学函数
int abs(int value) |
int value 一个整数值 |
说明: 返回自变量value的绝对值 |
实例: abs(val)//如果val=3,返回3abs(val)//如果val=-3,返回3 |
int min(int valA,int valB,…) |
int valA 一个整数值int valB 一个整数值int… 附加整数值 |
说明: 从集合valA,valA,….中返回最小值 |
实例: min(2,7) //返回2min(0,5,3-1)//返回-1 |
int max(int valA,int valB,…) |
int valA 一个整数值int valB 一个整数值int… 附加整数值 |
说明: 从集合valA,valA,….中返回最大值 |
实例: max(2,7) //返回7max(0,5,3-1)//返回5 |
int random(int min=1,int max) |
int min 对随机返回范围规定最小值的整数。如果省略,缺省值为1。int max 返回随机的最大值 |
说明: 返回在min和max之间的随机值,包括min和max |
实例: random(100)//返回1-100中的一个值,包括1和100random(10,20)//返回10-20中的一个值,包括10和20 |
int pin(int value,int min,int max) |
int value 一个整数值int min 值的下限int max 值的上限 |
说明: 如果value小于min返回min,如果value大于max或其它值返回max。 |
实例: pin(7,1,10) //returns7pin(7,10,20)//returns10 |
int power(int value,int exponent) |
int value 一个整数值int exponent用作指数的整数 |
说明: 返回增加exponent的value |
实例: power(2,3)//返回2^3=8power(3,4)//返回3^4=81 |
属性函数
Int propertyCount(path property) |
path 在层级或数组中的路径属性property |
说明: 返回包含在对象顶层中的属性的数量,如果property没有规定对象返回property或0。这不能递归地计算由其它对象包含在property中的所有属性。如果自变量是一个数组,propertyCount返回数组中元素的数量。 |
实例: propertyCount(form.data)//返回包含在form.data中的属性的数量。propertyCount(form.myArray)//返回在form.myArray中的元素的数量。 |
Int count(path property) |
path property在层级或数组中的路径属性 |
说明: 该函数与propertyCount()相同。可参考上面。 |
实例: count(form.data)//返回包含在form.data中的属性的数量。count(form.myArray)//返回在form.myArray中的元素的数量。 |
Int indexOf(path property) |
path property 在层级中的路径属性 |
说明: 返回包含指针的对象中的属性指针。如果属性没有父类,则返回0。 |
实例: indexOf(form.persistent)//返回5(持久性是一个内置的表格属性) |
string className(path objectProperty) |
path property 在层级中的路径属性 |
说明: 返回对象的类别名。如果产生不是一个对象,则该函数返回一个空的字符串。 |
实例: className(me)//返回包含脚本(例如“button”)的对象的类别名 |
Bool exists(path property) |
path property 在层级中的路径属性 |
说明: 如果property涉及层级中的一个有效属性则返回真,否则返回假。 |
实例: exists(form.data.mine)//这存在吗? |
bool isObject(path property) |
path property 在层级中的路径属性 |
说明: 如果property引用了一个对象属性,则返回真,否则如果它是任何其它类型的属性,则返回假。应该注意如果不存在property,该函数将导致异常 |
实例: isObject(me.child)//这是属性吗? |
string name(path property) |
path property 在层级中的路径属性 |
说明: 返回path属性的名称而不是它的值 |
实例: name(parent)//返回脚本的父对象的名称。包含当前脚本的对象是‘me’name(me.data[2])//返回包含在‘me’的数据对象中的第二属性的名称 |
void rename(path property,string newName) |
path property 在层级中的路径属性string newName 属性的新名称 |
说明: 试图改变路径property的名称为newName |
实例: rename(me,.caption)//将包含脚本的对象改名为包含在.caption中的字符串rename(me.data[2],“foo”)//将包含在‘me’的数据对象中的第二属性改名为“foo” |
字符串函数
不同于C/C++的库函数,在本库中的函数不能修改源字符串,且所有的指针是1基址的而不是0基址的,函数返回操作的结果,但是不改变地保留原始自变量。在许多情况中需要将结果赋值回到源字符串。
(e.g..foo=replace(.foo,“apples”,“oranges”))
int length(string src) |
string src字符串值 |
说明: 返回src包含的字符的数量 |
实例: length(“Apple”)//返回5ength(“Bart and Lisa”)//返回13 |
string Upper(string src) |
string src字符串值 |
说明: 返回src同时将小写字符转换为大写字符 |
实例: upper(“Marge”) //返回“MARGE”upper(“Bart and Lisa”)//返回“BART AND LISA” |
string Lower(string src) |
string src字符串值 |
说明: 返回src同时将大写字符转换为小写字符 |
实例: lower(“Marge”) //返回“marge”lower(“Bart and Lisa”)//返回“bart and lisa” |
string substring(string src,int start,int count) |
string src字符串值int start 子串的第一个字符的指针int count 子串中的字符数量 |
说明: 返回在start开始的src子串,其包含count字符 |
实例: substring(“Homer eats Nachos”,7,4)//返回“eats”substring(“Bart and Lisa”,1,4) //返回“Bart” |
string getWord(string src,int n=1,string delim=<whitespace>) |
string src 字符串值int n 在源字符串中期望字的指针string delim 用于在源字符串中定义字的字符集合 |
说明: 返回由在delim中出现的任一字符分隔的src中的第n个字 |
实例: getWord(“the middle part”,2) //返回“middle”getWord(“Bart and Lisa”,2,“a”)//返回“rt”getWord(“Another sample”) //返回“Another” |
string removeWord(string src,int n=1,string delim=<whitespace>) |
string src 字符串值int n 在源字符串中期望字的指针string delim 用于定义源字符串中的字的字符集合 |
说明: 返回字符串src,同时删除第n个字和其结尾的分隔字符(delim.) |
实例: RemoveWord(“the middle part”,2) //返回“thepart”removeWord(“Bart and Lisa”,2,“a”)//返回“Band Lisa”removeWord(“Another sample”) //返回“sample” |
int countWords(string src,string delim=<whitespace>) |
string src 字符串值string delim 用于定义源字符串中的字的字符集合 |
说明: 返回由在delim中出现的任一字符分隔的src中字的数量 |
实例:CountWords(“Bart and Lisa”) //返回3countWords(“Bart and Lisa”,“a”)//返回4//the words would be“B”,“rt”,“nd”,&“Lis” |
string insertString(string src,int n,string addStr) |
string src 字符串值int n src的指针,并在此插入addStrstring addStr 插入到src中的字符串 |
说明: 返回由插入到在第n个字符开始的src中的addStr组成的字符串 |
实例: insertString(“Homer likes Nachos”,6,“really”)//返回“Homer really likes Nachos”insertString(“Bart and Lisa”,2,“a”)//返回“B aart and Lisa” |
string remove(string src,int start,int count) |
string src 字符串值int start 要删除的第一个字符的指针int count 要删除的字符的数量 |
说明: 返回字符串src,同时删除了在start开始的count字符 |
实例: remove“Homer really likes Nachos”,6,7)//返回“Homer likes Nachos”remove(“Spring in the field”,7,8)//返回“Springfield” |
string getChar(string src,int n) |
string src 字符串值int n 在src中期望字符的指针 |
说明: 返回src中的第n个字符 |
实例: getChar(“Homer likes Nachos”,13)//返回“N”getChar(“Bart and Lisa”,10) //返回“L” |
string setChar(string src,int n,string char) |
string src 字符串值Int n 在src中期望字符的指针String char 在n设定的新字符 |
说明: 返回具有第n个字符被设定为char的第一个字符的src。为char传送一个零值长度将有效地从src删除一个字符。 |
实例: setChar(“Homer likes Nachos”,13,“M”)//返回“Homer likes Machos”setChar(“Bart and lisa”,10, “L”)//返回“Bart and Lisa” |
string removeTrailing(string src,string pattern,boolignoreCase=true) |
string src 字符串值string pattern 要删除的搜索模式 |
bool ignoreCase使搜索不分大小写的布尔值 |
说明: 返回删除了pattern的所有结尾值的src |
实例: removeTrailing(“Homer says,DOHdohdoh”,“doh”)//返回“Homer says,”removeTrailing(“Homer says,DOHdohdoh”,“doh”,false)//返回“Homer says,DOH” |
string removeLeading(string src,string pattern,boolignoreCase=true) |
string src 字符串值string pattern 要删除的搜索模式bool ignoreCase使搜索不分大小写的布尔值 |
说明: 返回删除了pattern的所有开头值的src |
实例: removeLeading(“DOHdohdoh,said Homer”,“DOH”)//返回“,said Homer”removeLeading(“DOHdohdoh,said Homer”,“DOH”,false)//返回“dohdoh,said Homer” |
int compare(string srcA,string srcB,bool ignoreCase=true) |
string srcA 字符串值string srcB 要和srcA比较的字符串bool ignoreCase 使搜索不分大小写的布尔值 |
说明: 如果srcA小于srcB则返回0,如果srcA大于srcB则返回大于0,如果两个字符串相等则返回0。使用“=”运算符可以对不分大小写的比较执行速记格式。 |
实例: compare(“HOMER”,“homer”)//返回0//如果布尔值是可接受的,那么这与“HOMER”=“homer”相同compare(“HOMER”,“homer”,false)//返回<0compare(“homer”,“HOMER”,false)//返回>0 |
int find(string src,string pattern,int n=1,boolignoreCase=true) |
string src 字符串值string pattern 搜索模式int n 开始搜索的字符指针bool ignoreCase 使搜索不分大小写的布尔值 |
说明: 返回在src中src的第n个字符开始或之后的pattern第一次出现的指针。 |
实例: find(“Homer lives in Springfield”,“spring”)//返回16find(“Homer lives in Springfield”,“spring”,false)//返回0find(“Homer eats donuts for dinner”,“er”,10)//返回27(“er”在dinner中) |
bool startsWith(string src,string pattern,boolignoreCase=true) |
string src 字符串值string pattern 搜索模式bool ignoreCase 使搜索不分大小写的布尔值 |
说明: 如果src以pattern开始则返回真,否则为假。 |
实例: startsWith(“Homer lives in Springfield”,“homer”)//返回真startsWith(“Homer lives in Springfield”,“homer”,false)//返回假 |
bool endsWith(string src,string pattern,bool ignoreCase=true) |
string src 字符串值string pattern 搜索模式bool ignoreCase 使搜索不分大小写的布尔值 |
说明: 如果src以pattern结束则返回真,否则为假。 |
实例: endsWith(“Homer lives in Springfield”,“FIELD”)//返回真endsWith(“Homer lives in Springfield”,“FIELD”,false)//返回假 |
int replace(string src,string pattern,string replace,boolignoreCase=true) |
string src 字符串值string pattern 搜索模式string replace 替换第一次出现的pattern的字符串bool ignoreCase 使搜索不分大小写的布尔值 |
说明: 返回src,同时用字符串replace替换第一次出现的pattern |
实例: replace(“DOH doh doh!”,“o”,“*”)//回“D*H doh doh!”replace(“DOH doh doh!”,“o”,“*”,FALSE)//返回“DOH d*h doh!” |
Int replaceAll(string src,string pattern,string replace,boolignoreCase=true) |
string src 字符串值string pattern 搜索模式string replace 替换任何出现的pattern的字符串bool ignoreCase 使搜索不分大小写的布尔值 |
说明: 返回src同时用字符串replace替换所有出现的pattern |
实例:replace(“DOH doh doh!”,“o”,“*”)//返回“D*H d*h d*h!”replace(“DOH doh doh!”,“o”,“*”,FALSE)//返回“DOH d*h d*h!” |
尽管这里参考优选实施例描述了本发明,但是本领域技术人员将容易理解在不脱离本发明的精神的条件下,其它应用程序可以代替这里描述的那些应用程序。因此,本发明应该只由下面包括的权利要求限定。
Claims (30)
1.一种用于终端系统的框架结构的方法。其包括以下步骤:
提供一个服务器代理终端;
在所述服务器代理终端上提供装置,用于接收来自终端系统的终端信息请求;
在所述服务器代理终端上提供服务器确定装置,用于确定适当的服务器以服务所述终端请求;
发送所述终端请求给所述适当的服务器;
接收对所述终端请求的所述适当服务器的响应;
其中所述服务器代理终端用作所述终端系统的代理终端,对所述终端系统进行大量的数据处理;
其中所述服务器代理终端使用通用的数据表格更新具有数据、表示层和逻辑组件的所述终端系统;
其中所述服务器代理终端将原始数据与所述响应的表示层方面分离,并将所述数据导入所述通用的数据表格中;
发送所述数据给所述终端系统;
其中所述服务器代理终端接收表示层和逻辑组件更新;以及
其中所述表示层组件更新适用于特殊类型的终端设备。
2.如权利要求1所述的方法,其中所述逻辑组件更新在不同类型的终端设备之间共享。
3.如权利要求1所述的方法,还包括以下步骤:
在所述终端系统上提供一个单级后台缓存;以及
其中所述终端系统对有关用户请求的任何表示层或逻辑组件校验所述单级后台缓存;
其中如果有关用户请求的任何组件在所述单级后台缓存中存在,那么所述终端系统校验所述组件是否已经到期;
其中所述终端系统使用所述组件服务该用户请求。
4.如权利要求3所述的方法,其中如果所述组件已经到期,则所述终端系统从所述服务器代理终端请求任何当前版本的到期组件,其中所述服务器代理终端校验请求终端的表示层和逻辑组件的当前版本,如果表示层和逻辑组件中的任何一个需要更新,则所述服务器代理终端检索最新版本的表示层和逻辑组件中的任何一个,并将其发送给请求终端,以及其中请求终端在所述单级后台缓存中存储最新版本的表示层和逻辑组件中的任何一个。
5.如权利要求1所述的方法,还包括以下步骤:
发送所述表示层和逻辑组件更新给一个终端系统。
6.如权利要求1所述的方法,其中所述终端系统使用所述数据和表示层组件创建给用户的显示。
7.如权利要求1所述的方法,其中为了其它的显示目的所述终端系统重新使用所述数据组件。
8.如权利要求1所述的方法,还包括以下步骤:
在所述服务器代理终端上提供装置,用于将终端系统的状态保存在存储设备上;以及
其中当终端系统改变了与所述服务器代理终端的连接方法或者丧失了与所述服务器代理终端的覆盖率时,保存的终端系统的状态允许所述服务器代理终端继续终端系统的会话。
9.如权利要求1所述的方法,还包括以下步骤:
提供一种脚本语言;
其中所述逻辑组件更新用所述脚本语言编写;
其中所述服务器代理终端将用所述脚本语言编写的脚本编译成可执行的字节码;
其中所述服务器代理终端通过发送可执行字节码给所述终端系统更新所述终端系统的特征;以及
其中所述终端系统执行响应用户输入的所述可执行字节码。
10.如权利要求9所述的方法,其中使用所述脚本语言终端系统的表示层方面是可控制的。
11.如权利要求1所述的方法,其中在所述服务器代理终端和所述终端系统之间的通信是通过XML数据流的二进制编码。
12.一种用于动态配置终端系统的方法,其包括以下步骤:
提供一个主机服务器;
提供一种脚本语言;
其中所述主机服务器将用所述脚本语言编写的脚本编译成可执行字节码;
其中当所述主机服务器从终端系统接收到特定于数据表示层组件和/或可执行字节码的请求时,校验是否终端系统的原始表示层组件和/或可执行字节码已经到期:
其中如果在终端系统上的原始表示层组件和/或可执行字节码已经到期,通过将更新的表示层组件和/或可执行字节码发送给终端系统,所述主机服务器更新终端系统的特征,;以及
其中终端系统执行响应用户输入的表示层组件和/或可执行字节码。
13.如权利要求12所述的方法,其中所述脚本定义程序逻辑。
14.如权利要求12所述的方法,其中所述脚本创建和控制用户界面显示。
15.如权利要求12所述的方法,其中所述终端系统接收来自被分离成数据和表示层组件的所述主机服务器的被请求的网络信息。
16.一种用于终端系统的框架结构的装置,包括:
一个服务器代理终端;
在所述服务器代理终端上的装置,用于接收来自终端系统的终端信息请求;
在所述服务器代理终端上的服务器确定装置,用于确定适当的服务器以服务所述终端请求;
用于发送所述终端请求给所述适当的服务器的模块;
用于接收对所述终端请求的所述适当服务器的响应的模块;
其中所述服务器代理终端用作所述终端系统的代理终端,对所述终端系统进行大量的数据处理;
其中所述服务器代理终端使用通用的数据表格更新具有数据、表示层和逻辑组件的所述终端系统;
其中所述服务器代理终端将原始数据与所述响应的表示层方面分离,并将所述数据导入所述通用的数据表格中;
用于发送所述数据给所述终端系统的模块;
其中所述服务器代理终端接收表示层和逻辑组件更新;以及
其中所述表示层组件更新适用于特殊类型的终端设备。
17.如权利要求16所述的装置,其中所述逻辑组件更新在不同类型的终端设备之间共享。
18.如权利要求16所述的装置,其还包括:
在所述终端系统上的单级后台缓存;以及
其中所述终端系统对有关用户请求的任何表示层或逻辑组件校验所述单级后台缓存;
其中如果有关用户请求的任何组件在所述单级后台缓存中存在,那么所述终端系统校验所述组件是否已经到期;
其中所述终端系统使用所述组件服务该用户请求。
19.如权利要求18所述的装置,其中如果所述组件已经到期,则所述终端系统从所述服务器代理终端请求任何当前版本的到期组件,其中所述服务器代理终端校验请求终端的表示层和逻辑组件的当前版本,如果表示层和逻辑组件中的任何一个需要更新,则所述服务器代理终端检索最新版本的表示层和逻辑组件中的任何一个,并将其发送给请求终端,以及其中请求终端在所述单级后台缓存中存储最新版本的表示层和逻辑组件中的任何一个。
20.如权利要求16所述的装置,其还包括:
用于将所述表示层和逻辑组件发送给终端系统的模块。
21.如权利要求16所述的装置,其中所述终端系统使用所述数据和表示层组件创建给用户的显示。
22.如权利要求16所述的装置,其中为了其它的显示目的所述终端系统重新使用所述数据组件。
23.如权利要求16所述的装置,其还包括:
在所述服务器代理终端上的装置,用于将终端系统的状态保存在存储设备上;以及
其中当终端系统改变了与所述服务器代理终端的连接方法或者丧失了与所述服务器代理终端的覆盖率时,保存的终端系统的状态允许所述服务器代理终端继续终端系统的会话。
24.如权利要求16所述的装置,其还包括:
一种脚本语言;
其中所述逻辑组件更新用所述脚本语言编写;
其中所述服务器代理终端将用所述脚本语言编写的脚本编译成可执行的字节码;
其中所述服务器代理终端通过发送可执行字节码给所述终端系统更新所述终端系统的特征;以及
其中所述终端系统执行响应用户输入的所述可执行字节码。
25.如权利要求24所述的装置,其中使用所述脚本语言终端系统的表示层方面是可控制的。
26.如权利要求16所述的装置,其中在所述服务器代理终端和所述终端系统之间的通信是通过XML数据流的二进制编码。
27.一种用于动态配置终端系统的装置,其包括:
一个主机服务器;
一种脚本语言;
其中所述主机服务器将用所述脚本语言编写的脚本编译成可执行字节码;
其中当所述主机服务器从终端系统接收到特定于数据表示层组件和/或可执行字节码的请求时,校验是否终端系统的原始表示层组件和/或可执行字节码已经到期:
其中如果在终端系统上的原始表示层组件和/或可执行字节码已经到期,通过将更新的表示层组件和/或可执行字节码发送给终端系统,所述主机服务器更新终端系统的特征,;以及
其中终端系统执行响应用户输入的表示层组件和/或可执行字节码。
28.如权利要求27所述的装置,其中所述脚本定义程序逻辑。
29.如权利要求27所述的装置,其中所述脚本创建和控制用户界面显示。
30.如权利要求27所述的装置,其中所述终端系统接收来自被分离成数据和表示层组件的所述主机服务器的被请求的网络信息。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/195,903 US20040015537A1 (en) | 2002-07-15 | 2002-07-15 | Handheld client framework system |
US10/195,903 | 2002-07-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1669018A true CN1669018A (zh) | 2005-09-14 |
Family
ID=30115024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA03816776XA Pending CN1669018A (zh) | 2002-07-15 | 2003-06-16 | 手持终端框架系统 |
Country Status (7)
Country | Link |
---|---|
US (2) | US20040015537A1 (zh) |
EP (1) | EP1522025A4 (zh) |
JP (1) | JP2005533312A (zh) |
CN (1) | CN1669018A (zh) |
AU (1) | AU2003251534A1 (zh) |
CA (1) | CA2489587A1 (zh) |
WO (1) | WO2004008332A1 (zh) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2002258769A1 (en) | 2001-04-09 | 2002-10-21 | America Online Incorporated | Server-based browser system |
US20040015537A1 (en) * | 2002-07-15 | 2004-01-22 | Richard Doerksen | Handheld client framework system |
EP1406183A3 (en) * | 2002-10-01 | 2004-04-14 | Sap Ag | Method and system for refreshing browser pages |
US7191431B2 (en) * | 2002-12-20 | 2007-03-13 | International Business Machines Corporation | System and method for selecting a translator to translate a component request using semantic typing |
US20050183003A1 (en) * | 2004-02-17 | 2005-08-18 | Checkpoint Software Technologies Ltd. | Automatic proxy form filing |
US7685230B2 (en) * | 2004-04-01 | 2010-03-23 | Vaakya Technologies Private Limited | System and method for program execution |
JP2005339520A (ja) * | 2004-04-26 | 2005-12-08 | Ricoh Co Ltd | サービス提供装置、サービス提供プログラム、記録媒体及びサービス提供方法 |
US20050256923A1 (en) * | 2004-05-14 | 2005-11-17 | Citrix Systems, Inc. | Methods and apparatus for displaying application output on devices having constrained system resources |
US8099713B2 (en) * | 2005-01-18 | 2012-01-17 | Siemens Aktiengesellschaft | Program system, and method and system arrangement for configuring it |
US7509649B2 (en) * | 2005-03-03 | 2009-03-24 | Research In Motion Limited | System and method for conversion of generic services' applications into component based applications for devices |
EP1698984A1 (en) * | 2005-03-03 | 2006-09-06 | Research In Motion Limited | System and method for conversion of WEB services' applications into component based applications for mobile devices |
US7814404B2 (en) * | 2005-03-03 | 2010-10-12 | Research In Motion Limited | System and method for applying workflow of generic services to component based applications for devices |
US7924884B2 (en) * | 2005-12-20 | 2011-04-12 | Citrix Systems, Inc. | Performance logging using relative differentials and skip recording |
US7512408B2 (en) | 2006-02-16 | 2009-03-31 | Softwired Ag | Scalable wireless messaging system |
US7739391B2 (en) | 2006-02-16 | 2010-06-15 | Softwired Ag | Gateway for wireless mobile clients |
US20070203973A1 (en) * | 2006-02-28 | 2007-08-30 | Microsoft Corporation | Fuzzing Requests And Responses Using A Proxy |
JP2007272872A (ja) * | 2006-03-08 | 2007-10-18 | Ricoh Co Ltd | 情報検索方法、情報検索装置、情報検索システム、及び情報検索プログラム |
JP4876969B2 (ja) * | 2007-02-26 | 2012-02-15 | ソニー株式会社 | 画像処理システム、情報処理装置、画像処理方法、及びプログラム |
EP2096140A1 (en) | 2008-02-29 | 2009-09-02 | Cytec S.r.l. | Powder compositions |
US9588803B2 (en) | 2009-05-11 | 2017-03-07 | Microsoft Technology Licensing, Llc | Executing native-code applications in a browser |
US20100293618A1 (en) * | 2009-05-12 | 2010-11-18 | Microsoft Corporation | Runtime analysis of software privacy issues |
US9323921B2 (en) | 2010-07-13 | 2016-04-26 | Microsoft Technology Licensing, Llc | Ultra-low cost sandboxing for application appliances |
KR20120067858A (ko) * | 2010-12-16 | 2012-06-26 | 한국전자통신연구원 | 모바일 웹 어플리케이션을 네이티브 어플리케이션으로 변환하는 방법 및 이러한 방법을 사용하는 장치 |
US8903705B2 (en) | 2010-12-17 | 2014-12-02 | Microsoft Corporation | Application compatibility shims for minimal client computers |
US9495183B2 (en) | 2011-05-16 | 2016-11-15 | Microsoft Technology Licensing, Llc | Instruction set emulation for guest operating systems |
US20130054734A1 (en) * | 2011-08-23 | 2013-02-28 | Microsoft Corporation | Migration of cloud applications between a local computing device and cloud |
US9413538B2 (en) | 2011-12-12 | 2016-08-09 | Microsoft Technology Licensing, Llc | Cryptographic certification of secure hosted execution environments |
US9389933B2 (en) | 2011-12-12 | 2016-07-12 | Microsoft Technology Licensing, Llc | Facilitating system service request interactions for hardware-protected applications |
CN104363275B (zh) * | 2011-12-29 | 2018-01-16 | 北京奇虎科技有限公司 | 一种代理处理数据的方法、装置和系统 |
CN102571947B (zh) * | 2011-12-29 | 2015-01-14 | 奇智软件(北京)有限公司 | 一种代理处理数据的方法、装置和系统 |
US11265673B2 (en) * | 2012-06-15 | 2022-03-01 | Qualcomm Incorporated | Client access to mobile location services |
US9578115B2 (en) | 2012-06-15 | 2017-02-21 | Qualcomm Incorporated | Indoor location server provision and discovery |
US10419890B2 (en) | 2012-06-15 | 2019-09-17 | Qualcomm Incorporated | Client access to mobile location services |
US9454464B2 (en) * | 2012-08-08 | 2016-09-27 | Cbs Interactive Inc. | Application development center testing system |
US9940610B1 (en) * | 2013-02-15 | 2018-04-10 | Amazon Technologies, Inc. | Payments portal |
CN105229990B (zh) * | 2014-04-29 | 2018-10-30 | 华为技术有限公司 | 加载网页的方法和装置 |
US9953018B2 (en) * | 2015-05-01 | 2018-04-24 | Microsoft Technology Licensing, Llc | Transfer of content between documents of different storage types |
US11233867B2 (en) * | 2017-03-13 | 2022-01-25 | Microsoft Technology Licensing, Llc | On-demand push notification mechanism |
CN111045832B (zh) * | 2019-11-13 | 2022-09-30 | 烽火通信科技股份有限公司 | 一种软件死循环或阻塞监控的方法及系统 |
Family Cites Families (113)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5726984A (en) * | 1989-01-31 | 1998-03-10 | Norand Corporation | Hierarchical data collection network supporting packetized voice communications among wireless terminals and telephones |
US5940771A (en) * | 1991-05-13 | 1999-08-17 | Norand Corporation | Network supporting roaming, sleeping terminals |
US6122403A (en) * | 1995-07-27 | 2000-09-19 | Digimarc Corporation | Computer system linked by using information in data objects |
US5812865A (en) * | 1993-12-03 | 1998-09-22 | Xerox Corporation | Specifying and establishing communication data paths between particular media devices in multiple media device computing systems based on context of a user or users |
US5694546A (en) * | 1994-05-31 | 1997-12-02 | Reisman; Richard R. | System for automatic unattended electronic information transport between a server and a client by a vendor provided transport software with a manifest list |
US5574979A (en) * | 1994-06-03 | 1996-11-12 | Norand Corporation | Periodic interference avoidance in a wireless radio frequency communication system |
US6192365B1 (en) * | 1995-07-20 | 2001-02-20 | Novell, Inc. | Transaction log management in a disconnectable computer and network |
CA2162188C (en) * | 1995-11-06 | 1999-05-25 | Harold Jeffrey Gartner | Location transparency of distributed objects over multiple middlewares |
FR2742892B1 (fr) * | 1995-12-21 | 1998-02-13 | Bull Sa | Systeme de protection de logiciel pour ordinateur ecrit en langage interprete |
US5748896A (en) * | 1995-12-27 | 1998-05-05 | Apple Computer, Inc. | Remote network administration methods and apparatus |
US5706431A (en) * | 1995-12-29 | 1998-01-06 | At&T | System and method for distributively propagating revisions through a communications network |
US5754173A (en) * | 1996-02-28 | 1998-05-19 | Sun Microsystems, Inc. | Method and system for creating user interface independent programs with a user interface provider |
US6009458A (en) * | 1996-05-09 | 1999-12-28 | 3Do Company | Networked computer game system with persistent playing objects |
US6074434A (en) * | 1996-06-07 | 2000-06-13 | International Business Machines Corporation | Selection of code updates, data updates or new data for client |
US5857201A (en) * | 1996-06-18 | 1999-01-05 | Wright Strategies, Inc. | Enterprise connectivity to handheld devices |
US6161128A (en) * | 1996-08-14 | 2000-12-12 | Telcordia Technologies, Inc. | Internet based service control system allows telecommunications subscriber modifies telecommunications services through an internet gateway |
EP0827098A3 (en) | 1996-08-19 | 2003-03-19 | International Business Machines Corporation | Device independent and transfer optimized interactive client-server dialog system |
US5999965A (en) * | 1996-08-20 | 1999-12-07 | Netspeak Corporation | Automatic call distribution server for computer telephony communications |
US6202023B1 (en) * | 1996-08-22 | 2001-03-13 | Go2 Systems, Inc. | Internet based geographic location referencing system and method |
US6012083A (en) * | 1996-09-24 | 2000-01-04 | Ricoh Company Ltd. | Method and apparatus for document processing using agents to process transactions created based on document content |
US5721827A (en) * | 1996-10-02 | 1998-02-24 | James Logan | System for electrically distributing personalized information |
US5950010A (en) * | 1996-11-25 | 1999-09-07 | J.D. Edwards World Source Co. | System and method for customized application package building and installation |
US6081262A (en) * | 1996-12-04 | 2000-06-27 | Quark, Inc. | Method and apparatus for generating multi-media presentations |
US5948066A (en) * | 1997-03-13 | 1999-09-07 | Motorola, Inc. | System and method for delivery of information over narrow-band communications links |
US6199096B1 (en) * | 1997-03-14 | 2001-03-06 | Efusion, Inc. | Method and apparatus for synchronizing information browsing among multiple systems |
US6023714A (en) * | 1997-04-24 | 2000-02-08 | Microsoft Corporation | Method and system for dynamically adapting the layout of a document to an output device |
US6161123A (en) | 1997-05-06 | 2000-12-12 | Intermec Ip Corporation | Providing reliable communication over an unreliable transport layer in a hand-held device using a persistent session |
US5907678A (en) * | 1997-05-07 | 1999-05-25 | International Business Machines Corporation | Client/server system in which protocol caches for multiple sessions are selectively copied into a common checkpoint cache upon receiving a checkpoint request |
US5909569A (en) | 1997-05-07 | 1999-06-01 | International Business Machines | Terminal emulator data stream differencing system |
US6061714A (en) * | 1997-05-07 | 2000-05-09 | International Business Machines Corporation | Persistent cache synchronization and start up system |
WO1998058476A1 (en) * | 1997-06-17 | 1998-12-23 | Telecom Wireless Solutions, Inc. | System and process for allowing wireless messaging |
CA2210755C (en) * | 1997-07-17 | 2003-12-23 | Ibm Canada Limited - Ibm Canada Limitee | Creating proxies for distribution of beans and event objects |
US6199068B1 (en) * | 1997-09-11 | 2001-03-06 | Abb Power T&D Company Inc. | Mapping interface for a distributed server to translate between dissimilar file formats |
CA2276169C (en) * | 1997-10-27 | 2005-03-22 | Baker Hughes Incorporated | Downhole cutting separator |
US6128621A (en) * | 1997-10-31 | 2000-10-03 | Oracle Corporation | Apparatus and method for pickling data |
US6535913B2 (en) * | 1997-10-31 | 2003-03-18 | Selectica, Inc. | Method and apparatus for use of an application state storage system in interacting with on-line services |
US6128624A (en) * | 1997-11-12 | 2000-10-03 | Ncr Corporation | Collection and integration of internet and electronic commerce data in a database during web browsing |
US6151601A (en) * | 1997-11-12 | 2000-11-21 | Ncr Corporation | Computer architecture and method for collecting, analyzing and/or transforming internet and/or electronic commerce data for storage into a data storage area |
US5999179A (en) * | 1997-11-17 | 1999-12-07 | Fujitsu Limited | Platform independent computer network management client |
US6788315B1 (en) * | 1997-11-17 | 2004-09-07 | Fujitsu Limited | Platform independent computer network manager |
US6151584A (en) * | 1997-11-20 | 2000-11-21 | Ncr Corporation | Computer architecture and method for validating and collecting and metadata and data about the internet and electronic commerce environments (data discoverer) |
US6167441A (en) * | 1997-11-21 | 2000-12-26 | International Business Machines Corporation | Customization of web pages based on requester type |
US6185685B1 (en) * | 1997-12-11 | 2001-02-06 | International Business Machines Corporation | Security method and system for persistent storage and communications on computer network systems and computer network systems employing the same |
EP0926608B1 (en) | 1997-12-24 | 2004-03-10 | Nortel Networks Limited | Distributed persistent storage for intermittently connected clients |
US6012098A (en) * | 1998-02-23 | 2000-01-04 | International Business Machines Corp. | Servlet pairing for isolation of the retrieval and rendering of data |
US6857102B1 (en) | 1998-04-07 | 2005-02-15 | Fuji Xerox Co., Ltd. | Document re-authoring systems and methods for providing device-independent access to the world wide web |
US6247048B1 (en) * | 1998-04-30 | 2001-06-12 | Openwave Systems Inc | Method and apparatus for transcoding character sets between internet hosts and thin client devices over data networks |
US6189102B1 (en) * | 1998-05-27 | 2001-02-13 | 3Com Corporation | Method for authentication of network devices in a data-over cable system |
US6253326B1 (en) * | 1998-05-29 | 2001-06-26 | Palm, Inc. | Method and system for secure communications |
US6397259B1 (en) * | 1998-05-29 | 2002-05-28 | Palm, Inc. | Method, system and apparatus for packet minimized communications |
US6300947B1 (en) * | 1998-07-06 | 2001-10-09 | International Business Machines Corporation | Display screen and window size related web page adaptation system |
US6182142B1 (en) * | 1998-07-10 | 2001-01-30 | Encommerce, Inc. | Distributed access management of information resources |
US6195680B1 (en) * | 1998-07-23 | 2001-02-27 | International Business Machines Corporation | Client-based dynamic switching of streaming servers for fault-tolerance and load balancing |
US6119147A (en) * | 1998-07-28 | 2000-09-12 | Fuji Xerox Co., Ltd. | Method and system for computer-mediated, multi-modal, asynchronous meetings in a virtual space |
US6269380B1 (en) | 1998-08-31 | 2001-07-31 | Xerox Corporation | Property based mechanism for flexibility supporting front-end and back-end components having different communication protocols |
EP0996058A1 (en) | 1998-10-19 | 2000-04-26 | International Business Machines Corporation | Improved presentation scheme for communication between user stations and application programs |
US6477543B1 (en) * | 1998-10-23 | 2002-11-05 | International Business Machines Corporation | Method, apparatus and program storage device for a client and adaptive synchronization and transformation server |
US6584499B1 (en) * | 1999-07-09 | 2003-06-24 | Lsi Logic Corporation | Methods and apparatus for performing mass operations on a plurality of managed devices on a network |
EP1069500A1 (en) | 1999-07-12 | 2001-01-17 | International Business Machines Corporation | Downloadable user-interface |
EP1071256B1 (en) | 1999-07-21 | 2005-11-23 | Motorola, Inc. | Method for providing seamless communication across bearers in a wireless communication system |
US6718535B1 (en) * | 1999-07-30 | 2004-04-06 | Accenture Llp | System, method and article of manufacture for an activity framework design in an e-commerce based environment |
US7200809B1 (en) * | 1999-08-04 | 2007-04-03 | Oracle International Corporation | Multi-device support for mobile applications using XML |
US6993476B1 (en) | 1999-08-26 | 2006-01-31 | International Business Machines Corporation | System and method for incorporating semantic characteristics into the format-driven syntactic document transcoding framework |
US6356933B2 (en) * | 1999-09-07 | 2002-03-12 | Citrix Systems, Inc. | Methods and apparatus for efficiently transmitting interactive application data between a client and a server using markup language |
US6430624B1 (en) * | 1999-10-21 | 2002-08-06 | Air2Web, Inc. | Intelligent harvesting and navigation system and method |
US6950881B1 (en) * | 1999-11-02 | 2005-09-27 | Mshift, Inc. | System for converting wireless communications for a mobile device |
US6549221B1 (en) * | 1999-12-09 | 2003-04-15 | International Business Machines Corp. | User interface management through branch isolation |
US6812941B1 (en) * | 1999-12-09 | 2004-11-02 | International Business Machines Corp. | User interface management through view depth |
US6829746B1 (en) * | 1999-12-09 | 2004-12-07 | International Business Machines Corp. | Electronic document delivery system employing distributed document object model (DOM) based transcoding |
US6920607B1 (en) * | 1999-12-15 | 2005-07-19 | Microsoft Corp. | Methods and systems for dynamically creating user interfaces |
US6735186B1 (en) * | 1999-12-22 | 2004-05-11 | Nokia Corporation | Method and system for optimizing usage of air link |
US6654766B1 (en) * | 2000-04-04 | 2003-11-25 | International Business Machines Corporation | System and method for caching sets of objects |
US6976090B2 (en) * | 2000-04-20 | 2005-12-13 | Actona Technologies Ltd. | Differentiated content and application delivery via internet |
US7072984B1 (en) * | 2000-04-26 | 2006-07-04 | Novarra, Inc. | System and method for accessing customized information over the internet using a browser for a plurality of electronic devices |
US6581186B1 (en) * | 2000-05-31 | 2003-06-17 | Xilinx, Inc. | Methods and systems for providing logic cores from third party logic core providers |
US6728750B1 (en) * | 2000-06-27 | 2004-04-27 | International Business Machines Corporation | Distributed application assembly |
US7013329B1 (en) * | 2000-08-04 | 2006-03-14 | Oracle International Corporation | Techniques for programming event-driven transactions in mobile applications |
AUPQ924100A0 (en) * | 2000-08-07 | 2000-08-31 | Sharinga Networks Inc. | A method for controlling data at a client device |
US20050091666A1 (en) * | 2000-08-14 | 2005-04-28 | Transvirtual Technologies, Inc. | Portable operating environment for information devices |
TW512640B (en) * | 2000-08-25 | 2002-12-01 | Phone Inc W | Mobile opinion polling system and method |
AU2001293269A1 (en) * | 2000-09-11 | 2002-03-26 | David Edgar | System, method, and computer program product for optimization and acceleration of data transport and processing |
US6717593B1 (en) * | 2000-09-12 | 2004-04-06 | Avaya Technology Corp. | Mark-up language implementation of graphical or non-graphical user interfaces |
US20020128908A1 (en) * | 2000-09-15 | 2002-09-12 | Levin Brian E. | System for conducting user-specific promotional campaigns using multiple communications device platforms |
GB0023570D0 (en) * | 2000-09-26 | 2000-11-08 | Volantis Systems Ltd | Web server |
US7089330B1 (en) * | 2000-09-28 | 2006-08-08 | I2 Technologies Us, Inc. | System and method for transforming custom content generation tags associated with web pages |
US7103906B1 (en) * | 2000-09-29 | 2006-09-05 | International Business Machines Corporation | User controlled multi-device media-on-demand system |
US6741853B1 (en) * | 2000-11-09 | 2004-05-25 | Nortel Networks Limited | Device aware internet portal |
US20020099829A1 (en) * | 2000-11-27 | 2002-07-25 | Richards Kenneth W. | Filter proxy system and method |
US7877518B2 (en) * | 2000-11-30 | 2011-01-25 | Access Systems Americas, Inc. | Method and apparatus for updating applications on a mobile device via device synchronization |
US6957390B2 (en) * | 2000-11-30 | 2005-10-18 | Mediacom.Net, Llc | Method and apparatus for providing dynamic information to a user via a visual display |
US6775671B1 (en) * | 2000-12-13 | 2004-08-10 | William Marsh Rice University | Component-based adaptation system and method |
US7076728B2 (en) * | 2000-12-22 | 2006-07-11 | International Business Machines Corporation | Method and apparatus for end-to-end content publishing system using XML with an object dependency graph |
US20020152244A1 (en) * | 2000-12-22 | 2002-10-17 | International Business Machines Corporation | Method and apparatus to dynamically create a customized user interface based on a document type definition |
US20030189593A1 (en) * | 2001-01-05 | 2003-10-09 | Yarvin Curtis G. | Method and apparatus for dynamically updating a markup language based user interface |
SE0100191L (sv) * | 2001-01-24 | 2002-07-25 | Ericsson Telefon Ab L M | En anordning och ett förfarande relaterande till access av applikationer/tjänster |
US6871236B2 (en) * | 2001-01-26 | 2005-03-22 | Microsoft Corporation | Caching transformed content in a mobile gateway |
US7155681B2 (en) * | 2001-02-14 | 2006-12-26 | Sproqit Technologies, Inc. | Platform-independent distributed user interface server architecture |
US6836796B2 (en) * | 2001-03-16 | 2004-12-28 | Digi International, Inc. | System and method to manage network-enabled embedded devices operating under various protocols |
US7054878B2 (en) * | 2001-04-02 | 2006-05-30 | Accenture Global Services Gmbh | Context-based display technique with hierarchical display format |
US7315884B2 (en) * | 2001-04-03 | 2008-01-01 | Hewlett-Packard Development Company, L.P. | Reduction of network retrieval latency using cache and digest |
US20020147749A1 (en) * | 2001-04-06 | 2002-10-10 | Ortiz C. Enrique | Mobile presentation system |
US6966028B1 (en) * | 2001-04-18 | 2005-11-15 | Charles Schwab & Co., Inc. | System and method for a uniform website platform that can be targeted to individual users and environments |
US7346667B2 (en) * | 2001-05-31 | 2008-03-18 | Ubs Ag | System for delivering dynamic content |
US6801604B2 (en) * | 2001-06-25 | 2004-10-05 | International Business Machines Corporation | Universal IP-based and scalable architectures across conversational applications using web services for speech and audio processing resources |
US6880014B2 (en) * | 2001-09-24 | 2005-04-12 | International Business Machines Corporation | Method and system of use of transcode directives for distributed control of transcoding servers |
US20050080804A1 (en) | 2001-10-30 | 2005-04-14 | Bradshaw Robert David | System and method for maintaining componentized content |
US6807631B2 (en) * | 2001-11-16 | 2004-10-19 | National Instruments Corporation | System and method for deploying a hardware configuration with a computer program |
US7065744B2 (en) * | 2002-01-14 | 2006-06-20 | International Business Machines Corporation | System and method for converting management models to specific console interfaces |
US20040015537A1 (en) * | 2002-07-15 | 2004-01-22 | Richard Doerksen | Handheld client framework system |
US7324473B2 (en) * | 2003-10-07 | 2008-01-29 | Accenture Global Services Gmbh | Connector gateway |
US7239877B2 (en) * | 2003-10-07 | 2007-07-03 | Accenture Global Services Gmbh | Mobile provisioning tool system |
US20060168526A1 (en) * | 2005-01-12 | 2006-07-27 | Nokia Corporation | Platform-specific application user interface remoting |
US20060265359A1 (en) * | 2005-05-18 | 2006-11-23 | Microsoft Corporation | Flexible data-bound user interfaces |
-
2002
- 2002-07-15 US US10/195,903 patent/US20040015537A1/en not_active Abandoned
-
2003
- 2003-06-16 EP EP03764306A patent/EP1522025A4/en not_active Withdrawn
- 2003-06-16 JP JP2004521462A patent/JP2005533312A/ja active Pending
- 2003-06-16 AU AU2003251534A patent/AU2003251534A1/en not_active Abandoned
- 2003-06-16 CA CA002489587A patent/CA2489587A1/en not_active Abandoned
- 2003-06-16 CN CNA03816776XA patent/CN1669018A/zh active Pending
- 2003-06-16 WO PCT/US2003/018942 patent/WO2004008332A1/en active Application Filing
-
2008
- 2008-10-14 US US12/251,275 patent/US8200745B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP1522025A1 (en) | 2005-04-13 |
WO2004008332A1 (en) | 2004-01-22 |
AU2003251534A1 (en) | 2004-02-02 |
JP2005533312A (ja) | 2005-11-04 |
US20040015537A1 (en) | 2004-01-22 |
US8200745B2 (en) | 2012-06-12 |
CA2489587A1 (en) | 2004-01-22 |
EP1522025A4 (en) | 2005-11-16 |
US20090259714A1 (en) | 2009-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1669018A (zh) | 手持终端框架系统 | |
CN100346286C (zh) | 用于改变网络浏览器的布局和功能的方法 | |
CN1609794A (zh) | 用于计算机平台的编程接口 | |
CN1304981C (zh) | 用于基于规则的万维网方案与活动的系统与方法 | |
CN100342691C (zh) | 多模式对话处理方法 | |
CN1182467C (zh) | 可扩充的分布企业应用集成系统 | |
CN1293500C (zh) | 组织计算机网络中电子邮件文档的方法及电子邮件系统 | |
CN1797399A (zh) | 用于文本挖掘和搜索的应用程序编程接口 | |
CN1609793A (zh) | 用于计算机平台的编程接口 | |
CN1834908A (zh) | 用于将开发模式应用于基于组件的应用程序的系统和方法 | |
CN100338955C (zh) | 在电视机顶盒中执行交互式电视的设备和方法 | |
CN1609795A (zh) | 用于计算机平台的编程接口 | |
CN1524216A (zh) | 软件构件插件程序结构的系统和方法 | |
CN101031882A (zh) | 用于通用设备互操作性平台的设备组招募和内容再现的体系结构、装置和方法 | |
CN1719410A (zh) | 面向对象语言中并发程序的实现 | |
CN1605182A (zh) | 用于网络高速缓存的方法和系统 | |
CN1701568A (zh) | 通过无线网络的多模式网络交互 | |
CN1232215A (zh) | 网络访问管理系统和方法,及计算机程序产品 | |
CN1744036A (zh) | 报告软件中支持定制图形表示的系统和方法 | |
CN1679026A (zh) | Web服务设备和方法 | |
CN1692358A (zh) | 使用商业规则或用户角色而在环球网门户中选择小门户的方法和装置 | |
CN1609855A (zh) | 查询优化系统和方法 | |
CN1417679A (zh) | 以对话为目的的应用抽象 | |
CN1667575A (zh) | 非集成工具的集成体系结构 | |
CN1845505A (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 | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20050914 |