CN101621480B - 呈现服务器和在其中使用的xsl文件处理方法 - Google Patents

呈现服务器和在其中使用的xsl文件处理方法 Download PDF

Info

Publication number
CN101621480B
CN101621480B CN2008101274412A CN200810127441A CN101621480B CN 101621480 B CN101621480 B CN 101621480B CN 2008101274412 A CN2008101274412 A CN 2008101274412A CN 200810127441 A CN200810127441 A CN 200810127441A CN 101621480 B CN101621480 B CN 101621480B
Authority
CN
China
Prior art keywords
xsl
abstract syntax
syntax tree
xslt
file
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.)
Expired - Fee Related
Application number
CN2008101274412A
Other languages
English (en)
Other versions
CN101621480A (zh
Inventor
向哲
薛伟
赵邑新
杨博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to CN2008101274412A priority Critical patent/CN101621480B/zh
Publication of CN101621480A publication Critical patent/CN101621480A/zh
Application granted granted Critical
Publication of CN101621480B publication Critical patent/CN101621480B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)

Abstract

本发明涉及呈现服务器和在其中使用的XSL文件处理方法。该XSL/XSLT文件处理方法在呈现服务器中使用,所述呈现服务器为至少一个呈现实体和多个订阅者提供服务,所述多个订阅者可以订阅所述至少一个呈现实体的XML形式的呈现信息,该方法包括以下步骤:接收步骤,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件;抽象语法树生成步骤,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树;公共子表达式识别步骤,用于识别所述多个抽象语法树之间的公共子表达式;以及合并步骤,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。

Description

呈现服务器和在其中使用的XSL文件处理方法
技术领域
本发明一般涉及计算机技术领域,具体地说,涉及一种呈现服务器和在呈现服务器中使用的XSL/XSLT文件处理方法。
背景技术
目前,呈现服务已经发展到远远超出类似于MSN或Sametime中的“在线伙伴”。呈现服务现在被广泛应用于电信、企业和消费营销领域,并且成为Web2.0、IMS(IP多媒体系统)、SOA(面向服务架构)、3GPP(第三代移动通信伙伴项目)等技术的基本能力。此外,对于呈现的内容,除了在线状态之外,呈现服务还可以提供节点的状态信息,例如电话、计算机、甚至是应用的可用性、是否就绪、工作负荷、健全性等。这些状态被称为呈现信息。
这种呈现服务能被良好接受并被成功部署的一个原因在于它是一个标准且清楚的操作模型。图1示出了呈现服务的一个抽象模型。该模型包括三个实体:呈现实体103(Presentity)、呈现服务器101(Presence Server)和订阅者105(Subscriber)。虽然为了简单起见,在图1中只示出了一个呈现实体和一个订阅者,但是本领域技术人员应该理解,在该呈现系统中可以有多个呈现实体和多个订阅者。并且呈现实体本身也可以是一个订阅者。
在该模型中,呈现服务器与两种不同的客户端连接。一种客户端是呈现实体,它向呈现服务器提供呈现信息,以在呈现服务器上存储和发布呈现信息。另一种客户端是订阅者,它从呈现服务器接收呈现信息。应该注意的是,虽然在该模型中,这两种客户端被分离对待,但是它们可以合并在一个实体里。呈现实体(例如装置、应用等)是会发生状态改变的实体,而订阅者是对这种状态改变感兴趣的实体。呈现实体将其“当前”状态信息(呈现信息)发布到类似于呈现服务器的实体中。呈现信息被存储在呈现服务器中。订阅者向呈现服务器请求某些呈现实体的呈现信息的改变通知。当被订阅的呈现实体的呈现信息改变时,例如当用户上线了一会之后就下线时,呈现信息的改变通过通知被发布到订阅者。
图2A至2C显示了呈现信息从P1改变到P2时的信息流。在图2A中,呈现实体的呈现信息从P1改变到P2。在图2B中,呈现实体将呈现信息P2发布到呈现服务器,呈现服务器将原先存储的该呈现实体的呈现信息P1更新为P2。在图2C中,呈现服务器将呈现信息P2通知给订阅者,从而使订阅者知道该呈现实体的呈现信息已从P1改变到P2。
上述模型是一个pub-sub(发布-订阅)模型,该pub-sub模型已被证明是非常高效的,越来越多的应用已采用该模型。
现在,呈现信息通常用XML(eXtensible Markup Language,可扩展标记语言)来表示,因为XML具有标准化和结构化的性质。也就是说,将一个XML文档用作呈现信息,该文档通常被称为PIDF(Presence Information Data Format,呈现信息数据格式)文档。
随着越来越广泛地采用基于pub-sub/呈现信息的应用,可伸缩性和性能已经成为阻碍该技术进一步成功应用的两个主要障碍。事实上,对于一个呈现服务器,可能有超过30万个订阅者。每个订阅者可能订阅了呈现信息中的不同内容,此外,每个订阅者可能具有不同的处理和理解能力,这些都可以通过登记(Register)而通知给呈现服务器。登记是pub-sub模型中的另一常用方法,因其是本领域技术人员所公知的,在此不对其详细描述。
然后,呈现服务器可以根据呈现信息中感兴趣的内容和订阅者自身的能力,对所述呈现信息进行定制,以通知各个订阅者。通常,呈现服务器对每个订阅者应用一个过滤器。为了处理XML PDIF文档,该过滤器可以是用来进行XML转换的XSL(Extensible StylesheetLanguage,可扩展样式单语言)或XSLT(Extensible Stylesheet LanguageTransformations,可扩展样式单语言转换)文件。但是,尤其是考虑到在呈现服务器中有大于90%的通信量是公布/通知消息而在这些公布/通知消息中又有大于90%的消息是通知消息这一事实,处理如此多的XSL/XSLT文件对于呈现服务器来说是非常困难的事情。
由于XML的基于文本进行解析和编写的性质,资源消耗将会迅速使呈现服务器过载,从而无法实现更大的规模和更好的性能。
发明内容
为了解决上述问题,本发明提供了一种呈现服务器和在其中使用的XSL/XSLT文件处理方法。
根据本发明的第一方面,提供了一种呈现服务器,该呈现服务器为至少一个呈现实体和多个订阅者提供服务,所述多个订阅者可以订阅所述至少一个呈现实体的XML形式的呈现信息,所述呈现服务器包括:接收装置,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件;抽象语法树生成装置,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树;公共子表达式识别装置,用于识别所述多个抽象语法树之间的公共子表达式;和合并装置,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。
根据本发明的第二方面,提供了一种用于在呈现服务器中处理XSL/XSLT文件的方法,所述呈现服务器为至少一个呈现实体和多个订阅者提供服务,所述多个订阅者可以订阅所述至少一个呈现实体的XML形式的呈现信息,该方法包括以下步骤:接收步骤,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件;抽象语法树生成步骤,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树;公共子表达式识别步骤,用于识别所述多个抽象语法树之间的公共子表达式;以及合并步骤,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。
通过实施本发明,与传统技术相比,实现了下述优点:使作为呈现信息的XML文档流过合并后的树形结构而不是由各XSL文件分别对其进行从头至尾的处理,这提高了中间处理结果的重用率。
根据本发明的方法适于在订阅关系发生变化时执行。因为在呈现服务器中大部分(例如,大于90%)的通信量是公布/通知消息而在这些公布/通知消息中又有大部分(例如,大于90%)的消息是通知消息,而订阅关系的变化次数同通知消息的发送次数相比是非常少的,所以本发明的方法对于性能提高是非常有帮助的。
另外,本发明的方法可在不改动原有服务器运行方式的情况下执行,无需对原有服务器的硬件进行改动,所以能够在提高性能的同时抑制整体成本的上升。
附图说明
以下通过结合附图阅读参考下述对说明性实施例的详细描述,将更好地理解本发明本身、实施方式、其它目的及其优点。在附图中:
图1示出了现有技术中的呈现服务的一个抽象模型。
图2A至2C示出了呈现信息从P1改变到P2时的信息流。
图3A和3B分别示出了XSL文件A和B的抽象语法树。
图4示出了合并图3A和3B中的抽象语法树而得到的抽象语法树。
图5示出了根据本发明的一个实施例的在呈现服务器中合并XSL/XSLT文件的方法的流程500。
图6示出了根据本发明的另一实施例的在呈现服务器中合并XSL/XSLT文件的方法的流程600。
图7示出了根据本发明的一个实施例的在呈现服务器中处理XSL/XSLT文件的方法的流程700。
图8示出了根据本发明的一个实施例的呈现服务器800。
图9示出了根据本发明的另一个实施例的呈现服务器900。
图10示出了图8中的抽象语法树生成装置的一个实施例的结构图。
图11示出了图8中的合并装置的一个实施例的结构图。
具体实施方式
以下将参照附图对本发明的实施方式进行详细说明。
在解释本发明的技术方案之前,先引入一个XML文档A,作为后续讨论的基础。
<?xml version=″1.0″encoding=″UTF-8″?>
<presence xmlns=″urn:ietf:params:xml:ns:pidf″
          xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
          xmlns:lt=″urn:ietf:params:xml:ns:location-type″
          xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
          xmlns:cpref=″urn:example-com:pidf-prefscaps″
          entity=″pres:someoneexam ple.com″>
    <tuple id=″bs35r9″>
         <status>
              <basic>closed</basic>
         </status>
         <dm:deviceID>urn:device:0003ba4811e3</dm:deviceID>
         <rpid:relationship>
              <rpid:self/>
         </rpid:relationship>
         <rpid:service-class>
              <rpid:electronic/>
         </rpid:service-class>
         <contact priority=″1.0″>im:someonemobile.example.net</contact>
         <timestamp>2005-10-27T16:49:29Z</timestamp>
    </tuple>
    <tuple id=″thr76jk″>
         <status>
              <basic>open</basic>
         </status>
         <cpref:prefscaps>
              <cpref:Description>voice</cpref:Description>
         </cpref:prefscaps>
         <contact priority=″0.9″>tel:2224055555domain.com</contact>
    </tuple>
    <tuple id=″eg92n8″>
         <status>
              <basic>open</basic>
         </status>
         <dm:deviceID>urn:x-mac:0003ba4811e3</dm:deviceID>
         <rpid:class>email</rpid:class>
         <rpid:service-class>
              <rpid:electronic/>
         </rpid:service-class>
         <rpid:status-icon>http://example.com/mail.png</rpid:status-icon>
         <contact priority=″1.0″>ma ilto:someoneexample.com</contact>
     </tuple>
     <dm:device id=″pc147″>
         <rpid:user-input idle-threshold=″600″last-input=″2004-10-21T13:20:00-05:00″>
              idle
         </rpid:user-input>
         <dm:deviceID>urn:device:0003ba4811e3</dm:deviceID>
         <dm:note>PC</dm:note>
     </dm:device>
