專利名稱:一種基于xml元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)庫動態(tài)管理方法,尤其涉及一種基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法。
背景技術(shù):
隨著數(shù)據(jù)庫和軟件的發(fā)展,數(shù)據(jù)在數(shù)據(jù)庫中的存儲已經(jīng)不再是難題,但隨著各個軟件系統(tǒng)中業(yè)務(wù)發(fā)展越來越復(fù)雜,數(shù)據(jù)業(yè)務(wù)表之間的關(guān)系錯綜復(fù)雜,如何對系統(tǒng)數(shù)據(jù)庫結(jié)構(gòu)有很好的描述和管理,已經(jīng)成為軟件發(fā)展過程中數(shù)據(jù)存儲的另外一個重要問題。 對于一般的小型業(yè)務(wù)系統(tǒng)的數(shù)據(jù),業(yè)務(wù)相對簡單,數(shù)據(jù)量小,數(shù)據(jù)交換需求弱,對于數(shù)據(jù)庫的管理來說難度不大。面臨大型系統(tǒng),目前的管理方式大多基于普通文檔,或者是簡單的圖表,這些方式不能有效地實現(xiàn)自我描述的,不能通過計算機(jī)自動處理和維護(hù),最重要的是沒有建立一種能統(tǒng)一貫穿整個系統(tǒng)數(shù)據(jù)庫生命周期的管理方法。因此,對于一個系統(tǒng)來說,能夠?qū)ο到y(tǒng)數(shù)據(jù)庫進(jìn)行有效的控制和管理成為一個關(guān)鍵問題。目前,可以利用工具將數(shù)據(jù)的表和字段到出到各種格式的文檔如excel、xml等,也可以將xml或excel表轉(zhuǎn)換成數(shù)據(jù)庫表,這種轉(zhuǎn)換都是不含元數(shù)據(jù)描述的。基于數(shù)據(jù)表映射的系統(tǒng)開發(fā)的目前比較成熟的有Hibernate等技術(shù),這種技術(shù)針對表結(jié)構(gòu)本身,且需要時刻保證與數(shù)據(jù)庫表同步。現(xiàn)有技術(shù)存在的缺陷(I)單一地針對元數(shù)據(jù)進(jìn)行管理元數(shù)據(jù)管理是數(shù)據(jù)庫技術(shù)研究的重點(diǎn)與難點(diǎn)之一。目前有一些專門的元數(shù)據(jù)進(jìn)行管理的軟件,但都局限于對元數(shù)據(jù)的新增、插入和查詢的管理,并沒有與系統(tǒng)內(nèi)部的各個模塊進(jìn)行交互,是一個獨(dú)立的管理軟件,不能融合到系統(tǒng)中去。(2)描述和定義數(shù)據(jù)業(yè)務(wù)規(guī)則目前的數(shù)據(jù)庫,如Oracle、SQL Server自身只能達(dá)到對數(shù)據(jù)本身的描述,如某個表存儲的是哪一類數(shù)據(jù),有什么字段、類型等。這些只是針對數(shù)據(jù)本身的描述,沒有加入各種業(yè)務(wù)規(guī)則,包括安全性和權(quán)限的驗證或限制等。對于一個完整的元數(shù)據(jù)管理來說,如果要結(jié)合系統(tǒng)相關(guān)功能,在元數(shù)據(jù)管理中加入這些內(nèi)容是非常必要的。(3)元數(shù)據(jù)模塊與系統(tǒng)功能的接口 目前元數(shù)據(jù)管理與系統(tǒng)功能的脫節(jié)非常嚴(yán)重。大多數(shù)元數(shù)據(jù)管理起來都只是用來作為系統(tǒng)開發(fā)的一個參考,沒有融入到系統(tǒng)功能上。(4)跨平臺的復(fù)雜業(yè)務(wù)數(shù)據(jù)交換跨平臺數(shù)據(jù)交換指數(shù)據(jù)來源與不同的系統(tǒng)平臺或數(shù)據(jù)庫平臺,它們的數(shù)據(jù)之間不能通過直接到處導(dǎo)入的方式,需要經(jīng)過一定的處理和不同的工具才能實現(xiàn)。目前對于單一數(shù)據(jù)的交換已有一些解決方案,但對與復(fù)雜的業(yè)務(wù)數(shù)據(jù),并要保證數(shù)據(jù)的完整和安全性顯得非常困難
發(fā)明內(nèi)容
本發(fā)明的目的就在于為了解決上述問題而提供一種基于XML元數(shù)據(jù)的數(shù)據(jù)庫動
態(tài)管理方法。為了達(dá)到上述目的,本發(fā)明采用了以下技術(shù)方案本發(fā)明包括以下步驟(1)組織XML存儲結(jié)構(gòu),定義XML的節(jié)點(diǎn)信息,包括自定義業(yè)務(wù)規(guī)則;(2)構(gòu)建元數(shù)據(jù)解析引擎;(3)構(gòu)建業(yè)務(wù)調(diào)度執(zhí)行引擎;(4)構(gòu)建外部程序調(diào)用數(shù)據(jù)的接口 ;(5)業(yè)務(wù)數(shù)據(jù)導(dǎo)入導(dǎo)出。所述步驟⑴中,所述自定義業(yè)務(wù)包括但不限于名稱、類型、大小、初始值、所屬數(shù)據(jù)庫表名、表空間、權(quán)限等級、業(yè)務(wù)關(guān)系ID、備注彳目息。所述步驟(2)中,所述元數(shù)據(jù)解析引擎包括讀取模塊和寫入模塊,讀取元數(shù)據(jù)時, 啟用元數(shù)據(jù)讀取模塊,觸發(fā)元數(shù)據(jù)的管理機(jī)制,根據(jù)請求,進(jìn)行元數(shù)據(jù)庫掃描,掃描所需對應(yīng)節(jié)點(diǎn),將帶有標(biāo)注格式結(jié)構(gòu)的元數(shù)據(jù)返回;寫入元數(shù)據(jù)時,用元數(shù)據(jù)寫入模塊觸發(fā)元數(shù)據(jù)的管理機(jī)制,寫入請求,進(jìn)行元數(shù)據(jù)庫掃描,找到對應(yīng)節(jié)點(diǎn)執(zhí)行寫入操作;所述元數(shù)據(jù)掃描過程中對XML的查詢基于XQuery。所述元數(shù)據(jù)解析引擎中,采用注冊命令的方式來實現(xiàn)對數(shù)據(jù)庫具體的操作,命令由實現(xiàn)ICo_and接口的具體實現(xiàn)類來進(jìn)行封裝,接口包含命令唯一 ID標(biāo)識和執(zhí)行方法Execute。所述步驟(3)中,所述業(yè)務(wù)調(diào)度執(zhí)行引擎在執(zhí)行數(shù)據(jù)庫請求操作之前,需要進(jìn)行“自定義業(yè)務(wù)規(guī)則”的檢測,其方法為A、將規(guī)則權(quán)限加入到XML子節(jié)點(diǎn);B、用反射的方式進(jìn)行業(yè)務(wù)規(guī)則過濾,具體方法如下a、在元數(shù)據(jù)中查詢業(yè)務(wù)規(guī)則節(jié)點(diǎn),獲取實現(xiàn)過濾業(yè)務(wù)的類型名稱;b、通過反射機(jī)制根據(jù)過濾業(yè)務(wù)類型字符串獲取其類型,調(diào)用方法如下
Using System.Reflection ;
Assemblyass = Assembly.LoadF ile(@". Λ\ Reflect.dll");
Typetype = ass.GetType("Cortoi.Filters. SafetyF ilter **);
MethodInfo method = type.GetMethod("Execute") ; //方法的名稱 object filterObject = ass.CreateInstance(MCortoi.Filters.SafetyFilter ”);
//返回是否被過濾的標(biāo)識符號,傳入表名稱、字段名稱參數(shù)
bool isFiltered =(bool)method.Invoke(filterO^)ject, newstring[]({ "users",
"name"});在經(jīng)過業(yè)務(wù)規(guī)則驗證通過后,業(yè)務(wù)調(diào)度執(zhí)行弓I擎將綁定了元數(shù)據(jù)的請求轉(zhuǎn)換為具體的數(shù)據(jù)庫操作。所述步驟(5)中,當(dāng)執(zhí)行導(dǎo)出操作時,在元數(shù)據(jù)解析引擎中收到請求,命令是導(dǎo)出業(yè)務(wù)數(shù)據(jù),條件是業(yè)務(wù)類型Date < xxxx, date > xxxx,元數(shù)據(jù)解析引擎在元數(shù)據(jù)庫中搜索需要導(dǎo)出的相關(guān)元數(shù)據(jù),然后將元數(shù)據(jù)和日期條件結(jié)合再綁定命令EXPCASEDATE提交給業(yè)務(wù)調(diào)度執(zhí)行引擎模塊,在業(yè)務(wù)調(diào)度執(zhí)行引擎中,首先進(jìn)行命令匹配,匹配后將數(shù)據(jù)轉(zhuǎn)遞給的具體方法,方法內(nèi)生成業(yè)務(wù)相關(guān)的一整套完整的原始插入數(shù)據(jù)SQL文本和相匹配的元數(shù)據(jù),以此用來實現(xiàn)跨平臺或不同數(shù)據(jù)數(shù)據(jù)庫的數(shù)據(jù)交換;業(yè)務(wù)數(shù)據(jù)的導(dǎo)入是導(dǎo)出的一個逆過程,執(zhí)行導(dǎo)入操作時,元數(shù)據(jù)引擎解析收到的元數(shù)據(jù),然后在元數(shù)據(jù)庫中查詢匹配,返回結(jié)果,再將結(jié)果與導(dǎo)入命令綁定,提交給業(yè)務(wù)調(diào)度執(zhí)行引擎,執(zhí)行引擎解析命令后將數(shù)據(jù)插入到數(shù)據(jù)庫中;一個業(yè)務(wù)導(dǎo)出數(shù)據(jù)含表字段、字段信息描述和關(guān)聯(lián)性,在交換時,指定導(dǎo)出數(shù)據(jù)與導(dǎo)出的表進(jìn)行匹配,指定導(dǎo)出的字段與導(dǎo)入表的字段匹配,插入數(shù)據(jù)時,通過所述匹配來進(jìn)行數(shù)據(jù)的交換。本發(fā)明的有益效果在于(I)通過本發(fā)明能夠有效地以業(yè)務(wù)的角度描述整個數(shù)據(jù)庫結(jié)構(gòu);(2)利用本發(fā)明,將數(shù)據(jù)庫中的所有元數(shù)據(jù)和整個結(jié)構(gòu)保存在XML中,通過與之結(jié)合的解析和執(zhí)行引擎,能替代直接操作數(shù)據(jù)庫,與外部系統(tǒng)程序集成性更好;(3)簡化了系統(tǒng)數(shù)據(jù)庫的設(shè)計過程,同時增強(qiáng)了數(shù)據(jù)庫設(shè)計的靈活性和擴(kuò)展性; (4)在數(shù)據(jù)交換特別是復(fù)雜的業(yè)務(wù)數(shù)據(jù)交換上能提供極大的方便。
圖I是本發(fā)明所述數(shù)據(jù)庫動態(tài)管理系統(tǒng)的架構(gòu)示意圖;圖2是本發(fā)明所述對業(yè)務(wù)請求時的元數(shù)據(jù)操作流程;圖3是本發(fā)明所述對元數(shù)據(jù)庫的讀取和寫入的操作流程;圖4是本發(fā)明所述數(shù)據(jù)導(dǎo)入的流程示意圖;圖5是本發(fā)明所述數(shù)據(jù)導(dǎo)出的流程示意圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明作進(jìn)一步具體描述如圖I-圖5所示,本發(fā)明包括以下步驟I、組織XML存儲結(jié)構(gòu),定義節(jié)點(diǎn)的表達(dá)內(nèi)容,包括自定義業(yè)務(wù)規(guī)則定義根據(jù)所需數(shù)據(jù)庫動態(tài)管理的范圍了精細(xì)程度,列出所需管理的內(nèi)容。建立XML文檔結(jié)構(gòu)。依據(jù)前面一步收集的信息,定義XML的節(jié)點(diǎn)信息。元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),這里就是要用XML結(jié)構(gòu)和節(jié)點(diǎn)詳細(xì)描述數(shù)據(jù)庫中的業(yè)務(wù)數(shù)據(jù),包括名稱、類型、大小、初始值、所屬數(shù)據(jù)庫表名、表空間、權(quán)限等級、業(yè)務(wù)關(guān)系ID、備注等等信息。一個常用的XML結(jié)構(gòu)如
權(quán)利要求
1.一種基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,其特征在于包括以下步驟(1)組織XML存儲結(jié)構(gòu),定義XML的節(jié)點(diǎn)信息,包括自定義業(yè)務(wù)規(guī)則;(2)構(gòu)建元數(shù)據(jù)解析引擎;(3)構(gòu)建業(yè)務(wù)調(diào)度執(zhí)行引擎;(4)構(gòu)建外部程序調(diào)用數(shù)據(jù)的接口 ;(5)業(yè)務(wù)數(shù)據(jù)導(dǎo)入導(dǎo)出。
2.根據(jù)權(quán)利要求I所述的基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,其特征在于所述步驟(I)中,所述自定義業(yè)務(wù)包括但不限于名稱、類型、大小、初始值、所屬數(shù)據(jù)庫表名、表空間、權(quán)限等級、業(yè)務(wù)關(guān)系ID、備注信息。
3.根據(jù)權(quán)利要求I所述的基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,其特征在于所述步驟(2)中,所述元數(shù)據(jù)解析引擎包括讀取模塊和寫入模塊,讀取元數(shù)據(jù)時,啟用元數(shù)據(jù)讀取模塊,觸發(fā)元數(shù)據(jù)的管理機(jī)制,根據(jù)請求,進(jìn)行元數(shù)據(jù)庫掃描,掃描所需對應(yīng)節(jié)點(diǎn),將帶有標(biāo)注格式結(jié)構(gòu)的元數(shù)據(jù)返回;寫入元數(shù)據(jù)時,用元數(shù)據(jù)寫入模塊觸發(fā)元數(shù)據(jù)的管理機(jī)制,寫入請求,進(jìn)行元數(shù)據(jù)庫掃描,找到對應(yīng)節(jié)點(diǎn)執(zhí)行寫入操作;所述元數(shù)據(jù)掃描過程中對XML的查詢基于XQuery。
4.根據(jù)權(quán)利要求3所述的基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,其特征在于所述元數(shù)據(jù)解析引擎中,采用注冊命令的方式來實現(xiàn)對數(shù)據(jù)庫具體的操作,命令由實現(xiàn)ICommand接口的具體實現(xiàn)類來進(jìn)行封裝,接口包含命令唯一 ID標(biāo)識和執(zhí)行方法Execute。
5.根據(jù)權(quán)利要求I所述的基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,其特征在于所述步驟(3)中,所述業(yè)務(wù)調(diào)度執(zhí)行引擎在執(zhí)行數(shù)據(jù)庫請求操作之前,需要進(jìn)行“自定義業(yè)務(wù)規(guī)貝U”的檢測,其方法為A、將規(guī)則權(quán)限加入到XML子節(jié)點(diǎn);B、用反射的方式進(jìn)行業(yè)務(wù)規(guī)則過濾,具體方法如下a、在元數(shù)據(jù)中查詢業(yè)務(wù)規(guī)則節(jié)點(diǎn),獲取實現(xiàn)過濾業(yè)務(wù)的類型名稱;b、通過反射機(jī)制根據(jù)過濾業(yè)務(wù)類型字符串獲取其類型,調(diào)用方法如下 Using System.Reflection ; Assemblyass = Assembly.LoadFile(@"..\\ Reflect.dll"); Typetype = ass.GetType("Cortoi.Filters.SafetyFilter "); MethodInfo method = type.GetMethod("Execute") ; //方法的名稱 object filterObject = ass.CreateInstance("Cortoi.Filters.SafetyFilter "); //返回是否被過濾的標(biāo)識符號,傳入表名稱、字段名稱參數(shù) bool isFiltered =(bool)method.Invoke(filterObject, newstring[]({"users", "name"}); 在經(jīng)過業(yè)務(wù)規(guī)則驗證通過后,業(yè)務(wù)調(diào)度執(zhí)行引擎將綁定了元數(shù)據(jù)的請求轉(zhuǎn)換為具體的數(shù)據(jù)庫操作。
6.根據(jù)權(quán)利要求I所述的基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,其特征在于所述步驟(5).中,當(dāng)執(zhí)行導(dǎo)出操作時,在元數(shù)據(jù)解析引擎中收到請求,命令是導(dǎo)出業(yè)務(wù)數(shù)據(jù),條件是業(yè)務(wù)類型Date < xxxx,date > xxxx,元數(shù)據(jù)解析引擎在元數(shù)據(jù)庫中搜索需要導(dǎo)出的相關(guān)元數(shù)據(jù),然后將元數(shù)據(jù)和日期條件結(jié)合再綁定命令EXPCASEDATE提交給業(yè)務(wù)調(diào)度執(zhí)行引擎模塊,在業(yè)務(wù)調(diào)度執(zhí)行引擎中,首先進(jìn)行命令匹配,匹配后將數(shù)據(jù)轉(zhuǎn)遞給的具體方法,方法內(nèi)生成業(yè)務(wù)相關(guān)的一整套完整的原始插入數(shù)據(jù)SQL文本和相匹配的元數(shù)據(jù),以此用來實現(xiàn)跨平臺或不同數(shù)據(jù)數(shù)據(jù)庫的數(shù)據(jù)交換;業(yè)務(wù)數(shù)據(jù)的導(dǎo)入是導(dǎo)出的一個逆過程,執(zhí)行導(dǎo)入操作時,元數(shù)據(jù)引擎解析收到的元數(shù)據(jù),然后在元數(shù)據(jù)庫中查詢匹配,返回結(jié)果,再將結(jié)果與導(dǎo)入命 令綁定,提交給業(yè)務(wù)調(diào)度執(zhí)行引擎,執(zhí)行引擎解析命令后將數(shù)據(jù)插入到數(shù)據(jù)庫中;一個業(yè)務(wù)導(dǎo)出數(shù)據(jù)含表字段、字段信息描述和關(guān)聯(lián)性,在交換時,指定導(dǎo)出數(shù)據(jù)與導(dǎo)出的表進(jìn)行匹配,指定導(dǎo)出的字段與導(dǎo)入表的字段匹配,插入數(shù)據(jù)時,通過所述匹配來進(jìn)行數(shù)據(jù)的交換。
全文摘要
本發(fā)明公開了一種基于XML元數(shù)據(jù)的數(shù)據(jù)庫動態(tài)管理方法,包括以下步驟(1)組織XML存儲結(jié)構(gòu),定義XML的節(jié)點(diǎn)信息,包括自定義業(yè)務(wù)規(guī)則;(2)構(gòu)建元數(shù)據(jù)解析引擎;(3)構(gòu)建業(yè)務(wù)調(diào)度執(zhí)行引擎;(4)構(gòu)建外部程序調(diào)用數(shù)據(jù)的接口;(5)業(yè)務(wù)數(shù)據(jù)導(dǎo)入導(dǎo)出。本發(fā)明以業(yè)務(wù)的角度描述整個數(shù)據(jù)庫結(jié)構(gòu),將數(shù)據(jù)庫中的所有元數(shù)據(jù)和整個結(jié)構(gòu)保存在XML中,通過與之結(jié)合的解析和執(zhí)行引擎,能替代直接操作數(shù)據(jù)庫;簡化了系統(tǒng)數(shù)據(jù)庫的設(shè)計過程,同時增強(qiáng)了數(shù)據(jù)庫設(shè)計的靈活性和擴(kuò)展性,與外部系統(tǒng)程序集成性更好;在數(shù)據(jù)交換特別是復(fù)雜的業(yè)務(wù)數(shù)據(jù)交換上能提供極大的方便。
文檔編號G06F17/30GK102708203SQ201210155059
公開日2012年10月3日 申請日期2012年5月18日 優(yōu)先權(quán)日2012年5月18日
發(fā)明者盧遠(yuǎn)宗, 吉桂昕, 張文韜, 梁宇君, 江飛, 蕭陽, 趙勇, 黎東輝 申請人:成都科泰地理信息技術(shù)有限公司