用于显示信息的系统和方法

文档序号:6583192阅读:145来源:国知局
专利名称:用于显示信息的系统和方法
技术领域
本发明涉及显示信息,且更具体而言涉及用于在客户机上显示信息的客户机/服
务器框架。
背景技术
公司和组织经常使用门户(portal)来提供对于服务或程序集合的单点访问。门 户可以构建合并不同服务或程序的视图且向用户显示这些视图。门户页面通常通过运行在 终端用户计算机上的网络浏览器来访问。终端用户向网络浏览器指明门户的统一资源定位 符(URL)以查看该门户提供的用户界面(UI)。 门户可以将UI构建为显示来自服务或程序的信息的超文本标记语言(HTML)文 件。UI的HTML可以包括终端用户可以点击的链接,使请求被发送到门户。门户可以接收请 求且将请求定向到合适的服务或程序以进行处理。请求的处理可以导致产生新信息以显示 在客户机上。门户可以构建UI页面以显示该新信息且发送该页面到客户机以用于显示。
创建可以产生用于从诸如服务或程序的不同来源接收的信息的UI的门户会要求 大量的编程工作。解决开发UI以在门户中显示信息的问题的一种尝试已经使用多种标准 来提供框架,该框架用于请求和接收可以嵌入到门户UI中UI元素。UI元素典型地包括可 以插入到HTML文档中以向终端用户的客户机提供UI的HTML代码的片段。两个标准中的 第一个是远程门户网站服务(WSRP),其描述怎样以简单对象访问协议(SOAP)消息请求和 发射部分HTML。第二个标准是JSR-168,它是描述portlet接口的标准。WSRP和JSR-168 被整体引用包括在此作为参考。Portlet在门户框架中运行且可以提供UI元素作为HTML 中可以使用WSRP发射的部分。WSRP/JSP-168的使用可用于提供包括多个porlet的门户, 该多个portlet提供包括在被发送到客户机的UI中的UI元素。 尽管WSRP/JSR-168的使用有利于简化门户的UI开发,但由于WSRP的网络服务接 口,它的使用可能是有困难的。而且,很多UI的处理在服务器上执行,这可能导致建立在 WSRP/JSR-168技术上的解决方案的可伸縮性的问题。

发明内容
根据本发明的一个实施例,提供一种用于显示信息的客户机/服务器系统。该系 统包含服务器,具有用于执行存储在计算机可读存储器上的指令的处理器,该存储器耦合 到所述处理器,得到处理器执行指令,所述处理器执行指令在所述计算机可读存储器中提 供;以及客户机,具有用于执行存储在计算机可读存储器中的指令的客户机处理器,该计算 机可读存储器与所述客户机处理器耦合,得到客户机处理器执行指令,所述客户机处理器 执行指令在所述计算机可读存储器中提供。服务器的处理器执行指令在所述计算机可读存 储器中提供片段服务器(fragment server),该片段服务器用于向一个或更多个客户机提 供多个片段对象,每个片段对象包括标记组件和管理组件。客户机上的客户机处理器执行 指令在客户机的所述计算机可读存储器中提供显示器,用于显示多个视图,每个视图通过
3片段对象的标记组件描述;以及片段控制器,该片段控制器与所述显示器相关联,用于管理 所述多个片段对象,所述片段控制器从所述服务器接收片段对象且基于接收的片段的标记 组件更新多个视图中的一个视图,且基于接收的片段对象的管理组件更新片段对象的一个 或多个管理组件。 根据本发明的另一实施例,提供一种串流XML文档的方法。该方法包括创建输出 流写入器,用于串流XML文档的输出;创建与该输出流写入器相关联的输出缓冲器,用于保 持信息以写入到输出流写入器;创建缺省写入器,用于写入可用XML元素到输出缓冲器;判 断不存在XML文档中需要的XML元素,且创建用于该XML元素的标记;当该XML元素变得可 用时替换输出缓冲器中的标记;判断没有更多的XML元素要写入到输出流;以及关闭输出 流写入器。