</presence>
此XML文档A基于PIDF模式,用于在符合用于呈现和即时消息传递公共模型的系统中交换呈现信息。XML文档A包括根元素presence、零或多个承载呈现信息的tuple元素、零或多个note元素以及零或多个来自其它名字空间的扩展元素。每个tuple(元组)定义了一个为“open(开)”或“closed(关)”的基本状态basic。
RFC4479中的呈现数据模型将服务、装置和人的概念定义为用于对呈现实体的状态进行建模的数据元素。使用在PDIF中定义的tuple元素来定义服务;使用在上述数据模型中定义的device元素来表示装置。其它元素也都是本领域技术人员所公知的,例如在RFC4480中定义了作为PDIF的扩展的RPID(Rich Presence Information Data,丰富呈现信息数据)模式,在该模式中详细定义了上述XML文档A中以rpid开始的各个元素。因此,在本说明书中不再对其进行详细描述。
XML文档A描述的是呈现实体“pres:someoneexample.com”。此呈现实体的SIP(Session Initiation Protocol,会话发起协议)联系地址是“sip:someoneexample.com”。XML文档A包含了三个tuple元素,分别对应于该呈现实体支持的三种服务,其联系方式分别为:即时消息、电话和电子邮件。三个联系地址分别是,一个即时通信地址“im:someonemobile.example.net”,一个电话号码“tel:2224055555domain.com”和一个电子邮箱地址“mailto:someoneexample.com”。其中,即时消息服务当前为关闭状态,而电话和电子邮件服务当前为开启状态。此外XML文档A还包含有其它信息,因为与本发明无关,就不在此详细描述了。
现在,假设有两个订阅者都对呈现实体“pres:someoneexample.com”感兴趣。第一订阅者感兴趣的是该呈现实体的所有的基本状态为open的联系地址信息。据此,第一订阅者向呈现服务器发送如下的订阅请求:
SUBSCRIBE sip:presentitydomain.com SIP/2.0
To:<sip:someoneexample.com>
From:<sip:watcherdomain.com>
{SIP消息头部的其余内容省略}
   <?xml version=″1.0″encoding=″UTF-8″?>
   <ev-filter-set xmlns=″urn:ietf:params:xml:ns:simple-pres-filter″
                  xmlns:pidf=″urn:ietf:params:xml:ns:pidf″
                  xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
                  xmlns:lt=″urn:ietf:params:xml:ns:location-type″
                  xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
                  xmlns:cpref=″urn:example-com:pidf-prefscaps″>
       <ev-filter id=″open_mean″uri=″sip:someoneexample.com″>
          <what report=″default″>
             //pidf:tuple[pidf:status/pidf:basic=′open′and pidf:contact]″>
          </what>
       </ev-filter>
   </ev-filter-set>
