專利名稱::將數(shù)據(jù)流中的數(shù)據(jù)輸出到xml文件中的適配器及方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于數(shù)據(jù)庫ETL領(lǐng)域,具體涉及一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器及方法。
背景技術(shù):
:MicrosoftSQLServer2005是一個全面的數(shù)據(jù)庫平臺,使用集成的商業(yè)智能(BI)工具提供了企業(yè)級的數(shù)據(jù)管理。MicrosoftSQLServer2005IntegrationServices(SSIS)是MicrosoftSQLServer2005強大功能之一,在技術(shù)上來講,它被歸類為一種商業(yè)智能功能,同時使一種在數(shù)據(jù)流中加載數(shù)據(jù)以及執(zhí)行任務(wù)的強大方式,該功能主要用于數(shù)據(jù)加載,但也可以使用它來完成工作流中的其它任務(wù)。集成服務(wù)可以生成高性能數(shù)據(jù)集成解決方案,其中包括為數(shù)據(jù)倉庫提取、轉(zhuǎn)換和加載(ETL)包。集成服務(wù)中的任務(wù)可以描述為某個單一的工作單元,集成服務(wù)中包括很多任務(wù),其中有批量插入任務(wù),執(zhí)行程序包任務(wù)等等,數(shù)據(jù)流任務(wù)是集成服務(wù)中非常重要的負責(zé)將數(shù)據(jù)加載并轉(zhuǎn)換到目的地的任務(wù),它采用管道的方式加載轉(zhuǎn)換并載入到目的地,數(shù)據(jù)流的關(guān)鍵組成部分是源、目的地、轉(zhuǎn)換和路徑。其中目的地(destination)負責(zé)接收來自源或者來自轉(zhuǎn)換的數(shù)據(jù),現(xiàn)在已有的目的地包括Excel目的地,F(xiàn)latFile目的地,OLEDB目的地等,本發(fā)明中所描述的XML目的地適配器就是其中的一個以XML文件為目標的目的地。XML(extensibleMarkupLanguage,擴展才示i己i吾言)是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標記描述數(shù)據(jù),而這些標記可以用方便的方式建立,XML極其簡單易于掌握和使用。目前在很多應(yīng)用中需要把數(shù)據(jù)庫中查找到的數(shù)據(jù)或者在MicrosoftSQLServer2005集成服務(wù)數(shù)據(jù)流任務(wù)中組合而成的數(shù)據(jù)按照一定的格式輸出成為XML文件,雖然SQLServer2005的集成服務(wù)提供了XML任務(wù),但是卻沒有提供一種目的地可以把數(shù)據(jù)流管道中的數(shù)據(jù)直接輸出到一個XML文件中。XSLT(extensibleStylesheetLanguageTransformation)是一種用來轉(zhuǎn)換XML文檔結(jié)構(gòu)的語言。為了使數(shù)據(jù)便于人們的閱讀理解,我們需要將信息顯示出來或者打印出來,例如將數(shù)據(jù)變成一個HTML文件,一個PDF文件,甚至是一段聲音;同樣,為了使數(shù)據(jù)適合不同的應(yīng)用程序,必須能夠?qū)⒁环N數(shù)據(jù)格式轉(zhuǎn)換為另一種數(shù)據(jù)格式,比如需求格式可能是一個文本文件,一個SQL語句,一個HTTP信息,一定順序的數(shù)據(jù)調(diào)用等。而XSLT就是我們用來實現(xiàn)這種轉(zhuǎn)換功能的語言。將XML轉(zhuǎn)換為HTML,是目前XSLT最主要的功能。
發(fā)明內(nèi)容針對現(xiàn)有技術(shù)中所存在的問題,本發(fā)明的目的是提供一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器及方法,該適配器及方法能夠使用戶將MicrosoftSQLServer2005集成數(shù)據(jù)流任務(wù)中的數(shù)據(jù)靈活方便地輸出到XML文件中。為達到以上目的,本發(fā)明采取的技術(shù)方案是一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器,該適配器包括以下模塊XML文件讀取模塊,用于讀取XML模板文件的內(nèi)容,并將其存儲到內(nèi)存的XML模板文件中;數(shù)據(jù)管理模塊,用于讀取數(shù)據(jù)流管道中的數(shù)據(jù),將這些數(shù)據(jù)以行對象的方式存儲到行對象集中;數(shù)據(jù)組織模塊,用于按照所述的XML模板文件的說明格式組織所述的數(shù)據(jù)流管道中的數(shù)據(jù);XML目標輸出模塊,用于將XML模板對象的說明部分內(nèi)容和數(shù)據(jù)組織模塊處理后的數(shù)據(jù)輸出到目標XML文件中。進一步,所述的XML文件讀取模塊還包括一個輸入連接管理器,用于驗證模板文件是否存在以及是否為XML格式,并負責(zé)連接通過驗證的XML模板文件數(shù)據(jù)源。進一步,所述的XML目標輸出模塊還包括一個輸出連接管理器,用于驗證目標文件是否存在以及是否為XML格式,并負責(zé)連接通過驗證的目標XML文件。一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,包括以下步驟(1)XML文件讀取模塊通過輸入連接管理器連接到XML模板數(shù)據(jù)源,讀取XML模板文件的內(nèi)容,并將其存儲到內(nèi)存的XML模板對象中;(2)數(shù)據(jù)管理模塊讀取數(shù)據(jù)流管道中的數(shù)據(jù),將這些數(shù)據(jù)按照行存儲到行對象集中;(3)數(shù)據(jù)組織模塊對行對象集進行處理;(4)XML目標輸出模塊通過輸出連接管理器連接目標XML文件,然后將XML模版對象的說明部分內(nèi)容和數(shù)據(jù)組織模塊的處理結(jié)果寫入到目標XML文件中。進一步,步驟(l)中所述的XML模版文件是一個外部的可隨需求自行定義的說明性文件,用來說明目標XML文件需要的格式。進一步,所述的目標XML文件需要的格式包括目標XML文件所使用的XSLT文件名稱,各個元素的層次關(guān)系,各個元素的名稱,屬性,及其與管道數(shù)據(jù)中各個字段的對應(yīng)關(guān)系。進一步,步驟(l)中所述的模版對象主要包括節(jié)點標簽、節(jié)點屬性集、節(jié)點的子節(jié)點集、節(jié)點的類型、節(jié)點的葉子節(jié)點。進一步,步驟(2)中所述的管道中的數(shù)據(jù)是源適配器中流出的數(shù)據(jù),或者是經(jīng)過轉(zhuǎn)換組件轉(zhuǎn)換過的數(shù)據(jù)。進一步,步驟(2)中所述的行對象是一個字段對象的集合。進一步,所述的字段對象包括字段的名稱和字段的值。進一步,步驟(3)中數(shù)據(jù)組織模塊對行對象集進行處理的過程如下數(shù)據(jù)組織模塊循環(huán)讀取行對象集中的字段名稱及其字段值,按照XML模版文件中對象的格式存放到行節(jié)點對象中,并從行對象集中刪除當(dāng)前行對象,直至處理完成。本發(fā)明的效果在于采用本發(fā)明所述的適配器及方法,用戶可以方便地配置和操作該適配器,具有靈活性和非耦合性;此外,用戶還可以通過拖拽的方式,把該適配器放在數(shù)據(jù)流任務(wù)中,并按照XML模版中規(guī)定的樣式把數(shù)據(jù)流管道中的數(shù)據(jù)生成到XML文件中。圖1是本發(fā)明所述的適配器模塊圖;圖2是本發(fā)明所述方法的流程圖。具體實施例方式下面結(jié)合實施例和附圖對本發(fā)明作進一步的描述。如圖1所示,一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器1,該適配器1包括以下才莫塊XML文件讀取模塊2,包括一個輸入連接管理器21,用于驗證模板文件是否存在以及是否為XML格式,并連接通過-驗證的XML模版文件6數(shù)據(jù)源及讀取XML模板文件6的內(nèi)容,并將其存儲到內(nèi)存的XML模板對象中;數(shù)據(jù)管理模塊3,用于讀取數(shù)據(jù)流管道中的數(shù)據(jù),將這些數(shù)據(jù)以行對象的方式存儲到行對象集中;數(shù)據(jù)組織模塊4,用于按照所述的XML模板文件6的說明格式組織所述的數(shù)據(jù)流管道中的數(shù)據(jù);XML目標輸出模塊5,包括一個輸出連接管理器51,用于驗證目標文件是否存在以及是否為XML格式,并連接通過—瞼證的目標XML文件7,將XML模板對象的說明部分內(nèi)容和數(shù)據(jù)組織模塊組織后的數(shù)據(jù)輸出到目標XML文件7中。如圖2所示,一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,包括以下步驟(1)XML文件讀取模塊2通過輸入連接管理器21連接到XML模板文件6數(shù)據(jù)源,讀取XML模板文件6的內(nèi)容,并將其存儲到內(nèi)存的模板對象中(Sl);所述的XML模版文件6是一個外部的可隨需求自行定義的說明性文件,用來說明目標XML文件需要的格式,包括目標XML文件所使用的XSLT文件名稱,各元素的層次關(guān)系、名稱、屬性及其與數(shù)據(jù)流管道數(shù)據(jù)中各個字段的對應(yīng)關(guān)系等;所述的模版對象包括節(jié)點標簽、節(jié)點屬性值、節(jié)點的子節(jié)點集、節(jié)點的類型、節(jié)點的葉子節(jié)點等。(2)數(shù)據(jù)管理模塊3讀取數(shù)據(jù)流管道中流入的數(shù)據(jù),將這些數(shù)據(jù)按照行存儲到行對象集中,每一行對應(yīng)一個行對象集(S2);所述的數(shù)據(jù)流管道中流入的數(shù)據(jù)可以是源適配器中流出的數(shù)據(jù),也可以是經(jīng)過轉(zhuǎn)換組件轉(zhuǎn)換過的數(shù)據(jù);所述的行對象是一個字段對象的集合,字段對象又包括字段的名稱及其字段的值。(3)數(shù)據(jù)組織模塊4對行對象集進行處理;首先循環(huán)讀取行對象集中的字段名稱及其字段值,按照模版對象的格式存放到行節(jié)點對象中,并從行對象集中刪除當(dāng)前行對象,直至處理完成(S3)。(4)XML目標輸出模塊5通過輸出連接管理器51連接目標XML文件7,然后將XML模版對象的說明部分的內(nèi)容和行節(jié)點對象集寫入到目標XML文件中7(S4)。下面以圖書搜索為例對本發(fā)明作進一步描述,要求把搜索關(guān)鍵詞及其搜索到的前三本圖書數(shù)據(jù)按照要求格式輸出到XML文件中。此過程具有兩個明顯的階段設(shè)計階段和運行階段。當(dāng)具體實現(xiàn)時將繼承基類Microsoft.SqlServer.Dts.Pipeline.PipelineComponent的內(nèi)容。在設(shè)計階謬史采用的方法主要是重載的ProvideComponentProperties方法和Validate方法,具體完成以下工作(1)將輸出到XML文件中數(shù)據(jù)的格式要求預(yù)先寫入到XML模板文件6中;本實施例中XML才莫版文件6的內(nèi)容如下<xmlversion="l.0"encoding-"utf-8"><XmlSchama><xlstName>test.xls</xlstName>0<nodes><!—生成的Xml文件的根節(jié)點--〉<nodetype="root"><nodeTag>BookTop</nodeTag〉<attributes><!—節(jié)點的屬性--><attribute><!--屬性的名稱一><name〉type</name〉〈!--屬性的值,對應(yīng)數(shù)據(jù)流中的一列一〉<value>topType</value〉</attribute〉</attributes></node><!--對應(yīng)lt據(jù)流中的一行--〉<nodetype="row"><nodeTag>keyWord</nodeTag><attributes〉<attribute><name>name</name><value>HotKeyWord</value></attribute><attribute><name>count</name><value>count</value></attribute〉</attributes><!—這個節(jié)點中的子節(jié)點的名稱一〉<sonNodes><sonNode〉Book</sonNode></sonNodes〉<!—行的標示,表示這個節(jié)點是否結(jié)束一〉<rowKey>HotKeyWord</rowKey〉</node><!—節(jié)點的子節(jié)點--〉<nodetype="sonNode"〉<nodetag>Book</nodetag><!—節(jié)點中包括的葉子節(jié)點一〉<leafNodes><leafNode><Tag>BookId</Tag><value〉BookId</value></leafNode><leafNode><Tag〉BookName</Tag><value〉BookName</value〉</leafNode><leafNode><Tag>Author</Tag><value>Author</value></leafNode><leafNode><Tag〉BookImg</Tag〉<value〉BookImg</value></leafNode></leafNodes></node></nodes></XmlSchama〉(2)XML文件讀取模塊2中的輸入連接管理器21驗證模板文件是否存在以及是否為XML才各式,并負責(zé)連接通過驗證的XML模板文件6;(3)XML文件輸出模塊5中的輸出連接管理器51驗證目標文件是否存在以及是否為XML才各式,并負責(zé)連接通過驗證的目標XML文件7。。在運行階段采用的方法主要是重載的PreExecute方法和processlnput方法,具體完成以下工作(1)通過XML文件讀取模塊2的輸入連接管理器21連接到存儲有要求格式的XML模版文件6數(shù)據(jù)源,XML文件讀取模塊2讀取XML模版文件6的內(nèi)容,并將其存放到模版對象中(Sl);連接管理器連接XML模版文件6和目標XML文件7,其中重載的方法有AcquireConnections和ReleaseConnections兩個方法。(2)數(shù)據(jù)管理模塊3讀取管道中搜索圖書的關(guān)鍵詞和搜索到的前三本圖書的數(shù)據(jù),并將這些數(shù)據(jù)按照行存放到行對象集中,每一行對應(yīng)一個行對象集(S2)。行對象是一個字段對象的集合,字段對象又包括字段的名稱和字段的值;本實施例中數(shù)據(jù)流管道中的數(shù)據(jù),具體說明如下表所示<table>tableseeoriginaldocumentpage11</column></row><table>(3)數(shù)據(jù)組織模塊4循環(huán)讀取行對象集中的數(shù)據(jù),按照XML模版文件預(yù)先寫入的格式要求把每一行的數(shù)據(jù)存放到行節(jié)點對象中(S3)。(4)最后通過XML目標輸出模塊5中的輸出連接管理器51連接到目標XML文件7,XML目標輸出模塊5把模版對象的說明部分的內(nèi)容和行節(jié)點對象集寫入到目標XML文件7中(S4)。本實施例中輸出的目標xml文件7舉例如下<xmlversion="l.0"encoding="utf-8"〉<xml-stylesheettype="text/xs1"href="test.xls"><BookToptype="12"><KeyWordname-"中國"count="200"><Book><BookID〉m20070702DXGDST01446</BookID>〈BookName〉中國思想史(三)</BookName>"utho》讀書堂著〈/Author〉<BookImg>Image2006\443\M20070702DXGDST01446.JPG</BookImg></Book><Book〉<BookID>m20070702DXGDST01447</BookID>〈BookName〉中國思想史(四)</BookName>〈Author〉讀書堂著〈/Author〉<BookImg>Image2006\443\M20070702DXGDST01447.JPG</BookImg〉</Book><Book〉<BookID〉m20070702DXGDST01450</BookID>〈BookName〉中國文學(xué)史(上)</BookName>"uthor〉讀書堂著〈/Author〉<BookImg〉Image2006\443\M20070702DXGDST01450.JPG</BookImg></Book〉</KeyWord〉〈KeyWord議e-"天氣"count="100"><Book><BookID〉m20070713DXGWYSS00007</BookID>〈BookName〉氣象萬千〈/BookName〉"uthor〉北京五洋盛世圖書有限公司著〈/Author〉<BookImg〉Image2006\445\M20070713DXGWYSS00007.jpg</BookImg></Book〉<Book><BookID>m20070525DXGDST02268</BookID>〈BookName〉天氣與氣候〈/BookName〉〈Author〉讀書堂著〈/Author〉<BookImg〉Image2006\444\M20070525DXGDST02268.jpg</BookImg></Book〉<Book><BookID>m20070828DXGDST3544</BookID>〈BookName〉中華學(xué)生百科全書——天氣與氣候〈/BookName〉〈Author〉讀書堂著〈/Author〉<BookImg>Image2006\l\M20070828DXGDST3544.jpg〈/Booklmg〉</Book〉</KeyWord></BookTop>本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的技術(shù)方案得出其他的實施方式,例如將連接管理器不設(shè)置在XML文件讀取模塊和XML目標輸出模塊中,而是單獨設(shè)置,同樣屬于本發(fā)明的技術(shù)創(chuàng)新范圍。權(quán)利要求1.一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器,用于將MicrosoftSQLServer2005集成服務(wù)數(shù)據(jù)流管道中的數(shù)據(jù)按照要求的文件格式輸出到XML文件中,該適配器包括以下模塊XML文件讀取模塊,用于讀取XML模板文件的內(nèi)容,并將其存儲到內(nèi)存的XML模板對象中;數(shù)據(jù)管理模塊,用于讀取數(shù)據(jù)流管道中的數(shù)據(jù),將這些數(shù)據(jù)以行對象的方式存儲到行對象集中;數(shù)據(jù)組織模塊,用于按照所述的XML模板文件的說明格式組織所述的數(shù)據(jù)流管道中的數(shù)據(jù);XML目標輸出模塊,用于將XML模板對象的說明部分內(nèi)容和數(shù)據(jù)組織模塊處理后的數(shù)據(jù)輸出到目標XML文件中。2.按照權(quán)利要求1所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器,其特征在于所述的XML文件讀取模塊還包括一個輸入連接管理器,用于驗證模板文件是否存在以及是否為XML格式,并負責(zé)連接通過驗證的XML模板文件數(shù)據(jù)源。3.按照權(quán)利要求1所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器,其特征在于所述的XML目標輸出模塊還包括一個輸出連接管理器,用于驗證目標文件是否存在以及是否為XML格式,并負責(zé)連接通過-瞼證的目標XML文件。4.一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,包括以下步驟(1)XML文件讀取模塊通過輸入連接管理器連接到XML模板數(shù)據(jù)源,讀取XML模板文件的內(nèi)容,并將其存儲到內(nèi)存的XML模板對象中;(2)數(shù)據(jù)管理模塊讀取數(shù)據(jù)流管道中的數(shù)據(jù),將這些數(shù)據(jù)以行對象的方式存儲到行對象集中;(3)數(shù)據(jù)組織模塊對行對象集進行處理;(4)XML目標輸出模塊通過輸出連接管理器連接目標XML文件,然后將XML模版對象的說明部分內(nèi)容和數(shù)據(jù)組織模塊的處理結(jié)果寫入到目標XML文件中。200710179917.25.如權(quán)利要求4所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于步驟(1)中所述的XMI^莫版文件是一個外部的可隨需求自行定義的說明性文件,用來說明目標XML文件需要的格式。6.如權(quán)利要求5所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于所述的目標XML文件需要的格式包括目標XML文件所使用的XSLT文件名稱,各個元素的層次關(guān)系、名稱、屬性及其與管道數(shù)據(jù)中各個字段的對應(yīng)關(guān)系。7.如權(quán)利要求4所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于步驟(l)中所述的模版對象包括節(jié)點標簽、節(jié)點屬性集、節(jié)點的子節(jié)點集、節(jié)點的類型、節(jié)點的葉子節(jié)點。8.如權(quán)利要求4所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于步驟(2)中所述的管道中的數(shù)據(jù)是指源適配器中流出的數(shù)據(jù)。9.如權(quán)利要求4所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于步驟(2)中所述的管道中的數(shù)據(jù)是指經(jīng)過轉(zhuǎn)換組件轉(zhuǎn)換過的數(shù)據(jù)。10.如權(quán)利要求4所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于步驟(2)中所述的行對象是一個字段對象的集合。11.如權(quán)利要求10所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于所述的字段對象包括字段的名稱和字段的值。12.如權(quán)利要求11所述的一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的方法,其特征在于步驟(3)中數(shù)據(jù)組織模塊對行對象集進行處理的過程如下數(shù)據(jù)組織模塊循環(huán)讀取行對象集中的字段名稱及其字段值,按照XML模版文件中對象的格式存放到行節(jié)點對象中,并從行對象集中刪除當(dāng)前行對象,直至處理完成。全文摘要本發(fā)明公開了一種將數(shù)據(jù)流中的數(shù)據(jù)輸出到XML文件中的適配器及方法,屬于數(shù)據(jù)庫ETL領(lǐng)域。在現(xiàn)有技術(shù)中,SQLServer2005集成服務(wù)的數(shù)據(jù)流任務(wù)中沒有提供一種功能可以直接把數(shù)據(jù)流中的數(shù)據(jù)輸入到一個XML文件中。利用本發(fā)明所述的適配器及方法,用戶可以通過事先按照一定格式生成的目標XML文件的說明模版,把從數(shù)據(jù)流任務(wù)管道中得到的數(shù)據(jù)輸出到目標XML文件中。采用本發(fā)明所述的適配器及方法可以靈活有效的把數(shù)據(jù)流任務(wù)管道中的數(shù)據(jù)按照指定格式輸出到目標XML文件中。文檔編號G06F17/21GK101201816SQ20071017991公開日2008年6月18日申請日期2007年12月20日優(yōu)先權(quán)日2007年12月20日發(fā)明者夏松江,崇曉云,新李申請人:北大方正集團有限公司;北京方正阿帕比技術(shù)有限公司;北京大學(xué)