欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)庫中xml模式的原地演進的制作方法

文檔序號:6491731閱讀:166來源:國知局
專利名稱:數(shù)據(jù)庫中xml模式的原地演進的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)管理系統(tǒng),并且更具體地,涉及用于更新XML模式、以及用于更新基于XML模式的實例文檔和數(shù)據(jù)庫結(jié)構(gòu)以符合更新的XML模式的技術(shù)。
背景技術(shù)
使用可擴展標記語言(XML),可以依照指定的分級結(jié)構(gòu)來表示信息。XML模式(schema)定義了這種結(jié)構(gòu)。XML模式包括根XML元素。可以將一個或多個其它XML元素嵌套在根XML元素內(nèi)作為根XML元素的內(nèi)容。這種嵌套的XML元素稱作根XML元素的子XML元素。相反,根XML元素被稱作子XML元素的父XML元素。每個子XML元素又可以是一個或多個附加子XML元素的父XML元素,該一個或多個附加子XML元素嵌套在該父XML元素內(nèi)。XML模式內(nèi)的XML元素的父-子關(guān)系定義了分級結(jié)構(gòu),根據(jù)該分級結(jié)構(gòu),可以以分級結(jié)構(gòu)的方式存儲信息。對于XML模式中的每個XML元素,XML模式定義該XML元素的內(nèi)容值(content value)的類型。
依照XML模式存儲的信息無需指示XML模式中的XML元素的XML標簽。具體地,只要知道這樣的信息符合哪個XML模式,就可以在沒有附含內(nèi)容值的XML標簽的情況下,存儲對應(yīng)于XML模式中的XML元素的內(nèi)容值。例如,可以根據(jù)格式存儲內(nèi)容值,其中,內(nèi)容值以該格式被分隔符(諸如逗號字符)分離。為了使內(nèi)容值與它們在XML模式中的相應(yīng)的XML元素匹配(align),可以參考相應(yīng)的XML模式。
又例如,可以基于XML模式來生成數(shù)據(jù)庫結(jié)構(gòu)(諸如數(shù)據(jù)庫表和數(shù)據(jù)庫視圖)。與這樣的數(shù)據(jù)庫表中的列相關(guān)的名稱和數(shù)據(jù)類型可以對應(yīng)于由XML模式中的XML元素的屬性所指示的名稱和數(shù)據(jù)類型。可以將對應(yīng)于XML模式中的特定XML元素的內(nèi)容值存儲在對應(yīng)于該特定XML元素的數(shù)據(jù)庫表的列中。
可以將內(nèi)容值的多個不同組(每個都基于相同的XML模式)彼此不同地存儲。每個組都是獨立的“實例文檔”。例如,XML模式可以定義XML元素,例如“<element name=’quantity’type=’integer’>”。一個實例文檔可能包括對應(yīng)于XML元素的內(nèi)容值“1”。另一個實例文檔可能包括對應(yīng)于相同XML元素的內(nèi)容值“2”。當內(nèi)容值存儲在數(shù)據(jù)庫表中時,可以將來自不同實例文檔的內(nèi)容值存儲在數(shù)據(jù)庫表的不同行中。對應(yīng)于相同XML元素的內(nèi)容值可以存儲在數(shù)據(jù)庫表的相同列中。
通常,即使在已經(jīng)依照特定XML模式生成了許多實例文檔之后,可能希望演進(evolve)該XML模式。例如,可能希望將新的XML元素添加到該XML模式中,有時是通過在XML模式中的現(xiàn)有XML元素之間插入新的XML元素。又例如,如果特定XML元素表示列舉數(shù)據(jù)類型,則可能希望將新的XML元素插入到特定XML元素的子XML元素的組中,其中,每個子XML元素表示不同的列舉值。
可以使用例如文本編輯工具來手動地修改XML模式。遺憾的是,XML模式的修改的結(jié)果是,以前符合該XML模式的現(xiàn)有實例文檔可能不再符合該XML模式。根據(jù)修改的XML模式解釋的實例文檔可能被錯誤地解釋,使得實例文檔中的內(nèi)容值與修改的XML模式中的錯誤的XML元素相匹配。
此外,在XML模式修改之前其結(jié)構(gòu)基于XML模式的數(shù)據(jù)庫結(jié)構(gòu)(諸如數(shù)據(jù)庫表和數(shù)據(jù)庫視圖)可能也不再符合該XML模式。結(jié)果,可能不能夠在這種數(shù)據(jù)庫結(jié)構(gòu)中正確地存儲依照修改的XML模式生成的實例文檔中的內(nèi)容值。例如,數(shù)據(jù)庫表可能缺少對應(yīng)于插入到XML模式中的新的XML元素的列。而且,如果特定列到特定XML元素的映射已經(jīng)改變,則現(xiàn)有實例文檔可能被錯誤地解釋。
沒有既定的方法用于確?;赬ML模式的實例文檔和數(shù)據(jù)庫結(jié)構(gòu)在XML模式已被修改之后,能夠繼續(xù)符合該XML模式。需要一種用于演進XML模式的技術(shù),同時確?;赬ML模式的實例文檔和數(shù)據(jù)庫結(jié)構(gòu)即使在XML模式已被演進之后,也能夠繼續(xù)符合該XML模式。
在本部分中所描述的方法為可以采用的方法,但并不一定是之前所構(gòu)想和采用的方法。因此,除非另有陳述,否則不應(yīng)該僅僅依據(jù)在本部分中描述的方法包括在本部分中,而將該方法當作是現(xiàn)有技術(shù)。