该订阅请求是一包含报头部分和有效载荷部分的消息,称其为消息A,其中有效载荷部分是一个XML文档。从该订阅请求中可以看出,订阅对象是uri=″sip:someoneexample.com″的呈现实体。该XML文档是一个过滤器,它等价于如下的XSL文件A:
<xsl:stylesheet xmlns:xsl=″http://www.w3.org/1999/XSL/Transform″
                xmlns:pidf=″urn:ietf:params:xml:ns:pidf″
                xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
                xmlns:lt=″urn:ietf:params:xml:ns:location-type″
                xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
               xmlns:cpref=″urn:example-com:pidf-prefscaps″version=″1.0″>
     <xsl:template match=″//pidf:tuple[pidf:status/pidf:basic=′open′and pidf:contact]″>
          <xsl:copy-of select=″.″/>
     </xsl:template>
     <xsl:template match=″text()″/>  <!--本行用于消除无效文本输出,本身无意义-->
</xsl:stylesheet>
该XSL文件A是一个过滤器,其作用是对XML文档A中的元组进行匹配,该匹配的条件为tuple节点的status子节点的basic子节点的值为“open”并且tuple节点存在contact子节点,满足该条件的tuple节点被匹配。然后,复制匹配的tuple节点集中各节点的祖先节点和子孙节点。
按照现有技术,呈现服务器在接收到上述订阅请求时,将XSL文件A存储在呈现服务器中,用作第一订阅者的过滤器。该过滤器被XSLT编译器编译并被转换成某种内存表示。这取决于所使用的XSLT编译器。
当呈现服务器接收到来自呈现实体的作为呈现信息的XML文档A时,将XML文档A输入到XSL文件A的经编译的内存表示,得到的输出如下:
NOTIFY sip:presentitydomain.com SIP/2.0
To:<sip:watcherdomain.com>
From:<sip:someoneexample.com>
{SIP消息头部的其余内容省略}
<?xml version=″1.0″encoding=″UTF-8″?>
<presence xmlns=″urn:ietf:params:xml:ns:pidf″
     xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
     xmlns:lt=″urn:ietf:params:xml:ns:location-type″
     xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
     xmlns:cpref=″urn:example-com:pidf-prefscaps″
     entity=″pres:someoneexample.com″>
  <tuple id=″thr76jk″>
    <status>
        <basic>open</basic>
    </status>
    <cpref:prefscaps>
        <cpref:Description>voice</cpref:Description>
    </cpref:prefscaps>
    <contact priority=″0.9″>tel:2224055555domain.com</contact>
     </tuple>
     <tuple id=″eg92n8″>
       <status>
          <basic>open</basic>
       </status>
       <dm:deviceID>urn:x-mac:0003ba4811e3</dm:deviceID>
       <rpid:class>email</rpid:class>
       <rpid:service-class><rpid:electronic/></rpid:service-class>
       <rpid:status-icon>http://example.com/mail.png</rpid:status-icon>
       <contact priority=″1.0″>mailto:someoneexample.com</contact>
    </tuple>
</presence>
该通知消息的有效载荷部分是一个XML文档,其是XML文档A的经过XSL文件A过滤后的文档。该文档包括第一订阅者感兴趣的、呈现实体“pres:someoneexample.com”的所有基本状态为open的联系地址信息。即,在本示例中,presence元素只包括基本状态为open的电话和电子邮件服务的元组。
另外,第二订阅者感兴趣的是呈现实体“pres:someoneexample.com”目前使用的所有邮件联系地址信息。据此,第二订阅者向呈现服务器发送如下的订阅请求:
SUBSCRIBE sip:presentitydomain.com SIP/2.0
To:<sip:someoneexample.com>
From:<sip:watcher2domain.com>
{SIP消息头部的其余内容省略}
   <?xml version=″1.0″encoding=″UTF-8″?>
   <ev-filter-set xmlns=″urn:ietf:params:xml:ns:simple-pres-filter″
                  xmlns:pidf=″urn:ietf:params:xml:ns:pidf″
                  xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
                  xmlns:lt=″urn:ietf:params:xml:ns:location-type″
                  xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
                  xmlns:cpref=″urn:example-com:pidf-prefscaps″>
      <ev-filter id=″open_mean″uri=″sip:someoneexample.com″>
         <what report=″default″>
            //pidf:tuple[pidf:status/pidf:basic=′open′and starts-with(pidf:contact,′mailto′)]″>
         </what>
      </ev-filter>
   </ev-filter-set>
该订阅请求是一包含报头部分和有效载荷部分的消息,称其为消息B,其中有效载荷部分是一个XML文档。从该订阅请求中可以看出,订阅对象是uri=″sip:someoneexample.com″的呈现实体。该XML文档是一个过滤器,它等价于如下的XSL文件B:
<xsl:stylesheet xmlns:xsl=″http://www.w3.org/1999/XSL/Transform″
             xmlns:pidf=″urn:ietf:params:xml:ns:pidf″
             xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
             xmlns:lt=″urn:ietf:params:xml:ns:location-type″
             xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
             xmlns:cpref=″urn:example-com:pidf-prefscaps″version=″1.0″>
    <xsl:template match=″//pidf:tuple[pidf:status/pidf:basic=′open′and
                       starts-with(pidf:contact,′mailto′)]″>
         <xsl:copy-of select=″.″/>
    </xsl:template>
    <xsl:template match=″text()″/>
</xsl:stylesheet>
该XSL文件B是一个过滤器,其作用是对XML文档A中的元组进行匹配,该匹配的条件为tuple节点的status子节点的basic子节点的值为“open”并且tuple节点的contact子节点的值以“mailto”开始,满足该条件的tuple节点被匹配。然后,复制匹配的tuple节点集中各节点的祖先节点和子孙节点。
与XSL文件A相似,按照现有技术,呈现服务器在接收到第二订阅者的订阅请求时,将XSL文件B存储在呈现服务器中,用作第二订阅者的过滤器。该过滤器被XSLT编译器编译并被转换成某种内存表示,例如转换成直接可执行的代码。
当呈现服务器接收到来自呈现实体的作为呈现信息的XML文档A时,将XML文档A输入到XSL文件B的经编译的内存表示,得到的输出如下:
NOTIFY sip:presentitydomain.com SIP/2.0
To:<sip:watcherdomain.com>
From:<sip:someoneexample.com>
{SIP消息头部的其余内容省略}
<?xml version=″1.0″encoding=″UTF-8″?>
   <presence xmlns=″urn:ietf:params:xml:ns:pidf″
       xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
       xmlns:lt=″urn:ietf:params:xml:ns:location-type″
       xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
       xmlns:cpref=″urn:example-com:pidf-prefscaps″
       entity=″pres:someoneexample.com″>
    <tuple id=″eg92n8″>
       <status>
          <basic>open</basic>
       </status>
       <dm:deviceID>urn:x-mac:0003ba4811e3</dm:deviceID>
       <rpid:class>email</rpid:class>
       <rpid:service-class><rpid:electronic/></rpid:service-class>
       <rpid:status-icon>http://example.com/mail.png</rpid:status-icon>
       <contact priority=″1.0″>mailto:someoneexample.com</contact>
    </tuple>
