專利名稱:用于在xml數(shù)據(jù)庫上執(zhí)行操作的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在XML數(shù)據(jù)庫上執(zhí)行操作的方法,并且涉及適于執(zhí) 行這種方法的計算機程序和數(shù)據(jù)庫。
背景技術(shù):
XML數(shù)據(jù)庫是現(xiàn)代信息社會的最重要的技術(shù)工具。這種數(shù)據(jù)庫的高 度靈活性允許以高效的方式存儲和檢索數(shù)據(jù)。通常使用查詢語言XQuery 來訪問XML數(shù)據(jù)庫。XQuery提供了從XML文檔或諸如關(guān)系數(shù)據(jù)庫之類 的任何可作為XML査看的數(shù)據(jù)源中抽取并操縱數(shù)據(jù)的方式。
對于許多應(yīng)用、工具和/或框架,所期望的是,使用諸如Java或C++ 之類的標準編程語言來訪問XML數(shù)據(jù)庫。為此,已經(jīng)開發(fā)出諸如用于 Java綁定XML架構(gòu)(JAXB)的綁定技術(shù),其使開發(fā)者能夠?qū)ava類映射 到XML表示,因而提供Java和XML之間的靜態(tài)接口,即在開發(fā)時被定 義的接口。
但是,使用已知的綁定技術(shù)訪問XML數(shù)據(jù)庫對于開發(fā)者來說是困難 并且費時的。另外,存在一些需要動態(tài)訪問XML數(shù)據(jù)庫的應(yīng)用、工具或 框架,所述動態(tài)訪問XML數(shù)據(jù)庫不能由現(xiàn)有技術(shù)的靜態(tài)接口提供。最 后,如果到數(shù)據(jù)源即XML數(shù)據(jù)庫的連接丟失,通常不能獨立管理使用已 知的API從XML數(shù)據(jù)庫中檢索的XML文檔。
因此,本發(fā)明基于該技術(shù)問題在一個方面中克服現(xiàn)有技術(shù)的至少一些 缺點,并且使用諸如Java、 0++之類的標準編程語言提供對用于應(yīng)用、工 具或框架的XML數(shù)據(jù)庫的更好訪問。
發(fā)明內(nèi)容
在本發(fā)明的一個方面中,由根據(jù)權(quán)利要求1的方法解決該問題。在一個實施例中,提供了一種執(zhí)行XML數(shù)據(jù)庫上的操作的方法,所述方法包 括以下步驟
-在客戶端應(yīng)用和服務(wù)DataObject (SDO)句柄之間交換至少一個 DataObject;以及
-將該DataObject變換為用于訪問XML數(shù)據(jù)庫的XML文檔的 XQuery操作,并將響應(yīng)XQuery從XML數(shù)據(jù)庫得到的XML文檔變換為 DataObject 。
如果客戶端應(yīng)用是基于Java的,SDO句柄提供在Java中定義的 DataObject和通過執(zhí)行XQuery表達式檢索的XML文檔之間的接口 。優(yōu)選 地,SDO句柄是用于Java的XQuery API的一部分。
使用本發(fā)明的SDO句柄,客戶端應(yīng)用不需要關(guān)心XML解析,而是可 處理具有設(shè)置器和獲取器方法的簡單Java接口。根據(jù)Java說明書需求235 來標準化SDO并且SDO提供了用于不同種類數(shù)據(jù)源的統(tǒng)一數(shù)據(jù)訪問層。 在應(yīng)用和XML數(shù)據(jù)庫之間進行的數(shù)據(jù)交換中包括SDO可提供用于管理從 數(shù)據(jù)庫檢索的數(shù)據(jù)的靜態(tài)和動態(tài)方式兩者。在應(yīng)用的開發(fā)時就已知元數(shù)據(jù) 的情況下,SDO的使用以特別容易的方式支持DataObject的代碼生成接 口。例如,可基于存儲在XML數(shù)據(jù)庫中的XML文檔的模式定義來提供該 接口,其中由注冊表提供該模式定義。
作為替代或除了靜態(tài)接口之外,SDO句柄可提供動態(tài)接口,其在運行 時定義了由SDO句柄處理的DataObject的類型。結(jié)果,可給不具有兼容 模式的文檔產(chǎn)生模式。
在一個實施例中,該操作是包括創(chuàng)建、讀取、更新和刪除操作的組的 至少一個,所述操作是在XML數(shù)據(jù)庫中的XML數(shù)據(jù)上進行的。在客戶端 應(yīng)用和SDO句柄之間交換的DataObject可包括樹結(jié)構(gòu)數(shù)據(jù)的集合,特別 是數(shù)據(jù)圖形。SDO的變更概述特征使得能夠訪問數(shù)據(jù)圖形的變更歷史信 息。此外還使經(jīng)由數(shù)據(jù)圖形的基于XPath的導(dǎo)航成為可能。
根據(jù)另一方面,本發(fā)明涉及適于執(zhí)行上述方法的任何一種的XML數(shù) 據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。最后,提供了包括適于執(zhí)行上述方法 的任何一種的指令的計算機程序。
圖1:用于在XML數(shù)據(jù)庫上執(zhí)行操作的本發(fā)明實施例的圖示;
圖2:利用SDO生成器產(chǎn)生Java接口的預(yù)備步驟的圖示;
圖3:由SDO句柄提供的靜態(tài)接口的示例實現(xiàn);禾口
圖4:由SDO句柄提供的動態(tài)接口的示例實現(xiàn)。
具體實施例方式
在下面描述了本發(fā)明方法的示例實施例。將會理解,可以通過許多可
替換的方式實現(xiàn)下面描述的功能,例如,用于管理單個XML數(shù)據(jù)庫服務(wù) 器或一個或多個XML數(shù)據(jù)庫的分布式布置。此外,盡管在下面使用Java 作為參考,還可利用諸如0++及其它的各種其它編程語言使用本發(fā)明。
圖1給出了在客戶端應(yīng)用1和XML數(shù)據(jù)庫100之間的操作流示意 圖。XML數(shù)據(jù)庫100的一個示例可以"Tamino"的名稱從申請人得到。 例如,如果XML數(shù)據(jù)庫100是面向服務(wù)的架構(gòu)(SOA)的一部分,客戶 端應(yīng)用1和XML數(shù)據(jù)庫100之間的連接可以是持久的或僅僅是臨時的。 在注冊表(在圖中未示出)中可提供關(guān)于由XML數(shù)據(jù)庫100服務(wù)的請求 的信息,所述注冊表可尤其包含諸如模式信息的關(guān)于XML數(shù)據(jù)庫內(nèi)容的 元數(shù)據(jù)。這種注冊表的一個示例可以"Centmsite"的名稱從申請人得到。
圖1中的圖示說明了兩個操作,即"獲取數(shù)據(jù)"操作,其中客戶端應(yīng) 用1從XML數(shù)據(jù)庫100請求數(shù)據(jù),和"設(shè)置數(shù)據(jù)"操作,其中客戶端應(yīng) 用將數(shù)據(jù)發(fā)送到XML數(shù)據(jù)庫100,可能僅僅收到數(shù)據(jù)的修改版本。通 常,可存在各種在XML數(shù)據(jù)庫上執(zhí)行的操作,其中最相關(guān)的操作就是所 謂的CRUD操作,其引起XML數(shù)據(jù)庫100中數(shù)據(jù)的創(chuàng)建、讀取、更新和/ 或刪除。
如從圖1所看到的,客戶端應(yīng)用1與SDO句柄10交換DataObject 2, 下面參考圖3和4描述其示例。術(shù)語服務(wù)數(shù)據(jù)對象(Service Data Object, SDO)指數(shù)據(jù)編程體系結(jié)構(gòu)和API。它通過跨數(shù)據(jù)源類型統(tǒng)一數(shù)據(jù)編程而 簡化了數(shù)據(jù)編程、提供了通用應(yīng)用模式支持并使得應(yīng)用、工具和框架更加容易執(zhí)行諸如查詢、查看和綁定的操作。
DataObject 2不是靜態(tài)的就是動態(tài)的,即它們的類型不是在開發(fā)時預(yù) 定義就是在運行時期間動態(tài)確定。所交換的DataObject 2的一個示例是數(shù) 據(jù)圖形2,如在圖1中示意性示出的。數(shù)據(jù)圖形2是樹結(jié)構(gòu)或圖形結(jié)構(gòu)的 數(shù)據(jù)的集合??蛻舳藨?yīng)用1接收數(shù)據(jù)圖形2,它可改變或更換數(shù)據(jù)圖形2 并接著將其變更應(yīng)用回數(shù)據(jù)源,即XML數(shù)據(jù)庫100。最通用地,利用樂 觀并發(fā)語義執(zhí)行更新,這意味著如果在客戶端應(yīng)用1應(yīng)用變更之前任何基 礎(chǔ)數(shù)據(jù)被改變了,拒絕該更新并且客戶端應(yīng)用l必須采取糾正動作。
在圖1的實施例中,客戶端應(yīng)用1將根據(jù)Java說明書需求225的用于 Java的XQuery API 20 (XQJ)用作為數(shù)據(jù)仲裁服務(wù)21來訪問XML數(shù)據(jù) 庫100中的文檔。由SDO句柄IO裝載從XML數(shù)據(jù)庫檢索的XML文檔作 為動態(tài)SDO DataObject實例或?qū)崿F(xiàn)一個或多個靜態(tài)Java接口的類的實 例。換句話說,SDO句柄10將XML數(shù)據(jù)轉(zhuǎn)換成Java對象,并且反之亦 然。結(jié)果,即使到數(shù)據(jù)源即XML數(shù)據(jù)庫100的連接丟失了, XML文檔可 作為Java對象存活更久。
可如圖2中示意性示出地產(chǎn)生Java接口。 SDO接口生成器11使用 XML數(shù)據(jù)庫IOO中的文檔上的元數(shù)據(jù)(諸如模式定義101)作為輸入,并 且產(chǎn)生一個或多個靜態(tài)Java接口 12,所述接口可接著由客戶端應(yīng)用1 (或 任何其它應(yīng)用,圖1中未示出)使用。因此,需要給SDO接口生成器11 指定所要求的數(shù)據(jù)庫內(nèi)部的元數(shù)據(jù)即模式定義的URL或文件路徑。所產(chǎn) 生的代碼被存儲在提供的目錄路徑處。
SDO接口生成器的調(diào)用的示例與下面的定義一致
C:\>set CLASSPATH=%CLASSPATH%;c:\sdo\lib\sdo.jar
C:\>java com.softwareag.sdo.codegen.XSD2JavaGenerator -
用法XSD2JavaGenerator <選項>
其中可能的選項包括
-d OR-dir :指定將所生成的代碼置于何處。 -cOR-clrdir :在生成之前清空目錄 -v OR_—verbose :啟用verbose。-config :提供所有配置作為XML文件。
-s OR-schema :指定模式文件路徑或URL -1 OR -logdir :指定log目錄位置。 - OR-help :提供用法幫助。 下面示出相關(guān)調(diào)用的實際示例
C:\>javacom.softwareag.sdo.codegen.XSD2JavaGenerator—s C:\>schemas\ipo.xsd —d C:\generatedSources
圖3給出了 SDO句柄IO的靜態(tài)接口及其使用的示例。它說明了 SDO 句柄IO如何處理從XML數(shù)據(jù)庫100檢索文檔。如可看到的,在步驟201 中將示例性XQuery表達式"for $q in collection ('Account')/ Account return $q"賦值給字符串類型變量。此外,XQuery的結(jié)果賦值給參數(shù) XQResultSequence result (步驟202)。圖3的示例的下面的代碼段中示出 了此接口的使用,其中,解析來自所檢索的XML文檔"Account"的數(shù)據(jù) 并將其賦值給各種變量(步驟203),接著所述各種變量在步驟204中顯不。
最后,圖4給出了如果在開發(fā)時不知道來自XML數(shù)據(jù)庫的響應(yīng)的完 整結(jié)構(gòu),那么SDO句柄的動態(tài)應(yīng)用編程接口如何處理XML數(shù)據(jù)庫的文檔 的示例。盡管步驟301和302等同于步驟201和203,但是在這種情況下 XQuery的結(jié)果被賦值給動態(tài)DataObject。為了抽取包含在DataObject內(nèi)的 信息,它可在步驟303中使用在SDO DataObject接口中定義的已知方法來 解析。接著包含在所檢索的XML文檔中的數(shù)據(jù)被賦值給變量。但是,因 為SDO句柄的此API的動態(tài)性質(zhì),不必預(yù)定義DataObject的結(jié)構(gòu),所述 DataObject在運行時期間由所檢索的XML文檔轉(zhuǎn)換而成。通??杉僭O(shè)動 態(tài)接口的用戶分別知道所請求的XML文檔的內(nèi)容和結(jié)構(gòu)。
盡管圖3和4的示例是針對XML文檔的檢索,也可通過非常相似的 方式將所描述的方法和SDO句柄用于相反的過程,即將由客戶端應(yīng)用1 提供的DataObject轉(zhuǎn)換成XML文檔,所述XML文檔接著被存儲在XML 數(shù)據(jù)庫100中??蓪⑺枋龅姆椒▽崿F(xiàn)為到標準客戶端應(yīng)用和/或用于管理XML數(shù)據(jù)
庫的數(shù)據(jù)庫管理系統(tǒng)的附加軟件。如果XML數(shù)據(jù)庫系統(tǒng)為面向服務(wù)的架 構(gòu)(SOA)的一部分,通過變換服務(wù)數(shù)據(jù)對象中的XML文檔獲得的高度 靈活性尤其有用。
權(quán)利要求
1. 一種在XML數(shù)據(jù)庫(100)上執(zhí)行操作的方法,所述方法包括以下步驟a. 在客戶端應(yīng)用(1)和服務(wù)數(shù)據(jù)對象(SDO)句柄(10)之間交換至少一個DataObject(2);以及b. 將該DataObject(2)變換為用于訪問XML數(shù)據(jù)庫(1)的XML文檔的XQuery操作,并將響應(yīng)于該Xquery而從XML數(shù)據(jù)庫(1)得到的XML文檔變換為DataObject(2)。
2. 如權(quán)利要求1所述的方法,其中所述客戶端應(yīng)用(1)是基于Java 的,并且其中所述SDO句柄(10)提供在Java中定義的DataObject (2) 和XQuery表達式之間的接口 。
3. 如權(quán)利要求2所述的方法,其中由所述SDO句柄(2)提供的所 述接口是靜態(tài)接口,其在開發(fā)時定義了由所述SDO句柄(10)處理的 DataObject (2)的類型。
4. 如權(quán)利要求2或3所述的方法,其中所述接口基于存儲在所述 XML數(shù)據(jù)庫(100)中的所述XML文檔的模式定義(101)來提供。
5. 如權(quán)利要求4所述的方法,其中存儲在所述XML數(shù)據(jù)庫(100) 中的XML文檔的模式定義(101)由注冊表提供。
6. 如權(quán)利要求2到5中任意一個所述的方法,其中所述SDO句柄 (10)提供了動態(tài)接口,其在運行時定義了由所述SDO句柄(10)處理的DataObject (2)的所述類型。
7. 如前述權(quán)利要求任意一個所述的方法,其中在所述XML數(shù)據(jù)庫 (100)上的操作是包括以下各項的組中的至少一種對所述XML數(shù)據(jù)庫 (100)中的所述XML數(shù)據(jù)進行的創(chuàng)建、讀取、更新和刪除操作。
8. 如前述權(quán)利要求任意一個所述的方法,其中在所述客戶端應(yīng)用 (1)和所述SDO句柄(10)之間交換的所述DataObject (2)包括樹結(jié)構(gòu)數(shù)據(jù)集合。
9. 如前述權(quán)利要求任意一個所述的方法,其中所述SDO句柄(10)是用于Java的XQuery API (20)的一部分。
10. 包括用于執(zhí)行前述權(quán)利要求1-9中任意一個的方法的指令的計算 機程序。
11. 適于執(zhí)行前述權(quán)利要求1-9中任意一個的方法的用于XML數(shù)據(jù) 庫(100)的數(shù)據(jù)庫管理系統(tǒng)。
全文摘要
本發(fā)明涉及一種用于在XML數(shù)據(jù)庫(100)上執(zhí)行操作的方法,所述方法包括以下步驟在客戶端應(yīng)用(1)和服務(wù)DataObject(SDO)句柄(10)之間交換至少一個DataObject(2);以及將該DataObject(2)變換為用于訪問XML數(shù)據(jù)庫(1)的XML文檔的XQuery操作,并將響應(yīng)于Xquery而從XML數(shù)據(jù)庫(1)得到的XML文檔變換為DataObject(2)。如果客戶端應(yīng)用是基于Java的,SDO句柄(10)提供在Java中定義的DataObject(2)和通過使用XQuery表達式檢索的XML文檔之間的接口。優(yōu)選地,所述SDO句柄(10)是用于Java的XQuery API的一部分。
文檔編號G06F17/30GK101419611SQ20081017117
公開日2009年4月29日 申請日期2008年10月22日 優(yōu)先權(quán)日2007年10月22日
發(fā)明者維克拉姆·杉蒂, 魯佩什·班戴爾 申請人:軟件股份公司