專利名稱::呈現(xiàn)服務(wù)器和在其中使用的xsl文件處理方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
,具體地說,涉及一種呈現(xiàn)服務(wù)器和在呈現(xiàn)服務(wù)器中使用的XSL/XSLT文件處理方法。
背景技術(shù):
:目前,呈現(xiàn)服務(wù)已經(jīng)發(fā)展到遠(yuǎn)遠(yuǎn)超出類似于MSN或Sametime中的"在線伙伴"。呈現(xiàn)服務(wù)現(xiàn)在被廣泛應(yīng)用于電信、企業(yè)和消費(fèi)營(yíng)銷領(lǐng)域,并且成為Web2.0、IMS(IP多媒體系統(tǒng))、SOA(面向月艮務(wù)架構(gòu))、3GPP(第三代移動(dòng)通信伙伴項(xiàng)目)等技術(shù)的基本能力。此外,對(duì)于呈現(xiàn)的內(nèi)容,除了在線狀態(tài)之外,呈現(xiàn)服務(wù)還可以提供節(jié)點(diǎn)的狀態(tài)信息,例如電話、計(jì)算機(jī)、甚至是應(yīng)用的可用性、是否就緒、工作負(fù)荷、健全性等。這些狀態(tài)被稱為呈現(xiàn)信息。這種呈現(xiàn)服務(wù)能被良好接受并被成功部署的一個(gè)原因在于它是一個(gè)標(biāo)準(zhǔn)且清楚的操作模型。圖1示出了呈現(xiàn)服務(wù)的一個(gè)抽象模型。該模型包括三個(gè)實(shí)體呈現(xiàn)實(shí)體103(Presentity)、呈現(xiàn)服務(wù)器101(PresenceServer)和訂閱者105(Subscriber)。雖然為了簡(jiǎn)單起見,在圖1中只示出了一個(gè)呈現(xiàn)實(shí)體和一個(gè)訂閱者,但是本領(lǐng)域技術(shù)人員應(yīng)該理解,在該呈現(xiàn)系統(tǒng)中可以有多個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者。并且呈現(xiàn)實(shí)體本身也可以是一個(gè)訂閱者。在該模型中,呈現(xiàn)服務(wù)器與兩種不同的客戶端連接。一種客戶端是呈現(xiàn)實(shí)體,它向呈現(xiàn)服務(wù)器提供呈現(xiàn)信息,以在呈現(xiàn)服務(wù)器上存儲(chǔ)和發(fā)布呈現(xiàn)信息。另一種客戶端是訂閱者,它從呈現(xiàn)服務(wù)器接收呈現(xiàn)信息。應(yīng)該注意的是,雖然在該模型中,這兩種客戶端被分離對(duì)待,但是它們可以合并在一個(gè)實(shí)體里。呈現(xiàn)實(shí)體(例如裝置、應(yīng)用等)是會(huì)發(fā)生狀態(tài)改變的實(shí)體,而訂閱者是對(duì)這種狀態(tài)改變感興趣的實(shí)體。呈現(xiàn)實(shí)體將其"當(dāng)前"狀態(tài)信息(呈現(xiàn)信息)發(fā)布到類似于呈現(xiàn)服務(wù)器的實(shí)體中。呈現(xiàn)信息被存儲(chǔ)在呈現(xiàn)服務(wù)器中。訂閱者向呈現(xiàn)服務(wù)器請(qǐng)求某些呈現(xiàn)實(shí)體的呈現(xiàn)信息的改變通知。當(dāng)被訂閱的呈現(xiàn)實(shí)體的呈現(xiàn)信息改變時(shí),例如當(dāng)用戶上線了一會(huì)之后就下線時(shí),呈現(xiàn)信息的改變通過通知被發(fā)布到訂閱者。圖2A至2C顯示了呈現(xiàn)信息從P1改變到P2時(shí)的信息流。在圖2A中,呈現(xiàn)實(shí)體的呈現(xiàn)信息從P1改變到P2。在圖2B中,呈現(xiàn)實(shí)體將呈現(xiàn)信息P2發(fā)布到呈現(xiàn)服務(wù)器,呈現(xiàn)服務(wù)器將原先存儲(chǔ)的該呈現(xiàn)實(shí)體的呈現(xiàn)信息Pl更新為P2。在圖2C中,呈現(xiàn)服務(wù)器將呈現(xiàn)信息P2通知給訂閱者,從而使訂閱者知道該呈現(xiàn)實(shí)體的呈現(xiàn)信息已從Pl改變到P2。上述模型是一個(gè)pub-sub(發(fā)布-訂閱)模型,該pub-sub模型已被證明是非常高效的,越來越多的應(yīng)用已采用該模型?,F(xiàn)在,呈現(xiàn)信息通常用XML(extensibleMarkupLanguage,可擴(kuò)展標(biāo)記語言)來表示,因?yàn)閄ML具有標(biāo)準(zhǔn)化和結(jié)構(gòu)化的性質(zhì)。也就是說,將一個(gè)XML文檔用作呈現(xiàn)信息,該文檔通常被稱為PIDF(PresenceInformationDataFormat,呈現(xiàn)信息數(shù)據(jù)格式)文檔。隨著越來越廣泛地采用基于pub-sub/呈現(xiàn)信息的應(yīng)用,可伸縮性和性能已經(jīng)成為阻礙該技術(shù)進(jìn)一步成功應(yīng)用的兩個(gè)主要障礙。事實(shí)上,對(duì)于一個(gè)呈現(xiàn)服務(wù)器,可能有超過30萬個(gè)訂閱者。每個(gè)訂閱者可能訂閱了呈現(xiàn)信息中的不同內(nèi)容,此外,每個(gè)訂閱者可能具有不同的處理和理解能力,這些都可以通過登記(Register)而通知給呈現(xiàn)服務(wù)器。登記是pub-sub模型中的另一常用方法,因其是本領(lǐng)域技術(shù)人員所公知的,在此不對(duì)其詳細(xì)描述。然后,呈現(xiàn)服務(wù)器可以根據(jù)呈現(xiàn)信息中感興趣的內(nèi)容和訂閱者自身的能力,對(duì)所述呈現(xiàn)信息進(jìn)行定制,以通知各個(gè)訂閱者。通常,呈現(xiàn)服務(wù)器對(duì)每個(gè)訂閱者應(yīng)用一個(gè)過濾器。為了處理XMLPDIF文檔,該過濾器可以是用來進(jìn)行XML轉(zhuǎn)換的XSL(ExtensibleStylesheetLanguage,可擴(kuò)展樣式單語言)或XSLT(ExtensibleStylesheetLanguageTransformations,可擴(kuò)展樣式單語言轉(zhuǎn)換)文件。但是,尤其是考慮到在呈現(xiàn)服務(wù)器中有大于90%的通信量是公布/通知消息而在這些公布/通知消息中又有大于90%的消息是通知消息這一事實(shí),處理如此多的XSL/XSLT文件對(duì)于呈現(xiàn)服務(wù)器來說是非常困難的事情。由于XML的基于文本進(jìn)行解析和編寫的性質(zhì),資源消耗將會(huì)迅速使呈現(xiàn)服務(wù)器過載,從而無法實(shí)現(xiàn)更大的規(guī)模和更好的性能。
發(fā)明內(nèi)容為了解決上述問題,本發(fā)明提供了一種呈現(xiàn)服務(wù)器和在其中使用的XSL/XSLT文件處理方法。根據(jù)本發(fā)明的第一方面,提供了一種呈現(xiàn)服務(wù)器,該呈現(xiàn)服務(wù)器為至少一個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者提供服務(wù),所述多個(gè)訂閱者可以訂閱所述至少一個(gè)呈現(xiàn)實(shí)體的XML形式的呈現(xiàn)信息,所述呈現(xiàn)服務(wù)器包括接收裝置,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件;抽象語法樹生成裝置,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹;公共子表達(dá)式識(shí)別裝置,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式;和合并裝置,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。根據(jù)本發(fā)明的第二方面,提供了一種用于在呈現(xiàn)服務(wù)器中處理XSL/XSLT文件的方法,所述呈現(xiàn)服務(wù)器為至少一個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者提供服務(wù),所述多個(gè)訂閱者可以訂閱所述至少一個(gè)呈現(xiàn)實(shí)體的XML形式的呈現(xiàn)信息,該方法包括以下步驟接收步驟,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件;抽象語法樹生成步驟,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹;公共子表達(dá)式識(shí)別步驟,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式;以及合并步驟,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。通過實(shí)施本發(fā)明,與傳統(tǒng)技術(shù)相比,實(shí)現(xiàn)了下述優(yōu)點(diǎn)使作為呈現(xiàn)信息的XML文檔流過合并后的樹形結(jié)構(gòu)而不是由各XSL文件分別對(duì)其進(jìn)行從頭至尾的處理,這提高了中間處理結(jié)果的重用率。根據(jù)本發(fā)明的方法適于在訂閱關(guān)系發(fā)生變化時(shí)執(zhí)行。因?yàn)樵诔尸F(xiàn)服務(wù)器中大部分(例如,大于90%)的通信量是公布/通知消息而在這些公布/通知消息中又有大部分(例如,大于卯%)的消息是通知消息,而訂閱關(guān)系的變化次數(shù)同通知消息的發(fā)送次數(shù)相比是非常少的,所以本發(fā)明的方法對(duì)于性能提高是非常有幫助的。另外,本發(fā)明的方法可在不改動(dòng)原有服務(wù)器運(yùn)行方式的情況下執(zhí)行,無需對(duì)原有服務(wù)器的硬件進(jìn)行改動(dòng),所以能夠在提高性能的同時(shí)抑制整體成本的上升。以下通過結(jié)合附圖閱讀參考下述對(duì)說明性實(shí)施例的詳細(xì)描述,將更好地理解本發(fā)明本身、實(shí)施方式、其它目的及其優(yōu)點(diǎn)。在附圖中圖1示出了現(xiàn)有技術(shù)中的呈現(xiàn)服務(wù)的一個(gè)抽象模型。圖2A至2C示出了呈現(xiàn)信息從Pl改變到P2時(shí)的信息流。圖3A和3B分別示出了XSL文件A和B的抽象語法樹。圖4示出了合并圖3A和3B中的抽象語法樹而得到的抽象語法樹。圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的在呈現(xiàn)服務(wù)器中合并XSL/XSLT文件的方法的流程500。圖6示出了根據(jù)本發(fā)明的另一實(shí)施例的在呈現(xiàn)服務(wù)器中合并XSL/XSLT文件的方法的流程600。圖7示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的在呈現(xiàn)服務(wù)器中處理XSL/XSLT文件的方法的流程700。圖8示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的呈現(xiàn)服務(wù)器800。圖9示出了根據(jù)本發(fā)明的另一個(gè)實(shí)施例的呈現(xiàn)服務(wù)器900。圖IO示出了圖8中的抽象語法樹生成裝置的一個(gè)實(shí)施例的結(jié)構(gòu)圖ll示出了圖8中的合并裝置的一個(gè)實(shí)施例的結(jié)構(gòu)圖。具體實(shí)施例方式以下將參照附圖對(duì)本發(fā)明的實(shí)施方式進(jìn)行詳細(xì)說明。在解釋本發(fā)明的技術(shù)方案之前,先引入一個(gè)XML文檔A,作為后續(xù)討論的^ife。<xmlversion="1.0"encoding="UTF-8"><presencexmlns="urn:ietf:params:xml:ns:pidf"xmlns:dm="urn:ietf:params:xml:ns:pidf:data-mocierxmlns:lt-"urn:ietf:params:xm,ns:,ocation-type"xmlns:rpid="urn:ietf:params:xml:ns:pidf:rpid"xmlns:cpref='urn:example-com:pidf隱prefscaps"entity="pres:someone@example.com"><tupleid="bs35r9"><status><basic>closed</basic></status><dm:deviceID>um:device:0003ba4811e3</dm:deviceID><rpid:relationship><rpid:self/></rpid:relationship><rpid:service-class><rpjd:electronic/></rpid:service-class><contactpriority="1.0">im:someone@mobile,example,net</contact><timestamp>2005-10-27T16:49:29:2</timestamp></tuple><tupleid="thr76jk"><St3tUS><basic>open</bas'c></status><cpref:prefscaps><cpref:Description>voice</cpref:Description></cpref:prefscaps><contactp「fo(1ty-"0.9"〉tel:2224055555胸on7ain,conK/contacO</tuple><tupleid-"eg92n81、<status><basic>open</basic></status><dm:deviceID>urn:x-mac:0003ba4811e3</dm:deviceID><rpid:dass>emai,</rpid:class><rpid:service-class><rpid-electronic/></rpid:service-class><rpid:status-icon>http://example,com/mail.png</rpid:status-icon><contactpriority-"l,0'、mailto:someone@example.com</contact></tuple><dm:deviceid="pcl47"><rpjd:user-inputidle-threshold-"600"last-input="2004-10-21T13:20:00-05:00'idle</rpid:user-input><dm:deviceID>um:device:0003ba4811e3</dm:deviceID><dm:note>PC</dm:note></dm:device></presence>此XML文檔A基于PIDF模式,用于在符合用于呈現(xiàn)和即時(shí)消息傳遞公共模型的系統(tǒng)中交換呈現(xiàn)信息。XML文檔A包括根元素零或多個(gè)承載呈現(xiàn)信息的tuple元素、零或多個(gè)note元素以及零或多個(gè)來自其它名字空間的擴(kuò)展元素。每個(gè)tuple(元組)定義了一個(gè)為"open(開)"或"closed(關(guān))"的基本狀態(tài)basic。RFC4479中的呈現(xiàn)數(shù)據(jù)模型將服務(wù)、裝置和人的概念定義為用于對(duì)呈現(xiàn)實(shí)體的狀態(tài)進(jìn)行建模的數(shù)據(jù)元素。使用在PDIF中定義的tuple元素來定義服務(wù);使用在上述數(shù)據(jù)模型中定義的device元素來表示裝置。其它元素也都是本領(lǐng)域技術(shù)人員所公知的,例如在RFC4480中定義了作為PDIF的擴(kuò)展的RPID(RichPresenceInformationData,豐富呈現(xiàn)信息數(shù)據(jù))模式,在該模式中詳細(xì)定義了上述XML文檔A中以rpid開始的各個(gè)元素。因此,在本說明書中不再對(duì)其進(jìn)行詳細(xì)描述。XML文檔A描述的是呈現(xiàn)實(shí)體"pres:someone@example.com"。此呈現(xiàn)實(shí)體的SIP(SessionInitiationProtocol,^"發(fā)起協(xié)i義)聯(lián)系地址是"sip:someone@example.com"。XML文檔A包含了三個(gè)tuple元素,分別對(duì)應(yīng)于該呈現(xiàn)實(shí)體支持的三種服務(wù),其聯(lián)系方式分別為即時(shí)消息、電話和電子郵件。三個(gè)聯(lián)系地址分別是,一個(gè)即時(shí)通信地址"im:someone@mobile.example.net,,,一個(gè)電話號(hào)碼"tel:2224055555@domain.com"和一個(gè)電子郵箱地址"mailto:someone@example.com"。其中,即時(shí)消息月良務(wù)當(dāng)前為關(guān)閉狀態(tài),而電話和電子郵件服務(wù)當(dāng)前為開啟狀態(tài)。此外XML文檔A還包含有其它信息,因?yàn)榕c本發(fā)明無關(guān),就不在此詳細(xì)描述了?,F(xiàn)在,假設(shè)有兩個(gè)訂閱者都對(duì)呈現(xiàn)實(shí)體"pres:someone@example.com"感興趣。第一訂閱者感興趣的是該呈現(xiàn)實(shí)體的所有的基本狀態(tài)為0pen的聯(lián)系地址信息。據(jù)此,第一訂閱者向呈現(xiàn)服務(wù)器發(fā)送如下的訂閱請(qǐng)求SUBSCRIBEsip:presentity@domain.comSIP/2.0To:<sip:someone@example.com>From:<sip:watcher@domain.com>{SIP消息頭部的其余內(nèi)容省略)<xmlversion="1.0"encoding="UTF-8"><ev-filter-setxmlns="um:ietf:params:xml:ns:simple-pres-filter"xmlns:pidf="um:ietf:params:xml:ns:pidf'xmlns:dm="urn:ietf:params:xml:ns:picif:data-moderxmlns:lt="urn:ietf:params:xml:ns:locatk)n-type"xmlns:rpid="urn:ietf:params:xml:ns:piclf:rpid"xmlns:cpref="urn:example-com:pidf-prefscaps"><ev-filterid="open—mean"uri="sip:someone@example.com"><whatreport="default">〃pidf:tuple[pidf:status/pidf:basic-'open'andpidf:contact]"></what></ev-filter></ev-filter-set>該訂閱請(qǐng)求是一包含報(bào)頭部分和有效栽荷部分的消息,稱其為消息A,其中有效栽荷部分是一個(gè)XML文檔。從該訂閱請(qǐng)求中可以看出,訂閱對(duì)象是uri-"sip:someone⑥exaniple.com"的呈現(xiàn)實(shí)體。該XML文檔是一個(gè)過濾器,它等價(jià)于如下的XSL文件A:<xsl:styiesheetxmlns:xsl-"http://www,w3,or9/1999/XSL/Transform"xmlns:pidf="urn:ietf:params:xml:ns:pidf,xmlns:dm="uiTi:ietf:params:xml:ns:pidf:data-m(Kler'xmlns:lt="um:ietf:params:xml:ns:location-type"xmlns:rpid="urn:ietf:pai"ams:xml:ns:pidf:rpW"xmlns:cpref="urn:example-com:pidf-prefscaps"version-"1.0"><xsl:templatematch=7/pidf:tuple[pidf:status/pidf:basic='open'andpidf:contact]"><xsl:copy-ofselect=","/></xsl:template><xsl:templatematch="text()"/><!—本行用于消除無效文本輸出,本身無意義--></xsl:stylesheet>該XSL文件A是一個(gè)過濾器,其作用是對(duì)XML文檔A中的元組進(jìn)行匹配,該匹配的條件為tuple節(jié)點(diǎn)的status子節(jié)點(diǎn)的basic子節(jié)點(diǎn)的值為"open"并且tuple節(jié)點(diǎn)存在contact子節(jié)點(diǎn),滿足該條件的tuple節(jié)點(diǎn)被匹配。然后,復(fù)制匹配的tuple節(jié)點(diǎn)集中各節(jié)點(diǎn)的祖先節(jié)點(diǎn)和子孫節(jié)點(diǎn)。按照現(xiàn)有技術(shù),呈現(xiàn)服務(wù)器在接收到上述訂閱請(qǐng)求時(shí),將XSL文件A存儲(chǔ)在呈現(xiàn)服務(wù)器中,用作第一訂閱者的過濾器。該過濾器被XSLT編譯器編譯并被轉(zhuǎn)換成某種內(nèi)存表示。這取決于所使用的XSLT編譯器。當(dāng)呈現(xiàn)服務(wù)器接收到來自呈現(xiàn)實(shí)體的作為呈現(xiàn)信息的XML文檔A時(shí),將XML文檔A輸入到XSL文件A的經(jīng)編譯的內(nèi)存表示,得到的輸出如下NOTIFYsip:presentity@domain.comSIP/2.0To:<sip:watcher@domain.com>From:<sip:someone@example.com>{SIP消息頭部的其余內(nèi)容省略}<xmlversion="l,0"encoding="UTF-8"><presencexmlns="urn:ietf:params:xml:ns:pidf'xmlns:dm=',urn:ietf:params:xml:ns:pidf:data-moderxmlns:lt="um:ietf:params:xml:ns:location-type"xmlns:rpid="urn:ietf:params:xml:ns:pidf:rpid"xmlns:cpref^"urn:example-com:pidf-prefscaps"entity="pres:someone@example.com"><tupleid="thr76jk"><status><basic>open</basic></status><cpref:prefscaps><cpref:Description>voice</cpref:Description></cpref:prefscaps><contactpriority="0.9">tel:2224055555@domain,com</contact></tuple><tupleid="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><contactpriority="1.0">mailto:someone@examplexom</contact></tuple></prescnce>該通知消息的有效載荷部分是一個(gè)XML文檔,其是XML文檔A的經(jīng)過XSL文件A過濾后的文檔。該文檔包括第一訂閱者感興趣的、呈現(xiàn)實(shí)體"pres:someone@example.com"的所有基本狀態(tài)為open的聯(lián)系地址信息。即,在本示例中,presence元素只包括基本狀態(tài)為open的電話和電子郵件服務(wù)的元組。另外,第二訂閱者感興趣的是呈現(xiàn)實(shí)體"pres:someone@example.com"目前使用的所有郵件聯(lián)系地址信息。據(jù)此,第二訂閱者向呈現(xiàn)服務(wù)器發(fā)送如下的訂閱請(qǐng)求SUBSCRIBEsip:presentity@domain.comSIP/2.0To:<sip:someone@example.com〉From:<sip:watcher2@domain.com>{SIP消息頭部的其余內(nèi)容省略}<xmlversion="1.0"encoding="UTF-8'7><ev-filter-setxmlns="um:ietf:params:xml:ns:simple-pres-filter"xmlns:pidf="urn:ietf:params:xml:ns:pidf'xmlns:dm="urn:ietf:params:xml:ns:pidf:data-moder'xmlns:lt="urn:ietf:params:xml:ns:location-type"xmlns:rpid="um:ietf:params:xml:ns:pidf:rpid"xmlns:cpref="urn:example-com:pidf-prefscaps"><ev-filterid="open—mean"uri="sip:someone@example.com"><whatreport="defauh">〃pidf:tuple[pidf:status/pidf:basic='open'andstarts-with(pidf:contact,'mailto')〗"></what></ev-filter></ev-filter-set>該訂閱請(qǐng)求是一包含凈艮頭部分和有效栽荷部分的消息,稱其為消息B,其中有效栽荷部分是一個(gè)XML文檔。從該訂閱請(qǐng)求中可以看出,訂閱對(duì)象是uri-"sip:someone⑥example.com,,的呈現(xiàn)實(shí)體。該XML文檔是一個(gè)過濾器,它等價(jià)于如下的XSL文件B:<xsl:stylesheetxmlns: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-moderxmlns:lt="urn:ietf:params:xml:ns:location-type"xmlns:rpid二"urn:ietf:params:xml:ns:pidf:rpicTxmlns:cpref-"urn:example-com:pidf-prefscaps"version-"1.0"><xsl.templatematch=7/pidf:tup,e[pidf:status/pidf:basic='open'andstarts-with(pidf:contact,'mailto')]"><xsl:copy-ofselect=",',/></xsl:template><xsl:templatematch="text()"/></xsl:stylesheet>該XSL文件B是一個(gè)過濾器,其作用是對(duì)XML文檔A中的元組進(jìn)行匹配,該匹配的條件為tuple節(jié)點(diǎn)的status子節(jié)點(diǎn)的basic子節(jié)點(diǎn)的值為"open"并且tuple節(jié)點(diǎn)的contact子節(jié)點(diǎn)的值以"mailto"開始,滿足該條件的tuple節(jié)點(diǎn)被匹配。然后,復(fù)制匹配的tuple節(jié)點(diǎn)集中各節(jié)點(diǎn)的祖先節(jié)點(diǎn)和子孫節(jié)點(diǎn)。與XSL文件A相似,按照現(xiàn)有技術(shù),呈現(xiàn)服務(wù)器在接收到第二訂閱者的訂閱請(qǐng)求時(shí),將XSL文件B存儲(chǔ)在呈現(xiàn)服務(wù)器中,用作第二訂閱者的過濾器。該過濾器被XSLT編譯器編譯并被轉(zhuǎn)換成某種內(nèi)存表示,例如轉(zhuǎn)換成直接可執(zhí)行的代碼。當(dāng)呈現(xiàn)服務(wù)器接收到來自呈現(xiàn)實(shí)體的作為呈現(xiàn)信息的XML文檔A時(shí),將XML文檔A輸入到XSL文件B的經(jīng)編譯的內(nèi)存表示,得到的輸出如下NOTIFYsip:presentity@domain.comSIP/2,0To:<sip:watcher@domain.coin>From:<sip:someone@example.com>{SIP消息頭部的其余內(nèi)容省略)<xmlversion="l,0"encoding="UTF-8"><presencexmlns="urn:ietf:params:xml:ns:pidf,xmlns:lt="urn:ietf:params:xml:ns:location-type"xmlns:rpid="urn:ietf:params:xml:ns:pidf:rpid"xmlns:cpref="um:example-com:pidf-prefscaps"entity="pres:someone@example.com"><tupleid="eg92n8"><status〉<basic>open</basic〉</status><dm:deviceID>urn:x-mac:0003ba4811e3</dm:deviceID〉<rpid:class>email</rpid:class><rpid:service-dass><rpid:electronic/></rpid:service-class><rpid:status-icon>http:〃example.com/mail.png</rpid:status-icon><contactpriority="1.0">mailto:someone@example.com</contact></tuple></presence>該通知消息的有效載荷部分是一個(gè)XML文檔,其是XML文檔A的經(jīng)過XSL文件B過濾后的文檔。該文檔包括第二訂閱者感興趣的、呈現(xiàn)實(shí)體"pres:someone@example.com"目前使用的所有郵件聯(lián)系地址信息。即,在本示例中,presence元素只包括基本狀態(tài)為open的電子郵件服務(wù)的元組。以上,分別詳細(xì)介紹了作為現(xiàn)有技術(shù)示例的XML文檔A、XSL文件A和B,以及用XSLT編譯器單獨(dú)編譯XSL文件A和B從而產(chǎn)生它們各自的內(nèi)存表示的情況。從以上的例子中可以看出,在現(xiàn)有技術(shù)中,一個(gè)XSLT過濾器在運(yùn)行時(shí)產(chǎn)生的中間或者最終結(jié)果無法被具有共同興趣的其它XSLT過濾器重用。這意味著發(fā)生冗余處理從而產(chǎn)生很大浪費(fèi),尤其是在訂閱者數(shù)量眾多的情況下。為了解決該問題,在本發(fā)明中,提出了一種在呈現(xiàn)服務(wù)器中合并XSL/XSLT文件的方法。參照?qǐng)D5,本發(fā)明提供了一種在呈現(xiàn)服務(wù)器中合并XSL/XSLT文件的方法。圖5顯示了本發(fā)明的一個(gè)實(shí)施例所采用的方法流程500,包括如下步驟步驟510:接收訂閱請(qǐng)求。1步驟520:生成XSL/XSLT文件。步驟530:存儲(chǔ)XSL/XSLT文件。步驟540:解析XSL/XSLT文件以生成抽象語法樹。步驟550:識(shí)別多個(gè)抽象語法樹之間的公共子表達(dá)式。步驟560:將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。以下結(jié)合上面的具體例子來解釋本發(fā)明的上述處理過程500。步驟510:接收訂閱請(qǐng)求在呈現(xiàn)服務(wù)器運(yùn)行期間,呈現(xiàn)服務(wù)器接收來自訂閱者的訂閱請(qǐng)求。該訂閱請(qǐng)求可以具有上述的消息A的形式。在消息A的有效栽荷中含有用于定制呈現(xiàn)信息的過濾器。該過濾器可被轉(zhuǎn)換為XSL/XSLT文件。另選地,該訂閱請(qǐng)求可直接包含用于定制呈現(xiàn)信息的XSL/XSLT文件。另外,該訂閱請(qǐng)求也可具有本領(lǐng)域技術(shù)人員能夠想到的其它形式,只要能夠表示出訂閱者感興趣的對(duì)象即可。在本實(shí)施例中,假設(shè)該訂閱請(qǐng)求是來自上述例子中的第一訂閱者的針對(duì)呈現(xiàn)實(shí)體"pres:someone@example.com"的訂閱請(qǐng)求。該訂閱請(qǐng)求包含基于simple-pres-filter模式的過濾器。歩驟520:生成XSL/XSLT文件在步驟520中,呈現(xiàn)服務(wù)器基于來自訂閱者的訂閱請(qǐng)求,利用XSL/XSLT文件生成器生成XSL/XSLT文件。XSL/XSLT文件生成器屬于現(xiàn)有技術(shù)的范疇,目前已知的呈現(xiàn)服務(wù)器中包括XSL/XSLT文件生成器。對(duì)于訂閱請(qǐng)求本身包含XSL/XSLT文件的情況,XSL/XSLT文件生成器的工作僅僅是去掉報(bào)頭部分。對(duì)于訂閱請(qǐng)求包含其它形式的過濾器的情況,例如來自第一訂閱者的訂閱請(qǐng)求的情況,XSL/XSLT文件生成器將該過濾器轉(zhuǎn)換為XSL/XSLT文件。此外,XSL/XSLT文件生成器還可以根據(jù)訂閱者的設(shè)備的能力,為訂閱者生成XSL/XSLT文件。在訂閱者的設(shè)備的能力是有限的,例如在訂閱者的設(shè)備僅是沒有互聯(lián)網(wǎng)接入功能的手機(jī)的情況下,呈現(xiàn)信息中僅有電話服務(wù)對(duì)于該訂閱者是有用的。XSL/XSLT文件生成器會(huì)根據(jù)訂閱者的設(shè)備的能力來生成適合于訂閱者的XSL/XSLT文件。由于本領(lǐng)域的普通技術(shù)人員知道這是如何實(shí)現(xiàn)的,因此不再詳細(xì)說明。在本實(shí)施例中,XSL/XSLT文件生成器基于來自第一訂閱者的訂閱請(qǐng)求,生成了XSL文件A。步驟530:存儲(chǔ)XSL/XSLT文件在步驟530中,將在步驟520中生成的XSL/XSLT文件存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中。XSL/XSLT文件數(shù)據(jù)庫可以是一個(gè)數(shù)據(jù)庫,但也可以是文件系統(tǒng)中的一個(gè)目錄。另外,XSL/XSLT文件數(shù)據(jù)庫也可以是諸如硬盤、閃存等的任意非易失性存儲(chǔ)器上的空間。需要說明的是,在XSL/XSLT文件數(shù)據(jù)庫中還存儲(chǔ)有應(yīng)以前接收到的其它訂閱者(或第一訂閱者自身)的訂閱請(qǐng)求而生成的XSL/XSLT文件。在本實(shí)施例中,假設(shè)在接收到來自第一訂閱者的訂閱請(qǐng)求之前,在XSL/XSLT文件數(shù)據(jù)庫中已存儲(chǔ)有應(yīng)第二訂閱者的訂閱請(qǐng)求而生成的XSL文件B。XSL/XSLT文件數(shù)據(jù)庫中的一個(gè)XSL/XSLT文件對(duì)應(yīng)于一個(gè)訂閱者和呈現(xiàn)實(shí)體的對(duì)之間的訂閱關(guān)系。當(dāng)一個(gè)訂閱者解除針對(duì)特定呈現(xiàn)實(shí)體的訂閱時(shí),對(duì)應(yīng)的XSL/XSLT文件^L刪除。當(dāng)生成了一個(gè)XSL/XSLT文件并且與該XSL/XSLT文件對(duì)應(yīng)的訂閱關(guān)系相同的XSL/XSLT文件已存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中時(shí),用新生成的XSL/XSLT文件替換原有的XSL/XSLT文件。總之,XSL/XSLT文件數(shù)據(jù)庫中保存了與當(dāng)前有效的訂閱關(guān)系對(duì)應(yīng)的XSL/XSLT文件。歩驟540:解析XSL/XSLT文件以生成抽象語法樹在步驟540中,利用公知的XSL/XSLT文件解析器,將存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中的XSL/XSLT文件解析為抽象語法樹。在本實(shí)施例中,XSL/XSLT文件數(shù)據(jù)庫中存儲(chǔ)有XSL文件A和XSL文件B。XSL文件A和XSL文件B被分別解析為抽象語法樹。具體地說,XSL文件A包含一個(gè)模板(template即圖3A中的模板l。模板l包含匹配器(matcher)部分,在匹配器部分中含有表達(dá)式,即匹配表達(dá)式。本領(lǐng)域技術(shù)人員應(yīng)該理解,可以按照操作符的優(yōu)先級(jí)將一表達(dá)式改寫為一樹狀結(jié)構(gòu),使操作符形成根節(jié)點(diǎn)和中間節(jié)點(diǎn)并且使操作數(shù)形成葉子節(jié)點(diǎn)。在將匹配器部分中的表達(dá)式展開成樹狀結(jié)構(gòu)后,就形成了一棵樹?;谏鲜鲆?guī)則,得出圖3A和圖3B中的抽象語法樹,其中XSL文件A示意性地對(duì)應(yīng)于圖3A所示的抽象語法樹,而XSL文件B示意性地對(duì)應(yīng)于圖3B所示的抽象語法樹。盡管在本實(shí)施例中僅例示了生成兩個(gè)抽象語法樹的情況,但是在現(xiàn)實(shí)情況中會(huì)生成大量的抽象語法樹。生成的抽象語法樹的數(shù)量與XSL/XSLT文件數(shù)據(jù)庫中的XSL/XSLT文件的數(shù)量相等。在本發(fā)明的一個(gè)實(shí)施例中,以增量方式生成抽象語法樹。也就是說,對(duì)于以前生成的抽象語法樹,并不丟棄,而是保存在諸如硬盤或閃存等的非易失性存儲(chǔ)器中。僅當(dāng)所保存的抽象語法樹所對(duì)應(yīng)的XSL/XSLT文件發(fā)生變化時(shí),才使用XSL/XSLT文件解析器生成用以替換的抽象語法樹。通過這樣做,呈現(xiàn)服務(wù)器不必每次接收到訂閱請(qǐng)求時(shí)都生成XSL/XSLT文件數(shù)據(jù)庫中所有XSL/XSLT文件的抽象語法樹。因此,大大減少了訂閱關(guān)系的每次變動(dòng)所帶來的工作量,減少了服務(wù)器的負(fù)栽。所以,在本實(shí)施例中,基于在步驟530中的假設(shè),即在接收到來自第一訂閱者的訂閱請(qǐng)求之前,在XSL/XSLT文件數(shù)據(jù)庫中已存儲(chǔ)有響應(yīng)第二訂閱者的訂閱請(qǐng)求而生成的XSL文件B,以前已經(jīng)生成了與XSL文件B相對(duì)應(yīng)的抽象語法樹并且該抽象語法樹被存儲(chǔ)在非易失性存儲(chǔ)器中。在此情況下,僅使用XSL/XSLT文件解析器生成與XSL文件A相對(duì)應(yīng)的抽象語法樹,而與XSL文件B相對(duì)應(yīng)的抽象語法樹是從非易失性存儲(chǔ)器中讀取的。將在該步驟中生成的與XSL文件A相對(duì)應(yīng)的抽象語法樹存儲(chǔ)在非易失性存儲(chǔ)器中,以便在下次需要進(jìn)行合并時(shí)重用。這種增量式處理減少了工作量,提高了處理速度。步驟550:識(shí)別多個(gè)抽象語法樹之間的公共子表達(dá)式在步驟550中,識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式。這里要指出的是,在此要識(shí)別的是在步驟540中得到所有抽象語法樹(包括生成的和讀取的抽象語法樹)之中的至少兩個(gè)抽象語法樹之間的公共子表達(dá)式。當(dāng)然,如果在三個(gè)或更多個(gè)抽象語法樹之間存在公共子表達(dá)式,進(jìn)行公共子表達(dá)式消去的效果會(huì)更好,因?yàn)橹虚g結(jié)果重用會(huì)更多。然而,在僅有兩個(gè)抽象語法樹有公共子表達(dá)式時(shí),同樣可以進(jìn)行公共子表達(dá)式消去。在本實(shí)施例中,從圖3A和圖3B的抽象語法樹可以看出有如下的公共子表達(dá)式參basic-'open'contact歩驟560:將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)在步驟560中,根據(jù)本發(fā)明的一種實(shí)施方式,通過對(duì)所述多個(gè)抽象語法樹進(jìn)行語義分析,從而獲得語義信息??梢詮呐c編譯原理相關(guān)的眾多文獻(xiàn)中找到對(duì)抽象語法樹進(jìn)行語義分析的技術(shù),因此在這里不再詳細(xì)描述。通過語義分析得到的語義信息例如包括各公共子表達(dá)式的數(shù)據(jù)類型,如整數(shù)、字符串、節(jié)點(diǎn)集等;各公共子表達(dá)式之間的層級(jí)關(guān)系;各變量的作用域等。其中,可以使用各公共子表達(dá)式的數(shù)據(jù)類型作為語義信息。在針對(duì)圖3A和圖3B中的抽象語法樹進(jìn)行分析時(shí),獲得如下語義信息表l<table>tableseeoriginaldocumentpage19</column></row><table>在本發(fā)明的一個(gè)實(shí)施例中,與在步驟540中生成抽象語法樹的方式類似,以增量方式產(chǎn)生語義信息。也就是說,對(duì)于以前生成的語義信息,并不丟棄,而是保存在諸如硬盤或閃存等的非易失性存儲(chǔ)器中。僅當(dāng)所保存的語義信息所對(duì)應(yīng)的抽象語法樹發(fā)生變化時(shí),才對(duì)改變的抽象語法樹進(jìn)行語義分析以產(chǎn)生新的語義信息。通過這樣做,大大減少了訂閱關(guān)系的每次變動(dòng)所帶來的工作量。所以,在本實(shí)施例中,基于在步驟530中的假設(shè),以前已經(jīng)生成了對(duì)圖3B中的抽象語法樹(對(duì)應(yīng)于XSL文件B)進(jìn)行語義分析而得到的語義信息并且該語義信息被存儲(chǔ)在非易失性存儲(chǔ)器中。在此情況下,僅對(duì)圖3A中的抽象語法樹(對(duì)應(yīng)于XSL文件A)進(jìn)行語義分析從而產(chǎn)生表l中前兩列的語義信息,而表l中后兩列的語義信息是從非易失性存儲(chǔ)器中讀取的。將在該步驟中生成的與圖3A中的抽象語法樹相對(duì)應(yīng)的語義信息存儲(chǔ)在非易失性存儲(chǔ)器中,以便在下次需要合并該抽象語法樹時(shí)重用。這種增量式處理減少了工作量,提高了處理速度。需要說明的是,在本實(shí)施例中僅例示了使用公共子表達(dá)式數(shù)據(jù)類型這一種語義信息,但是本發(fā)明并不限于此,還可以使用現(xiàn)有技術(shù)中進(jìn)行語義分析而可獲得的其它語義信息。在獲得語義信息后,在判斷表l中的數(shù)據(jù)類型一致的情況下,通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。所謂的"公共子表達(dá)式消去"是編譯優(yōu)化領(lǐng)域的常用技術(shù)手段。將具有公共子表達(dá)式的抽象語法樹進(jìn)行合并的具體原則是將"重要程度,,高的公共子表達(dá)式向抽象語法樹的上層挪動(dòng),并將差異的部分向抽象語法樹的下層挪動(dòng),從而實(shí)現(xiàn)中間結(jié)果(即公共子表達(dá)式的求值結(jié)果)重用最大化。評(píng)價(jià)所述重要程度有很多指標(biāo),其中常見的指標(biāo)包括但不限于公共子表達(dá)式的出現(xiàn)次數(shù)、公共子表達(dá)式的長(zhǎng)度等。通常來說,一公共子表達(dá)式的出現(xiàn)次數(shù)越多,該公共子表達(dá)式的重要程度越高;一公共子表達(dá)式的長(zhǎng)度越長(zhǎng),該公共子表達(dá)式的重要程度越高。本領(lǐng)域的技術(shù)人員可以通過對(duì)各指標(biāo)加權(quán)平均的方式來計(jì)算各公共子表達(dá)式的重要程度。在此情況下,圖3A和圖3B中的兩個(gè)抽象語法樹被合并為圖4所示的抽象語法樹。在圖4中,在(exists)contact節(jié)點(diǎn)下形成了兩個(gè)分支(1)和(2),這兩個(gè)分支分別對(duì)應(yīng)于模板l中的匹配表達(dá)式和模板2中的匹配表達(dá)式。圖4所示的經(jīng)合并的樹結(jié)構(gòu)對(duì)應(yīng)于如下的XSL文件<xsl:stylesheetxmlnsixsyhttpV/www.wS-org/lSSS/XSL/Transform"xmlns:pidf-"urn:ietf:params:xml:ns:pidf1xmfns:dm-"urn:ietf:params:xml:ns:pidf:data-moder'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:templatematch=7/pidf:tuple[pidf:status/pidf:basic='open'andpidf:contact]"><xsl:iftest="fntername='filterl'or(filtername='filter2,andstarts-with(pidf:contact,'mailto'))'、<xsl:copy-ofselect='/></xsl:if></xsl:template><xsl:templatematch=''text()"/></xsl:stylesheet>應(yīng)當(dāng)指出,該XSL文件僅僅是示意性的,其中的變量filter_name以及值,filterl,和,filter2,均是在運(yùn)行時(shí)由編譯器使用的臨時(shí)變量。應(yīng)當(dāng)理解,給出這種示意只是為了便于本領(lǐng)域技術(shù)人員理解本發(fā)明的原理,不應(yīng)當(dāng)將其理解為對(duì)本發(fā)明的任何限制。另一方面,在判斷表l中的數(shù)據(jù)類型不一致的情況下,不能將圖3A和圖3B中的兩個(gè)抽象語法樹進(jìn)行公共子表達(dá)式消去。在此情況下,無法重用中間結(jié)果,只能把模板1和模板2并列置于根節(jié)點(diǎn)下,從而形成一個(gè)包含模板1和模板2的功能的XSL文件。在一個(gè)實(shí)施例中,可以以增量式方式進(jìn)行公共子表達(dá)式消去,從而將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。所謂的增量式方式是指,在已經(jīng)基于眾多的抽象語法樹而合并生成了一個(gè)樹結(jié)構(gòu)的狀態(tài)下,利用已有的樹結(jié)構(gòu),將響應(yīng)新的訂閱請(qǐng)求而生成的抽象語法樹合并到該已有樹結(jié)構(gòu)中,而不是每次都基于所有抽象語法樹重新進(jìn)行合并。還可以將增量式合并方式與正常合并方式進(jìn)行組合,一種組合方式例如可以為,在開始階段基于所有抽象語法樹進(jìn)行正常合并,在累積了一定數(shù)量的抽象語法樹后,進(jìn)行增量式合并。通過增量式合并,可以減小計(jì)算量,從而提高系統(tǒng)性能。以上利用對(duì)XSL文件A和B的合并作為示例說明了圖5所示的方法流程。XSL文件A和B對(duì)應(yīng)于對(duì)同一呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的訂閱請(qǐng)求。因此,對(duì)于XSL文件A和B而言,它們的輸入XML文檔是相同的,即由同一呈現(xiàn)實(shí)體發(fā)布的呈現(xiàn)信息。因此,通過本發(fā)明,使該XML文檔經(jīng)過上述合并得到的樹形結(jié)構(gòu),而不是由各XSL文件分別對(duì)其進(jìn)行的從頭至尾的處理,這提高了中間處理結(jié)果的重用率,從而提高了運(yùn)行時(shí)的速度以及可伸縮性。需要指出的是,在一另選實(shí)施例中,進(jìn)行合并的多個(gè)XSL文件也可以對(duì)應(yīng)于對(duì)不同呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的訂閱請(qǐng)求。在這種情況下,雖然不能得到運(yùn)行時(shí)的好處,例如重用中間計(jì)算結(jié)果從而提高性能和可伸縮性,但是通過將多個(gè)XSL文件的內(nèi)存表示合并為一個(gè),節(jié)省了內(nèi)存空間,降低了內(nèi)存占用率。應(yīng)當(dāng)注意,圖5給出了利用步驟520(生成XSL/XSLT文件)、步驟530(存儲(chǔ)XSL/XSLT文件)和步驟540(解析XSL/XSLT文件以生成抽象語法樹)來生成與訂閱請(qǐng)求中的XSL/XSLT對(duì)應(yīng)表示(任意形式的過濾器)相對(duì)應(yīng)的抽象語法樹。但是這僅是示范性的、而非限制性的。本領(lǐng)域技術(shù)人員可以基于本說明書的教導(dǎo)采用其它方式來生成上述抽象語法樹。例如,不通過XSL/XSLT解析器,而是通過具有從訂閱消息中的XSL/XSLT對(duì)應(yīng)表示生成抽象語法樹的功能的其它硬件或軟件模塊等來生成抽象語法樹,這些具體生成方法是XML軟件開發(fā)人員所熟知的。因此,本領(lǐng)域的技術(shù)人員基于本說明書的教導(dǎo)還可以把圖5的方法流程進(jìn)行各種變化,例如實(shí)施為圖6所示的合并XSL/XSLT文件的方法流程600,該方法包括接收步驟610,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件;抽象語法樹生成步驟620,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹;公共子表達(dá)式識(shí)別步驟630,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式;以及合并步驟640,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。下面,將結(jié)合圖7來描述一種在呈現(xiàn)服務(wù)器中處理XSL/XSLT文件的方法,圖7顯示了本發(fā)明的一個(gè)實(shí)施例所采用的方法流程700,包括如下步驟接收步驟710;抽象語法樹生成步驟720;公共子表達(dá)式識(shí)別步驟730;合并步驟740;以及編譯步驟750。因?yàn)榻邮詹襟E710對(duì)應(yīng)于圖5的方法中的步驟510;抽象語法樹生成步驟720對(duì)應(yīng)于圖5的方法中的步驟520至540;公共子表達(dá)式識(shí)別步驟730對(duì)應(yīng)于圖5的方法中的步驟550;合并步驟740對(duì)應(yīng)于圖5的方法中的步驟560,因此,在此不重復(fù)描述這些步驟,而只對(duì)編譯步驟750進(jìn)行描述。該編譯步驟750用于基于在步驟740中合并的樹結(jié)構(gòu)編譯生成與所述多個(gè)訂閱者各自的XSL/XSLT文件相對(duì)應(yīng)的多個(gè)執(zhí)行模塊,使得在運(yùn)行時(shí)所述公共子表達(dá)式的求值結(jié)果能夠在所述多個(gè)執(zhí)行模塊之間重用。在該步驟中,使用一個(gè)編譯裝置對(duì)合并后的樹結(jié)構(gòu)進(jìn)行編譯。該編譯裝置能夠編譯生成與所述多個(gè)訂閱者的XSL/XSLT文件相對(duì)應(yīng)的多個(gè)執(zhí)行模塊,但是這些執(zhí)行模塊并不是獨(dú)立的,而是通過公共子表達(dá)式而分層地關(guān)聯(lián)起來,它們?cè)谶\(yùn)行時(shí)會(huì)重用公共子表達(dá)式的求值結(jié)果。例如,在模板3中的〈xsl:if^元素中對(duì)圖4中的分支(1)和(2)進(jìn)行判斷,在判斷為真時(shí)進(jìn)行操作(<xsl:copy-ofselect-"■"/>),這實(shí)際上分別代表兩個(gè)執(zhí)行模塊,即<xsl:iftest="filtername='filterl')"><xsl:copy-ofselect=/:></xsl:if>,k乂>^<xsl:iftest-"filtername-,filter2'andstarts隱with(pidf:contact,,maNto')"><xsl:copy-ofselect='V/></xsl:if>其中,前一個(gè)執(zhí)行模塊對(duì)應(yīng)于圖4中的分支(1),后一個(gè)執(zhí)行模塊對(duì)應(yīng)于圖4中的分支(2)。它們的公共匹配表達(dá)式basic-'open'andcontact的求值結(jié)果在運(yùn)行時(shí)被這兩個(gè)執(zhí)行模塊所重用。因?yàn)?,合并后的樹結(jié)構(gòu)組合了許多過濾器,所以與分別單獨(dú)編譯XSL/XSLT文件的情況相比,編譯裝置可以進(jìn)行更多優(yōu)化,從而使冗余處理最小化并且使中間結(jié)果重用最大化。應(yīng)當(dāng)注意,此處所述的執(zhí)行模塊可以指編程語言代碼意義上的模塊,也可以指運(yùn)行時(shí)的內(nèi)存表示意義上的模塊。在一個(gè)實(shí)施例中,被合并的多個(gè)XSL文件對(duì)應(yīng)于對(duì)同一呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的訂閱請(qǐng)求,其通過編譯而生成的內(nèi)存表示(包括多個(gè)執(zhí)行模塊)用于處理來自該呈現(xiàn)實(shí)體的發(fā)布消息。當(dāng)該呈現(xiàn)實(shí)體向呈現(xiàn)服務(wù)器發(fā)布呈現(xiàn)信息時(shí),呈現(xiàn)服務(wù)器首先識(shí)別負(fù)責(zé)處理該呈現(xiàn)實(shí)體的呈現(xiàn)信息的內(nèi)存表示,然后利用該內(nèi)存表示中的各個(gè)模塊為與該呈現(xiàn)實(shí)體有訂閱關(guān)系的各個(gè)訂閱者分別產(chǎn)生一個(gè)過濾結(jié)果。在對(duì)呈現(xiàn)信息進(jìn)行過濾處理的過程中,在運(yùn)行時(shí),各執(zhí)行模塊重用中間處理結(jié)果,從而提高了性能和可伸縮性。圖8顯示了根據(jù)本發(fā)明一個(gè)實(shí)施例的呈現(xiàn)服務(wù)器800。呈現(xiàn)服務(wù)器800為至少一個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者提供服務(wù),所述多個(gè)訂閱者可以訂閱所述至少一個(gè)呈現(xiàn)實(shí)體的XML形式的呈現(xiàn)信息。呈現(xiàn)服務(wù)器800的輸入為來自訂閱者的訂閱消息。根據(jù)本發(fā)明的一個(gè)實(shí)施例,呈現(xiàn)服務(wù)器800包括以下裝置。接收裝置810,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件,所述訂閱請(qǐng)求可以包含XSL/XSLT文件本身,也可以是其它形式的過濾器,例如基于simple-pres-filter模式的過濾器。抽象語法樹生成裝置820,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹。該抽象語法樹生成裝置820連接到非易失性存儲(chǔ)器860,用于從其中讀取以前生成的抽象語法樹以及將新生成的抽象語法樹存儲(chǔ)于其中以供以后使用。公共子表達(dá)式識(shí)別裝置830,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式。在本實(shí)施例中,公共子表達(dá)式識(shí)別裝置830按照?qǐng)D5中的步驟550的方式來識(shí)別多個(gè)抽象語法樹之間的公共子表達(dá)式。合并裝置840,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。在本實(shí)施例中,合并裝置840按照?qǐng)D5中的步驟560的方式來合并抽象語法樹。圖9示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的呈現(xiàn)服務(wù)器卯O。呈現(xiàn)服務(wù)器包括接收裝置910、抽象語法樹生成裝置920、公共子表達(dá)式識(shí)別裝置930、合并裝置940、以及編譯裝置950。其中,裝置910至940的功能與圖8中的裝置810至840的功能相似,因此省略對(duì)其的描述。呈現(xiàn)服務(wù)器卯0中的編譯裝置950用于基于合并的樹結(jié)構(gòu)編譯生成與所述多個(gè)訂閱者的XSL/XSLT文件對(duì)應(yīng)的多個(gè)執(zhí)行模塊,其中在運(yùn)行時(shí)所述公共子表達(dá)式的求值結(jié)果能夠在所迷多個(gè)執(zhí)行模塊之間重用。需要指出的是,被合并的多個(gè)XSL/XSLT文件可以對(duì)應(yīng)于對(duì)同一呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的訂閱請(qǐng)求,也可以對(duì)應(yīng)于對(duì)不同呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的訂閱請(qǐng)求。在后一種情況下,雖然不能得到運(yùn)行時(shí)的好處,例如重用中間計(jì)算結(jié)果從而提高性能和可伸縮性,但是通過將多個(gè)XSL文件的內(nèi)存表示合并為一個(gè),節(jié)省了內(nèi)存空間,降低了內(nèi)存占用率。此外,呈現(xiàn)服務(wù)器800和900還可以包括非易失性存儲(chǔ)器,該非易失性存儲(chǔ)器用于存儲(chǔ)已生成的抽象語法樹和靜態(tài)分析結(jié)果(語義信息)。在存儲(chǔ)的抽象語法樹和靜態(tài)分析結(jié)果所對(duì)應(yīng)的XSL/XSLT文件沒有變化的情況下,在需要生成對(duì)應(yīng)的抽象語法樹和靜態(tài)分析結(jié)果時(shí),可以僅從非易失性存儲(chǔ)器中進(jìn)行讀取而不必進(jìn)行生成。通過這樣的增量式處理,呈現(xiàn)服務(wù)器不必每次接收到訂閱請(qǐng)求時(shí)都生成XSL/XSLT文件數(shù)據(jù)庫中所有XSL/XSLT文件的抽象語法樹。因此,大大減少了訂閱關(guān)系的每次變動(dòng)所帶來的工作量。圖10示出了根據(jù)一個(gè)實(shí)施例的抽象語法樹生成裝置820的結(jié)構(gòu)圖。在圖10中,抽象語法樹生成裝置820包括XSL/XSLT文件生成器IOIO,其被配置為基于來自訂閱者的訂閱請(qǐng)求,生成XSL/XSLT文件;XSL/XSLT文件數(shù)據(jù)庫1020,用于存儲(chǔ)由XSL/XSLT文件生成器生成的XSL/XSLT文件;和XSL/XSLT文件解析器1030,用于將存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中的XSL/XSLT文件解析為抽象語法樹。在一個(gè)實(shí)施例中,XSL/XSLT文件解析器1030連接到非易失性存儲(chǔ)器860,XSL/XSLT文件解析器1030將應(yīng)訂閱請(qǐng)求而生成的抽象語法樹存儲(chǔ)到非易失性存儲(chǔ)器860中以供以后使用,并從非易失性存儲(chǔ)器860中讀取訂閱關(guān)系未變化的以前生成的抽象語法樹,將讀取和生成的抽象語法樹一起輸出到公共子表達(dá)式識(shí)別裝置830。由此,實(shí)現(xiàn)了增量式處理。另外,XSL/XSLT文件數(shù)據(jù)庫1020和非易失性存儲(chǔ)器860雖然在概念上是分離的存儲(chǔ)空間,但是在一個(gè)實(shí)施例中,它們可以由同一硬件實(shí)現(xiàn)。但是圖9僅是示范性的、而非限制性的。本領(lǐng)域技術(shù)人員可以基于本說明書的教導(dǎo)采用其它方式來生成上述抽象語法樹。例如,不通過XSL/XSLT解析器,而是通過具有從訂閱消息中的XSL/XSLT對(duì)應(yīng)表示生成抽象語法樹的功能的其它硬件或軟件模塊等來生成抽象語法樹。圖11示出了根據(jù)一個(gè)實(shí)施例的合并裝置840的結(jié)構(gòu)圖。在圖10中,合并裝置840還可以包括靜態(tài)分析裝置1110,用于對(duì)所述多個(gè)抽象語法樹進(jìn)行語義分析,從而獲得語義信息;和合并器1120,其根據(jù)所述語義信息,通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。在一個(gè)實(shí)施例中,靜態(tài)分析裝置1110連接到非易失性存儲(chǔ)器860,靜態(tài)分析裝置1110將對(duì)根據(jù)訂閱請(qǐng)求而生成的抽象語法樹進(jìn)行分析而得到的語義信息存儲(chǔ)到非易失性存儲(chǔ)器860中以供以后使用,并從非易失性存儲(chǔ)器860中讀取訂閱關(guān)系未變化的以前生成的抽象語法樹的語義信息,將讀取和生成的語義信息一起輸出到合并器1120。由此,實(shí)現(xiàn)了增量式處理。在圖11中,靜態(tài)分析裝置被包含在合并裝置中,但是本領(lǐng)域技術(shù)人員應(yīng)該理解,可將靜態(tài)分析裝置和合并裝置實(shí)現(xiàn)為兩個(gè)單獨(dú)的模塊。本領(lǐng)域技術(shù)人員會(huì)認(rèn)識(shí)到,可以以方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品的形式提供本發(fā)明的實(shí)施例。因此,本發(fā)明可采取全硬件實(shí)施例、全軟件實(shí)施例,或者組合軟件和硬件的實(shí)施例的形式。硬件和軟件的典型的結(jié)合可以是帶有計(jì)算機(jī)程序的通用計(jì)算機(jī)系統(tǒng),當(dāng)程序被加載并被執(zhí)行時(shí),控制計(jì)算機(jī)系統(tǒng),從而可以執(zhí)行上述的方法。本發(fā)明可以嵌入在計(jì)算機(jī)程序產(chǎn)品中,它包括使此處描述的方法得以實(shí)施的所有特征。所述計(jì)算機(jī)程序產(chǎn)品被包含在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(包括,但不限于,磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)中,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)具有包含于其中的計(jì)算機(jī)可讀程序代碼。已參考根據(jù)本發(fā)明的方法、系統(tǒng)及計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖說明了本發(fā)明。流程圖和/或方框圖中的每個(gè)方框,以及流程圖和/或方框圖中的方框的組合顯然可由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可被提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理器或者其他可編程的數(shù)據(jù)處理設(shè)備的處理器,以產(chǎn)生一臺(tái)機(jī)器,從而指令(所述指令通過計(jì)算機(jī)或者其他可編程數(shù)據(jù)處理設(shè)備的處理器)產(chǎn)生用于實(shí)現(xiàn)在流程圖和/或方框圖的一個(gè)或多個(gè)方框中規(guī)定的功能的裝置。這些計(jì)算機(jī)程序指令也可保存在一個(gè)或多個(gè)計(jì)算機(jī)的讀存儲(chǔ)器中,每個(gè)這種存儲(chǔ)器能夠指揮計(jì)算機(jī)或者其他可編程數(shù)據(jù)處理設(shè)備按照特定的方式發(fā)揮作用,從而保存在計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生一種制造產(chǎn)品,所述制造產(chǎn)品包括實(shí)現(xiàn)在流程圖和/或方框圖的一個(gè)或多個(gè)方框中規(guī)定的功能的指令裝置。計(jì)算機(jī)程序指令也可被加載到一個(gè)或多個(gè)計(jì)算機(jī)或者其他可編程數(shù)據(jù)處理設(shè)備上,使得在所述計(jì)算機(jī)或者其他可編程數(shù)據(jù)處理設(shè)備上執(zhí)行一系列的搮作步驟,從而在每個(gè)這樣的設(shè)備上產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,以致在該設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖和/或方框圖的一個(gè)或多個(gè)方框中規(guī)定的步驟。以上結(jié)合本發(fā)明的實(shí)施方式對(duì)本發(fā)明的原理進(jìn)行了說明,但這些說明只是示例性的,不應(yīng)理解為對(duì)本發(fā)明的任何限制。本領(lǐng)域技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改變和變形,而不會(huì)背離由隨附權(quán)利要求所限定的本發(fā)明的精神和范圍。權(quán)利要求1、一種呈現(xiàn)服務(wù)器,其為至少一個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者提供服務(wù),所述多個(gè)訂閱者可以訂閱所述至少一個(gè)呈現(xiàn)實(shí)體的XML形式的呈現(xiàn)信息,所述呈現(xiàn)服務(wù)器包括接收裝置,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件;抽象語法樹生成裝置,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹;公共子表達(dá)式識(shí)別裝置,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式;和合并裝置,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。2、根據(jù)權(quán)利要求1所述的呈現(xiàn)服務(wù)器,還包括編譯裝置,該編譯裝置用于基于合并的樹結(jié)構(gòu)編譯生成與所述多個(gè)訂閱者的XSL/XSLT文件對(duì)應(yīng)的多個(gè)執(zhí)行模塊,其中在運(yùn)行時(shí)所述公共子表達(dá)式的求值結(jié)果能夠在所述多個(gè)執(zhí)行模塊之間重用。3、根據(jù)權(quán)利要求1或2所述的呈現(xiàn)服務(wù)器,其中,所述多個(gè)訂閱請(qǐng)求指的是對(duì)同一呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的請(qǐng)求。4、根據(jù)權(quán)利要求1或2所述的呈現(xiàn)服務(wù)器,其中,所述抽象語法樹生成裝置包括XSL/XSLT文件生成器,其被配置為基于來自訂閱者的訂閱請(qǐng)求,生成XSL/XSLT文件;XSL/XSLT文件數(shù)據(jù)庫,用于存儲(chǔ)由XSL/XSLT文件生成器生成的XSL/XSLT文件;和XSL/XSLT文件解析器,用于將存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中的XSL/XSLT文件解析為抽象語法樹。5、根據(jù)權(quán)利要求1或2所述的呈現(xiàn)服務(wù)器,其中,所述合并裝置還包括靜態(tài)分析裝置,用于對(duì)所述多個(gè)抽象語法樹進(jìn)行語義分析,從而獲得語義信息;并且所述合并裝置進(jìn)一步根據(jù)所述語義信息,通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。6、根據(jù)權(quán)利要求1或2所述的呈現(xiàn)服務(wù)器,其中,所述語義信息包括所述公共子表達(dá)式的數(shù)據(jù)類型和/或所述公共子表達(dá)式中的變量的作用域。7、根據(jù)權(quán)利要求1或2所述的呈現(xiàn)服務(wù)器,還包括非易失性存儲(chǔ)裝置,用于存儲(chǔ)所述多個(gè)抽象語法樹以及所述語義信息,以供所述公共子表達(dá)式識(shí)別裝置和所述合并裝置重用。8、根據(jù)權(quán)利要求1或2所述的呈現(xiàn)服務(wù)器,其中,所述合并裝置以增量方式進(jìn)行公共子表達(dá)式消去,從而將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。9、一種用于在呈現(xiàn)服務(wù)器中處理XSL/XSLT文件的方法,所述呈現(xiàn)服務(wù)器為至少一個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者提供服務(wù),所述多個(gè)訂閱者可以訂閱所述至少一個(gè)呈現(xiàn)實(shí)體的XML形式的呈現(xiàn)信息,該方法包括以下步驟接收步驟,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件;抽象語法樹生成步驟,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹;公共子表達(dá)式識(shí)別步驟,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式;以及合并步驟,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。10、根據(jù)權(quán)利要求9所述的方法,還包括編譯步驟,該編譯步驟用于基于合并的樹結(jié)構(gòu)編譯生成與所述多個(gè)訂閱者的XSL/XSLT文件相對(duì)應(yīng)的多個(gè)執(zhí)行模塊,使得在運(yùn)行時(shí)所述公共子表達(dá)式的求值結(jié)果能夠在所述多個(gè)執(zhí)行模塊之間重用。11、根據(jù)權(quán)利要求9或IO所述的方法,其中,所述多個(gè)訂閱請(qǐng)求指的是對(duì)同一呈現(xiàn)實(shí)體的呈現(xiàn)信息進(jìn)行定制的請(qǐng)求。12、根據(jù)權(quán)利要求9或IO所述的方法,其中,所述抽象語法樹生成步驟包括XSL/XSLT文件生成步驟,用于基于來自訂閱者的訂閱請(qǐng)求,生成XSL/XSLT文件;存儲(chǔ)步驟,用于將所生成的XSL/XSLT文件存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中;XSL/XSLT文件解析步驟,用于將存儲(chǔ)在XSL/XSLT文件數(shù)據(jù)庫中的XSL/XSLT文件解析為抽象語法樹。13、根據(jù)權(quán)利要求9或IO所述的方法,其中,所述合并步驟還包括靜態(tài)分析步驟,用于對(duì)所述多個(gè)抽象語法樹進(jìn)行語義分析,從而獲得語義信息;并且所述合并步驟根據(jù)所述語義信息,通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。14、根據(jù)權(quán)利要求9或IO所述的方法,其中,所述語義信息包括所述公共子表達(dá)式的數(shù)據(jù)類型以及所述公共子表達(dá)式中的變量的作用范圍。15、根據(jù)權(quán)利要求9或IO所述的方法,還包括存儲(chǔ)步驟,用于存儲(chǔ)所述抽象語法樹以及所述語義信息,以供在所述公共子表達(dá)式識(shí)別步驟和所述合并步驟中重用。16、根據(jù)權(quán)利要求9或IO所述的方法,其中,在所述合并步驟中,以增量方式進(jìn)行公共子表達(dá)式消去,從而將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。全文摘要本發(fā)明涉及呈現(xiàn)服務(wù)器和在其中使用的XSL文件處理方法。該XSL/XSLT文件處理方法在呈現(xiàn)服務(wù)器中使用,所述呈現(xiàn)服務(wù)器為至少一個(gè)呈現(xiàn)實(shí)體和多個(gè)訂閱者提供服務(wù),所述多個(gè)訂閱者可以訂閱所述至少一個(gè)呈現(xiàn)實(shí)體的XML形式的呈現(xiàn)信息,該方法包括以下步驟接收步驟,用于接收所述多個(gè)訂閱者的多個(gè)訂閱請(qǐng)求,其中每個(gè)訂閱請(qǐng)求對(duì)應(yīng)于一個(gè)XSL/XSLT文件;抽象語法樹生成步驟,用于為每個(gè)所述XSL/XSLT文件生成一個(gè)抽象語法樹,從而針對(duì)所述多個(gè)訂閱請(qǐng)求,生成對(duì)應(yīng)的多個(gè)抽象語法樹;公共子表達(dá)式識(shí)別步驟,用于識(shí)別所述多個(gè)抽象語法樹之間的公共子表達(dá)式;以及合并步驟,用于通過公共子表達(dá)式消去將所述多個(gè)抽象語法樹合并成一個(gè)樹結(jié)構(gòu)。文檔編號(hào)H04L12/58GK101621480SQ20081012744公開日2010年1月6日申請(qǐng)日期2008年6月30日優(yōu)先權(quán)日2008年6月30日發(fā)明者哲向,博楊,偉薛,趙邑新申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司