</presence>
该通知消息的有效载荷部分是一个XML文档,其是XML文档A的经过XSL文件B过滤后的文档。该文档包括第二订阅者感兴趣的、呈现实体“pres:someoneexample.com”目前使用的所有邮件联系地址信息。即,在本示例中,presence元素只包括基本状态为open的电子邮件服务的元组。
以上,分别详细介绍了作为现有技术示例的XML文档A、XSL文件A和B,以及用XSLT编译器单独编译XSL文件A和B从而产生它们各自的内存表示的情况。从以上的例子中可以看出,在现有技术中,一个XSLT过滤器在运行时产生的中间或者最终结果无法被具有共同兴趣的其它XSLT过滤器重用。这意味着发生冗余处理从而产生很大浪费,尤其是在订阅者数量众多的情况下。为了解决该问题,在本发明中,提出了一种在呈现服务器中合并XSL/XSLT文件的方法。
参照图5,本发明提供了一种在呈现服务器中合并XSL/XSLT文件的方法。图5显示了本发明的一个实施例所采用的方法流程500,包括如下步骤:
步骤510:接收订阅请求。
步骤520:生成XSL/XSLT文件。
步骤530:存储XSL/XSLT文件。
步骤540:解析XSL/XSLT文件以生成抽象语法树。
步骤550:识别多个抽象语法树之间的公共子表达式。
步骤560:将所述多个抽象语法树合并成一个树结构。
以下结合上面的具体例子来解释本发明的上述处理过程500。
步骤510:接收订阅请求
在呈现服务器运行期间,呈现服务器接收来自订阅者的订阅请求。该订阅请求可以具有上述的消息A的形式。在消息A的有效载荷中含有用于定制呈现信息的过滤器。该过滤器可被转换为XSL/XSLT文件。另选地,该订阅请求可直接包含用于定制呈现信息的XSL/XSLT文件。另外,该订阅请求也可具有本领域技术人员能够想到的其它形式,只要能够表示出订阅者感兴趣的对象即可。
在本实施例中,假设该订阅请求是来自上述例子中的第一订阅者的针对呈现实体“pres:someoneexample.com”的订阅请求。该订阅请求包含基于simple-pres-filter模式的过滤器。
步骤520:生成XSL/XSLT文件
在步骤520中,呈现服务器基于来自订阅者的订阅请求,利用XSL/XSLT文件生成器生成XSL/XSLT文件。XSL/XSLT文件生成器属于现有技术的范畴,目前已知的呈现服务器中包括XSL/XSLT文件生成器。对于订阅请求本身包含XSL/XSLT文件的情况,XSL/XSLT文件生成器的工作仅仅是去掉报头部分。对于订阅请求包含其它形式的过滤器的情况,例如来自第一订阅者的订阅请求的情况,XSL/XSLT文件生成器将该过滤器转换为XSL/XSLT文件。
此外,XSL/XSLT文件生成器还可以根据订阅者的设备的能力,为订阅者生成XSL/XSLT文件。在订阅者的设备的能力是有限的,例如在订阅者的设备仅是没有互联网接入功能的手机的情况下,呈现信息中仅有电话服务对于该订阅者是有用的。XSL/XSLT文件生成器会根据订阅者的设备的能力来生成适合于订阅者的XSL/XSLT文件。由于本领域的普通技术人员知道这是如何实现的,因此不再详细说明。
在本实施例中,XSL/XSLT文件生成器基于来自第一订阅者的订阅请求,生成了XSL文件A。
步骤530:存储XSL/XSLT文件
在步骤530中,将在步骤520中生成的XSL/XSLT文件存储在XSL/XSLT文件数据库中。XSL/XSLT文件数据库可以是一个数据库,但也可以是文件系统中的一个目录。另外,XSL/XSLT文件数据库也可以是诸如硬盘、闪存等的任意非易失性存储器上的空间。
需要说明的是,在XSL/XSLT文件数据库中还存储有应以前接收到的其它订阅者(或第一订阅者自身)的订阅请求而生成的XSL/XSLT文件。在本实施例中,假设在接收到来自第一订阅者的订阅请求之前,在XSL/XSLT文件数据库中已存储有应第二订阅者的订阅请求而生成的XSL文件B。
XSL/XSLT文件数据库中的一个XSL/XSLT文件对应于一个订阅者和呈现实体的对之间的订阅关系。当一个订阅者解除针对特定呈现实体的订阅时,对应的XSL/XSLT文件被删除。当生成了一个XSL/XSLT文件并且与该XSL/XSLT文件对应的订阅关系相同的XSL/XSLT文件已存储在XSL/XSLT文件数据库中时,用新生成的XSL/XSLT文件替换原有的XSL/XSLT文件。总之,XSL/XSLT文件数据库中保存了与当前有效的订阅关系对应的XSL/XSLT文件。
步骤540:解析XSL/XSLT文件以生成抽象语法树
在步骤540中,利用公知的XSL/XSLT文件解析器,将存储在XSL/XSLT文件数据库中的XSL/XSLT文件解析为抽象语法树。
在本实施例中,XSL/XSLT文件数据库中存储有XSL文件A和XSL文件B。XSL文件A和XSL文件B被分别解析为抽象语法树。
具体地说,XSL文件A包含一个模板(template),即图3A中的模板1。模板1包含匹配器(matcher)部分,在匹配器部分中含有表达式,即匹配表达式。本领域技术人员应该理解,可以按照操作符的优先级将一表达式改写为一树状结构,使操作符形成根节点和中间节点并且使操作数形成叶子节点。在将匹配器部分中的表达式展开成树状结构后,就形成了一棵树。
基于上述规则,得出图3A和图3B中的抽象语法树,其中XSL文件A示意性地对应于图3A所示的抽象语法树,而XSL文件B示意性地对应于图3B所示的抽象语法树。
尽管在本实施例中仅例示了生成两个抽象语法树的情况,但是在现实情况中会生成大量的抽象语法树。生成的抽象语法树的数量与XSL/XSLT文件数据库中的XSL/XSLT文件的数量相等。
在本发明的一个实施例中,以增量方式生成抽象语法树。也就是说,对于以前生成的抽象语法树,并不丢弃,而是保存在诸如硬盘或闪存等的非易失性存储器中。仅当所保存的抽象语法树所对应的XSL/XSLT文件发生变化时,才使用XSL/XSLT文件解析器生成用以替换的抽象语法树。通过这样做,呈现服务器不必每次接收到订阅请求时都生成XSL/XSLT文件数据库中所有XSL/XSLT文件的抽象语法树。因此,大大减少了订阅关系的每次变动所带来的工作量,减少了服务器的负载。
所以,在本实施例中,基于在步骤530中的假设,即在接收到来自第一订阅者的订阅请求之前,在XSL/XSLT文件数据库中已存储有响应第二订阅者的订阅请求而生成的XSL文件B,以前已经生成了与XSL文件B相对应的抽象语法树并且该抽象语法树被存储在非易失性存储器中。在此情况下,仅使用XSL/XSLT文件解析器生成与XSL文件A相对应的抽象语法树,而与XSL文件B相对应的抽象语法树是从非易失性存储器中读取的。将在该步骤中生成的与XSL文件A相对应的抽象语法树存储在非易失性存储器中,以便在下次需要进行合并时重用。这种增量式处理减少了工作量,提高了处理速度。
步骤550:识别多个抽象语法树之间的公共子表达式
在步骤550中,识别所述多个抽象语法树之间的公共子表达式。这里要指出的是,在此要识别的是在步骤540中得到所有抽象语法树(包括生成的和读取的抽象语法树)之中的至少两个抽象语法树之间的公共子表达式。当然,如果在三个或更多个抽象语法树之间存在公共子表达式,进行公共子表达式消去的效果会更好,因为中间结果重用会更多。然而,在仅有两个抽象语法树有公共子表达式时,同样可以进行公共子表达式消去。
在本实施例中,从图3A和图3B的抽象语法树可以看出有如下的公共子表达式:
●basic=′open′
●contact
步骤560:将所述多个抽象语法树合并成一个树结构
在步骤560中,根据本发明的一种实施方式,通过对所述多个抽象语法树进行语义分析,从而获得语义信息。可以从与编译原理相关的众多文献中找到对抽象语法树进行语义分析的技术,因此在这里不再详细描述。通过语义分析得到的语义信息例如包括:各公共子表达式的数据类型,如整数、字符串、节点集等;各公共子表达式之间的层级关系;各变量的作用域等。其中,可以使用各公共子表达式的数据类型作为语义信息。
在针对图3A和图3B中的抽象语法树进行分析时,获得如下语义信息:
表1
 图3A中的表达式   数据类型  图3B中的表达式   数据类型
 basic=′open′   布尔  basic=′open′   布尔
 Contact   字符串  contact   字符串
