亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種xml文件解析的方法及裝置的制作方法

文檔序號(hào):6458017閱讀:510來(lái)源:國(guó)知局
專利名稱:一種xml文件解析的方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息處理技術(shù)領(lǐng)域,特別是涉及一種XML文件解析的方 法及一種XML文件解析的裝置。
背景技術(shù)
,XML ( The Extensible Markup Language,可擴(kuò)展標(biāo)識(shí)-浯言)是一種獨(dú) 立于平臺(tái)的編程語(yǔ)言,由于它提供了用于創(chuàng)建公共信息格式以及共享網(wǎng) 絡(luò)上不同軟件應(yīng)用的格式和數(shù)據(jù)的靈活機(jī)制,從而特別適于在諸如 Intemet的分布式網(wǎng)絡(luò)上使用。XML來(lái)源于SGML,包括描述文件內(nèi)容的 標(biāo)記符號(hào)(標(biāo)簽)。XML在標(biāo)記符號(hào)^f吏用方法上同HTML(超文本標(biāo)記語(yǔ)言) 相似,但與HTML相比,它至少具有兩個(gè)基本區(qū)別。首先,HTML具有定 義標(biāo)記符號(hào)的專用集,而在XML中所允許標(biāo)記符號(hào)是不受限和自定義的, 從而XML是可擴(kuò)展的。即,盡管XML也具有標(biāo)準(zhǔn)化標(biāo)記符號(hào),但XML程 序員并不受定義標(biāo)記符號(hào)標(biāo)準(zhǔn)集的限制,而是能夠定義出新的標(biāo)記符號(hào)。 其次,由于HTML標(biāo)簽和屬性僅定義出如何顯示實(shí)際內(nèi)容,使HTML受限, 但XML標(biāo)簽和屬性既能夠定義如何顯示信息(例如,通過(guò)Web瀏覽器),又 能夠定義顯示什么樣的內(nèi)容。XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,可以使用 一 系列簡(jiǎn)單的標(biāo)記描述 數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,XML的簡(jiǎn)單使其易于在任何 應(yīng)用程序中讀寫數(shù)據(jù),比如,在使用計(jì)算機(jī)處理各種業(yè)務(wù)邏輯時(shí),往往 需要進(jìn)行建模分析,然后根據(jù)模型生成業(yè)務(wù)模型描述。由于XML語(yǔ)言具 有純文本、以及強(qiáng)大的標(biāo)簽描述特性,在描述業(yè)務(wù)邏輯時(shí)采用XML語(yǔ)言, 則可以更容易地在應(yīng)用服務(wù)器上部署。目前常用的XML解析方法是SAX和DOM,在此基礎(chǔ)上產(chǎn)生許多開源 解析框架,如Castor、 JAXB、 Digester等。這些框架都比較類似,都是將 XML文件轉(zhuǎn)換成相應(yīng)的Java對(duì)象的過(guò)程,以下以Digester為例具體說(shuō)明簡(jiǎn)言之,Digester由"事件"驅(qū)動(dòng),通過(guò)調(diào)用預(yù)定義的規(guī)則操作對(duì)象棧, 將XML文件轉(zhuǎn)換為Java對(duì)象。工作原理如下 .Digester底層采用SAX解析XML文件,由于SAX解析器采用基于 事件的模型,它在解析XML文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn) 給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已 經(jīng)找到。所以相應(yīng)地,對(duì)象轉(zhuǎn)換由"事件"驅(qū)動(dòng),即在識(shí)別出特定XML元 素時(shí)(實(shí)際被細(xì)分為begin、 body、 end、 finish四個(gè)時(shí)點(diǎn)),將執(zhí)行特定的 動(dòng)作,比如創(chuàng)建特定的Java對(duì)象,或調(diào)用特定對(duì)象的方法等。此處的XML 元素根據(jù)匹配模式(matching pattern)識(shí)別,而相關(guān)操作由規(guī)則(mle)定義。 在轉(zhuǎn)換過(guò)程中,Digester維持了一個(gè)對(duì)象棧,用來(lái)存放轉(zhuǎn)換中生成的、或 是為轉(zhuǎn)換臨時(shí)創(chuàng)建的Java對(duì)象。對(duì)輸入XML文件作了一趟完整的掃描 后,對(duì)象棧的棧頂元素即為目標(biāo)對(duì)象。由于Digester屏蔽了 SAX解析的 細(xì)節(jié),使用者僅需關(guān)注轉(zhuǎn)換操作本身,大大簡(jiǎn)化了轉(zhuǎn)換操作。在基本使用中,使用者通過(guò)調(diào)用Digester類的相關(guān)方法,來(lái)創(chuàng)建匹配 才莫式與頭見(jiàn)則的映射序列。比如,調(diào)用addSetProperties(String pattern),向 Digester中加入SetPropertiesRule。然而,在基本的使用方式下,Digester 雖然使用XML文件定義Java對(duì)象的狀態(tài),提高了系統(tǒng)的靈活性,但是不易修改與重用。所以Digester還提供了 一種高級(jí)的使用方式,用 一個(gè) XML文件定義Java對(duì)象的狀態(tài)(it據(jù)源文件),用另 一個(gè)XML文件定義 裝載數(shù)據(jù)源文件的裝載邏輯。在這種情況下,對(duì)象的裝載過(guò)程分成了兩 步1. 裝載邏輯的"裝載",其結(jié)果表現(xiàn)為定義了 rule的Digester;2. 根據(jù)上一步得到的Digester,裝載目標(biāo)對(duì)象。顯然,采用這種方式,需要為一個(gè)裝載邏輯多寫一個(gè)配置文件,如 果需要執(zhí)行復(fù)雜業(yè)務(wù)邏輯的XML文件解析,將增加系統(tǒng)開銷,嚴(yán)重浪費(fèi) 系統(tǒng)資源。并且,由于提供的規(guī)則標(biāo)簽所定義的動(dòng)作簡(jiǎn)單,功能單一, 不支持多棧操作,對(duì)于復(fù)雜的解析動(dòng)作無(wú)法定義或定義比較繁瑣困難。所以,本領(lǐng)域技術(shù)人員迫切需要發(fā)展一種能在節(jié)省系統(tǒng)資源的前提下,簡(jiǎn)單、有效的實(shí)現(xiàn)XML文件配置及解析的方法。
發(fā)明內(nèi)容
'本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種XML文件解析的方法,用以 在節(jié)省系統(tǒng)資源的前提下,簡(jiǎn)單、有效的實(shí)現(xiàn)XML文件配置及解析。本發(fā)明還提供了 一種XML文件解析的裝置,用以保證上述方法在實(shí) 際中的實(shí)現(xiàn)及應(yīng)用。為了解決上述問(wèn)題,本發(fā)明公開了一種XML文件解析的方法,包括定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映射,所述對(duì)象模型特 征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述對(duì)象模型特征的棧名;生成由所述XML標(biāo)簽編寫的XML文件,所述XML文件包括裝載 任務(wù)對(duì)象腳本和組件對(duì)象腳本;提取所述組件對(duì)象腳本的URI,并依據(jù)所述URI在所述裝載任務(wù)對(duì) 象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù)序列,所述裝載任務(wù)序列 包括URI;遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組件對(duì)象腳本;解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng)的棧頂組件對(duì)象。優(yōu)選的,所述裝載任務(wù)對(duì)象腳本包括裝載對(duì)象配置文件和裝載規(guī)則腳 本,所述裝載任務(wù)對(duì)象腳本的解析步驟進(jìn)一步包括依據(jù)所述裝載規(guī)則腳本生成第一 SAX解析器;由所述第一 SAX解析器解析所述裝載任務(wù)對(duì)象腳本。優(yōu)選的,所述組件對(duì)象腳本包括組件對(duì)象配置文件和組件規(guī)則腳本, 所述組件對(duì)象腳本的解析步驟進(jìn)一步包括依據(jù)所述組件規(guī)則腳本生成第二 SAX解析器;由所述第二 SAX解析器解析所述組件對(duì)象腳本。優(yōu)選的,通過(guò)以下步驟返回棧頂組件對(duì)象依據(jù)所述棧名設(shè)置空棧;將相應(yīng)的組件對(duì)象壓入當(dāng)前棧中;提取棧頂組件對(duì)象出棧。優(yōu)選的,所述定義步驟還包括將描述所述對(duì)象模型特征的元模型特征映射到相應(yīng)的XML標(biāo)簽。 優(yōu)選的,所述的方法還包括將描述所述元模型特征至所述XML標(biāo)簽的映射編碼至所述SAX解 析器中。優(yōu)選的,所述SAX解析器包括用于在所述XML文件與對(duì)象模型特征之間進(jìn)行轉(zhuǎn)換的可執(zhí)行代碼。本發(fā)明實(shí)施例還公開了一種XML文件解析的裝置,包括 定義模塊,用于定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映射,所述對(duì)象模型特征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述對(duì)象模型特征的棧名;生成模塊,用于生成由所述XML標(biāo)簽編寫的XML文件,所述XML 文件包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本;關(guān)聯(lián)模塊,用于提取所述組件對(duì)象腳本的URI,并依據(jù)所述URI在 所述裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);裝載解析模塊,用于解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù)序列, 所述裝載任務(wù)序列包括URI;遍歷模塊,用于遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組件 對(duì)象腳本;組件解析模塊,用于解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng)的棧 頂組件對(duì)象。優(yōu)選的,所述裝載任務(wù)對(duì)象腳本包括裝載對(duì)象配置文件和裝載規(guī)則腳 本,所述裝載解析模塊進(jìn)一步包括第一解析器產(chǎn)生子模塊,用于依據(jù)所述裝載規(guī)則腳本生成第一 SAX 解析器;第一SAX解析器,用于解析所述裝載任務(wù)對(duì)象腳本。優(yōu)選的,所述組件對(duì)象腳本包括組件對(duì)象配置文件和組件規(guī)則腳本,所述組件解析模塊進(jìn)一步包括第二解析器產(chǎn)生子模塊,用于依據(jù)所述組件規(guī)則腳本生成第二 SAX解析器;第二SAX解析器,用于解析所述組件對(duì)象腳本。 優(yōu)選的,組件解析模塊進(jìn)一步包括建棧子模塊,用于依據(jù)所述棧名設(shè)置空棧;壓棧子模塊,用于將相應(yīng)的組件對(duì)象壓入當(dāng)前棧中; 出棧子模塊,用于提取棧頂組件對(duì)象出棧。 優(yōu)選的,所述定義模塊還包括標(biāo)簽映射子模塊,用于將描述所述對(duì)象模型特征的元模型特征映射到 相應(yīng)的XML標(biāo)簽。優(yōu)選的,所述的裝置還包括編碼模塊,用于將描述所述元模型特征至所述XML標(biāo)簽的映射編碼 至所述SAX解析器中。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)首先,本發(fā)明通過(guò)開發(fā)新的規(guī)則動(dòng)作模板以支持對(duì)命名棧的操作, 在動(dòng)作模板的基礎(chǔ)上開發(fā)一組新的規(guī)則動(dòng)作,相應(yīng)地,對(duì)原有 commons-digester的SAX解析器Digester進(jìn)行擴(kuò)展,支持對(duì)命名棧的操作, 并且,定義與規(guī)則動(dòng)作對(duì)應(yīng)的規(guī)則標(biāo)簽,開發(fā)XML規(guī)則腳本DTD、規(guī)則 對(duì)象工廠,擴(kuò)展規(guī)則解析器以支持相應(yīng)規(guī)則標(biāo)簽識(shí)別、從而觸發(fā)規(guī)則對(duì) 象工廠的調(diào)用,實(shí)現(xiàn)規(guī)則標(biāo)簽到規(guī)則動(dòng)作對(duì)象的轉(zhuǎn)化,從而使本發(fā)明可 以適用各種XML標(biāo)準(zhǔn)才艮文格式,并且應(yīng)用本發(fā)明的規(guī)則標(biāo)簽可以完成各 種復(fù)雜的解析動(dòng)作,大大簡(jiǎn)化了 XML配置文件與XML規(guī)則腳本的開發(fā)和 維護(hù)工作;其次,本發(fā)明無(wú)需額外生成配置文件描述與創(chuàng)建對(duì)象對(duì)應(yīng)的配置文 件和規(guī)則腳本,有效節(jié)約了系統(tǒng)資源;再者,本發(fā)明通過(guò)遍歷產(chǎn)生裝載任務(wù),能批量生成uri的裝載,從而 支持配量處理與組件即插即用;最后,本發(fā)明對(duì)于服務(wù)提供商來(lái)說(shuō),技術(shù)實(shí)現(xiàn)簡(jiǎn)單,無(wú)技術(shù)障礙, 無(wú)特殊保密算法,成本和風(fēng)險(xiǎn)較低。