通過附圖中的實例來描述本發(fā)明,但是不局限于此,在附圖中相同的參考標號表示類似的元件,其中圖1是示出根據(jù)本發(fā)明的實施例的在原地(in-place)XML模式演進中涉及的結(jié)構(gòu)之間的相互作用的框圖;
圖2是示出根據(jù)本發(fā)明的實施例的用于原地演進XML模式和基于XML模式的數(shù)據(jù)庫結(jié)構(gòu)的技術(shù)的流程圖;以及圖3是示出可以實施本發(fā)明的實施例的計算機系統(tǒng)的框圖。
具體實施例方式
本發(fā)明提供一種了用于以下內(nèi)容的原地演進的方法和系統(tǒng)(1)XML模式,(2)基于該XML模式的數(shù)據(jù)庫對象類型和表,以及(3)基于數(shù)據(jù)庫對象類型的數(shù)據(jù)庫對象實例。在下面的描述中,為了解釋的目的,描述了多個特定的細節(jié),以對本發(fā)明有徹底的了解。然而,很顯然,在沒有這些特定細節(jié)的情況下,也可以實現(xiàn)本發(fā)明。在其它的實例中,以框圖形式示出已知的結(jié)構(gòu)和設(shè)備,以避免不必要地使本發(fā)明不清楚。
功能概述希望符合XML模式的實例文檔和數(shù)據(jù)庫結(jié)構(gòu)與XML模式一起演進,使得實例文檔和數(shù)據(jù)庫結(jié)構(gòu)在XML模式已經(jīng)被演進之后繼續(xù)符合該XML模式。根據(jù)本發(fā)明的一個實施例,可以通過在計算機系統(tǒng)中執(zhí)行的模式演進器(schema evolver)來獲得這種連續(xù)的一致性。
模式演進器接收現(xiàn)有XML模式和XML文檔作為輸入。XML文檔指示將對現(xiàn)有XML模式作出的一個或多個改變。基于現(xiàn)有XML模式和XML文檔,模式演進器首先生成結(jié)合了XML文檔中所指示的改變的新的XML模式。
此外,根據(jù)一個實施例,模式演進器基于新的XML模式來生成一個或多個結(jié)構(gòu)化查詢語言(SQL)語句。當SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器演進基于以前的現(xiàn)有XML模式的數(shù)據(jù)庫結(jié)構(gòu),使得數(shù)據(jù)庫結(jié)構(gòu)符合新的XML模式。這樣的數(shù)據(jù)庫結(jié)構(gòu)可以定義例如數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例。
數(shù)據(jù)庫對象類型、數(shù)據(jù)庫對象表、以及數(shù)據(jù)庫對象實例數(shù)據(jù)庫對象類型指定基于該數(shù)據(jù)庫對象類型的所有數(shù)據(jù)庫對象實例的結(jié)構(gòu)和屬性。例如,“地址”對象類型可以指定三個原始“VARCHAR”對象類型的序列一個用于存儲人名,一個用于存儲街道標識符,以及一個用于存儲城市標識符。數(shù)據(jù)庫對象表是基于數(shù)據(jù)庫對象類型的數(shù)據(jù)庫表。例如,基于“地址”對象類型的“地址”對象表將包含至少三個獨立的列一個用于人名,一個用于街道標識符,以及一個用于城市標識符。當數(shù)據(jù)庫對象類型被變更時,基于該數(shù)據(jù)庫對象類型的數(shù)據(jù)庫對象表相應(yīng)地被變更。
基于“地址”對象類型,可以創(chuàng)建多個不同的“地址”對象實例。每個“地址”對象實例都符合由“地址”對象類型所指定的結(jié)構(gòu)和屬性。每個不同的“地址”對象實例可以為由“地址”對象所指定的特定屬性指定不同的值。例如,一個“地址”對象實例可以將“Joe Smith”指定為姓名屬性的值,而另一個“地址”對象實例可以將“John Taylor”指定為姓名屬性的值。
當演進XML模式時,可以將XML元素添加到XML模式或從XML模式刪除。新的XML元素的添加可能使得模式演進器生成SQL語句,當該SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器將相應(yīng)的屬性添加到數(shù)據(jù)庫對象類型。當SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其還可以使得數(shù)據(jù)庫服務(wù)器將相應(yīng)的列添加到數(shù)據(jù)庫表,該數(shù)據(jù)庫表存儲基于該數(shù)據(jù)庫對象類型的數(shù)據(jù)庫對象實例。
類似地,XML元素的刪除可能使得模式演進器生成SQL語句,當該SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器從數(shù)據(jù)庫對象類型移除相應(yīng)的屬性。當該SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其還可以使得數(shù)據(jù)庫服務(wù)器從數(shù)據(jù)庫表中刪除(drop)相應(yīng)的列,該數(shù)據(jù)庫表存儲基于該數(shù)據(jù)庫對象類型的數(shù)據(jù)庫對象實例。
因此,由模式演進器生成的SQL語句可以使得數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例都被演進,以符合新的XML模式。這種SQL語句可以使得數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例被創(chuàng)建、刪除、和/或變更。
原地演進本文所描述的技術(shù)允許XML模式以及基于該XML模式的數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例的“原地”演進。通過“原地”演進,就無需額外復(fù)制以這種結(jié)構(gòu)表示的信息。相反,以這種結(jié)構(gòu)表示的信息可以在不額外復(fù)制信息的情況下被更新??梢酝ㄟ^根據(jù)由XML文檔指示的改變修改XML模式,來自動地作出對現(xiàn)有XML模式的改變。數(shù)據(jù)庫服務(wù)器可以執(zhí)行自動生成的SQL語句,該SQL語句使得數(shù)據(jù)庫服務(wù)器變更現(xiàn)有數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例,以符合修改的XML模式。
“原地”演進與“數(shù)據(jù)復(fù)制”演進不同?!皵?shù)據(jù)復(fù)制”演進包括復(fù)制由將被演進的結(jié)構(gòu)所表示的信息,接著刪除該結(jié)構(gòu),之后創(chuàng)建新的結(jié)構(gòu),然后將來自拷貝的信息插回到新結(jié)構(gòu)的相應(yīng)成分中。“原地”演進典型地顯示出優(yōu)于“數(shù)據(jù)復(fù)制”演進的性能,并且不需要數(shù)據(jù)復(fù)制演進所需要的磁盤空間。
原地XML模式演進涉及的結(jié)構(gòu)之間的相互作用圖1是示出根據(jù)本發(fā)明的實施例的原地XML模式演進涉及的結(jié)構(gòu)之間的相互作用的框圖。模式演進器102是數(shù)據(jù)庫服務(wù)器104的元件。數(shù)據(jù)庫服務(wù)器104在計算機系統(tǒng)中執(zhí)行。模式演進器102接收現(xiàn)有XML模式106和XML文檔108作為輸入?,F(xiàn)有XML模式106是當前登記在數(shù)據(jù)庫110中的XML模式。XML文檔108用XML指示將對現(xiàn)有XML模式106作出的改變。
模式演進器102自動地變更現(xiàn)有XML模式106,使得由XML文檔108所指示的改變結(jié)合到現(xiàn)有XML模式106之中。結(jié)果,現(xiàn)有XML模式106演進為演進的XML模式112。演進的XML模式112結(jié)合了由XML文檔108所指示的所有改變。
根據(jù)一個實施例,模式演進器102接收演進的XML模式112、現(xiàn)有數(shù)據(jù)庫對象類型114、以及現(xiàn)有數(shù)據(jù)庫對象實例116作為輸入?,F(xiàn)有數(shù)據(jù)庫對象類型114符合由現(xiàn)有XML模式106所指示的結(jié)構(gòu)。現(xiàn)有數(shù)據(jù)庫對象實例116符合由數(shù)據(jù)庫對象類型114所指示的類型定義。
模式演進器102確定現(xiàn)有數(shù)據(jù)庫對象類型114的哪些方面不符合演進的XML模式112?;谶@些不符合的方面,模式演進器102自動地生成SQL語句118,當該SQL語句由數(shù)據(jù)庫服務(wù)器104執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器104變更現(xiàn)有數(shù)據(jù)庫對象類型114,以符合演進的XML模式112。此外,當SQL語句118由數(shù)據(jù)庫服務(wù)器104執(zhí)行時,其還使得數(shù)據(jù)庫服務(wù)器使現(xiàn)有數(shù)據(jù)庫對象實例116符合將由數(shù)據(jù)庫服務(wù)器104執(zhí)行SQL語句的所產(chǎn)生的對現(xiàn)有類型定義114的改變。
數(shù)據(jù)庫服務(wù)器104執(zhí)行SQL語句118。結(jié)果,數(shù)據(jù)庫服務(wù)器104將現(xiàn)有數(shù)據(jù)庫對象類型114演進為演進的數(shù)據(jù)庫對象類型120。另一結(jié)果是,數(shù)據(jù)庫服務(wù)器104還將現(xiàn)有數(shù)據(jù)庫對象實例116演進為演進的數(shù)據(jù)庫對象實例122。演進的數(shù)據(jù)庫對象類型120符合由演進的XML模式112所指示的結(jié)構(gòu)。演進的數(shù)據(jù)庫對象實例122符合由演進的數(shù)據(jù)庫對象類型120所指示的結(jié)構(gòu)。
回退(rollback)語句SQL語句118可被稱為“演進”語句,因為當SQL語句被執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器104演進現(xiàn)有數(shù)據(jù)庫對象類型114和現(xiàn)有數(shù)據(jù)庫對象實例116。為了使演進成為基本事務(wù),模式演進器102還生成SQL語句124,如果該SQL語句由數(shù)據(jù)庫服務(wù)器104執(zhí)行,其將使得數(shù)據(jù)庫服務(wù)器撤消(undo)或“回退”當發(fā)生錯誤時已經(jīng)被執(zhí)行的SQL語句118的所有作用。因此,SQL語句124可被稱為“回退語句”。
如果在SQL語句118的執(zhí)行期間發(fā)生錯誤,則數(shù)據(jù)庫服務(wù)器104執(zhí)行以下那些SQL語句124其能夠撤銷(reverse)數(shù)據(jù)庫服務(wù)器已經(jīng)執(zhí)行的那些SQL語句118的作用。因此,除非整個演進成功地完成,否則沒有演進部分是永久的。
當在XML模式演進期間發(fā)生錯誤時,XML模式106的改變也被撤銷。例如,如果在整個演進處理完成之前發(fā)生錯誤,則模式演進器102可能追蹤模式演進器102對XML模式106作出的改變?nèi)缓蟪废切└淖儭?br> 用于原地演進XML模式和基于XML模式的數(shù)據(jù)庫結(jié)構(gòu)的技術(shù)實例圖2是示出根據(jù)本發(fā)明的實施例的用于原地演進XML模式和基于XML模式的數(shù)據(jù)庫結(jié)構(gòu)的技術(shù)200的流程圖。在框202中,模式演進器接收XML文檔。XML文檔指示將對現(xiàn)有XML模式作出的一個或多個改變。
在框204中,模式演進器基于現(xiàn)有XML模式和XML文檔來生成演進的XML模式。演進的XML模式結(jié)合了由XML文檔指示的所有改變。模式演進器可以追蹤對現(xiàn)有XML模式所作的改變,以產(chǎn)生演進的XML模式。
在框206中,模式演進器基于演進的XML模式來生成“演進”SQL語句。當“演進”SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器進行以下操作中的一個或多個創(chuàng)建新的數(shù)據(jù)庫結(jié)構(gòu),刪除現(xiàn)有數(shù)據(jù)庫結(jié)構(gòu),和/或變更現(xiàn)有數(shù)據(jù)庫結(jié)構(gòu)??梢员粍?chuàng)建、刪除、和/或變更的數(shù)據(jù)庫結(jié)構(gòu)可以包括定義數(shù)據(jù)庫對象類型的結(jié)構(gòu)和定義數(shù)據(jù)庫對象實例的結(jié)構(gòu)。
當“演進”SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器使基于演進前的XML模式的數(shù)據(jù)庫對象類型符合由演進的XML模式所指示的結(jié)構(gòu)。因此,演進了數(shù)據(jù)庫對象類型。同樣,當數(shù)據(jù)庫服務(wù)器執(zhí)行“演進”SQL語句時,“演進”SQL語句使得數(shù)據(jù)庫服務(wù)器使基于演進前的數(shù)據(jù)庫對象類型的數(shù)據(jù)庫對象實例符合演進的數(shù)據(jù)庫對象類型。因此,演進了數(shù)據(jù)庫對象實例。
例如,模式演進器可以基于結(jié)合了新的XML元素的演進的XML模式來生成SQL語句,該SQL語句使得數(shù)據(jù)庫服務(wù)器將新的列添加到數(shù)據(jù)庫表中。新的列可以具有與由新的XML元素的屬性所指示的名稱相同的名稱,而且可以基于由新的XML元素的屬性所指示的類型而被提供缺省值。模式演進器可以生成的SQL語句可以包括諸如“CREATE”、“ALTER”、“ADD”、“MODIFY”、以及“DROP”的動作。這種SQL語句可以指示SQL語句的目標是否為“TYPE”、“TABLE”等。
在框208中,模式演進器生成一個或多個“回退”SQL語句。模式演進器可以如模式演進器生成“演進”SQL語句一樣生成“回退”SQL語句。當“回退”SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器撤銷“演進”SQL語句對“演進”SQL語句的目標的作用。
在框210中,數(shù)據(jù)庫服務(wù)器執(zhí)行“演進”SQL語句。結(jié)果,可以創(chuàng)建、刪除、或變更數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例。如果沒有發(fā)生錯誤,則所得到的數(shù)據(jù)庫對象類型和數(shù)據(jù)庫對象實例符合演進的XML模式。
在數(shù)據(jù)庫服務(wù)器執(zhí)行“演進”SQL語句時,在框212中確定對于“演進”SQL語句的執(zhí)行是否發(fā)生了錯誤。如果“演進”SQL語句被沒有錯誤地完全執(zhí)行,則控制轉(zhuǎn)到框214。否則,一發(fā)生錯誤,控制就轉(zhuǎn)到框216。
如果沒有發(fā)生錯誤,則演進在框214中結(jié)束。但是,如果在執(zhí)行“演進”SQL語句期間發(fā)生錯誤,則在框216中,數(shù)據(jù)庫服務(wù)器執(zhí)行與用于撤銷已執(zhí)行的“演進”SQL語句對“演進”SQL語句的目標的作用所需要的一樣多的“回退”SQL語句。模式演進器還可以基于由模式演進器在演進XML模式時所追蹤的改變來撤消對XML模式所作的改變。結(jié)果,XML模式和基于該XML模式的數(shù)據(jù)庫結(jié)構(gòu)回退到它們演進前的狀態(tài)。因此,確保了演進為基本操作。
xdiff模式如上所述,模式演進器可以基于指示將對現(xiàn)有XML模式作出的改變的XML文檔,將現(xiàn)有XML模式演進為演進的XML模式。XML文檔可以根據(jù)由“xdiff”XML模式定義的XML元素來表達改變,“xdiff”XML模式的XML文檔為實例文檔。
xdiff模式用XML定義原始元素,用戶通過原始元素可以表達演進命令。這種命令可以表達與“節(jié)點”相關(guān)的操作。此處使用的“節(jié)點”是XML結(jié)構(gòu)的某些方面,例如XML元素。例如,xdiff模式的一個元素可以定義用于將指定節(jié)點附加到節(jié)點的指定列表的末尾的命令的結(jié)構(gòu)。xdiff模式的另一個元素可以定義用于將指定節(jié)點直接插入到另一個指定節(jié)點前面的命令的結(jié)構(gòu)。xdiff模式的又一個元素可以定義用于刪除指定的節(jié)點和該指定的節(jié)點的子節(jié)點的命令的結(jié)構(gòu)。
示例性的xdiff模式如下所示<schema targetNamespace=”http//xmlns.company.com/xdb/xdiff.xsd”xmlns=”http//www.w3.org/2001/XMLschema”xmlns=”http//www.xmlns.company.com/xdb/xdiff.xsd”version=”1.0”elementFormDefault=”qualified”>
<simpleType name=”xdiff-nodetype”>
<restriction base=”string”>
<enumeration value=”element”/>
<enumeration value=”attribute”/>
<enumeration value=”text”/>
<enumeration value=”cdata”/>
<enumeration value=”entity-reference”/>
<enumeration value=”entity”/>
<enumeration value=”processing-instruction”/>
<enumeration value=”notation”/>
</restriction>
</simpleType>
<element name=”xdiff”>
<complexType>
<choice maxOccurs=”unobounded”>
<element name=”append-node”>
<complexType>
<sequence>
<element name=”content”type=”anyType”/>
</sequence>
<attribute name=”parent-xpath”type=”string”/>
<attribute name=”node-type”type=”xdxdiff-nodetype/>
</complexType>
</element>
<element name=”insert-node-before”>
<complexType>
<sequence>
<element name=”content”type=”anyType”/>
</sequence>
<attribute name=”xpath”type=”string”/>
<attribute name=”node-type”type=”xdxdiff-nodetype/>
</complexType>
</element>
<element name=”delete-node”>
<complexType>
<attribute name=”xpath”type=”string”/>
</complexType>
</element></choice></complexType>
</element>
</schema>
在上述xdiff模式中,定義了三個元素“append-node”、“insert-node-before”、以及“delete-node”?!癮ppend-node”元素表達以下語法該語法用于指示模式演進器應(yīng)該添加由“content”元素指定的節(jié)點作為由“parent-xpath”屬性指定的節(jié)點的最后子節(jié)點。由“content”元素指定的節(jié)點被指示為由“node-type”元素指定的節(jié)點類型。
例如,提供給模式演進器的XML文檔可能含有諸如如下元素<xdappend-node parent-xpath=”/schema/simpleType/restriction”node-type=”element”>
<xdcontent>
<enumeration value=”FL”/>
</xdcontent></xdappend-node>
基于此,模式演進器會將“<enumeration value=’FL’/>”添加到下述XML模式,添加之后如下所示<schema targetNamespace=”http//www.company.com/po.xsd”>
<simpleType name=”USState”>
<restriction base=”string”>
<enumeration value=”NY”/>
<enumeration value=”CA”/>
<enumeration value=”FL”/>
</restriction>
</simpleType>
</schema>
“insert-node-before”元素表達以下語法該語法用于指示模式演進器應(yīng)該將由“content”元素指定的節(jié)點直接插入到由“xpath”屬性指定的節(jié)點前面。再次,由“content”元素指定的節(jié)點被指示為由“node-type”元素指定的節(jié)點類型。
例如,提供給模式演進器的XML文檔可能含有諸如如下元素<xdinsert-node-before xpath=”/schema/simpleType”node-type=”comment”>
<xdcontent>
<!--A type representing US States-->
</xdcontent>
</xdinsert-node-before>
基于此,模式演進器會將“<!--A type representing US States-->”插入下述XML模式,插入之后如下所示<schema targetNamespace=”http//www.company.com/po.xsd”>
<!--Atype representing US States-->
<simpleType name=”USState”>
<restriction base=”string”>
<enumeration value=”NY”/>
<enumeration value=”CA”/>
</restriction>
</simpleType></schema>
“delete-node”元素表達以下語法該語法用于指示模式演進器應(yīng)該將由“xpath”屬性指定的節(jié)點連同該節(jié)點的所有子節(jié)點一起刪除。結(jié)合“append-node”或“insert-node-before”元素,“delete-node”元素可以用于表達對XML模式中的現(xiàn)有節(jié)點的修改。
以XPath指定節(jié)點因為在分級結(jié)構(gòu)(hierarchy)的不同級的不同節(jié)點可以由XML模式中的不同位置的同一文本表達,因此僅在XML模式中搜索一個指定的文本串并且用另一個指定的文本串替換該文本串可能不會產(chǎn)生正確的變換。因此,在XML文檔中使用XML路徑語言(Xpath)以在XML模式中準確地指定節(jié)點。XPath表達式相對于節(jié)點在分級結(jié)構(gòu)中的位置來識別節(jié)點。
例如,XML分級結(jié)構(gòu)可以指示下述節(jié)點<foo1 xmlnsnmsp1=”company”>
<nmsp1foo1>2</nmsp1foo1>
<foo1><foo2>23</foo2></foo1>
</foo1>
XPath表達式“/foo1/nmsp1foo1”準確地識別含有內(nèi)容值“2”的元素。
硬件綜述圖3是示出可以執(zhí)行本發(fā)明的實施例的計算機系統(tǒng)300的框圖。計算機系統(tǒng)300包括用于傳遞信息的總線302或其它通信裝置以及用于處理信息的與總線302連接的處理器304。計算機系統(tǒng)300還包括諸如隨機訪問存儲器(RAM)或者其它動態(tài)存儲裝置的主存儲器306,其連接至總線302用于儲存信息和將由處理器304執(zhí)行的指令。在執(zhí)行將由處理器304執(zhí)行的指令期間,主存儲器306還可用于儲存臨時變量或其他中間信息。計算機系統(tǒng)300進一步包括只讀存儲器(ROM)308或連接至總線302的其他靜態(tài)存儲裝置,用于存儲靜態(tài)信息和處理器304的指令。提供諸如磁盤或光盤的存儲設(shè)備310,并連接至總線302用于存儲信息和指令。
計算機系統(tǒng)300可以經(jīng)由總線302連接至諸如陰極射線管(CRT)的顯示器312,用于向計算機用戶顯示信息。包括字母數(shù)字鍵和其他鍵的輸入裝置314連接至總線302,用于將信息和指令選擇傳遞到處理器304。另一種類型的用戶輸入裝置是光標控制316,諸如鼠標、跟蹤球、或光標方向鍵,用于將方向信息和命令選擇傳遞到處理器304并用于控制顯示器312上的光標移動。輸入裝置通常在兩個軸上(第一個軸(例如X軸)和第二個軸(例如Y軸))具有兩個自由度,使裝置能指定平面上的位置。
本發(fā)明涉及計算機系統(tǒng)300的使用,用于執(zhí)行在此描述的技術(shù)。根據(jù)本發(fā)明的一個實施例,通過計算機系統(tǒng)300響應(yīng)于執(zhí)行包括在主存儲器306中的一個或多個指令的一個或多個序列的處理器304,來實現(xiàn)這些技術(shù)。這樣的指令可以從諸如存儲裝置310的其它計算機可讀介質(zhì)讀入主存儲器306。包括在主存儲器306中的指令序列的執(zhí)行,使得處理器304執(zhí)行此處所述的處理步驟。在可選實施例中,可以使用硬連線電路(hard-wired circuitry)來取代軟件指令或者與軟件指令結(jié)合來實施該發(fā)明。因此,本發(fā)明的實施例將不限于硬件電路和軟件的任何特定組合。
這里使用的術(shù)語“計算機可讀介質(zhì)”是指參與向處理器304提供指令用于執(zhí)行的任何介質(zhì)。這種介質(zhì)可以采取多種形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)、和傳遞介質(zhì)。非易失性介質(zhì)舉例來說包括光盤或磁盤,諸如存儲裝置310。易失性介質(zhì)包括動態(tài)存儲器,諸如主存儲器306。傳輸介質(zhì)包括同軸電纜、銅線、和光纖,包括組成總線302的導(dǎo)線。傳輸介質(zhì)還可采取聲波或光波形式,例如那些在無線電波和紅外線數(shù)據(jù)通信過程中產(chǎn)生的聲波和光波。
通常形式的計算機可讀介質(zhì)包括如軟盤、軟性盤、硬盤、磁帶,或者任何其它磁性介質(zhì)、CD-ROM、任何其它光介質(zhì)、打孔紙、紙帶、或者任何帶孔圖樣的物理介質(zhì)、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存儲芯片或者盒式磁帶,或者以下提到的載波、或者計算機可讀的任何其他介質(zhì)。
各種形式的計算機可讀介質(zhì)可參與將一個或者多個指令的一個或多個序列承載到處理器304用于執(zhí)行。例如,指令開始可承載在遠程計算機的磁盤中。遠程計算機可以將指令加載到其動態(tài)存儲器中,然后使用調(diào)制解調(diào)器通過電話線發(fā)送指令。計算機系統(tǒng)300本地的調(diào)制解調(diào)器可接收電話線上的數(shù)據(jù),并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換成紅外信號。紅外探測器可以接收紅外信號攜帶的數(shù)據(jù),并且合適的電路可以將數(shù)據(jù)放到總線302上。總線302將數(shù)據(jù)承載到主存儲器306,處理器304從主存儲器取回并執(zhí)行這些指令。在由處理器304執(zhí)行這些指令之前或之后,由主存儲器306接收的指令可隨意地儲存在存儲裝置310上。
計算機系統(tǒng)300還包括連接至總線302的通信接口318。提供雙向數(shù)據(jù)通信的通信接口318,連接到與局域網(wǎng)322連接的網(wǎng)絡(luò)鏈路320。例如,通信接口318可以是綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN)卡或者調(diào)制解調(diào)器,用于提供到相應(yīng)類型的電話線的數(shù)據(jù)通信連接。又如,通信接口318可以是局域網(wǎng)(LAN)卡,用于提供至兼容局域網(wǎng)(LAN)的數(shù)據(jù)通信連接。也可以使用無線鏈路。在任何這樣的實施中,通信接口318發(fā)送和接收承載表示各種類型的信息的數(shù)字數(shù)據(jù)流的電信號、電磁信號、和光學信號。
網(wǎng)絡(luò)鏈路320通??赏ㄟ^一個或者多個網(wǎng)絡(luò)向其它數(shù)據(jù)裝置提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路320可通過局域網(wǎng)322與主機324連接,或者與互聯(lián)網(wǎng)服務(wù)提供商(ISP)326操作的數(shù)據(jù)設(shè)備連接。ISP326又通過目前通稱為“互聯(lián)網(wǎng)”328的全球分組數(shù)據(jù)通信網(wǎng)絡(luò)提供數(shù)據(jù)通信服務(wù)。局域網(wǎng)322和互聯(lián)網(wǎng)328都使用承載數(shù)字數(shù)據(jù)流的電信號、電磁信號、或光學信號。通過各種網(wǎng)絡(luò)的信號和網(wǎng)絡(luò)鏈路320上的信號以及通過通信接口318的信號,都傳送數(shù)字數(shù)據(jù)給計算機系統(tǒng)300或者傳送來自計算機系統(tǒng)的數(shù)字數(shù)據(jù),是傳輸信息的載波的示例性形式。
計算機系統(tǒng)300能通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路320、和通信接口318發(fā)送消息和接收數(shù)據(jù)(包括程序代碼)。在互聯(lián)網(wǎng)的實例中,服務(wù)器330可通過互聯(lián)網(wǎng)328、ISP 326、局域網(wǎng)322、和通信接口318,傳送用于應(yīng)用程序的所請求的程序代碼。
所接收的代碼可以在其被接收時由處理器304執(zhí)行,和/或儲存在存儲裝置310或者其它非易失性介質(zhì)中用于隨后執(zhí)行。按照這種方式,計算機系統(tǒng)300可以以載波的形式獲得應(yīng)用代碼。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種用于演進可擴展標記語言(XML)模式的方法,所述方法包括在計算機系統(tǒng)中執(zhí)行的模式演進器處接收指示將對第一XML模式作出的一個或多個改變的文檔;基于所述第一XML模式和所述文檔,所述模式演進器生成第二XML模式;以及基于所述第二XML模式,生成一個或多個第一結(jié)構(gòu)化查詢語言(SQL)語句。
2.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象類型被創(chuàng)建。
3.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象表被創(chuàng)建。
4.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象類型被刪除。
5.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象表被刪除。
6.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象類型被變更。
7.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象表被變更。
8.根據(jù)權(quán)利要求1所述的方法,其中,當所述第一SQL語句被執(zhí)行時,使得一個或多個數(shù)據(jù)庫對象實例被變更。
9.根據(jù)權(quán)利要求1所述的方法,其中,所述一個或多個改變被表達為由第三XML模式指定的一個或多個XML類型的一個或多個實例。
10.根據(jù)權(quán)利要求1所述的方法,進一步包括生成一個或多個第二SQL語句,當所述第二SQL語句被執(zhí)行時,使得所述一個或多個第一SQL語句的作用被撤銷。
11.根據(jù)權(quán)利要求10所述的方法,進一步包括在執(zhí)行所述一個或多個第一SQL語句時,確定是否發(fā)生了錯誤;以及響應(yīng)于確定已經(jīng)發(fā)生了錯誤,執(zhí)行所述一個或多個第二SQL語句中的一個或多個,當其被執(zhí)行時,使得已經(jīng)被執(zhí)行的所述一個或多個第一SQL語句的作用被撤銷。
12.一種用于生成結(jié)構(gòu)化查詢語言(SQL)語句以變更數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)庫類型的方法,所述數(shù)據(jù)庫系統(tǒng)具有定義一組一個或多個數(shù)據(jù)庫對象類型的定義數(shù)據(jù),所述方法包括接收第一可擴展標記語言(XML)模式;以及基于所述第一XML模式,生成一個或多個SQL語句,當所述SQL語句被執(zhí)行時,使得數(shù)據(jù)庫服務(wù)器變更所述一組一個或多個數(shù)據(jù)庫對象類型。
13.根據(jù)權(quán)利要求12所述的方法,其中,所述一個或多個數(shù)據(jù)庫對象類型是基于不同于所述第一XML模式的第二XML模式生成的。
14.根據(jù)權(quán)利要求13所述的方法,其中,所述第一XML模式是基于所述第二XML模式生成的。
15.根據(jù)權(quán)利要求12所述的方法,其中,當所述一個或多個SQL語句被執(zhí)行時,使得所述數(shù)據(jù)庫服務(wù)器創(chuàng)建所述一個或多個數(shù)據(jù)庫對象類型中的一個或多個。
16.根據(jù)權(quán)利要求12所述的方法,其中,當所述一個或多個SQL語句被執(zhí)行時,使得所述數(shù)據(jù)庫服務(wù)器刪除所述一個或多個數(shù)據(jù)庫對象類型中的一個或多個。
17.一種用于生成結(jié)構(gòu)化查詢語言(SQL)語句以變更數(shù)據(jù)庫對象實例的方法,所述方法包括接收第一可擴展標記語言(XML)模式;以及基于所述第一XML模式,生成一個或多個SQL語句,當所述SQL語句被執(zhí)行時,使得數(shù)據(jù)庫服務(wù)器變更一組一個或多個數(shù)據(jù)庫對象實例。
18.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求1中所述的方法。
19.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求2中所述的方法。
20.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求3中所述的方法。
21.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求4中所述的方法。
22.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求5中所述的方法。
23.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求6中所述的方法。
24.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求7中所述的方法。
25.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求8中所述的方法。
26.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求9中所述的方法。
27.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求10中所述的方法。
28.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求11中所述的方法。
29.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求12中所述的方法。
30.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求13中所述的方法。
31.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求14中所述的方法。
32.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求15中所述的方法。
33.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求16中所述的方法。
34.一種計算機可讀介質(zhì),承載有一個或多個指令序列,當所述指令序列由一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行在權(quán)利要求17中所述的方法。
全文摘要
本發(fā)明公開了一種用于XML模式的原地演進的方法和系統(tǒng)。為了自動地演進現(xiàn)有XML模式,模式演進器接收現(xiàn)有XML模式和XML文檔作為輸入。XML文檔指示將對現(xiàn)有XML模式作出的改變。基于現(xiàn)有XML模式和XML文檔,模式演進器將現(xiàn)有XML模式演進為結(jié)合了在XML文檔中所指示的改變的新的XML模式。根據(jù)一個方面,模式演進器基于新的XML模式來生成一個或多個SQL語句。當SQL語句由數(shù)據(jù)庫服務(wù)器執(zhí)行時,其使得數(shù)據(jù)庫服務(wù)器演進基于以前的現(xiàn)有XML模式的數(shù)據(jù)庫結(jié)構(gòu),使得數(shù)據(jù)庫結(jié)構(gòu)符合新的XML模式。這是“原地”完成的,而沒有復(fù)制數(shù)據(jù)庫結(jié)構(gòu)中的數(shù)據(jù)。
文檔編號G06F17/30GK1839388SQ200480024233
公開日2006年9月27日 申請日期2004年8月23日 優(yōu)先權(quán)日2003年8月25日
發(fā)明者薩姆·伊迪庫拉, 西瓦桑卡蘭·錢德拉塞卡, 尼普恩·阿加瓦爾, 拉維·默西 申請人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
武冈市| 贞丰县| 乐业县| 舟山市| 抚顺县| 吉木乃县| 文成县| 朝阳区| 潼南县| 子洲县| 吕梁市| 北流市| 敖汉旗| 浮山县| 芜湖市| 奉化市| 井冈山市| 清水河县| 稷山县| 旅游| 温州市| 大田县| 礼泉县| 延川县| 乡宁县| 汉阴县| 洛阳市| 句容市| 如东县| 安达市| 布拖县| 连平县| 鄄城县| 河西区| 娄底市| 搜索| 华池县| 全州县| 麻栗坡县| 奉贤区| 建昌县|