在本发明的一个实施例中,与在步骤540中生成抽象语法树的方式类似,以增量方式产生语义信息。也就是说,对于以前生成的语义信息,并不丢弃,而是保存在诸如硬盘或闪存等的非易失性存储器中。仅当所保存的语义信息所对应的抽象语法树发生变化时,才对改变的抽象语法树进行语义分析以产生新的语义信息。通过这样做,大大减少了订阅关系的每次变动所带来的工作量。
所以,在本实施例中,基于在步骤530中的假设,以前已经生成了对图3B中的抽象语法树(对应于XSL文件B)进行语义分析而得到的语义信息并且该语义信息被存储在非易失性存储器中。在此情况下,仅对图3A中的抽象语法树(对应于XSL文件A)进行语义分析从而产生表1中前两列的语义信息,而表1中后两列的语义信息是从非易失性存储器中读取的。将在该步骤中生成的与图3A中的抽象语法树相对应的语义信息存储在非易失性存储器中,以便在下次需要合并该抽象语法树时重用。这种增量式处理减少了工作量,提高了处理速度。
需要说明的是,在本实施例中仅例示了使用公共子表达式数据类型这一种语义信息,但是本发明并不限于此,还可以使用现有技术中进行语义分析而可获得的其它语义信息。
在获得语义信息后,在判断表1中的数据类型一致的情况下,通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。
所谓的“公共子表达式消去”是编译优化领域的常用技术手段。将具有公共子表达式的抽象语法树进行合并的具体原则是:将“重要程度”高的公共子表达式向抽象语法树的上层挪动,并将差异的部分向抽象语法树的下层挪动,从而实现中间结果(即公共子表达式的求值结果)重用最大化。评价所述重要程度有很多指标,其中常见的指标包括但不限于:公共子表达式的出现次数、公共子表达式的长度等。通常来说,一公共子表达式的出现次数越多,该公共子表达式的重要程度越高;一公共子表达式的长度越长,该公共子表达式的重要程度越高。本领域的技术人员可以通过对各指标加权平均的方式来计算各公共子表达式的重要程度。
在此情况下,图3A和图3B中的两个抽象语法树被合并为图4所示的抽象语法树。在图4中,在(exists)contact节点下形成了两个分支(1)和(2),这两个分支分别对应于模板1中的匹配表达式和模板2中的匹配表达式。
图4所示的经合并的树结构对应于如下的XSL文件:
<xsl:stylesheet xmlns:xsl=″http://www.w3.org/1999/XSL/Transform″
                xmlns:pidf=″urn:ietf:params:xml:ns:pidf″
                xmlns:dm=″urn:ietf:params:xml:ns:pidf:data-model″
                xmlns:lt=″urn:ietf:params:xml:ns:location-type″
                xmlns:rpid=″urn:ietf:params:xml:ns:pidf:rpid″
                xmlns:cpref=″urn:example-com:pidf-prefscaps″version=″1.0″>
      <xsl:template match=″//pidf:tuple[pidf:status/pidf:basic=′open′and pidf:contact]″>
           <xsl:if test=″filtername=′filter1′or
                      (filtername=′filter2′and starts-with(pidf:contact,′mailto′))″>
                <xsl:copy-of select=″.″/>
           </xsl:if>
      </xsl:template>
      <xsl:template match=″text()″/>