圖1是本發(fā)明的一種XML文件解析方法實(shí)施例的流程圖;圖2是本發(fā)明的一個(gè)具體例子中的棧操作過(guò)程示意圖;圖3是本發(fā)明的一種XML文件解析裝置實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,T面結(jié)合 附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。本發(fā)明可用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè) 人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處 理器系統(tǒng)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。本發(fā)明可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的 一般上下文中描 述,例如程序模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽 象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布 式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò) 而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊 可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。目前,使用XML處理復(fù)雜業(yè)務(wù)邏輯可以分為兩種處理類型一種是傳統(tǒng)的硬編碼方式。即只使用XML描述業(yè)務(wù)邏輯的數(shù)據(jù),由 真正的業(yè)務(wù)處理代碼解析這些數(shù)據(jù),完成業(yè)務(wù)邏輯。這種方式只是把數(shù) 據(jù)存放成XML格式,如果業(yè)務(wù)邏輯有什么變化,通常只能修改業(yè)務(wù)處理 代碼, 一般情形下需要重新編譯大量的代碼,編譯后的代碼需要重新部 署,靈活性差。而且隨著業(yè)務(wù)邏輯的復(fù)雜化,則業(yè)務(wù)處理代碼也越來(lái)越 復(fù)雜、越來(lái)越龐大,代碼的可維護(hù)性變差。另一種是XML到應(yīng)用語(yǔ)言的映射。由于XML是SGML的筒化,因此 它也屬于元語(yǔ)言,可以由使用者自行定義,進(jìn)而產(chǎn)生出完全符合使用者 需求的應(yīng)用語(yǔ)言。而且應(yīng)用語(yǔ)言更能夠處理各種更為復(fù)雜的邏輯。通過(guò) XML描述的復(fù)雜處理邏輯,可以通過(guò)XML解析器生成對(duì)應(yīng)的應(yīng)用語(yǔ)言。 而且這種解析、編譯、處理的過(guò)程可以做成一體,完成對(duì)XML語(yǔ)言的解 釋執(zhí)行過(guò)程;此外,上述過(guò)程也可以分開,只部署解析后的應(yīng)用語(yǔ)言或 編譯后的目標(biāo)語(yǔ)言,提高處理的速度,帶來(lái)很大的靈活性。在實(shí)際中,由于XML的靈活性和可讀性,XML通常用作對(duì)象模型的 串行化機(jī)制。使用者能夠定義XML標(biāo)記符號(hào)以與某種類型的數(shù)據(jù)相對(duì)應(yīng), 然后創(chuàng)建XML文件(也稱為XML文檔),可對(duì)XML文件進(jìn)行轉(zhuǎn)換,以提供與標(biāo)簽和屬性相關(guān)聯(lián)的內(nèi)容。例如,如果想要建立描述某類產(chǎn)品的標(biāo)準(zhǔn) 格式,以便能在不同平臺(tái)的多.個(gè)應(yīng)用上共享該類產(chǎn)品的描述,可定義與該產(chǎn)品相對(duì)應(yīng)的通用標(biāo)簽,例如,"SHIRT(襯衫)",以及該標(biāo)簽的屬性, 每個(gè)屬性定義了該產(chǎn)品的特性,例如,"SIZE(尺寸)"屬性、"COLOR(顏色)" 屬性、"MATERIAL(材料)"屬性、"COST(價(jià)格)"屬性等。屬性字段中提供 有實(shí)際數(shù)據(jù)內(nèi)容,例如,large(大號(hào))、red and blue stripes(紅藍(lán)條紋)、 cotton(棉)、$29.95等。然后可將關(guān)于該產(chǎn)品的數(shù)據(jù)(^t據(jù)內(nèi)容)以獨(dú)立于平 臺(tái)的XML文件的形式發(fā)送到運(yùn)行XML解釋器程序的任何其他計(jì)算機(jī)上, XML解釋器程序可以用于轉(zhuǎn)換和理解這些特定標(biāo)簽。使用面向?qū)ο蠹夹g(shù)開發(fā)的應(yīng)用軟件程序通常是基于底層"對(duì)象模型"。 對(duì)象模型是描述系統(tǒng)數(shù)據(jù)和行為的有關(guān)"對(duì)象"的集合。對(duì)象通常描述真實(shí) 世界的實(shí)體。例如,名為"Address(地址),,的對(duì)象可具有名為"Street(街道)"、 "City(城市)"等的屬性以及名為"getStreetO"、 "getCityO"的方法或函數(shù)。在 構(gòu)建良好的軟件系統(tǒng)中,將底層對(duì)象模型設(shè)計(jì)為獨(dú)立于系統(tǒng)中其他服務(wù), 例如傳輸機(jī)制,用戶界面,數(shù)據(jù)存儲(chǔ)等的層。按照這樣的方式,對(duì)象模 型成為可為其他應(yīng)用所包含在內(nèi)的可重用組件。在使用XML的應(yīng)用中,慣用的做法是將XML文件中所包含的數(shù)據(jù)模 型化為對(duì)象模型。相反地,通常存在現(xiàn)有對(duì)象模型并使用XML作為串行 化格式。例如,將具有標(biāo)簽〈address〉/〈address〉的XML實(shí)體模型化為對(duì) 象名"Address"。從而,其他應(yīng)用組件(例如,用戶界面)的代碼可與對(duì)象才莫 型中的對(duì)象交互,但不與底層X(jué)ML交互。這提供了將系統(tǒng)中數(shù)據(jù)的含義 與讀出和寫入,XML的實(shí)際機(jī)制相隔離的較好抽象層。從而,在系統(tǒng)中 會(huì)存在將對(duì)象模型轉(zhuǎn)換到XML(反之亦然)的層。在某些情形中,XML中 的數(shù)據(jù)元素以簡(jiǎn)單而直接的方式映射到對(duì)象模型中的值,正如在以上示 例的。然而,通常的情形是,映射并不簡(jiǎn)單,且存在復(fù)雜的規(guī)則,以便 進(jìn)行轉(zhuǎn)換。一般而言,將XML文件轉(zhuǎn)換成對(duì)象模型的過(guò)程涉及到三個(gè)基本步驟: 第一、分析XML文本中的每個(gè)字符,以識(shí)別"合法"的XML標(biāo)識(shí)(token), 諸如開始標(biāo)簽,屬性,結(jié)束標(biāo)簽,和CDATA節(jié);第二、分析標(biāo)識(shí),以驗(yàn)證它們形成合法的XML結(jié)構(gòu)(例如,所有標(biāo)簽具有匹配的打開和關(guān)閉標(biāo)簽);第三、在翻譯過(guò)程中,將XML文件中包含的數(shù)據(jù)相應(yīng)轉(zhuǎn)換為屬于對(duì) 象模型和集合的數(shù)據(jù)元素和對(duì)象。數(shù)據(jù)元素可以表示為對(duì)象模型或其他 對(duì)象中的簡(jiǎn)單屬性。例如,"地址(address)"具有"城市(city)",其為簡(jiǎn)單屬 性,"雇員(employee)"具有"地址(Address)",其為表示對(duì)象才莫型中另 一對(duì) 象的復(fù)雜類型。通常還能夠?qū)⒌刂?Address)的屬性和雇員(Employee)與地 址(Address)之間的對(duì)象關(guān)聯(lián),以作為結(jié)構(gòu)特征。由于眾多不同類型的配置文件需要與不同的解釋腳本關(guān)聯(lián)起來(lái),同 時(shí)需要一種機(jī)制將運(yùn)行期需要加載的系統(tǒng)組件同配置文件對(duì)應(yīng)起來(lái),并 且根據(jù)復(fù)雜業(yè)務(wù)平臺(tái)配置多樣性、配置文件解析規(guī)則復(fù)雜和組件數(shù)量眾 多的特點(diǎn),實(shí)現(xiàn)新增的服務(wù)組件可以動(dòng)態(tài)接入系統(tǒng)的功能,即配置的位 置決定文件可供加載,而不需要額外配置文件支持來(lái)描述新組件的接入。參考圖1,示出了本發(fā)明的一種XML文件解析方法實(shí)施例的流程圖, 可以包括以下步驟步驟IOI、定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映射,所述 對(duì)象模型特征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述對(duì)象模型 特征的棧名;步驟102、生成由所述XML標(biāo)簽編寫的XML文件,所述XML文件 包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本;步驟103、纟是取所述組件對(duì)象腳本的URI,并依據(jù)所述URI在所述裝 載任務(wù)對(duì)象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);步驟104、解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù)序列,所述裝 載任務(wù)序列包括URI;步驟105、遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組件對(duì)象腳本;步驟106、解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng)的棧頂組件對(duì)象。本發(fā)明假設(shè)使用元模型,即所述步驟101可以包括以下子步驟將描述所述對(duì)象模型特征的元模型特征映射到相應(yīng)的XML標(biāo)簽。 具體而言,描述對(duì)象模型以及該模型中的不同對(duì)象彼此之間如何相關(guān)的模型,這種元模型的示例包括Eclipse建??蚣?EMF)和JAVAbean。 在其最簡(jiǎn)單形式中,XML解析器是在XML中的標(biāo)簽名與元模型的特征 之間的映射,以及使用元才莫型的特征在值與XML之間來(lái)回轉(zhuǎn)換所必需的 相關(guān)行為。當(dāng)存在描述對(duì)象模型的元模型時(shí),也存在描述XML的表格和 標(biāo)簽名的XML元數(shù)據(jù)。當(dāng)應(yīng)用本發(fā)明時(shí),從XML到元模型元數(shù)據(jù)的映 射被編碼至解析器中。其解析基于對(duì)象模型實(shí)現(xiàn),對(duì)象包含引用到其他 子對(duì)象,且XML節(jié)點(diǎn)具有子節(jié)點(diǎn),從而,所述解析器還包含到子翻譯器 的引用,這樣就形成將對(duì)象模型和XML元模型相比照的樹形結(jié)構(gòu)。由于 解析器包括關(guān)于如何將XML模型轉(zhuǎn)換成對(duì)象模型以及如何將對(duì)象模型轉(zhuǎn) 換成XML的信息和規(guī)則,因而進(jìn)行映射的所有復(fù)雜規(guī)則都包括在解析器 中,若需要進(jìn)行改變,則可以在解析器中定制相應(yīng)規(guī)則使其得以實(shí)現(xiàn)。優(yōu)選的是,所述裝載任務(wù)對(duì)象腳本可以包括裝載對(duì)象配置文件和裝 載規(guī)則腳本,在這種情況下,所述步驟104可以包括以下子步驟 子步驟S1、依據(jù)所述裝載規(guī)則腳本生成第一 SAX解析器; 子步驟S2、由所述第一 SAX解析器解析所述裝載任務(wù)對(duì)象腳本。 進(jìn)一步地,所述組件對(duì)象腳本可以包括組件對(duì)象配置文件和組件規(guī) 則腳本,在這種情況下,所述組件對(duì)象腳本的解析步驟可以包括以下子 步驟子步驟S3、依據(jù)所述組件規(guī)則腳本生成第二 SAX解析器; 子步驟S4、由所述第二 SAX解析器解析所述組件對(duì)象腳本。 為保證SAX解析器的解析,本發(fā)明還可以包括以下步驟 將描述所述元模型特征至所述XML標(biāo)簽的映射編碼至所述SAX解 析器中。在這種情況下,所述SAX解析器可以包括用于在所述XML文件與 對(duì)象模型特征之間進(jìn)行轉(zhuǎn)換的可執(zhí)行代碼。以下對(duì)SAX解析XML文件的原理進(jìn)4亍說(shuō)明SAX是基于事件的簡(jiǎn)單API ,例如,需要解析的XML代碼如下所示< xml version="1.0" encoding="gb2312" > <books><book email="zhoujimhui"><name addr=" addre s s" >rj zj h</name> <price>jjjjjj</price> </book> </books>這個(gè)XML文件中包括了根元素、屬性、子節(jié)點(diǎn)。解析這個(gè)XML文 件的Java〗戈碼如下所示1 public class SaxParse {2 public SaxParseQ{3 SAXParserFactory saxfac=SAXParserFactory.newInstance();4 try {5 SAXParser saxparser二saxfac.newSAXParser();6 InputStream is=new FilelnputStream("bin/library.xml");7 saxparser.parse(is, new MySAXHandler());8 } catch (ParserConfigurationException e) {9 e.printStackTrace();10 } catch (SAXException e) {11 e .printS tackTrace();12 } catch (FileNotFoundException {13 e.printStackTrace();14 } catch (IOException {15 e.printStackTraceO;16 }17 }18 public static void main(String[] args) {19 new SaxParse();20 }法,它21 }其中,(1)得到SAX解析器的工廠實(shí)例3 SAXParserFactory saxfac=SAXParserFactory.newInstance(); 這是一個(gè)javax.xml.parsers.SAXParserFactory類的實(shí)例。 (2 )從SAX工廠實(shí)例中獲得SAX解析器 5 SAXParser saxparser=saxfac.newSAXParser();(3 )把要解析的XML文檔轉(zhuǎn)化為輸入流,以便DOM解析器解析6 InputStream is=new FilelnputStream("bin/library.xml"); InputStream是一個(gè)接口 。(4 )解析XML文檔7 saxparser.parse(is, new MySAXHandler());使用SAX解析器時(shí),必須實(shí)現(xiàn)內(nèi)容處理器ContentHandler接口中的 一些回調(diào)方法,因而i殳置了 org.xml.sax.helpers.DefaultHandler類,它的類 聲明為public class DefaultHandler'implements EntityResolver , DTDHandler , ContentHandler , ErrorHandler可以看出,它至少實(shí)現(xiàn)了 ContentHandler這一接口 。這個(gè)類所對(duì)應(yīng)的 Java代碼如下所示public class MySAXHandler extends DefaultHandler { boolean hasAttribute=false; Attributes attributes=null; /* (非 Javadoc ) * @see org.xml.sax.helpers.DefaultHandler#startDocument()public void startDocument() throws SAXException { System.out.println("文檔開始打印了 ");/* (非 Javadoc ) * @see org.xml.sax.helpers.DefaultHandler#endDocumentO氺/public void endDocumentO throws SAXException { System.out.println("文檔打印結(jié)束了 ");/* (非 Javadoc )org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String , java.lang.String, Java.lang.String,org.xml. sax. Attributes)public void startElement(String uri ,String localName , String qName,Attributes attributes) throws SAXException { if(qName.equals("books")) { return',if(qName.equals("book")) {System.out,println(attributes.getQName(0)+attributes.getValue(0));if(attributes.getLength()>0){ this attributes=attributes; this.has Attribute=true;/* (非 Javadoc)org.xm—l.sax.helpers.DefaultHandler#endElement(java.lang.String , Java.lang.String, java.lang.String)public void endElement(String uri, String localName , String qName)throws SAXException { if(has Attribute&&(attributes! =null)) {for(int i=0; i<attributes.getLength(); i++){System.out.println(attributes.getQName(O)+attributes.getValue(O));/* (非 Javadoc) * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int,public void characters(char[] ch, int start,int length) throws SAXException { System.out.println(new String(ch, start, length));這個(gè)類實(shí)現(xiàn)了 ContentHandler 4妄口中的如下方法 (1 ) startDocument() 用于處理文檔解析開始事件public void startDocument() throws SAXException { System.out.println("文檔開始打印了 ");(2 ) endDocument() 用于處理文檔解析結(jié)束事件public void endDocument() throws SAXException { System.out.println("文檔打印結(jié)束了 ");(3 ) startElement 用于處理元素開始事件public void startElement(String uri,String localName, StringqName ,Attributes attributes) throws SAXException { if(qName.equals("books")){ return;if(qName.equals("book")){System.out.println(attributes.getQName(0)+attributes.getValue(0));if(attributes.getLength()>0) { this.attributes=attributes; this.hasAttribute=true;第二個(gè)參數(shù)String qN ame *示&個(gè)元素的名字,^口 根節(jié)點(diǎn) <books></books> 它的qName為"books" 最底層節(jié)點(diǎn) <price>jjjjjj</price>它的qName為"price" 所述代碼可以解釋為,當(dāng)遇到根元素"books,,時(shí)就什么也不做跳過(guò), 當(dāng)遇到"book"元素時(shí)就打出它的屬性(它只有 一 個(gè)屬性<book email="zhoujunhui"></book> )。當(dāng)是其它節(jié)點(diǎn)時(shí)(這下只剩下最底層的 兩個(gè)節(jié)點(diǎn)"name"和"price"了 ),就把它的屬性取出來(lái)存到this逾ibutes 域中,以后中元素結(jié)束事件好處理。(4) endElement 用于處理元素結(jié)束事件public void endElement(String uri,String localName, StringqName)throws SAXException { if(hasAttribute&&(attributes!=null)){for(inti=0; i<attributes.getLength(); i++){System.out.println(attributes.getQName(O)十a(chǎn)ttributes.getValue(O));代碼的作用是如果這個(gè)元素的屬性不為空 (hasAttribute&&(attributes!=null)),就把它們打印出來(lái)。(5 ) characters(char[] ch,int start, int length)處理元素字符的內(nèi)容public void characters(char[] ch, int start,int length)throws SAXException {System.out.println(new String(ch, start, length));還有其它的事件,只要看一下ContentHandler這個(gè)接口就行了 ,如 (6) startPrefixMapping(String prefix, String URI) 處理前綴映射開始事件,參數(shù)表示前綴名稱和所指向的URI(7 ) endPrefixMapping(String prefix, String URI) 處理前綴映射結(jié)束事件,參數(shù)表示前綴名稱和所指向的URI(8 ) ignorableWhitespace(Char[] ch, int start, int length) 處理元素中可忽略的空格(9 ) processingInstruction(String target, String data) 處理解析中產(chǎn) 生的處理指令事件。當(dāng)然,上述方法僅僅用于舉例,本領(lǐng)域技術(shù)人員根據(jù)需要或經(jīng)驗(yàn)采 用任一種擴(kuò)展框架或解析器都是可行的,本泉明對(duì)此不需要進(jìn)行限定。本發(fā)明實(shí)施例中 一種技術(shù)實(shí)現(xiàn)關(guān)鍵在于,以模擬對(duì)象出入棧操作為藍(lán)本,對(duì)象出入棧操作主要可以包括以下五個(gè)方面1、 直接對(duì)棧的操作,如pop、 dup、 xchg、 push-value、 cp、 dump等 代碼所對(duì)應(yīng)的操作;2、 XML數(shù)據(jù)入棧,如push-attribute、 push-content等代碼所對(duì)應(yīng)的操作;3、 使用XML數(shù)據(jù)對(duì)棧頂對(duì)象操作,如set-attribute、 set-property、 set-content等代碼所對(duì)應(yīng)的操作;4、 方法調(diào)用,如 invoke-static 、 invoke-object 、 invoke-parent 、 invoke-child、 create-object等代碼所對(duì)應(yīng)的操作;5、 動(dòng)作標(biāo)識(shí),如begin、 end、 if、 include-url、 switch/case/default、 if條件組等代碼所對(duì)應(yīng)的操作。因而,本實(shí)施例可以通過(guò)以下子步驟返回棧頂組件對(duì)象 子步驟Q1、依據(jù)所述棧名設(shè)置空棧S; 子步驟Q2、將相應(yīng)的組件對(duì)象壓入當(dāng)前棧中; 子步驟Q3、提取棧頂組件對(duì)象出棧。在實(shí)際中,根據(jù)配置加載的需求,所述XML數(shù)據(jù)的配置加載可以采 用擴(kuò)展commons-digester來(lái)實(shí)現(xiàn)。根據(jù)本說(shuō)明書中的相關(guān)內(nèi)容可以得知, commons- digester可以將XML數(shù)據(jù)裝載成Java object API。它使用了 SAX 解析器,當(dāng)解釋到某個(gè)XML事件標(biāo)簽時(shí),觸發(fā)同該標(biāo)簽相關(guān)的一組動(dòng)作, 在動(dòng)作中而完成java object的創(chuàng)建、加工、方法調(diào)用等操作?;谒?commons-digester 才匡架, 可以開發(fā) config.rule , 該包通過(guò)對(duì) commons-digester包的擴(kuò)展,定義了一組對(duì)象模型特征,同時(shí)定義了所述 對(duì)象模型特征的名稱。XML標(biāo)簽用于編寫XML規(guī)則腳本,規(guī)則腳本產(chǎn) 生SAX解析器,SAX解析器可以用來(lái)解析XML配置創(chuàng)建對(duì)象。具體而 言,規(guī)則腳本可以通過(guò)解析配置文件的對(duì)象模型特征,通過(guò)對(duì)棧的操作, 完成配置數(shù)據(jù)和生成對(duì)象的緩存及運(yùn)算的過(guò)程。例如,當(dāng)遇到XML事件時(shí),定義的對(duì)象模型特征可能產(chǎn)生新的對(duì)象,新產(chǎn)生的對(duì)象便保存在棧中;或者當(dāng).從XML的事件中讀取的屬性,定義的對(duì)象模型特征可以用該 屬性的值,設(shè)置棧中對(duì)象的屬性。為使本領(lǐng)域,技術(shù)人員更好地理解本發(fā)明,以下以在實(shí)際中應(yīng)用本發(fā) 明為例進(jìn)行說(shuō)明。一、 定義一組新的規(guī)則動(dòng)作,每個(gè)規(guī)則動(dòng)作都具有有一個(gè)特定屬性 target,它標(biāo)識(shí)該標(biāo)簽動(dòng)作才喿作的棧名。同時(shí)對(duì)原有commons-digester的 解析器進(jìn)行擴(kuò)展,在原有內(nèi)置棧的基礎(chǔ)上,新增了一個(gè)擴(kuò)展棧及其數(shù)據(jù) 結(jié)構(gòu)和對(duì)象出入棧操作,在解析過(guò)程中還可以動(dòng)態(tài)建立臨時(shí)棧。經(jīng)過(guò)所 述擴(kuò)展后,所述解析器可以對(duì)規(guī)則動(dòng)作target屬性命名棧的識(shí)別,并支持 新增規(guī)則動(dòng)作對(duì)命名棧的操作。例如,在擴(kuò)展解析器中將新增擴(kuò)展棧名為"—extend—", commons-digester的解析器的原有內(nèi)置棧名為"—base—"。新增規(guī)則動(dòng)作 通過(guò)命名棧target的方式,支持棧與棧之間操作。二、 針對(duì)上述定義的規(guī)則動(dòng)作,定義與規(guī)則動(dòng)作對(duì)應(yīng)的規(guī)則標(biāo)簽, 規(guī)則標(biāo)簽用于書寫XML規(guī)則腳本。同時(shí),擴(kuò)展規(guī)則解析器以支持相應(yīng)規(guī) 則標(biāo)簽識(shí)別、從而觸發(fā)規(guī)則對(duì)象工廠的調(diào)用,實(shí)現(xiàn)規(guī)則標(biāo)簽到規(guī)則動(dòng)作 對(duì)象的轉(zhuǎn)化。基于上述定義,應(yīng)用本發(fā)明的一種XML文件解析過(guò)程為三、 使用規(guī)則標(biāo)簽編寫XML規(guī)則腳本,編寫XML文件,其中,所 述XML文件可以包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本,具體而言,所 述裝載任務(wù)對(duì)象腳本可以包括裝載對(duì)象配置文件和裝載規(guī)則腳本;所述 組件對(duì)象腳本可以包括組件對(duì)象配置文件和組件規(guī)則腳本,為了解決組件對(duì)象腳本與裝載任務(wù)對(duì)象腳本之間的關(guān)聯(lián)問(wèn)題,引入 了統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifier,簡(jiǎn)稱"URI")唯一標(biāo)識(shí) 一個(gè)組件,公知的是,URI —般由三部分組成訪問(wèn)資源的命名機(jī)制; 存放資源的主機(jī)名;資源自身的名稱、路徑或者參數(shù)。例如, http:〃www.webmonkey.com. cn/html/html40/;這個(gè)URI表示了 一個(gè)可通過(guò)HTTP協(xié)議訪問(wèn)的資源,位于主機(jī)www.webmonkey .com.cn上,通過(guò)路徑 "/html/html40"訪問(wèn)即可。在網(wǎng)絡(luò)資源數(shù)據(jù)傳輸領(lǐng)域中比較常用的是URL (Uniform Resource Location,統(tǒng)一資源定位符),URL是URI命名機(jī)制 的一個(gè)子集。在本例中,每個(gè)URI需要關(guān)聯(lián)兩份文件,組件對(duì)象腳本 dataxml與裝載任務(wù)對(duì)象腳本rulexml。進(jìn)一步地,采用URI標(biāo)識(shí)信息的 一部分同另外的目錄信息、獲取方式信息組成URL,最終定位dataxml 和rulexml 。四、 解析裝載任務(wù)對(duì)象腳本,在裝載管理器中生成裝載任務(wù),具體 可以包括以下步驟1、 依據(jù)所述裝載規(guī)則腳本生成SAX解析器。2、 由所述SAX解析器解析裝載任務(wù)對(duì)象腳本,動(dòng)態(tài)生成裝載任務(wù) 序列,每個(gè)裝載任務(wù)序列具有URI標(biāo)識(shí)。五、 指定裝載任務(wù)URI,裝載由URI標(biāo)識(shí)的裝載任務(wù)序列,以創(chuàng)建 組件對(duì)象,具體可以包括以下步驟1、 遍歷URI標(biāo)識(shí)的裝載任務(wù)序列,取得指定裝載任務(wù)的組件對(duì)象腳本;2、 依據(jù)所述組件對(duì)象腳本的組件規(guī)則腳本生成SAX解析器;3、 由所述SAX解析器解析組件對(duì)象腳本;4、 SAX解析器返回棧頂組件對(duì)象。 以下對(duì)出入棧的具體操作進(jìn)行說(shuō)明 々支設(shè)組件對(duì)象配置文件如以下代碼所示 < xml version="1.0" encoding="gb2312" > <permission-manager〉〈processor name="identify_processor" impl-class="com.dc.eai.service.permission.identify.ServiceIdentify"/> </permission-manager> 相應(yīng)的組件^見(jiàn)則腳本如以下代碼所示 < xml version="1.0" encoding="gb2312" > <digester-rules><pattern value="permission-manager"> <begin> <invoke-staticclass-name="com.dc.eai.service.permission.PermissionManager" method-name="getInstance"/></begin><pattern value="processor"> <begin>〈push-attribute attr-name="name"/> <create-object class-name="impl-class"param-count="0"/><dup index="27> <invoke-objectmethod-name="addProcessor" param-count="2'7></begin></pattem> <end><cp source="—extend—" target="—base—"/> </end></pattem> </digester-mles>依據(jù)上述代碼模擬棧操作的過(guò)程如圖2所示,可以包括以下步驟步驟A1、置空擴(kuò)展棧后,將permission-manager壓入棧中(對(duì)應(yīng)圖2 中第一個(gè)—extend一所表示的內(nèi)容);步驟A2、進(jìn)一步將identify_processor壓入棧中(對(duì)應(yīng)圖2中第二個(gè) _extend一所表示的內(nèi)容);步驟A3、進(jìn)一步將Serviceldentify壓入棧中(對(duì)應(yīng)圖2中第二個(gè) _extend—所表示的內(nèi)容);步驟A4、提取才戔頂元素permission-manager,并力文入內(nèi)置片戔—base—中。優(yōu)選的是,本實(shí)施例還可以通過(guò)對(duì)裝在任務(wù)序列進(jìn)行遍歷可以批量生成URI的裝載,以支持組件即插即用。綜上所述,本發(fā)明通過(guò)開發(fā)新的規(guī)則動(dòng)作模板以支持對(duì)命名棧的操 作,在動(dòng)作模板的基礎(chǔ)上開發(fā)一組新的規(guī)則動(dòng)作,相應(yīng)地,對(duì)原有 commons-digester的SAX解析器Digester進(jìn)行擴(kuò)展,支持對(duì)命名棧的操作, 并且,定義與規(guī)則動(dòng)作對(duì)應(yīng)的規(guī)則標(biāo)簽,開發(fā)XML規(guī)則腳本DTD、規(guī)則 對(duì)象工廠,擴(kuò)展規(guī)則解析器以支持相應(yīng)規(guī)則標(biāo)簽識(shí)別、從而觸發(fā)規(guī)則對(duì) 象工廠的調(diào)用,實(shí)現(xiàn)規(guī)則標(biāo)簽到規(guī)則動(dòng)作對(duì)象的轉(zhuǎn)化。從而使本發(fā)明可 以適用各種XML標(biāo)準(zhǔn)報(bào)文格式,并且應(yīng)用本發(fā)明的規(guī)則標(biāo)簽可以完成各 種復(fù)雜的解析動(dòng)作,大大簡(jiǎn)化了XML配置文件與XML規(guī)則腳本的開發(fā)和 維護(hù)工作。其次,本發(fā)明無(wú)需額外生成配置文件描述與創(chuàng)建對(duì)象對(duì)應(yīng)的 配置文件和規(guī)則腳本,有效節(jié)約了系統(tǒng)資源;再者,本發(fā)明通過(guò)遍歷產(chǎn) 生裝載任務(wù),能批量生成uri的裝載,從而支持配量處理與組件即插即用。 最后,本發(fā)明對(duì)于服務(wù)提供商來(lái)說(shuō),技術(shù)實(shí)現(xiàn)簡(jiǎn)單,無(wú)技術(shù)障礙,無(wú)特 殊保密算法,成本和風(fēng)險(xiǎn)較低。需要說(shuō)明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其 都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并 不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其 他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書中所 描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā) 明所必須的。參考圖3,示出了本發(fā)明的一種XML文件解析裝置實(shí)施例的結(jié)構(gòu)框 圖,可以包括以下模塊定義模塊301,用于定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映 射,所述對(duì)象模型特征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述 對(duì)象模型特征的棧名;生成沖莫塊302,用于生成由所述XML標(biāo)簽編寫的XML文件,所述 XML文件包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本;關(guān)聯(lián)模塊303,用于提取所述組件對(duì)象腳本的URI,并依據(jù)所述URI 在所述裝載任斧對(duì)象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);裝載解析模塊304,用于解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù) 序列,所述裝載任務(wù)序列包括URI;遍歷模塊305,用于遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組 件對(duì)象腳本;組件解析模塊306,用于解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng) 的棧頂組件對(duì)象。在本實(shí)施例中,優(yōu)選的是,所述裝載任務(wù)對(duì)象腳本包括裝載對(duì)象配置 文件和裝載規(guī)則腳本,在這種情況下,所述裝載解析模塊304可以進(jìn)一 步包括以下子模塊第一解析器產(chǎn)生子模塊,用于依據(jù)所述裝載規(guī)則腳本生成第一 SAX 解析器;第一SAX解析器,用于解析所述裝載任務(wù)對(duì)象腳本。 相應(yīng)地,所述組件對(duì)象腳本可以包括組件對(duì)象配置文件和組件MJ'J腳 本,在這種情況下,所述組件解析模塊306可以進(jìn)一步包括以下子模塊 第二解析器產(chǎn)生子模塊,用于依據(jù)所述組件規(guī)則腳本生成第二 SAX解析器;第二SAX解析器,用于解析所述組件對(duì)象腳本。更為優(yōu)選的,所述組件解析模塊306還可以進(jìn)一步包括以下子模塊建棧子模塊,用于依據(jù)所述棧名設(shè)置空棧;壓棧子模塊,用于將相應(yīng)的組件對(duì)象壓入當(dāng)前棧中;出棧子模塊,用于提取棧頂組件對(duì)象出棧。在本實(shí)施例中,所述定義模塊還可以包括標(biāo)簽映射子模塊,用于將描 述所述對(duì)象模型特征的元模型特征映射到相應(yīng)的XML標(biāo)簽。優(yōu)選的是,本實(shí)施例還可以包括編碼模塊,用于將描述所述元模型特 征至所述XML標(biāo)簽的映射編碼至所述SAX解析器中。對(duì)于裝置實(shí)施例而言,由于其基本相應(yīng)于方法實(shí)施例,所以描述的 比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上對(duì)本發(fā)明所提供的一種XML文件解析的方法及一種XML文件解析的裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及 實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方 法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思 想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明 書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1、一種XML文件解析的方法,其特征在于,包括定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映射,所述對(duì)象模型特征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述對(duì)象模型特征的棧名;生成由所述XML標(biāo)簽編寫的XML文件,所述XML文件包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本;提取所述組件對(duì)象腳本的URI,并依據(jù)所述URI在所述裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù)序列,所述裝載任務(wù)序列包括URI;遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組件對(duì)象腳本;解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng)的棧頂組件對(duì)象。
2、 如權(quán)利要求l所述的方法,其特征在于,所述裝載任務(wù)對(duì)象腳本 包括裝載對(duì)象配置文件和裝載規(guī)則腳本,所述裝載任務(wù)對(duì)象腳本的解析 步驟進(jìn)一步包括依據(jù)所述裝載規(guī)則腳本生成第一 SAX解析器; 由所述第一 SAX解析器解析所述裝載任務(wù)對(duì)象腳本。
3、 如權(quán)利要求l或2所述的方法,其特征在于,所述組件對(duì)象腳本 包括組件對(duì)象配置文件和組件規(guī)則腳本,所述組件對(duì)象腳本的解析步驟 進(jìn)一步包括依據(jù)所述組件規(guī)則腳本生成第二 SAX解析器; 由所述第二 SAX解析器解析所述組件對(duì)象腳本。
4、 如權(quán)利要求l所述的方法,其特征在于,通過(guò)以下步驟返回棧頂 組件對(duì)象依據(jù)所述棧名設(shè)置空棧;將相應(yīng)的組件對(duì)象壓入當(dāng)前棧中;提取棧頂組件對(duì)象出棧。
5、 如權(quán)利要求3所述的方法,其特征在于,所述定義步驟還包括 將描述所述對(duì)象模型特征的元模型特征映射到相應(yīng)的XML標(biāo)簽。
6、 如權(quán)利要求5所述的方法,其特征在于,還包括 將描述所述元模型特征至所述XML標(biāo)簽的映射編碼至所述SAX解析器中。
7、 如權(quán)利要求6所述的方法,其特征在于,所述SAX解析器包括用 于在所述XML文件與對(duì)象模型特征之間進(jìn)行轉(zhuǎn)換的可執(zhí)行代碼。
8、 一種XML文件解析的裝置,其特征在于,包括定義模塊,用于定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映射, 所述對(duì)象模型特征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述對(duì)象 模型特征的棧名;生成4莫塊,用于生成由所述XML標(biāo)簽編寫的XML文件,所述XML 文件包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本;關(guān)聯(lián)模塊,用于提取所述組件對(duì)象腳本的URI,并依據(jù)所述URI在 所述裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);裝載解析模塊,用于解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù)序列, 所述裝載任務(wù)序列包括URI;遍歷模塊,用于遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組件 對(duì)象腳本;組件解析模塊,用于解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng)的棧 頂組件對(duì)象。
9、 如權(quán)利要求8所述的裝置,其特征在于,所述裝載任務(wù)對(duì)象腳本 包括裝載對(duì)象配置文件和裝載規(guī)則腳本,所述裝載解析模塊進(jìn)一步包括第一解析器產(chǎn)生子模塊,用于依據(jù)所述裝載規(guī)則腳本生成第一 SAX 解析器;第一SAX解析器,用于解析所述裝載任務(wù)對(duì)象腳本。
10、 如權(quán)利要求8或9所述的裝置,其特征在于,所述組件對(duì)象腳本 包括組件對(duì)象配置文件和組件規(guī)則腳本,所述組件解析模塊進(jìn)一步包括第二解析器產(chǎn)生子模塊,用于依據(jù)所述組件規(guī)則腳本生成第二 SAX 解析器;第二SAX解析器,用于解析所述組件對(duì)象腳本。
11、 如權(quán)利要求8所述的裝置,其特征在于,組件解析模塊進(jìn)一步包括建棧子模塊,用于依據(jù)所述棧名設(shè)置空棧; 壓棧子模塊,用于將相應(yīng)的組件對(duì)象壓入當(dāng)前棧中;出棧子模塊,用于提取棧頂組件對(duì)象出棧。
12、 如權(quán)利要求IO所述的裝置,其特征在于,所述定義模塊還包括: 標(biāo)簽映射子模塊,用于將描述所述對(duì)象模型特征的元模型特征映射到相應(yīng)的XML標(biāo)簽。
13、 如權(quán)利要求12所述的裝置,其特征在于,還包括 編碼模塊,用于將描述所述元模型特征至所述XML標(biāo)簽的映射編碼至所述SAX解析器中。
全文摘要
本發(fā)明提供了一種XML文件解析的方法,包括定義所述XML的標(biāo)簽與相應(yīng)對(duì)象模型特征的映射,所述對(duì)象模型特征具有配置屬性,所述配置屬性用于標(biāo)識(shí)執(zhí)行所述對(duì)象模型特征的棧名;生成由所述XML標(biāo)簽編寫的XML文件,所述XML文件包括裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本;提取所述組件對(duì)象腳本的URI,并依據(jù)所述URI在所述裝載任務(wù)對(duì)象腳本和組件對(duì)象腳本之間建立關(guān)聯(lián);解析所述裝載任務(wù)對(duì)象腳本,生成裝載任務(wù)序列,所述裝載任務(wù)序列包括URI;遍歷所述裝載任務(wù)序列,獲得當(dāng)前URI指定的組件對(duì)象腳本;解析所述組件對(duì)象腳本,返回相應(yīng)棧名對(duì)應(yīng)的棧頂組件對(duì)象。本發(fā)明能在節(jié)省系統(tǒng)資源的前提下,簡(jiǎn)單、有效的實(shí)現(xiàn)XML文件配置及解析。
文檔編號(hào)G06F17/22GK101221556SQ20081000606
公開日2008年7月16日 申請(qǐng)日期2008年2月1日 優(yōu)先權(quán)日2008年2月1日
發(fā)明者吳煒?biāo)? 周子堅(jiān), 健 施, 李志鈞, 杜永鍵, 芬 楊, 林志農(nóng), 王迎春 申請(qǐng)人:中國(guó)建設(shè)銀行股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1