專利名稱:在mime附件與相關(guān)數(shù)據(jù)庫之間傳輸數(shù)據(jù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種向相關(guān)數(shù)據(jù)庫傳輸數(shù)據(jù)的方法和系統(tǒng),所述數(shù)據(jù)包含于電子消息中,尤其是包含于MIME附件中。
背景技術(shù):
通常使用諸如MySQL(見http://www.mysql.com/)或DB2(http://www-306.ibm.com/software/data/db2/)之類的相關(guān)數(shù)據(jù)庫來存儲大量的數(shù)據(jù)。全世界范圍內(nèi)的許多組識將臨界數(shù)據(jù)存儲在相關(guān)數(shù)據(jù)庫中。使用結(jié)構(gòu)化查詢語言(SQL,見“A Relational Model of Data for Large Shared Data Banks”E.F.Codd)命令來獲取或更新相關(guān)數(shù)據(jù)庫數(shù)據(jù)。相關(guān)數(shù)據(jù)庫由一個或多個表構(gòu)成,其中每個表具有一個或多個列。數(shù)據(jù)庫表列是最常見的簡單數(shù)據(jù)類型,例如字符串或數(shù)字。
相關(guān)數(shù)據(jù)庫已經(jīng)發(fā)展為能夠包含更復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù),例如聲音文件、數(shù)字圖像或文字處理文檔。這些新類型的數(shù)據(jù)非常龐大。取決于賣方(vendor),這些列的大小能夠達(dá)到4GB或更大。這些被稱作大型對象(LOB)。有兩種類型的大型對象字符大型對象(CLOB)和二進(jìn)制大型對象(BLOB)。包含LOB數(shù)據(jù)的數(shù)據(jù)庫列像其它任何表列那樣使用SQL命令進(jìn)行訪問。各種數(shù)據(jù)庫對字符和二進(jìn)制大型對象類型使用不同的術(shù)語。例如,在Microsoft SQL Server(見http://msdn2.microsoft.com/en-us/library/ms187993.aspx)中,使用TEXT列存儲可變長度的字符數(shù)據(jù)以及使用IMAGE列存儲可變長度的二進(jìn)制數(shù)據(jù)。
企業(yè)和組織使得可在互聯(lián)網(wǎng)或內(nèi)部網(wǎng)上使用相關(guān)數(shù)據(jù)庫,以支持諸如電子商務(wù)之類的主動行為(initiatives)。向互聯(lián)網(wǎng)或內(nèi)部網(wǎng)可訪問的數(shù)據(jù)庫的輸入或從該數(shù)據(jù)庫的輸出在諸如電子郵件消息之類的消息或者使用文件傳輸協(xié)議(FTP,見http://www.faqs.org/rfcs/rfc959.html)或超文本傳輸協(xié)議(HTTP,見http://www.faqs.org/rfcs/rfc2616.html)進(jìn)行傳送的文件中被交換是常見的。
消息可能具有復(fù)雜的結(jié)構(gòu),其由消息主體和一個或多個被稱為附件的主體部分所構(gòu)成。消息和附件例如多用互聯(lián)網(wǎng)電子郵件擴(kuò)展(RFC 2045,見http://www.ietf.org/rfc/rfc2045.html)。盡管RFC 2045最初描述電子郵件消息的結(jié)構(gòu),但是它也被應(yīng)用于其它類型的消息,例如簡單對象訪問協(xié)議(SOAP,見http://www.w3.org/TR/soap)消息或JAVA消息服務(wù)(JMS,見http://java.sun.com/product/jms/index.jsp)消息。
消息附件不僅可以包含諸如字符串或數(shù)字之類的簡單數(shù)據(jù)類型,而且也可以包含諸如JPEG或MP3文件或非常大型的文本文件之類的復(fù)雜數(shù)據(jù)。各組織日益希望在相關(guān)數(shù)據(jù)庫中存儲諸如JPEG文件、MP3文件或大型文本文件之類的數(shù)據(jù)。反過來,各組織也希望生成具有附件的消息,所述附件包含數(shù)據(jù)庫中所存儲的這些文件。
用于在消息和相關(guān)數(shù)據(jù)庫之間交換數(shù)據(jù)的現(xiàn)有系統(tǒng)沒有提供靈活而簡單的機(jī)制,以在消息附件和具有CLOB或BLOB列的相關(guān)數(shù)據(jù)庫表之間傳輸數(shù)據(jù)。在消息附件和相關(guān)數(shù)據(jù)庫之間交換數(shù)據(jù)需要以JAVA、C或其它編程語言對復(fù)雜的計(jì)算機(jī)程序的編碼。這樣的程序難以編寫并且難以隨著數(shù)據(jù)庫和商業(yè)需求的改變而改變。
從而本發(fā)明基于所述問題提供了一種方法和系統(tǒng),允許對在消息(尤其是具有MIME附件的消息)和相關(guān)數(shù)據(jù)庫之間傳輸?shù)臄?shù)據(jù)進(jìn)行更靈活的控制。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個方面,通過一種用于將包含在電子消息(尤其是MIME附件)中的數(shù)據(jù)傳輸?shù)较嚓P(guān)數(shù)據(jù)庫的方法來解決這一問題,所述方法包括步驟—提供XML序列,該XML序列確定數(shù)據(jù)如何被處理,
—執(zhí)行序列器(sequencer),該序列器將所述消息和所述XML序列作為輸入,其中執(zhí)行序列包括執(zhí)行至少一個用于訪問所述相關(guān)數(shù)據(jù)庫的SQL語句。
因此,不同于使用用于處理消息的定制代碼的固定指令來執(zhí)行所需要的數(shù)據(jù)庫訪問,本發(fā)明使用兩種不同的單元作為可執(zhí)行部件的本質(zhì)上為靜態(tài)的序列器和作為XML文件的序列,所述序列的條目確定序列器如何處理消息以將消息中所包含的數(shù)據(jù)傳輸?shù)较嚓P(guān)數(shù)據(jù)庫。因此,改變XML序列的條目可以修改由序列器所執(zhí)行的處理,并由此修改消息中所包含的數(shù)據(jù)傳輸?shù)较嚓P(guān)數(shù)據(jù)庫或者從相關(guān)數(shù)據(jù)庫進(jìn)行傳輸?shù)姆绞?。由于整個處理不需要再次被完全編碼和編譯,所以這樣的改編可以在短時間內(nèi)容易地執(zhí)行。
優(yōu)選地,所述方法進(jìn)一步包括加載至少一個SQL模板,該模板由序列器處理以提供可執(zhí)行的SQL語句。然而,SQL模板的使用對于本發(fā)明并不是必需的。例如,序列可能已經(jīng)包含一個或多個完全合格的SQL語句,其能夠被執(zhí)行以訪問數(shù)據(jù)庫。然而,使用由序列器響應(yīng)于序列中的相應(yīng)XML語句所加載的模板,能夠提供更加結(jié)構(gòu)化且更短的序列,這些序列更易于設(shè)計(jì)和理解。如果SQL語句具有參數(shù),則需要SQL模板。
在一個優(yōu)選實(shí)施例中,SQL模板包括至少一個參數(shù),所述參數(shù)的值通過對消息的處理而確定。因此,序列器優(yōu)選地使用從消息中獲取的數(shù)據(jù)作為從模板加載的SQL語句的參數(shù)值。參數(shù)數(shù)據(jù)能夠從消息主體或附件中提取。例如,SQL模板可能具有兩個參數(shù),其中第一參數(shù)的值由消息主體中的數(shù)據(jù)確定,而第二參數(shù)的值由消息附件中的數(shù)據(jù)確定。
在一些實(shí)施例中,所述至少一個SQL語句的執(zhí)行提供輸出數(shù)據(jù),其作為數(shù)據(jù)存儲在輸出消息中,其中所述輸出數(shù)據(jù)優(yōu)選地還包括第一和第二參數(shù),其中第一和第二參數(shù)的值被分別存儲在輸出消息的消息主體和附件中。因此,本發(fā)明的方法的這個更為先進(jìn)的實(shí)施例允許使用消息(例如具有MIME附件的電子郵件消息),其不僅用于向相關(guān)數(shù)據(jù)庫添加新的數(shù)據(jù)元素,而且還用于獲取一個或多個數(shù)據(jù)元素,所述數(shù)據(jù)元素可以作為可能具有一個或多個附件的消息被發(fā)送到接收方。
根據(jù)另一個方面,本發(fā)明針對于一種用于從消息(尤其是MIME附件)向相關(guān)數(shù)據(jù)庫傳輸數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括XML序列,其確定所述數(shù)據(jù)如何被處理;可執(zhí)行序列器,其適合于基于所述XML序列處理消息,其中所述序列器還適合于在處理消息時執(zhí)行至少一個SQL語句以訪問數(shù)據(jù)庫。該系統(tǒng)允許執(zhí)行任何上述方法。
進(jìn)一步的從屬權(quán)利要求涉及本發(fā)明的優(yōu)選實(shí)施例。
在接下來的詳細(xì)描述中,將參考
本發(fā)明的當(dāng)前優(yōu)選實(shí)施例,其中圖1a-b消息和相關(guān)數(shù)據(jù)庫中相應(yīng)表的示例;圖2根據(jù)本發(fā)明實(shí)施例的系統(tǒng)的主要單元的示意性概觀;圖3本發(fā)明實(shí)施例的示例性序列圖4本發(fā)明實(shí)施例的示例性SQL模板;和圖5圖示了本發(fā)明的方法的實(shí)施例的流程圖。
具體實(shí)施例方式
接下來,將參考具有MIME附件的電子郵件的處理來描述根據(jù)本發(fā)明的方法和系統(tǒng)的當(dāng)前優(yōu)選實(shí)施例。然而,應(yīng)當(dāng)理解的是,本發(fā)明原則上也可以被用于其它類型的消息(例如SOAP或Java消息服務(wù)消息)以及其它類型的附件。此外,所描述的方法和系統(tǒng)還允許處理根本沒有任何附件的消息。
圖1a示意性地呈現(xiàn)出具有要被插入相關(guān)數(shù)據(jù)庫中的數(shù)據(jù)的電子郵件10。電子郵件10包括消息主體11和MIME附件12。在該示例中,消息主體11包含具有數(shù)據(jù)13的簡短XML語句,并且附件12包含需要被插入相關(guān)數(shù)據(jù)庫(圖1a中未示出)的數(shù)據(jù)14。在圖1a的示例和以下將討論的圖5的流程圖中,附件的數(shù)據(jù)為文本文件,其需要被存儲在數(shù)據(jù)庫的字符大型對象(CLOB)列中。該示例中沒有示出同樣被支持的二進(jìn)制大型對象列(BLOB)的操作。
圖1b呈現(xiàn)出所述方法和系統(tǒng)的預(yù)期結(jié)果的示例,即相關(guān)數(shù)據(jù)庫的表20,其中所增加的新的行21在第一列22中包括消息主體的數(shù)據(jù)13,并且在第二列23中包括MIME附件的數(shù)據(jù)14。然而,還有許多其它將電子郵件10的數(shù)據(jù)13和/或14插入相關(guān)數(shù)據(jù)庫的方式。
圖2示意性地示出所述系統(tǒng)和所述方法的主要單元序列器30接收消息110作為輸入,所述序列器30是任意類型的可執(zhí)行代碼,例如經(jīng)編碼和編譯的計(jì)算機(jī)程序或應(yīng)用小程序、服務(wù)器小程序等,在該示例中所述消息110具有兩個附件,即圖像文件114a和聲音文件114b。
序列器30處理消息110,其導(dǎo)致對數(shù)據(jù)庫40的訪問。除消息110之外,序列器30接收序列50作為輸入。序列50優(yōu)選地為XML文件,其限定由序列器30所執(zhí)行的處理步驟,所述序列50的示例如圖3中所示并在接下來進(jìn)一步討論。除了序列50之外,序列可加載一個或多個SQL模板60,如圖3中所示。數(shù)據(jù)庫40的實(shí)際訪問使用SQL語句來執(zhí)行,SQL語句可以被直接包含在序列50中或者通過加載SQL模板60而得到,SQL模板隨后提供一個或多個SQL語句。
圖2中的雙向箭頭表示整個處理也可以反向進(jìn)行,即還是在XML序列50或其它序列(未示出)的控制下,數(shù)據(jù)從數(shù)據(jù)庫40中被獲取并且被序列器30處理以生成消息110。
圖5呈現(xiàn)出在本發(fā)明實(shí)施例中由序列器30所執(zhí)行的處理的詳細(xì)流程圖??梢钥吹?,初始步驟201和202是消息和序列的加載。序列50(其示例如圖3所示)包含用于在步驟203(見圖5)中連接到數(shù)據(jù)庫的第一組XML語句51。例如,這可以通過指示適當(dāng)?shù)腢RL并調(diào)用相應(yīng)的XML模板文件來實(shí)現(xiàn),XML模板文件例如組51的最后一個語句中所提及的“SampleConnectiontemplate.xml”(見圖3)。
在下一個步驟204中,確定是否加載SQL模板60。如上所述,如果SQL語句具有參數(shù)則需要使用SQL模板。圖3中所示的XML語句組52用于在步驟205中加載模板“Ex_05_ClobTemplate.xml”,該模板一旦執(zhí)行就在數(shù)據(jù)庫40中插入新的行(見圖1b)。
圖4示出了一個示例性SQL模板??梢钥吹?,該模板在數(shù)據(jù)庫中插入一行并包括兩個參數(shù)。第一參數(shù)在示例性SQL模板60的XML語句組61中被定義,而第二參數(shù)在SQL模板60的組62中被定義。在圖4的示例中,第一參數(shù)用于填充(populate)數(shù)據(jù)庫表20的第一列22(見圖1b)。所述第二參數(shù)用于填充數(shù)據(jù)庫表20的第二列23(見圖1b)。第二參數(shù)包含稱為<cid>的元素,其標(biāo)識包含參數(shù)數(shù)據(jù)的消息附件的名稱和內(nèi)容類型。在該示例中,消息附件名稱為NewDoc,消息內(nèi)容類型為應(yīng)用文本。使用標(biāo)準(zhǔn)MIME內(nèi)容類型來指定內(nèi)容類型。
一旦在步驟205中加載了SQL模板60(見圖5),則在步驟207-209中基于所處理的消息獲得參數(shù)的值。例如,如果圖1中的消息10被處理,則第一參數(shù)接收到值“575”,并且第二參數(shù)接收到消息10的MIME附件12中的內(nèi)容14。
步驟207-209示出,如果需要,所描述的方法也可以被用于從消息主體或消息的附件中提取參數(shù)。
一旦插入了參數(shù)的值,則執(zhí)行完全定義的SQL語句(步驟210),其導(dǎo)致圖1b中所示的結(jié)果。如上所述,新的行21已被插入到數(shù)據(jù)庫的表20中,第一參數(shù)的值在第一列21中并且消息附件內(nèi)容(在該示例中,其為大型文本文檔)在第二列22中,其中所述內(nèi)容最初被包含在傳入消息10的附件12中。
然后,由序列器利用適當(dāng)?shù)腏DBC(Java Database Connectivity,Jave數(shù)據(jù)庫連通性)呼叫來執(zhí)行所述完全定義的SQL語句。
圖5的流程圖中虛線以下的步驟211-215表示可能作為步驟210中執(zhí)行SQL語句的結(jié)果而接收的返回值。例如,傳入消息可能由序列器30處理,使得數(shù)據(jù)從數(shù)據(jù)庫中被獲取,或者(如圖5中的全部流程圖所示),一組數(shù)據(jù)被輸入到數(shù)據(jù)庫中而另一組數(shù)據(jù)被返回。
如果在步驟211中發(fā)現(xiàn)返回?cái)?shù)據(jù),則執(zhí)行步驟212-214來識別返回?cái)?shù)據(jù)是否被包括于消息主體和/或傳出消息的附件中。ContentID參數(shù)優(yōu)選地被包括于附件中(見步驟212和213),而其它的參數(shù)則優(yōu)選地被包含于消息主體中(見步驟214)。在步驟215中準(zhǔn)備傳出消息。
步驟217示出序列器30最終從數(shù)據(jù)庫斷開連接??梢栽趫D3的序列50中再次找到相應(yīng)的XML語句,其中組53包括用于關(guān)斷到數(shù)據(jù)庫的連接的指令。
由以上的描述可以看出,圖5所示的處理流程完全由序列50中的XMI語句所控制。因此,該文件的任何修改都將影響所述系統(tǒng)對傳入消息的處理。然而,不再需要低級的編碼或者任何再編譯來提供要執(zhí)行的不同命令集。如果有多個預(yù)定義的SQL模板60可用,則改編序列50非常容易,其僅需要以針對性的方式被用來提供所需要的處理步驟的序列。
權(quán)利要求
1.一種向相關(guān)數(shù)據(jù)庫傳輸數(shù)據(jù)的方法,所述數(shù)據(jù)被包含于電子消息中,尤其是被包含于MIME附件中,所述方法包括以下步驟a.提供XML序列,所述XML序列確定所述數(shù)據(jù)如何被處理;b.執(zhí)行序列器,所述序列器將所述消息和所述XML序列作為輸入,其中c.執(zhí)行所述序列包括執(zhí)行至少一個用于訪問所述相關(guān)數(shù)據(jù)庫的SQL語句。
2.如權(quán)利要求1所述的方法,進(jìn)一步包括加載至少一個SQL模板,其由所述序列器處理以提供可執(zhí)行的SQL語句。
3.如權(quán)利要求2所述的方法,其中所述SQL模板包括至少一個參數(shù),所述參數(shù)的值通過對所述消息的處理而確定。
4.如權(quán)利要求3所述的方法,其中所述SQL模板包括至少兩個參數(shù),其中第一參數(shù)的值由消息主體中的數(shù)據(jù)確定,并且其中第二參數(shù)的值由消息附件中的數(shù)據(jù)確定。
5.如權(quán)利要求1所述的方法,對所述至少一個SQL語句的執(zhí)行提供輸出數(shù)據(jù),并且其中所述輸出數(shù)據(jù)被作為數(shù)據(jù)存儲在輸出消息中。
6.如權(quán)利要求1所述的方法,其中所述輸出數(shù)據(jù)包括第一參數(shù)和第二參數(shù),其中所述第一參數(shù)和所述第二參數(shù)的值被分別存儲在所述輸出消息的消息主體和附件中。
7.一種用于從消息,尤其是MIME附件,向相關(guān)數(shù)據(jù)庫傳輸數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括a.XML序列,其確定所述數(shù)據(jù)如何被處理;b.可執(zhí)行序列器,其適合于基于所述XML序列處理所述消息,其中c.所述序列器還適合于在處理所述消息時執(zhí)行至少一個SQL語句以訪問所述數(shù)據(jù)庫。
8.如權(quán)利要求7所述的系統(tǒng),所述系統(tǒng)還包括至少一個SQL模板,其適合于被所述序列器加載并處理以提供所述可執(zhí)行的SQL語句。
9.如權(quán)利要求8所述的系統(tǒng),其中所述SQL模板包括至少一個參數(shù),所述參數(shù)的值通過對所述消息的處理而確定。
10.如權(quán)利要求9所述的系統(tǒng),其中所述SQL模板包括至少兩個參數(shù),其中第一參數(shù)的值由消息主體中的數(shù)據(jù)確定,并且其中第二參數(shù)的值由消息附件中的數(shù)據(jù)確定。
11.如權(quán)利要求7所述的系統(tǒng),其中所述序列器還適合于將通過執(zhí)行所述至少一個SQL語句而提供的數(shù)據(jù)作為輸出數(shù)據(jù)存儲在輸出消息中。
12.如權(quán)利要求11所述的系統(tǒng),其中所述輸出數(shù)據(jù)包括第一參數(shù)和第二參數(shù),并且其中所述序列器還適合于將所述第一參數(shù)和所述第二參數(shù)的值分別存儲在所述輸出消息的消息主體和附件中。
全文摘要
本發(fā)明提供了一種向相關(guān)數(shù)據(jù)庫傳輸數(shù)據(jù)的方法和系統(tǒng),所述數(shù)據(jù)被包含于電子消息中,尤其是被包含于MIME附件中,所述方法包括以下步驟提供XML序列,該XML序列確定數(shù)據(jù)如何被處理,執(zhí)行序列器,該序列器將所述消息和所述XML序列作為輸入,其中執(zhí)行序列包括執(zhí)行至少一個用于訪問相關(guān)數(shù)據(jù)庫的SQL語句。
文檔編號G06F17/30GK101076027SQ20071012661
公開日2007年11月21日 申請日期2007年5月17日 優(yōu)先權(quán)日2006年5月17日
發(fā)明者杰森·萊文, 卡帕什·沙哈, 巴里·戴斯德納爾 申請人:軟件股份公司