</xsl:stylesheet>
应当指出,该XSL文件仅仅是示意性的,其中的变量filter_name以及值′filter1′和′filter2′均是在运行时由编译器使用的临时变量。应当理解,给出这种示意只是为了便于本领域技术人员理解本发明的原理,不应当将其理解为对本发明的任何限制。
另一方面,在判断表1中的数据类型不一致的情况下,不能将图3A和图3B中的两个抽象语法树进行公共子表达式消去。在此情况下,无法重用中间结果,只能把模板1和模板2并列置于根节点下,从而形成一个包含模板1和模板2的功能的XSL文件。
在一个实施例中,可以以增量式方式进行公共子表达式消去,从而将所述多个抽象语法树合并成一个树结构。所谓的增量式方式是指,在已经基于众多的抽象语法树而合并生成了一个树结构的状态下,利用已有的树结构,将响应新的订阅请求而生成的抽象语法树合并到该已有树结构中,而不是每次都基于所有抽象语法树重新进行合并。还可以将增量式合并方式与正常合并方式进行组合,一种组合方式例如可以为,在开始阶段基于所有抽象语法树进行正常合并,在累积了一定数量的抽象语法树后,进行增量式合并。通过增量式合并,可以减小计算量,从而提高系统性能。
以上利用对XSL文件A和B的合并作为示例说明了图5所示的方法流程。XSL文件A和B对应于对同一呈现实体的呈现信息进行定制的订阅请求。因此,对于XSL文件A和B而言,它们的输入XML文档是相同的,即由同一呈现实体发布的呈现信息。因此,通过本发明,使该XML文档经过上述合并得到的树形结构,而不是由各XSL文件分别对其进行的从头至尾的处理,这提高了中间处理结果的重用率,从而提高了运行时的速度以及可伸缩性。需要指出的是,在一另选实施例中,进行合并的多个XSL文件也可以对应于对不同呈现实体的呈现信息进行定制的订阅请求。在这种情况下,虽然不能得到运行时的好处,例如重用中间计算结果从而提高性能和可伸缩性,但是通过将多个XSL文件的内存表示合并为一个,节省了内存空间,降低了内存占用率。
应当注意,图5给出了利用步骤520(生成XSL/XSLT文件)、步骤530(存储XSL/XSLT文件)和步骤540(解析XSL/XSLT文件以生成抽象语法树)来生成与订阅请求中的XSL/XSLT对应表示(任意形式的过滤器)相对应的抽象语法树。但是这仅是示范性的、而非限制性的。本领域技术人员可以基于本说明书的教导采用其它方式来生成上述抽象语法树。例如,不通过XSL/XSLT解析器,而是通过具有从订阅消息中的XSL/XSLT对应表示生成抽象语法树的功能的其它硬件或软件模块等来生成抽象语法树,这些具体生成方法是XML软件开发人员所熟知的。
因此,本领域的技术人员基于本说明书的教导还可以把图5的方法流程进行各种变化,例如实施为图6所示的合并XSL/XSLT文件的方法流程600,该方法包括:
接收步骤610,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件;
抽象语法树生成步骤620,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树;
公共子表达式识别步骤630,用于识别所述多个抽象语法树之间的公共子表达式;以及
合并步骤640,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。
下面,将结合图7来描述一种在呈现服务器中处理XSL/XSLT文件的方法,图7显示了本发明的一个实施例所采用的方法流程700,包括如下步骤:接收步骤710;抽象语法树生成步骤720;公共子表达式识别步骤730;合并步骤740;以及编译步骤750。
因为接收步骤710对应于图5的方法中的步骤510;抽象语法树生成步骤720对应于图5的方法中的步骤520至540;公共子表达式识别步骤730对应于图5的方法中的步骤550;合并步骤740对应于图5的方法中的步骤560,因此,在此不重复描述这些步骤,而只对编译步骤750进行描述。
该编译步骤750用于基于在步骤740中合并的树结构编译生成与所述多个订阅者各自的XSL/XSLT文件相对应的多个执行模块,使得在运行时所述公共子表达式的求值结果能够在所述多个执行模块之间重用。在该步骤中,使用一个编译装置对合并后的树结构进行编译。该编译装置能够编译生成与所述多个订阅者的XSL/XSLT文件相对应的多个执行模块,但是这些执行模块并不是独立的,而是通过公共子表达式而分层地关联起来,它们在运行时会重用公共子表达式的求值结果。例如,在模板3中的<xsl:if>元素中对图4中的分支(1)和(2)进行判断,在判断为真时进行操作(<xsl:copy-of select=″.″/>),这实际上分别代表两个执行模块,即
     <xsl:if test=″filtername=′filter1′)″>
           <xsl:copy-of select=″.″/>
     </xsl:if>
,以及<xsl:if test=″filtername=′filter2′and starts-with(pidf:contact,′mailto′)″>
           <xsl:copy-of select=″.″/>
     </xsl:if>