图la以示意性方式示意了一种可以实践此处描述的本公开的实施例的网络环境。 图lb以框图的形式示意了可用于客户机106和服务器104的硬件组件; 图2以示意性方式示意了根据本公开在客户机的浏览器上显示的示例性门户屏
幕200。
图3以框图的形式示意了根据本公开的示例性客户机侧组件; 图4以框图的形式示意了根据本公开的示例性片段; 图5以框图的形式示意了根据本公开的片段控制器的示例性组件; 图6以框图的形式示意了根据本公开的门户服务器的示例性组件; 图7以框图的形式示意了根据本公开的片段服务器的示例性组件; 图8以流程图的形式示意了根据本公开的显示系统的组件的示例性交互; 图9以框图的形式示意了根据本公开从分离的XML元素形成的合并的XML文档; 图10以流程图的形式示意了根据本公开用于串流(streaming)XML文档的方法; 图11示意了根据本公开的伪代码列表、相应的输出缓冲器表示以及得到的输出
XML文档。 图12以流程图的形式示意了根据本公开用于向XML流提供事务处理能力的方法; 以及 图13以示图的方式示意了根据本公开的示例性使用情况和得到的串流的输出。
具体实施例方式
此处使用的术语仅用于描述具体实施例的目的,且并不旨在限制本发明。当在此 使用时,除非明确指明,单数形式"一"、"一个"、"该"同样也包括复数形式。还应当理解,当 在本说明书中使用时,术语"包含"及其动名词形式指定陈述的特征、整体、步骤、操作、元件 和/或组件的存在,但是不排除一个或多个其他特征、整体、步骤、操作、元件和/或组件的 存在或添加。 下面的权利要求中,所有装置或步骤加上功能元件的相应结构、材料、动作及等价 旨在包括用于执行与具体权利要求的其他要求元件相组合的功能的任意结构、材料或动作。本发明的描述仅用于说明和描述目的,而并不旨在排他或限制本发明为所公开的形式。 很多不偏离本发明的范围和精神的修改和变型对于本领域技术人员是显见的。选择和描述 实施例的目的是为了更好地解释本发明的原理和实践应用,且使得本领域技术人员理解本 发明的各个实施例以及可以预见的与特定用途相符的各种修改。 如本领域技术人员将意识到,本发明可以实施为系统、方法或计算机程序产品。因 此,本发明可以具有完全硬件实施例、完全软件实施例或者组合软件和硬件方面的实施例 的形式,此处所有实施例均一般地被称为"电路"、"模块"或"系统"。而且,本发明可以具有 计算机程序产品的形式,该计算机程序产品嵌入在任意有形介质的表达中,该有形介质表 达具有嵌入在介质中的计算机可用程序代码。 可以使用一个或多个计算机可用或计算机可读介质的任意组合。计算机可用或计 算机可读介质例如可以是但不限于,电、磁、光学、电磁、红外或半导体系统、设备、装置或传 播介质。计算机可读介质的更具体的示例(非排他列表)将包括如下示例具有一个或多 个线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(R0M)、可擦 除可编程只读存储器(EPROM或闪存)、便携式压縮光盘只读存储器(CDROM)、光学存储装置 或磁存储装置。注意计算机可用或计算机可读介质甚至可以是其上打印了程序的纸张或其 他合适介质,因为程序例如可以经由纸张或其他介质的光学扫描电捕获,然后在必要时被 编译、解释或以合适的方式处理,且然后存储在计算机存储器中。在本文档的背景下,计算 机可用或计算机可读介质可以是包含或存储被指令执行系统、设备或装置使用或与之相关 的任意介质。 用于实施本发明的操作的计算机程序代码可以以一种或多种编程语言的任意组 合编写,这些编程语言包括面向对象编程语言,诸如Java、 Smalltalk、 C++等,以及常规过 程编程语言,诸如"C"编程语言或类似编程语言。程序代码可以完全在用户计算机上执行, 作为单独软件包部分在用户计算机上执行,部分在用户计算机且部分在远程计算机上或者 完全在远程计算机或服务器上执行。在后一种场景中,远程计算机可以通过任意类型的网 络连接到用户计算机,所述网络包括局域网(LAN)或广域网(WAN),或者可以对外部计算机 做连接(例如,通过使用因特网服务器提供商的因特网)。下面参考本发明的实施例的方 法、设备(系统)和计算机程序的流程图说明和/或框图描述本发明。应当理解,流程图说 明和/或框图的每个方框以及流程图说明和/或框图的方框的组合可以通过计算机程序指 令实施。这些计算机程序指令可以提供到通用目的计算机、专用目的计算机或其他可编程 数据处理设备的处理器以产生机器,使得经由计算机或其他可编程数据处理设备的处理器 执行的指令创建用于执行流程图和/或框图方框中指定的功能/动作的装置。这些计算机 程序指令也可以存储在计算机可读介质中,这些计算机可读介质可以弓I导计算机或其他可 编程数据处理设备以特定方式工作,从而得到执行流程图和/或框图方框中指定的功能/ 动作的指令装置。 计算机程序指令还可以装载到计算机或其他可编程数据处理设备中以导致在计 算机或其他可编程设备上执行的一系列操作步骤,从而产生计算机执行处理,使得在计算 机或其他可编程设备上执行的指令提供用于执行流程图和/或框图方框中指定的功能/动 作的处理。 附图中的流程图和框图说明了根据本发明的各个实施例的系统、方法和计算机程
5序产品的可能的实施的架构、功能性和操作。就这方面而言,流程图和框图中的每个方框代 表一个模块、片段或代码部分,其包含用于实施指定逻辑功能的一个或多个可执行指令。还 应当注意,在一些备选实施方式中,方框中指出的功能可以不以附图中指出的顺序发生。例 如,依赖于涉及的功能性,连续示出的两个方框实际可以基本同步地执行,或者方框有时可 以以相反的顺序执行。还应当注意,框图和/或流程说明中的每个方框以及框图和/或流 程说明中的方框的组合可以通过执行专用功能和动作的基于专用硬件的系统或者专用硬 件和计算机指令的组合实现。 图la以示意性方式示意了一种可以实践此处描述的本公开的实施例的网络环 境。环境100多个客户机106。客户机106通过诸如因特网的网络102与服务器104耦合。 尽管该网络示为因特网,但本领域技术人员将意识到诸如企业的局域内部互联网的其他通 信网络也是可行的。客户机106向终端用户(未示出)显示信息。终端用户可以与客户机 交互以控制显示的信息。客户机106可以从服务器104接收待显示信息。客户机可以实现 终端用户与服务器104的交互。服务器104产生由不同客户机106显示的信息。尽管图la 中示出了单个服务器,本领域技术人员将意识到服务器的功能可以遍布到多个物理计算机 或服务器。 客户机106可以使用浏览器来显示服务器104的信息。服务器104可以用作门户, 该门户向客户机104的浏览器提供可访问服务器104的服务和程序的单点访问。
图lb以框图的形式示意了可用于客户机106和服务器104的硬件组件。硬件110 包含能够执行指令的处理器112。处理器112操作地耦合到计算机可读存储器116。该计 算机可读存储器可以存储数据信息和处理器112执行的指令。处理器112和存储器116可 以通过总线114操作地耦合。网络接口 118也通过总线114操作地耦合到处理器。网络接 口 118将硬件110耦合到网络102。 (I/O)接口 120也操作地耦合到总线114。 (I/O)接口 120可以连接到诸如键盘、视频、鼠标(KVM)122之类的输入和输出装置。本领域技术人员将 意识到,KVM122可能并不需要,或者可以使用用于输入和输出信息的其他装置代替。
图2以示意性方式示意了根据本公开在客户机浏览器上显示的示例性门户屏幕 200。屏幕200包括3个不同的视图206a、206b、206c。每个视图显示一些信息,这些信息 示为链接或内容。每个视图206a、206b、206c可以通过包括HTML和用于提供交互和控制的 JavaScript代码的标记来描述,且可以根据层叠样式表(CSS)被格式化。每个视图206a、 206b、206c可以插入到描述视图布局的pagelet中。 如此后进一步描述的,视图由片段对象的标记组件描述。客户机上的浏览器可以 包括管理pagelet中显示的视图的片段控制器。客户端片段控制器允许各个视图被更新, 而不需要更新和重载整个pagelet。除了标记组件,片段对象包括管理组件,该管理组件可 由客户端片段控制器使用以用于管理与被显示的pagelet相关联的片段对象。
图3以框图的形式示意了根据本公开的示例性客户机侧组件。提供浏览器302 以在客户机上显示信息。如本领域所公知,浏览器可以包括用于向显示器呈现内容的呈现 组件或呈现器312。如图3所示,呈现组件或呈现器212呈现包括各个视图206a、206b、 206c(统称为视图206)的pagelet 204。用于呈现pagelet的信息存储在文档对象模型 (D0M)314中。DOM可以被操作以修改所呈现的pagelet。 除了呈现组件312和DOM 314,浏览器302包括被装载到存储器中的片段对象308a、308b、308c(统称为片段对象308)。片段对象308引用描述存储在DOM中的视图306 的标记。浏览器302还包括用于管理pagelet 204的视图206的片段控制器310。如在此 进一步描述的,片段控制器310还管理片段对象308。片段管理器310可以通过与D0M交互 来管理视图以修改包括当前所显示视图的D0M节点。用于操纵浏览器的D0M的应用编程接 口 (API)在本领域中公知。 终端用户可以使得浏览器302定向到运行在服务器上的门户。门户向浏览器302 提供pagelet 204。初始pagelet 204包括对于布局中片段对象308的引用。布局例如可 以是具有〈div〉标签的HTML表格,其中每个〈div〉标签引用一个片段对象308。 Pagelet还 可以包括用于片段控制器310的代码。当浏览器302接收pagelet时,它装载片段控制器 310。使用装载到浏览器302中的片段控制器310,从服务器检索出在pagelet 204中引用 的片段对象308。片段控制器310处理接收的片段且操作浏览器的D0M 314以在pagelet 204的布局中显示视图206。备选地,作为减小片段控制器和服务器之间的呼叫数量的优 化,可以通过片段服务器检索每个片段对象的初始视图。与视图和片段对象的后续交互可 以通过片段控制器执行。 图4以框图的形式示意了示例性片段400。片段是代表可嵌入UI组件的可寻址 XML文档。片段包含使用标记(HMTL、JavaScript和/或CSS)创建的视图。片段还包含关 于片段属性和能力的元数据。当呈现页面时,片段可以直接内联(inline),或者可以延迟, 直到例如通过onLoad事件激活客户机页面以确保片段要求的所有组件在客户机上存在。 片段在客户机中通过片段控制器310管理。片段控制器310可以作为一组JavaScript代 码被提供到使用pagelet的客户机浏览器。备选地,它可以作为浏览器的组件被包括。片 段控制器310可以建立在异步JavaScript和XML (AJAX)异步HTML和HTTP (AHAH)引擎上。 片段400在客户机中通过JavaScript片段对象308表示,其保存经由运行在服务器104上 的片段服务器与片段产生器通信所需的所有信息。片段对象308可以揭示定制属性,该属 性可以被编码到用于寻址片段产生器的基本URI中。使用称为瞬时属性的一类共享状态和 事件,片段对象308可以经由片段控制器310彼此通信。 片段400是被片段控制器310使用以装载相应的片段对象308的可扩展标记语言 (XML)文档。片段400对应于片段对象308。如图4所示,片段400 (以及相应的片段对象 308)包括标记组件402、状态组件406、定制属性组件408、瞬时属性组件410以及事件组件 412。状态组件406、定制属性组件408、瞬时属性组件410以及事件组件412提供片段控制 器310使用的信息以管理片段对象。并不是所有的组件(406、408、410、412)都要求在片段 400中存在。组件406、408、410、412可以总称为管理组件404。管理组件404包括用于片 段控制器310在管理片段对象308时使用的信息。组件402、406、408、410、412是片段根节 点元素的XML子元素。 标记组件402包括描述与片段相关联的视图的标记的标签。视图的标记可以包括
HTML代码和JavaScript代码。标记可以包括用于格式化HTML代码的级联样式表(CSS)信
息。视图信息存储在XML元素中,例如存储在〈markupstring〉中。下面是片段400的标记
组件的方案。 〈fragment> 〈meta〉
〈markupTypes>xsd:string〈/markupTypes> 〈locales>xsd:string〈/locales> 〈modes>xsd:qname〈/modes> 〈windowStates>xsd:qname〈/windowStates> 〈/meta> 〈preferredTitle>xsd:string〈/preferredTitle> 〈newMode〉xsd:string〈/newMode〉 〈newWindowState>xsd:string〈/newWindowState> 〈delay>xsd:int〈/delay> 〈markup id =〃 xsd:string" mode =〃 xsd:qname" windowState = 〃 xsd:qname" > 〈useCacheMarkup>xsd:boolean〈/useCacheMarkup> 〈mimeType>xsd:string〈/mimeType> 〈markupString>xsd:string〈/markupString> 〈markupXml> 〈xsd:£iny/> 〈/markupXml> 〈m3rkupBin3ry>xsd:b3se64〈/m3rkupBiri3ry> 〈cacheControl> 〈expires>xsd:int〈/expires> 〈validateTag>xsd:string〈/validateTag> 〈/cacheControl> 〈validator> 〈param name = 〃 xsd:nmtoken" > 〈validate〉 〈type>xsd:string〈/type> 〈restrict> 〈min〉xsd: int〈/min> 〈max>xsd:int〈/max> 〈contains>xsd:string〈/contains> 〈regex>xsd:string〈/regex> 〈/restrict> 〈/validate〉 〈/param> 〈/validator> 〈/markup> 〈/fragment〉片段的标记组件402的元素可以包括 參meta元素,包括 令meta/modes元素,描述片段产生器支持的模式。模式是查看、预览、编辑、帮助和保密模式。 今meta/windowStates元素,描述片段产生器支持的窗口状态。窗口状态是正常、 最小化、最大化和保密窗口状态。 今redirectURL元素,指示新位置或服务端重定向。 參newWindowStat元素,指示片段产生器的窗口状态变化(例如,从正常变成最大 窗口状态)。 參newMode元素,指示片段产生器的模式变化(例如,从编辑到查看模式)。 參delay元素,指示片段控制器在指定秒数内刷新当前视图。
markup元素,包括 參makrkup/@id属性,唯一地识别标记 今markup/useCacheMarkup元素,指示客户在其缓存中具有最新标记且实际上没 有标记返回。 今markup/mimeType元素,指示标记的格式(例如text/html)。> markup/markupString元素,包含像html禾P javascript标签这样的实际标记
以及文本。今markup/markupXml元素,包含如XHMTL的实际标记。 今markup/markupBinary元素,包含如编码的base64 二进制大对象(blob)这样 的实际的标记。 今markup/cacheContro1元素,包括 ■ CacheControl/expires元素,指示标记何时过期,允许客户/控制器保持标记 到该时间。 ■ CacheControl/validateTag元素,指示客户/控制器可以提供的控制确认标 签,以使得产生器验证缓存的标记现在是否过时。
今Markup/validator元素,包括
■ Validator/param元素,包括 > parma/0name属性,定义对特定参数名称的验证器规则。
> p翻a/0valickte元素,描述验证规则。 除了标记组件元素,片段400可以包括状态元素406,该状态元素包括关于片段的 视图的当前状态的信息。状态应包括片段产生器再创建当前视图所必须的所有信息。在片 段的示例性实施例中,状态信息被存储为Base 64大对象。状态元素可以以不同形式存储 状态信息。 片段400还可以包括定制属性元素408。片段的定制属性可以提供片段400的定 制的控制。片段400使用meta/customProperties元素宣布定制属性,这些元素包含用于 列举、编辑和验证属性及其值的信息。属性的实际定制可以保存在fragment/custom元素 中,该元素可以关于每个定制属性具有一个参数元素。定制属性可以通过片段引用或page/ fragmentlnstance被覆盖。定制属性可以编码为片段的基本URI请求中的查询值。在安全 环境中,可以编码在基本URI中的定制被加密以防止篡改。下面列出的是强调片段的定制 属性元素的方案。
〈fragment>
〈meta〉 〈customProperties name =〃 xsd:nmtoken〃 > 〈title xml:lang =〃 xsd: string" resourceID =〃 xsd:nmtoken〃 >xsd:string〈/title> 〈hint xml:lang =〃 en〃 resourceID =〃 xsd:nmtoken〃 >xsd:string〈/hint> 〈default〉 〈value>xsd:string〈/value> 〈e皿m name = 〃 one" resourceID =〃 xsd:nmtoken〃 >xsd:string〈/enum> 〈/default> 〈validate〉 〈type>xsd:string〈/type> 〈restrict> 〈min〉xsd:int〈/min> 〈max>xsd:int〈/max> 〈contains>xsd:string〈/contains> 〈regex>xsd:string〈/regex> 〈/restrict> 〈/validate〉 〈/customProperties> 〈/meta> 〈custom> 〈par咖name = 〃 xsd:nmtoken" >xsd: string〈/param> 〈param name = 〃 xsd:nmtoken" > 〈any_xml_doc> 《..> 〈/any_xml_doc> 〈/param> 〈/custom> 〈/fragment> 除了定制属性,片段400还可以包括瞬时属性组件410。瞬时属性是可以在片段对
象308之间共享的一种范围共享状态形式。瞬时属性的范围可以是页面或应用。页面范围 将瞬时属性更新分布为片段的同胞和后裔。因为片段可以包括其他片段作为子片段,对于 同胞和后裔的更新的分布允许片段控制子片段将怎样在页面中操作。下面的列表是强调片 段的瞬时属性元素的方案
〈fragment>
〈meta〉 〈transientProperties name =〃 xsd:nmtoken〃 >
〈title xml:lang=〃 xsd:string〃 resourceID = 〃 xsd:歷token〃 〉xsd: string〈/title〉 〈hint xml:lang=〃 xsd:string〃 resource ID = 〃 xsd:歷token〃 〉xsd: string〈/hint〉 〈scope〉xsd:string〈/scope〉 〈default〉 〈value〉xsd:string〈/value〉 〈e皿m name =〃 one〃 xml:lang =〃 xsd: string 〃 resourceID = 〃 xsd:歷token〃 〉xsd: string〈/e皿m〉 〈/default〉 〈valickte〉 〈type〉xsd:string〈/type〉 〈restrict〉 〈min〉xsd: int〈/min〉 〈max〉xsd: int〈/max〉 〈contains〉xsd: string〈/contains〉 〈regex〉xsd:string〈/regex〉 〈/restrict〉 〈/validate〉 〈/transientProperties〉 〈/meta〉 〈transientUpdate name = 〃 xsd:nmtoken〃 〉xsd:string〈/transientUpdate〉 〈/f ragment〉 瞬时属性410允许片段内的协调。如果需要在片段之间交换更多的信息,则可以
通过事件框架工作完成。片段400可以包括事件组件412。事件组件412可以使用片段控 制器310登记片段对象的事件监听器。当出现相应的事件时,消息被传递到片段对象的登 记事件监听器。除了使用片段控制器310登记事件监听器之外,事件组件412还可以描述 片段(或更具体而言,片段对象)会出现的事件。当片段对象出现事件时,相关联的有效载 荷被传递到其他片段对象308的适当事件监听器。本领域技术人员将意识到,消息可以以 各种方式传递到合适的事件监听器,例如,如上描述,片段可以定义在出现特定事件时调用 的该特定事件的事件监听器或处理器。备选地,片段控制器310可以传递所出现的事件到 片段对象308,该片段对象308判断是否处理该事件。事件组件的方案在下面的列表中示 出。 〈fragment>
〈meta〉
… 〈publishedEvents>event. n咖e〈/publishedEventsX)… * 〈handledEvents>event. n咖e〈/handledEventsX)… *:0168] 〈eventDescriptions name = 〃 event, name" type = 〃 xsd:QName〃 >0. . *
:0169] 〈aliases〉0…*
:0170] xsd: string
:0171] 〈/aliases>
:0172] (description xml:lang=〃 〃 resourceName = 〃 〃 >
:0173] xsd: string
:0174] 〈/description>
:0175] 〈label xml:lang=〃 〃 resourceName = 〃 〃 >
:0176] xsd: string
:0177] 〈/label>
:0178] 〈hint xml:lang=〃 〃 resourceName = 〃 〃 >
:0179] xsd: string
:0180] 〈/hint>
:0181] 〈extensions>0.. *
:0182] xsd: any
:0183] 〈/extensions>
:0184] 〈/eventDescriptions>
:0185] 〈/meta>
:0186] …
:0187] 〈event name = 〃 event, name" type = 〃 xsd:QName〃 >0. . *
:0188] 〈payload>
:0189] 〈par塞X).. *
:0190] 〈par咖name = 〃 xsd:NMToken" >xsd: string〈/param>
:0191] 〈params>
:0192] xsd: any
:0193] 〈/payload>
:0194] 〈extensions>0.. *
:0195] xsd: any
:0196] 〈/extensions>
:0197] 〈/event> 〈/fragment> 图5以框图的形式示意了片段控制器310的示例性组件。片段控制器310包括管 理在pagelet中显示的视图的视图管理器502。当片段对象更新时,视图管理器502操纵浏 览器D0M 314以更新的视图代替相关联片段对象308的当前视图。这允许pagelet 204的 各个视图被更新,而无需重载整个页面。除了视图管理器502,片段控制器310还包括管理 终端用户与视图的交互的交互管理器504。终端用户例如可以通过点击链接或者激活片段 对象的JavaScript功能与视图交互。JavaScript可以传递请求到片段控制器310,或更具 体地到交互管理器504,该交互管理器504可以发送对更新片段的请求到服务器且进而接 收更新的片段。对片段的请求包含可以产生片段的对服务的URI,称为片段产生器。片段产
12生器可以支持两类URI。第一类是renderURI,其基于被编码在URI中的当前状态、定制属
性和瞬时属性信息刷新包括视图的片段。第二类是interactionURI,其是具有附加参数的
renderURI。示例性URI语法是 [gateway]/fragment(pathlnfo) 7 [frag_ * ]& [custom] & [transient] &[params] 其中 參gateway是当前网关。 參/fragment调用片段调度处理器以派发片段到合适的片段产生器。
參pathlnfo被片段服务器使用以引用也控制用户访问的cm对象。
參frag- *是被片段控制器用于与片段服务器或片段产生器通信的参数。
參custom参数携带该片段的定制值。 參transient参数是基于宣称的瞬时属性对片段可见的那些参数。
參params是从表格或链接发起的应用专用参数。 片段控制器310管理所有片段对象308的状态。片段对象的状态可以基于终端用 户与片段对象308的视图的交互而变化。状态还可以在使用新片段或标记组件更新片段对 象时变化。另外,状态可以因为瞬时属性或其他片段的事件以及终端用户与它们的交互而 改变。片段控制器310包括用于管理所有片段308的状态的状态管理器504。片段控制器 310还包括用于管理所有片段对象308的瞬时属性的瞬时管理器508。瞬时管理器508传 递更新的瞬时属性到具有相同名称的瞬时属性的任意片段对象308。片段控制器310还包 括用于管理所有片段对象308的事件的事件管理器510。片段对象308可以使用事件管理 器510发起事件,该事件管理器510分布事件到合适的片段对象308。 图6以框图的形式示意了用于提供pagelet和片段到片段控制器310的门户服务 器600的示例性组件。门户服务器600组件可以实施在参考图lb描述的硬件上。服务器 包括用于接收请求且派发接收的请求到合适的地点的网关/调度器602。服务器还包括用 于构建包括布局和片段、返回到客户机的pagelet的pagelet汇编器604。服务器还包括 产生用于返回到客户机的片段400的片段服务器608。片段服务器608可以从片段产生器 610接收片段文档。片段服务器608然后重写标记和片段以创建片断以被发送到片段控制 器或可选地被发送到pagelet汇编器。完成片段文档的重写是为了避免变量名称或命名空 间与客户机上的其他片段之间的可能的冲突。重写可以使用片段标识符证明变量或命名空 间的资格。服务器还可以包括存储与服务器上可用的所有片段产生器610相关的信息的内 容管理器数据库506。 Pagelet汇编器604可以使用内容管理器510来判断可用的片段产 生器,其可用于构建初始门户页面以提供对片段产生器610的访问。 服务器还可以包括产生片段文档的多个片段产生器610。片段产生器610可以基 于从可以编码到请求URI中的片段控制器310接收的信息构建片段文档。
图7以框图的形式示意了片段服务器608的示例性组件。片段服务器608包含请 求分布器702,该请求分布器702从片段控制器310接收URI且将它映射到资源,例如片段 产生器610,且检索该资源,该资源一般是片段或片段文档。片段服务器还包括用于处理片 段文档的片段处理器704。片段处理器704包括用于重写该片段的重写引擎706和用于处 理片段或片段文档的XML的XML处理引擎708。例如,如果片段包括其他片段作为子片段,则XML处理引擎708可以按需将两个片段合并在一起。 图8以流程图的形式示意了根据本公开的显示系统的组件的示例性交互。在交互 的描述中,假设服务器已经传递了包括片段的pagelet到浏览器,且浏览器具有装载的片 段控制器。(1)终端用户与视图的片段标记交互且激活已被重写的链接以激活与视图相关 联的JavaScript片段对象,且在交互参数中传递。(2)片段对象构建包括交互参数的交互 URI且调用片段控制器310来检索对应于该URI的片段。片段控制器310从服务器请求该 URI。 (3)网关服务器可以验证该URI以确保该URI的参数落在合适的范围内。如上所述该 范围可以在验证器元件中指定。(4)当基本URI中不包括有效产生器URI时,服务器从内容 管理器检索片段对象,这可以验证终端用户的访问许可,且如果所检索的片段包含片段产 生器引用,产生器URI被编码和标记且作为片段请求的基本URI被包括。(5)如果片段请求 URI包含有效的产生器URI,片段产生器被调用。(6)片段产生器接收在URI中编码的查询 值且返回新的片段。(7)片段服务器根据片段控制器参数重写片段,使得客户机侧片段控制 器可以使用从该片段产生的片段。片段服务器然后返回该片段到片段控制器。(8)片段控 制器接收该片段且更新片段对象,这可以包括瞬时属性更新或事件的再分布。(9)片段控制 器然后使用来自该片段的新标记更新所显示的pagelet。 向客户机提供可嵌入的UI元素的片段的使用允许片段作为子片段被包括在片段 中。片段服务器可以被要求在返回整个片段到客户机之前组合子片段到父片段中。片段服 务器可以处理片段和子片段为XML文档,且合并多个XML文档为单个XML文档,该单个XML 文档作为片段被返回到客户机。 片段服务器可能需要合并多个XML文档为单个文档。为了减少完成处理所必要的 开销,最好使用XML流。然而,难以使用XML流以与XML元素或部分可用的顺序不同的顺序 将分离的XML元素或部分一起组合到输出流中。 图9以框图的形式示意了从分离的XML元素形成的合并的XML文档。XML元素 902、904、906可以是已经存在的XML文档,或它们可以代表来自产生XML元素作为输出的处 理或应用的输出。在图9中,合并的输出XML文档908包含在合并的输出XML文档中找到 的一些XML元素,即〈combined〉和〈/combined〉标签,这些标签可以包括在合并模版文档 中。合并的XML文档908还包括三个XML部分902、904、906的XML,这三个部分以它们被写 入到输出流中的顺序出现在合并XML文档中。 如果所有XML部分在写入输出流时都是可用的,所有XML元素可以以合并的XML 文档所需的顺序被写入到输出流。当并不是所有XML元素902、904、906在写入输出流时都 可用时,使用输出写入流创建合并的XML文档更加复杂。 图10以流程图的形式示意了用于串流XML文档的方法。该方法包含建立用于串 流XML文档的输出流(1002)。建立输出流可以包括创建输出流写入器、用于缓冲XML元素 到输出流写入器的相关联的输出缓冲器,以及用于写XML元素到输出缓冲器的缺省流写入 器。该方法使用缺省流写入器向输出缓冲器写入可用XML元素(1004)。该方法判断需要 插入到输出流中的XML元素是不可用的(1006)。代替一直阻隔到XML元素变得可用,该方 法在输出缓冲器中创建新标记(1008)。创建标记可以包括在输出缓冲器中创建标记、创建 与该标记相关联的标记缓冲器以用于(最终)保持不可用XML元素,以及创建标记流写入 器以用于(最终)写不可用XML元素到标记缓冲器。 一旦标记被创建,该方法继续写可用XML元素到输出缓冲器(1010)。应当意识到,尽管仅描述了单个标记,可以创建用于进行标 记的多个标记,且当XML元素变得可用时,最终写入不同的XML元素到输出缓冲器。而且, 可以在标记中包括标记。当判断出原先不可用的XML元素现在可用时,该方法继续(1012)。 该方法以新可用的XML元素代替输出缓冲器中的标记(1014)。代替标记的步骤可以包括 选择标记流写入器和使用标记流写入器写入新可用的XML元素到标记缓冲器。代替标记的 步骤还可以包括以标记缓冲器中新写入的XML元素代替输出缓冲器中的标记。标记流写入 器可以关闭且缓冲器空间被释放。该方法继续在输出缓冲器中代替标记,直到判断出所有 XML元素已经被写入到输出流(1016)。该方法可以转储清除缓存(flush)并关闭输出流写 入器。 图11示意了伪代码列表、相应的输出缓冲器表示以及所得的输出XML文档。如伪 代码列表所示,可用的XML元素被写入到输出缓冲器。伪代码列表中示出的可用XML元素 是〈begin〉标签。从相应缓冲器表示可以看出,〈begin〉标签被写入到输出缓冲器。接下 来,创建标记,其创建用于写入到输出缓冲器的新标记写入器。使用当前流写入器(标记写 入器),可用的附加XML元素即〈more〉标签被写入到缓冲器。第二标记被创建,包括创建 用于写入到输出缓冲器的新的流写入器并且Markert2被写入到输出缓冲器中。伪代码然 后再次选择缺省流写入器,且写入〈/begin〉标签。输出流写入器然后被转储清除缓存且关 闭。从输出XML文档1106可以看出,一旦XML元素变得可用,输出缓冲器中的标记就被XML 元素代替。而且,输出流写入器确保输出XML文档良好地形成。在图11的示例中,〈/more〉 标签通过输出流写入器被添加到输出XML中,而该元素不被明确地写入到输出流。
XML处理引擎可以结合以上方法以用于从在输出流的开始并不完全可用的不同 XML元素串流良好形成的XML文档。串流器(streamer)可以包括输出最终XML文档的面 向外部的XMLStreamWirter(W)对象。当新的标记被创建时,新XMLStreamWriter (Wn+1)和 新的内部或标记缓冲器(Bn+1)也被创建。任意已有命名空间语境被分配给该新的写入器 (Wn+1)。从一个标记到另一标记的切换选择正确的XMLStreamWriter且使得它是用于写入 到与面向外部的流写入器(W)或输出流写入器相关联的输出缓冲器的有效写入器。只要需 要,新标记可以在任意时间任意地点创建;然而, 一旦创建了标记,不可以将XML写入到先 前的缓冲器。这确保输出XML文档将被良好形成。如有需要或期望,只要知道完成了连续 缓冲器,就可以开始最终的输出流。这些缓冲器然后可以被丢弃。 如上所述,当合并XML组件以形成输出XML文档时,可能要求或希望基于指示XML 源是否必须包括在最终结果中的条件,从具有主XML文档的各个源合并XML。由于性能原 因,不产生要从结果排除的源。用于合并源的条件可能需要对于合并的文档的当前状态进 行验证。结果,该条件验证应该考虑已经合并的源。 为了提供用于产生合并的XML文档的基于简单规则的方法,可以使用XML源。XML 源可以使用例如由StAX提供的XML读取器读取,从而读取XML文档。当XML读取器读取 XML文档时,XML源串流XML文档。这样,可以在XML文档被读取时产生XML文档。XML源 可以包括用于合并XML片的规则。下面是用于提供读取XML文档的XML读取器的样本程序 的伪代码列表。 Create 〃 merge 〃 reader Assign (master) document to reader
15
Set rule for sourcel(add after〈a》
Set rule for source2 (add皿der〈textl》
Set rule for source3 (add after〈d》 Set rule for source4(add imder〈source3>if〈text3>does notexist)
Return" merge" reader 从上述伪代码列表可以看出,用于合并文档的新的XML读取器被创建。使用创建 的合并读取器,XML源被合并的主文档被分配给读取器。这些源然后通过设置将添加XML文 档的规则被合并到文档中。因此,如果源不满足规则,它不被包括在合并的文档中,节省了 开销且增加了性能。例如,如果〈text3〉不存在,源4将被合并到XML文档中,在〈source3〉 下。假设〈text3〉在合并文档中存在,则源4将不被添加。因为使用规则,XML处理引擎不 需要读取或处理源4。 XML处理引擎可以包括如上所述用于提供基于规则的XML合并读取器的模块。XML 处理引擎还可以包括提供XML元素的串流重排序的模块。基于规则的XML合并读取器可以 使用串流重排序来提供合并的XML文档。 除了如上所述的合并XML文档和重排序XML元素,XML处理引擎可以提供XML文 档向输出流的事务性写入。事务性处理允许部分XML文档位于输出流中,且如果必要的话 之后从输出流移除(回滚(rollback))或者保留(提交(commit))。 在XML输出流的背景下,"事务"在输出流写入器定位于起始元素位置之后开始。 所有后续API调用被认为是该单元的一部分。该指令单元可以被提交或回滚。还可以在现 有事务单元内部开始新的事务。然而,提交的内部单元经历外部提交或回滚事务。
事务API可以被添加到StAX API中。事务性StAX API包括
參begin ()被调用,指示新的XML流写入器事务的开始; 參commit ()被调用以提交当前XML事务到写入器,或者如果提交的事务是嵌套 的,悬挂父事务;以及 參rollback ()被调用以在当前事务期间移除被添加到流写入器的XML元素。
begin()必须在commit()和rollback()之前且当输出流中的位置位于开放起 始元素之后时调用。begin()调用可以在另一启动的事务、多层嵌套事务内调用。每个 begin()调用必须最终与commit ()或rollback()调用平衡。可以执行任意数目的嵌套事 务,然而,存储器消耗将随着嵌套事务数目的增加而增加。在commit()或rollback()调用 之后,XML被认为良好形成,且只要1级事务被提交,即事务不嵌套,最终输出流可以开始。
图12以流程图的形式示意了用于向XML流提供事务性能力的方法。该方法开始于 1200,执行StAX输出流API调用(1202)以设置和启动XML串流。做出begin()调用(1204) 以启动串流XML事务。做出其他StAX输出流AIP调用,例如,向流写入元素(1206)。如果 事务要被嵌套,该方法返回到1204,在那里,另一 begin()被调用以开始嵌套的事务。 一旦 XML成流事务完成,commit ()或rollback()被调用(1208)。如果rollback已被调用(在 1208为回滚?),则在S3中串流输出(1206)的所有XML被丢弃且如果没有悬挂事务且没 有其他XML需要被串流,处理进行到S5(1212)。否则在Sl,该处理串流更多的XML(1202)。 在S5 (1212),执行StAX输出流API调用以完成串流XML。如果在S4 (1208) , commit ()被调 用(在1208为提交?),则串流输出的所有XML被维护且如果其他XML元素存在,处理返回
16到Sl,或者如果所有XML已被处理,则处理返回到S5。 图13以示图的方式示意了示例性使用案例和得到的流输出。参考使用案例A1302,可以看出,声明S4和S5被包含在串流XML事务中。因为事务被提交,通过S4和S5写入的元素位于输出流中。参考使用案例B 1304,相同的声明被串流,然而,在这种情况下,事务已经被滚回,且使得S4和S5的元素不在输出流中。参考使用案例C1306,示出了嵌套的事务。内部的事务已被提交;然而,因为在外部的事务被回滚,在输出中不存在外部事务中串流的元素。
权利要求
一种用于显示信息的客户机/服务器系统,该系统包含服务器,具有用于执行存储在计算机可读存储器上的指令的处理器,该存储器耦合到所述处理器,得到处理器执行的指令,所述处理器执行的指令在所述计算机可读存储器中提供片段服务器,该片段服务器用于向一个或更多个客户机提供多个片段对象,每个片段对象包括标记组件和管理组件;客户机,具有用于执行存储在计算机可读存储器中的指令的客户机处理器,该计算机可读存储器与所述客户机处理器耦合,得到客户机处理器执行的指令,所述客户机处理器执行的指令在所述计算机可读存储器中提供显示器,用于显示多个视图,每个视图通过片段对象的标记组件描述;以及片段控制器,与所述显示器相关联,用于管理所述多个片段对象,所述片段管理器从所述服务器接收片段对象且基于接收的片段的标记组件更新多个视图中的一个视图,且基于接收的片段对象的管理组件更新片段对象中的一个或更多个管理组件。
2. —种用于串流XML文档的方法,该方法包含 创建输出流写入器,用于串流XML文档的输出;创建与该输出流写入器相关联的输出缓冲器,用于保持信息以写入到该输出流写入器中;创建缺省流写入器,用于写入可用XML元素到输出缓冲器;判断不存在XML文档中需要的XML元素,且创建用于该XML元素的标记;当该XML元素变得可用时替换输出缓冲器中的标记;判断没有更多的XML元素要写入到输出流,以及关闭输出流写入器。
3. 根据权利要求2所述的方法,还包含使用该缺省流写入器向该输出缓冲器写入附加 可用XML元素。
4. 根据权利要求2所述的方法,其中创建标记包含 向该输出缓冲器写入指示该XML文档中XML元素的所需位置的标记;一旦该XML元素可用,创建与用于保持该XML元素的标记相关联的标记缓冲器;以及 创建与该写入缓冲器相关联的标记流写入器,以向该标记缓冲器写入该XML元素。
5. 根据权利要求2所述的方法,其中代替输出缓冲器中的标记包含 选择标记流写入器;使用所选的标记流写入器向该标记缓冲器写入现在可用的XML元素; 使用该标记缓冲器代替该输出缓冲器中的标记;以及 关闭该标记写入器。
全文摘要
描述了一种用于显示信息的客户机/服务器系统。该服务器包括用于向一个或更多个客户机提供多个片段对象的片段服务器,每个片段对象包括标记组件和管理组件。该客户机包括用于显示多个视图的显示器,每个视图通过片段对象的标记组件描述;以及片段控制器,该片段控制器与所述显示器相关联,用于管理所述多个片段对象,所述片段控制器从所述服务器接收片段对象且基于接收的片段的标记组件更新多个视图中的一个视图,且基于接收的片段对象的管理组件更新片段对象的一个或多个管理组件。
文档编号G06F17/30GK101739442SQ200910212030
公开日2010年6月16日 申请日期2009年11月6日 优先权日2008年11月21日
发明者D·罗德里格, R·德斯比恩斯, R·阿博-纳斯福 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1