其中,前一个执行模块对应于图4中的分支(1),后一个执行模块对应于图4中的分支(2)。它们的公共匹配表达式basic=′open′andcontact的求值结果在运行时被这两个执行模块所重用。因为,合并后的树结构组合了许多过滤器,所以与分别单独编译XSL/XSLT文件的情况相比,编译装置可以进行更多优化,从而使冗余处理最小化并且使中间结果重用最大化。
应当注意,此处所述的执行模块可以指编程语言代码意义上的模块,也可以指运行时的内存表示意义上的模块。
在一个实施例中,被合并的多个XSL文件对应于对同一呈现实体的呈现信息进行定制的订阅请求,其通过编译而生成的内存表示(包括多个执行模块)用于处理来自该呈现实体的发布消息。当该呈现实体向呈现服务器发布呈现信息时,呈现服务器首先识别负责处理该呈现实体的呈现信息的内存表示,然后利用该内存表示中的各个模块为与该呈现实体有订阅关系的各个订阅者分别产生一个过滤结果。在对呈现信息进行过滤处理的过程中,在运行时,各执行模块重用中间处理结果,从而提高了性能和可伸缩性。
图8显示了根据本发明一个实施例的呈现服务器800。呈现服务器800为至少一个呈现实体和多个订阅者提供服务,所述多个订阅者可以订阅所述至少一个呈现实体的XML形式的呈现信息。呈现服务器800的输入为来自订阅者的订阅消息。
根据本发明的一个实施例,呈现服务器800包括以下装置。
接收装置810,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件,所述订阅请求可以包含XSL/XSLT文件本身,也可以是其它形式的过滤器,例如基于simple-pres-filter模式的过滤器。
抽象语法树生成装置820,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树。该抽象语法树生成装置820连接到非易失性存储器860,用于从其中读取以前生成的抽象语法树以及将新生成的抽象语法树存储于其中以供以后使用。
公共子表达式识别装置830,用于识别所述多个抽象语法树之间的公共子表达式。在本实施例中,公共子表达式识别装置830按照图5中的步骤550的方式来识别多个抽象语法树之间的公共子表达式。
合并装置840,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。在本实施例中,合并装置840按照图5中的步骤560的方式来合并抽象语法树。
图9示出了根据本发明另一个实施例的呈现服务器900。呈现服务器包括:接收装置910、抽象语法树生成装置920、公共子表达式识别装置930、合并装置940、以及编译装置950。其中,装置910至940的功能与图8中的装置810至840的功能相似,因此省略对其的描述。呈现服务器900中的编译装置950用于基于合并的树结构编译生成与所述多个订阅者的XSL/XSLT文件对应的多个执行模块,其中在运行时所述公共子表达式的求值结果能够在所述多个执行模块之间重用。
需要指出的是,被合并的多个XSL/XSLT文件可以对应于对同一呈现实体的呈现信息进行定制的订阅请求,也可以对应于对不同呈现实体的呈现信息进行定制的订阅请求。在后一种情况下,虽然不能得到运行时的好处,例如重用中间计算结果从而提高性能和可伸缩性,但是通过将多个XSL文件的内存表示合并为一个,节省了内存空间,降低了内存占用率。
此外,呈现服务器800和900还可以包括非易失性存储器,该非易失性存储器用于存储已生成的抽象语法树和静态分析结果(语义信息)。在存储的抽象语法树和静态分析结果所对应的XSL/XSLT文件没有变化的情况下,在需要生成对应的抽象语法树和静态分析结果时,可以仅从非易失性存储器中进行读取而不必进行生成。通过这样的增量式处理,呈现服务器不必每次接收到订阅请求时都生成XSL/XSLT文件数据库中所有XSL/XSLT文件的抽象语法树。因此,大大减少了订阅关系的每次变动所带来的工作量。
图10示出了根据一个实施例的抽象语法树生成装置820的结构图。在图10中,抽象语法树生成装置820包括:XSL/XSLT文件生成器1010,其被配置为基于来自订阅者的订阅请求,生成XSL/XSLT文件;XSL/XSLT文件数据库1020,用于存储由XSL/XSLT文件生成器生成的XSL/XSLT文件;和XSL/XSLT文件解析器1030,用于将存储在XSL/XSLT文件数据库中的XSL/XSLT文件解析为抽象语法树。在一个实施例中,XSL/XSLT文件解析器1030连接到非易失性存储器860,XSL/XSLT文件解析器1030将应订阅请求而生成的抽象语法树存储到非易失性存储器860中以供以后使用,并从非易失性存储器860中读取订阅关系未变化的以前生成的抽象语法树,将读取和生成的抽象语法树一起输出到公共子表达式识别装置830。由此,实现了增量式处理。另外,XSL/XSLT文件数据库1020和非易失性存储器860虽然在概念上是分离的存储空间,但是在一个实施例中,它们可以由同一硬件实现。但是图9仅是示范性的、而非限制性的。本领域技术人员可以基于本说明书的教导采用其它方式来生成上述抽象语法树。例如,不通过XSL/XSLT解析器,而是通过具有从订阅消息中的XSL/XSLT对应表示生成抽象语法树的功能的其它硬件或软件模块等来生成抽象语法树。
图11示出了根据一个实施例的合并装置840的结构图。在图10中,合并装置840还可以包括:静态分析装置1110,用于对所述多个抽象语法树进行语义分析,从而获得语义信息;和合并器1120,其根据所述语义信息,通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。在一个实施例中,静态分析装置1110连接到非易失性存储器860,静态分析装置1110将对根据订阅请求而生成的抽象语法树进行分析而得到的语义信息存储到非易失性存储器860中以供以后使用,并从非易失性存储器860中读取订阅关系未变化的以前生成的抽象语法树的语义信息,将读取和生成的语义信息一起输出到合并器1120。由此,实现了增量式处理。
在图11中,静态分析装置被包含在合并装置中,但是本领域技术人员应该理解,可将静态分析装置和合并装置实现为两个单独的模块。
本领域技术人员会认识到,可以以方法、系统或计算机程序产品的形式提供本发明的实施例。因此,本发明可采取全硬件实施例、全软件实施例,或者组合软件和硬件的实施例的形式。硬件和软件的典型的结合可以是带有计算机程序的通用计算机系统,当程序被加载并被执行时,控制计算机系统,从而可以执行上述的方法。
本发明可以嵌入在计算机程序产品中,它包括使此处描述的方法得以实施的所有特征。所述计算机程序产品被包含在一个或多个计算机可读存储介质(包括,但不限于,磁盘存储器、CD-ROM、光学存储器等)中,所述计算机可读存储介质具有包含于其中的计算机可读程序代码。
已参考根据本发明的方法、系统及计算机程序产品的流程图和/或方框图说明了本发明。流程图和/或方框图中的每个方框,以及流程图和/或方框图中的方框的组合显然可由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、嵌入式处理器或者其他可编程的数据处理设备的处理器,以产生一台机器,从而指令(所述指令通过计算机或者其他可编程数据处理设备的处理器)产生用于实现在流程图和/或方框图的一个或多个方框中规定的功能的装置。
这些计算机程序指令也可保存在一个或多个计算机的读存储器中,每个这种存储器能够指挥计算机或者其他可编程数据处理设备按照特定的方式发挥作用,从而保存在计算机可读存储器中的指令产生一种制造产品,所述制造产品包括实现在流程图和/或方框图的一个或多个方框中规定的功能的指令装置。
计算机程序指令也可被加载到一个或多个计算机或者其他可编程数据处理设备上,使得在所述计算机或者其他可编程数据处理设备上执行一系列的操作步骤,从而在每个这样的设备上产生计算机实现的过程,以致在该设备上执行的指令提供用于实现在流程图和/或方框图的一个或多个方框中规定的步骤。
以上结合本发明的实施方式对本发明的原理进行了说明,但这些说明只是示例性的,不应理解为对本发明的任何限制。本领域技术人员可以对本发明进行各种改变和变形,而不会背离由随附权利要求所限定的本发明的精神和范围。

Claims (14)

1.一种呈现服务器,其为至少一个呈现实体和多个订阅者提供服务,所述多个订阅者可以订阅所述至少一个呈现实体的XML形式的呈现信息,所述呈现服务器包括:
接收装置,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件;
抽象语法树生成装置,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树;
公共子表达式识别装置,用于识别所述多个抽象语法树之间的公共子表达式;
合并装置,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构;和
编译装置,用于基于合并的树结构编译生成与所述多个订阅者的XSL/XSLT文件对应的多个执行模块,其中在运行时所述公共子表达式的求值结果能够在所述多个执行模块之间重用。
2.根据权利要求1所述的呈现服务器,其中,所述多个订阅请求指的是对同一呈现实体的呈现信息进行定制的请求。
3.根据权利要求1所述的呈现服务器,其中,所述抽象语法树生成装置包括:
XSL/XSLT文件生成器,其被配置为基于来自订阅者的订阅请求,生成XSL/XSLT文件;
XSL/XSLT文件数据库,用于存储由XSL/XSLT文件生成器生成的XSL/XSLT文件;和
XSL/XSLT文件解析器,用于将存储在XSL/XSLT文件数据库中的XSL/XSLT文件解析为抽象语法树。
4.根据权利要求1所述的呈现服务器,其中,所述合并装置还包括:
静态分析装置,用于对所述多个抽象语法树进行语义分析,从而获得语义信息;并且
所述合并装置进一步根据所述语义信息,通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。
5.根据权利要求4所述的呈现服务器,其中,所述语义信息包括所述公共子表达式的数据类型和/或所述公共子表达式中的变量的作用域。
6.根据权利要求4所述的呈现服务器,还包括:
非易失性存储装置,用于存储所述多个抽象语法树以及所述语义信息,以供所述公共子表达式识别装置和所述合并装置重用。
7.根据权利要求3所述的呈现服务器,其中,所述合并装置以增量方式进行公共子表达式消去,从而将所述多个抽象语法树合并成一个树结构,其中,所述增量方式指的是,对于以前生成的抽象语法树,并不丢弃,而是保存在非易失性存储器中,仅当所保存的抽象语法树所对应的XSL/XSLT文件发生变化时,才使用XSL/XSLT文件解析器生成用以替换的抽象语法树。
8.一种用于在呈现服务器中处理XSL/XSLT文件的方法,所述呈现服务器为至少一个呈现实体和多个订阅者提供服务,所述多个订阅者可以订阅所述至少一个呈现实体的XML形式的呈现信息,该方法包括以下步骤:
接收步骤,用于接收所述多个订阅者的多个订阅请求,其中每个订阅请求对应于一个XSL/XSLT文件;
抽象语法树生成步骤,用于为每个所述XSL/XSLT文件生成一个抽象语法树,从而针对所述多个订阅请求,生成对应的多个抽象语法树;
公共子表达式识别步骤,用于识别所述多个抽象语法树之间的公共子表达式;
合并步骤,用于通过公共子表达式消去将所述多个抽象语法树合并成一个树结构;以及
编译步骤,用于基于合并的树结构编译生成与所述多个订阅者的XSL/XSLT文件相对应的多个执行模块,使得在运行时所述公共子表达式的求值结果能够在所述多个执行模块之间重用。
9.根据权利要求8所述的方法,其中,所述多个订阅请求指的是对同一呈现实体的呈现信息进行定制的请求。
10.根据权利要求8所述的方法,其中,所述抽象语法树生成步骤包括:
XSL/XSLT文件生成步骤,用于基于来自订阅者的订阅请求,生成XSL/XSLT文件;
存储步骤,用于将所生成的XSL/XSLT文件存储在XSL/XSLT文件数据库中;
XSL/XSLT文件解析步骤,用于将存储在XSL/XSLT文件数据库中的XSL/XSLT文件解析为抽象语法树。
11.根据权利要求8所述的方法,其中,所述合并步骤还包括:
静态分析步骤,用于对所述多个抽象语法树进行语义分析,从而获得语义信息;并且
所述合并步骤根据所述语义信息,通过公共子表达式消去将所述多个抽象语法树合并成一个树结构。
12.根据权利要求11所述的方法,其中,所述语义信息包括所述公共子表达式的数据类型以及所述公共子表达式中的变量的作用范围。
13.根据权利要求11所述的方法,还包括:
存储步骤,用于存储所述抽象语法树以及所述语义信息,以供在所述公共子表达式识别步骤和所述合并步骤中重用。
14.根据权利要求10所述的方法,其中,在所述合并步骤中,以增量方式进行公共子表达式消去,从而将所述多个抽象语法树合并成一个树结构,其中,所述增量方式指的是,对于以前生成的抽象语法树,并不丢弃,而是保存在非易失性存储器中,仅当所保存的抽象语法树所对应的XSL/XSLT文件发生变化时,才在XSL/XSLT文件解析步骤生成用以替换的抽象语法树。
CN2008101274412A 2008-06-30 2008-06-30 呈现服务器和在其中使用的xsl文件处理方法 Expired - Fee Related CN101621480B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101274412A CN101621480B (zh) 2008-06-30 2008-06-30 呈现服务器和在其中使用的xsl文件处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101274412A CN101621480B (zh) 2008-06-30 2008-06-30 呈现服务器和在其中使用的xsl文件处理方法

Publications (2)

Publication Number Publication Date
CN101621480A CN101621480A (zh) 2010-01-06
CN101621480B true CN101621480B (zh) 2012-03-28

Family

ID=41514531

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101274412A Expired - Fee Related CN101621480B (zh) 2008-06-30 2008-06-30 呈现服务器和在其中使用的xsl文件处理方法

Country Status (1)

Country Link
CN (1) CN101621480B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102439911A (zh) * 2010-05-12 2012-05-02 阿尔卡特朗讯 为呈现信息订阅用户过滤其订阅的呈现信息的方法和装置
US9959324B2 (en) * 2015-03-26 2018-05-01 International Business Machines Corporation Bootstrapping the data lake and glossaries with ‘dataset joins’ metadata from existing application patterns
CN111124414B (zh) * 2019-12-02 2024-02-06 东巽科技(北京)有限公司 一种基于操作链接的抽象语法树取词方法
CN116048526B (zh) * 2023-02-13 2023-11-10 中国南方航空股份有限公司 一种航路可用性文档处理方法、装置及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1342290A (zh) * 1998-10-02 2002-03-27 国际商业机器公司 会话浏览器和会话系统
CN1808428A (zh) * 2005-01-22 2006-07-26 鸿富锦精密工业(深圳)有限公司 展现及编辑信息检索条件的系统及方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1342290A (zh) * 1998-10-02 2002-03-27 国际商业机器公司 会话浏览器和会话系统
CN1808428A (zh) * 2005-01-22 2006-07-26 鸿富锦精密工业(深圳)有限公司 展现及编辑信息检索条件的系统及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
KR10-2004-0037905A 2004.05.08

Also Published As

Publication number Publication date
CN101621480A (zh) 2010-01-06

Similar Documents

Publication Publication Date Title
US11790904B2 (en) Voice application platform
US10803865B2 (en) Voice application platform
US20190370615A1 (en) State machine methods and apparatus comprising work unit transitions that execute acitons relating to natural language communication, and artifical intelligence agents to monitor state machine status and generate events to trigger state machine transitions
US6952800B1 (en) Arrangement for controlling and logging voice enabled web applications using extensible markup language documents
US9928251B2 (en) System and method for distributed categorization
US20100131529A1 (en) Open entity extraction system
US7562079B2 (en) Message generator
CN101441561A (zh) 基于上下文模型生成面向服务架构的策略的方法和装置
US20060294076A1 (en) System and method for query planning and execution
US20080077565A1 (en) Method for finding at least one web service, among a plurality of web services described by respective semantic descriptions, in different forms or languages
US20150161235A1 (en) Database content publisher
US7640238B2 (en) Query planning for execution using conditional operators
CN101621480B (zh) 呈现服务器和在其中使用的xsl文件处理方法
Assunção et al. Multi-objective reverse engineering of variability-safe feature models based on code dependencies of system variants
US11068496B2 (en) System and method for data management
Diepenbrock et al. An ontology-based approach for domain-driven design of microservice architectures
US8132182B2 (en) Parallel processing of triggering rules in SIP event notification filters
CN112083926A (zh) 一种Web用户界面生成方法及装置
KR100762712B1 (ko) 규칙기반의 전자문서 변환방법 및 그 시스템
CN113741864B (zh) 基于自然语言处理的语义化服务接口自动设计方法与系统
Misbah et al. Towards a standard WSDL implementation of Multiview web services
CN111143310A (zh) 日志记录方法及装置、可读存储介质
Andročec et al. Using GPT-3 to Automatically Create RESTful Service Descriptions
Han et al. Integration technology of literature contents based on SaaS
CN111930607B (zh) 一种组合Web服务变更测试用例生成方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120328

Termination date: 20120630