專利名稱:用于處理xml對象的程序設計語言擴展及相關應用的制作方法
背景技術:
1.發(fā)明領域本發(fā)明涉及程序設計語言領域。更具體而言,本發(fā)明涉及一種用于在本地程序設計語言環(huán)境中操縱中央XML對象的方法。
2.背景信息XML作為用來在軟件應用與web服務之間傳輸數(shù)據(jù)結構的事實上的標準而迅速出現(xiàn)。雖然多數(shù)的軟件應用與web服務是以諸如Java或C++之類的現(xiàn)代程序設計語言來編寫的,但是這些程序設計語言當中沒有一個提供對于表示和操縱XML的本地支持。因此,程序員在他們的應用及web服務的上下文內(nèi),不得不開發(fā)或采用用來表示和操縱XML的外部軟件包。
一般說來,外部軟件包無法提供帶有用來處理XML數(shù)據(jù)的本地支持的宿主語言。因而,他們按如下方式來表示和操縱XML,所述方式與宿主語言為其本地數(shù)據(jù)類型所提供的那些方式有很大的不同。最經(jīng)常的情況下,外部軟件包利用通用樹抽象來表示XML數(shù)據(jù),并且提供基于樹的API,以供導航和操縱數(shù)據(jù)(例如,getParentNode()、getChildNodes()、removeChild()等)。與用來訪問和操縱那些對宿主程序設計語言為本地的數(shù)據(jù)結構相比,這種訪問和操縱數(shù)據(jù)結構的方法麻煩而費時。
因此,一種使得能夠以與本地數(shù)據(jù)結構被供給的相同能力和靈活性來操縱XML數(shù)據(jù)結構的程序設計語言是值得期望的。
附圖簡要說明本發(fā)明將通過在附圖中所舉例說明的示范性實施例加以描述,但是其并非是限制性的,在這些附圖中,同樣的參考標記表示類似的元件,在其中
圖1舉例說明本發(fā)明一個實施例的概觀;圖2舉例說明依照本發(fā)明一個實施例的解釋器104的示范性操作流程;
圖3A-3C舉例說明依照本發(fā)明一個實施例的各種示范性的語言擴展;圖4舉例說明適用于實踐本發(fā)明的一個通信網(wǎng)絡的一個實施例的框圖;圖5A-5B舉例說明依照一個實施例、并入本發(fā)明的語言擴展的示例性功能,用來將XML文檔映射到Java對象和將Java對象映射到XML文檔;圖6舉例說明依照一個實施例、適合于宿有(hosting)本發(fā)明的映射服務的示例性計算機系統(tǒng),所述映射服務包括解釋器104;和圖7A-7C舉例說明基于現(xiàn)有技術的、用于將XML文檔映射到Java對象和將Java對象映射到XML文檔的示例性功能。
發(fā)明的詳細描述在以下說明中,將描述本發(fā)明多個不同的方面。然而,對于本領域的技術人員來說將顯而易見的是可以利用本發(fā)明的僅僅一些或所有方面來實施本發(fā)明。為了解釋說明起見,闡述了特定的數(shù)目、部件和結構,以便提供對本發(fā)明的徹底理解。然而,對于本領域的技術人員而言還將顯而易見的是可以在沒有這些特定細節(jié)的情況下實施本發(fā)明。在其它情況下,為了不讓本發(fā)明含混不清,眾所周知的特征將被省略或簡化掉。
現(xiàn)在將依據(jù)由基于處理器的設備執(zhí)行的操作方面,利用諸如接收、分析、確定、生成等之類的術語來介紹部分說明,上述術語符合本領域技術人員為了向本領域的其他技術人員傳達他們的工作實質(zhì)而一般所采用的表述方式。正如本領域的技術人員所普通理解的那樣,量(quantities)采用電信號、磁信號或光信號的形式,這些信號能通過基于處理器的設備的機械組件和電子組件來被存儲、傳遞、組合,并且能被操縱;而術語“處理器”包括獨立式的、附加式的或嵌入式的微處理器、微控制器、數(shù)字信號處理器等。
現(xiàn)在將以最有助于理解本發(fā)明的方式,按照多個不連續(xù)的步驟,依次來描述各種操作,但是,不應該把描述的次序看作是暗指這些操作必須依從一定的次序。特別是,這些操作不必按照所介紹的次序來執(zhí)行。此外,本說明重復地使用短語“在一個實施例中”,盡管它可以是指代相同的實施例,但通常來講該短語并不是指同一個實施例。
概述本發(fā)明包括以程序設計語言擴展形式提供的功能性說明,以易于在本地程序設計環(huán)境中靈活操縱XML對象。所述語言擴展包括本地XML數(shù)據(jù)類型,還包括使程序員能以大致相同于導航和操縱本地語言對象的方式來導航和操縱XML對象的許多操作。由此,本發(fā)明提供了一種用于操縱XML和本地語言對象的機制,該機制特別地很適合于逐漸地普遍存在的如下問題,即將XML對象映射到以現(xiàn)代程序設計語言編寫的軟件應用和web服務中,以及將以現(xiàn)代程序設計語言編寫的軟件應用和web服務映射到XML對象中。
圖1舉例說明了依照一個實施例的本發(fā)明的概觀。如圖所示,映射服務100包括解釋器/編譯器104(“解釋器”),該解釋器/編譯器進一步包含分析器105。依照本發(fā)明的教導,含有各種語言擴展的程序設計語句102被提供給映射服務100,以待由分析器105進行分析。一旦分析了這些語句,解釋器104就將這些語句編譯成可執(zhí)行代碼,繼而將所述可執(zhí)行代碼提供給執(zhí)行引擎106。執(zhí)行引擎106不但控制所述代碼的執(zhí)行(例如,通過處理器來控制),而且還執(zhí)行常規(guī)的執(zhí)行運行期服務,比如存儲器分配請求與釋放、錯誤/異常處理等等。對于舉例說明的實施例而言,解釋器104包括應用編程接口(API)(未示出),通過該應用編程接口,可以可編程地提交利用本發(fā)明的語言擴展所形成的程序設計語句,以供由多種專用過程加以編譯。舉例來講,剛一接收到XML文檔時,web服務器應用就可以對映射服務100進行調(diào)用,以便將所述XML文檔對象映射成為例如用于web服務器進行附加處理的內(nèi)部Java類。這種專用過程可以與映射服務100一起共同駐留在與映射服務100相同的“宿主”系統(tǒng)上(未示出),或被遠程地離開該“宿主”系統(tǒng)放置,以及使用傳統(tǒng)的交叉系統(tǒng)通信技術與映射服務100進行通信。
圖2舉例說明依照本發(fā)明一個實施例的解釋器104的示范性操作流程。在操作中,解釋器104讀取正在編譯的語句的第一條命令。正如舉例說明的那樣,在塊202,一經(jīng)調(diào)用,解釋器104就確定正在編譯的語句的“下一”命令的位置。確定正在編譯的語句的“下一命令”的位置,可以利用本技術領域中公知的許多“分析”技術當中的任何一種來完成。在塊204,一經(jīng)確定正在編譯的語句的“下一”命令的位置,解釋器104就識別所讀取的命令(例如,根據(jù)解釋器104所維護的語言詞典來進行識別)。接下來,在塊206,解釋器104讀取余下的命令語法,并且為識別出的命令確定語義。
在塊208,解釋器104確定是否已經(jīng)到達語句的末尾。如果沒有,解釋器104就返回到塊202,并從那里繼續(xù)所述編譯過程。最終到達正在編譯的語句的末尾,并且在此時,在塊210,解釋器104可以選擇性地將一個或多個優(yōu)化法應用于所分析的命令。所述優(yōu)化法可以是本技術領域所公知的可用的編譯程序優(yōu)化技術中的任何一種或多種。
最后,在對所分析的命令進行或不進行優(yōu)化的情況下,在塊212,解釋器104都為所分析的命令產(chǎn)生可執(zhí)行代碼。在一個實施例中,解釋器104為所分析的命令產(chǎn)生字節(jié)代碼。在可選的實施例中,也可以代之以實施其它等效的“代碼生成”方法。
語言映射擴展程序設計語言并未在其涉及XML文檔與程序設計語言對象之間的互用和翻譯時提供充分的功能。因此,依照本發(fā)明的教導,提供了用以同腳本語言相聯(lián)合使用的面向XML的語言擴展,并且現(xiàn)在將對這種語言擴展進行描述,所述腳本語言比如是Javascript、ECMAScript等。雖然以下語言擴展是針對Javascript加以描述的,但是不應該把本發(fā)明的適用性當作為僅限于Javascript。
圖3A-3C舉例說明依照一個實施例的本發(fā)明的各種示范性Javascript語言擴展。首先,語言擴展300舉例說明了一種XML(數(shù)據(jù))類型聲明,它顯式地指明指定變量(例如,x、y)是與變量的XML類相關聯(lián)的。正如舉例說明的那樣,可以像聲明任何本地Javascript數(shù)據(jù)類型那樣來聲明這種XML變量。在一個實施例中,配備Javascript察覺分析器(例如,分析器105),以識別XML數(shù)據(jù)類型聲明,并且將它們與相應符號表中的適當項(例如,變量、功能參數(shù)、函數(shù)返回值等等)關聯(lián)起來。解釋器104利用這種信息,來確定對XML類型的值執(zhí)行的操作的語義,并且例如決定何時來隱式地將這些值限制為XML類型或者根據(jù)XML類型來限制這些值(這在下面更充分地作了描述)。在舉例說明的實施例中,XML類型是通過自我識別前綴(例如‘XML’)的方式加以聲明的。
語言擴展310舉例說明了在結構化表達式之間產(chǎn)生的賦值,所述結構化表達式包括XML語法以及XML類型變量。例如,在第310(A)行中,XML類型變量“p”被賦予XML結構,該結構表示包括名字元素(如約翰)和年齡元素(如25)的個體元素。依照本發(fā)明的一個實施例,盡管在第310(A)行中表達式包括顯式的XML類型指示器(indicator)(如上所述),但是利用包含XML語法的表達式來初始化的變量不需要這種顯式的XML類型聲明。在一個實施例中,在所有XML標記定義中使用的“<”符號在本發(fā)明中進一步被用作為一元運算符,以向解釋器指明將其后跟隨的表達式當作字符串對待,并且作為XML語句被分析。在一個實施例中,“<”運算符的操作數(shù)是直至且包含末尾標記的整個XML文字。由此,由于一元運算符“<”觸發(fā)產(chǎn)生XML類型值的結果,因而對于被賦予XML文字的變量而言,沒有必要作為XML類型被顯式聲明。例如,第310(B)-(E)行舉例說明了根據(jù)表達式的內(nèi)容而已經(jīng)隱式聲明的XML類型變量“e”。
語言擴展320舉例說明了依照本發(fā)明的教導,可以通過使用嵌入式表達來動態(tài)地確定XML文字的多個部分。在舉例說明的實施例中,本發(fā)明的映射服務動態(tài)地解析XML文字的多個部分,其包含嵌入式的Javascript表達。在一個實施例中,配備解釋器104,以將一組卷曲花括號(例如{...})識別成具有比一元運算符“<”(如上所述)更高優(yōu)先級的嵌入式的表達式運算符。然而,應當注意到在不脫離本發(fā)明精神及范圍的情況下,除了“{}”之外的其它運算符可以用作為嵌入式的表達式運算符。無論怎樣,如果分析器105確認在表達式內(nèi)出現(xiàn)嵌入式的表達式運算符,則將該運算符內(nèi)包含的操作數(shù)傳遞給解釋器104以供評估,將得出的返回值限制為字符串類型(如下所述)。此后,利用字符串連接(concatenation)來將所述返回值插入在前面的XML文字和隨后的XML文字之間。一旦已評估了所有的嵌入式表達式并且已將它們的結果插入在所述XML文字內(nèi),“<”運算符的存在就會使解釋器104把得到的字符串轉(zhuǎn)換為XML類型。
語言擴展330舉例說明了由解釋器104實施的類型限制的原理。依照本發(fā)明的一個實施例,通過把字符串內(nèi)容作為XML分析,來自動地將分析器105期待XML類型的值時出現(xiàn)的字符串類型的任何值轉(zhuǎn)換成XML數(shù)據(jù)類型。在所述轉(zhuǎn)換之前,可以利用字符串算術運算來構造和操縱所述字符串值,而不考慮諸如符合規(guī)范(well-formedness)之類的XML約束。例如,在圖3B的第330(A)-(D)行中,將XML類型變量賦予多個字符串連接的結果。更具體而言,使字符串類型的變量“tagName”與兩個其它的字符串值(例如,“<”和“>”)連接起來,以形成XML開和關標記。再將得到的標記當作為字符串,并且與值“John(約翰)”和“Sue(蘇)”連接起來,后者也被當作為字符串、而不管他們代表XML表達式的事實。接著,由于有顯式的“XML”數(shù)據(jù)類型聲明而使得到的字符串值被限制回XML值。另外,在期待XML的其它情況下,也自動地將字符串值限制成XML值。例如,那些傳遞給期待XML參數(shù)的函數(shù)的字符串值和XML文字內(nèi)嵌入的字符串值都將同樣被轉(zhuǎn)換成XML。由此,第330(E)行產(chǎn)生了與第330(D)行相同的結果。
語言擴展340舉例說明了最主要的是一旦變量包含XML值,就可以訪問XML變量的子元素,和/或利用諸如但不限于句點/圓點(“.”)之類的預定義運算符(在下文中稱為“點操作符”)來對所述子元素進行賦值。點操作符檢查其左側(cè)操作數(shù)的所有子元素,并且按次序返回那些名字與右側(cè)操作數(shù)的名字相匹配的元素。這會造成零或更多元素被返回。在一個實施例中,如果指定的子元素是葉節(jié)點,則返回子元素的內(nèi)容。但是,如果指定的子元素不是葉節(jié)點,則返回所述指定的子元素連同它所有的后裔(例如,參看340(D))。另外,點操作符的左側(cè)操作數(shù)將可以是一個元素列表,而不是單個元素(例如,考慮相繼使用兩個或更多圓點的情況)。在這種情況下,所述點操作符在該列表上進行迭代,按次序檢查每個元素的子元素。這種處理方式有意地模糊了單個元素與元素列表之間的差別,從而簡化程序員的工作。
語言擴展350舉例說明了可以訪問XML元素屬性并且利用“屬性”運算符來對其進行賦值。在一個實施例中,所述屬性運算符是由‘.@’符號來表示的。所述屬性運算符檢查其左側(cè)操作數(shù)的所有屬性,并且返回其名字與右側(cè)操作數(shù)相匹配的屬性的值。例如,在第350(A)行中,檢索與至少兩個雇員的其中一個的‘標識符’屬性相關聯(lián)的值,并將該值分配給整型變量‘empid’。
除了提供對XML值中緊接著的子元素的直接訪問之外,本發(fā)明的語言擴展還提供對XML值的所有后裔(即,子、孫子、曾孫等)的直接訪問(例如參看語言元素330)。在一個實施例中,“雙點”(例如‘..’)運算符檢查其左側(cè)操作數(shù)的所有后裔元素,并且以文檔次序、返回名字與其右側(cè)操作數(shù)的名字想匹配的那些后裔元素。當左側(cè)操作數(shù)是一個元素列表時,“..”運算符在該列表上迭代、按次序檢查每個元素的后裔。
語言擴展370舉例說明了本發(fā)明的索引特性,由此給出一個子元素列表,可以利用預定義的索引運算符來標識所述列表內(nèi)的單獨的子元素。在一個實施例中,將一組方括號“[]”用作為索引運算符。所述索引運算符基本上根據(jù)單個元素在列表內(nèi)的次序位置,來從其左側(cè)操作數(shù)中選擇。左側(cè)操作數(shù)可以表示一個元素列表或單個元素。如果所述操作數(shù)表示單個元素,則把它當成大小等于一的列表。
如語言元素380舉例說明的,本發(fā)明也提供用于在子元素列表上進行迭代。在舉例說明的示例中,表達式“e..name”返回一個元素列表,并且“for”語句按次序步進通過該列表。對于該列表中的每個元素來講,“for”語句將變量“n”賦值給元素,并且執(zhí)行卷曲花括號中包含的代碼。作為選擇,子元素列表的長度可以利用宿主程序設計語言中現(xiàn)有的、用以確定陣列長度的相同方法加以確定。例如,在第380(C)行上的語句中,子元素列表的長度是通過訪問宿主ECMAScript語言的隱含的“長度”特性(例如“.length”)來確定的。
由此,第380(C)-(D)行產(chǎn)生了與第380(A)-(B)行所產(chǎn)生的相同的結果。
示例性應用正如上面所提到的那樣,本發(fā)明的語言擴展尤其適合于將來自于數(shù)據(jù)表示語言的對象映射成相對應的程序設計語言對象,反之亦然。這種語言映射在以下情況中是令人期望的,所述情況例如是需要具有一個基于諸如Java之類的程序設計語言的內(nèi)部運行環(huán)境的系統(tǒng)利用諸如XML之類的數(shù)據(jù)表示語言與其它系統(tǒng)交換數(shù)據(jù)。
圖4是舉例說明并入本發(fā)明教導的示范性通信網(wǎng)絡的框圖。如圖所示,服務提供商405、客戶端110以及終端用戶415都通過網(wǎng)絡402通信地耦合在一起。網(wǎng)絡402表示諸如一個或多個局域網(wǎng)/廣域網(wǎng)/因特網(wǎng)等之類的許多通信網(wǎng)絡中的任何一種。服務提供商405表示“增值”服務提供商,這些服務提供商向客戶端410和終端用戶415提供內(nèi)容和/或服務??蛻舳?10表示一個或多個實體機構,這些實體機構按次序來使用服務提供商405的增值服務,例如以便通過網(wǎng)絡402向終端用戶415提供改進后的內(nèi)容。
例如,假定服務提供商405已經(jīng)開發(fā)了一種用于產(chǎn)生交互式地形圖的新web服務,所述地形圖代表客戶端410突出顯示各種興趣點。利用服務提供商405所提供的這種服務,客戶端410經(jīng)由網(wǎng)絡402將興趣點的列表發(fā)送給服務提供商405。作為響應,服務提供商405產(chǎn)生一個或多個交互式地形圖,所述地形圖顯示由客戶端410提供的興趣點的可選表示。服務提供商405繼而向客戶端410返回一個或多個指向所述地形圖的URL,該客戶端又進而利用所述URL來向終端用戶415顯示所述地形圖。每當客戶端410把地形圖呈現(xiàn)給終端用戶415時,終端用戶415可以選擇一個或多個所述興趣點,繼而將這些興趣點返回給服務提供商405。服務提供商405繼而將選定的興趣點發(fā)送回到客戶端410,以供客戶端410所希望執(zhí)行的任何進一步的處理使用。
客戶端410可以執(zhí)行的處理的性質(zhì)是由客戶端410來確定的,并且例如依賴于使用服務提供商的服務的環(huán)境。例如,客戶端410可以表示不動產(chǎn)代理、氣象服務、產(chǎn)品制造商等等,所述不動產(chǎn)代理利用各點來向終端用戶415顯示人口資料和地產(chǎn)位置,所述氣象服務利用各點來圖解地顯示該氣象服務已采集到的溫度及天氣現(xiàn)象,所述產(chǎn)品廠商利用各點來圖解式地顯示商店位置等等。
每一個這種客戶端410的實體都可以使用它們自己預先定義的XML格式來傳輸此類興趣點。例如,氣象團體也許已在用于傳輸有關氣象現(xiàn)象的信息格式上達成了一致,不動產(chǎn)團體也許已在用于傳輸有關住家的信息格式上達成了一致,而產(chǎn)品制造商也許已在用于傳輸商店位置的信息格式上達成了一致。以下示例1示出了產(chǎn)品制造團體所使用的、用于運送他們產(chǎn)品的商店位置的XML格式...
示例1<available-at>
<store>
<name>The Electronics Store(電子商店)</name>
<address>
<street>23 Transistor Dr.</street>
<city>Circuit</city>
<state>WA</state>
<zip>12345</zip>
</address>
</store>
<store>...</store>
<store>...</store>
</available-at>
然而,在內(nèi)部,服務提供商405將興趣點表示成一個點陣列,用Java類來定義每一點,如下面示例2中所示。
示例2public class Point{String label;//緊挨著點顯示的文本LatitudeLongitude location;//在地形圖上點的位置}為了能讓廣大范圍的客戶端團體容易訪問他們的服務,服務提供商405將希望能夠接受以多種XML格式(即比如示例1中所示的那種格式)的數(shù)據(jù),然后讓那個數(shù)據(jù)自動地映射到服務提供商405的本地程序設計語言內(nèi)的類似數(shù)據(jù)結構中。
圖5A-5B舉例說明了示例性函數(shù),如上面相對于圖4所述的那樣,該函數(shù)并入本發(fā)明一個實施例的語言擴展,以供將XML文檔映射到Java對象和將Java對象映射到XML文檔。在舉例說明的示例中,每當服務提供商405從客戶端410那里接收到需要被轉(zhuǎn)換成Java對象的XML文檔時,該服務提供商405就將會調(diào)用“FromXML”函數(shù)(如圖5A所示)。同樣,每當服務提供商405需要將內(nèi)部Java對象轉(zhuǎn)換成供客戶端410使用的XML時,服務提供商405就將會調(diào)用圖5B的“ToXML”函數(shù)。
現(xiàn)在參照圖5A,在圖5A里,舉例說明了“FromXML”函數(shù)。假定新客戶端處在以XML文檔的形式將位置數(shù)據(jù)發(fā)送到服務提供商405的過程中,所述XML文檔包含示例1中所示的結構。剛一接收到所述數(shù)據(jù),服務提供商405就將啟動對“FromXML”的功能調(diào)用。在所述函數(shù)內(nèi)要注意的項當中,語句500還使用除“.length”指令以外的“雙點”運算符(如上所述)以導航通過接收到的XML結構并為所提供的每個XML地址分配一個新的點對象。接下來,對于XML數(shù)據(jù)中所提供的每個地址,根據(jù)服務提供商405的內(nèi)部數(shù)據(jù)約束來確定顯示標簽和點位置(如示例2所示)。在語句505中,“availableat..address”返回一個地址元素列表,其進而又被迭代地賦值給變量“a”。接下來,利用后跟點操作符的內(nèi)嵌的parent()函數(shù)來確定每個商店(store)的名稱。此外,利用點操作符來確定那個商店所處的街道地址、城市、州和郵政編碼。正如語句510所說明的那樣,通過直接訪問后裔地址元素而返回的字符串被連接在一起,以形成點標簽。另外,在LatitudeLongitude函數(shù)(未示出)中使用包含街道、城市、州及郵政編碼信息的地址信息,所述LatitudeLongitude函數(shù)計算給出輸入地址的映射位置。
在圖5B中,舉例說明了一個“ToXML”函數(shù),以用來將基于Java的點位置轉(zhuǎn)換成示例1中所示的XML元素。開始,由語句525利用XML文字來構造根節(jié)點“<available-at>”。接下來,語句530利用“String.split()”函數(shù)來分析顯示標簽,以確定每個點的商店名稱、街道地址、城市、州及郵政編碼。最后,語句535創(chuàng)建每個點的商店元素,這些商店元素被附加到來自語句525的根節(jié)點。
圖7A-C舉例說明了根據(jù)現(xiàn)有技術中所公知的常規(guī)應用和技術、將XML文檔映射到Java對象和將Java對象映射到XML文檔的示例性函數(shù)。正如可以容易看出的,利用Java和標準XML文檔對象模型(DOM)來實現(xiàn)上面舉例說明的函數(shù)所需要代碼的數(shù)量及復雜度是相當大的。然而,比較起來,通過給出了本發(fā)明包含前述語言擴展的教導,可以顯著地將這樣的努力縮減到最小程度。
示例性主機系統(tǒng)圖6舉例說明了適用于本發(fā)明的宿有映射服務100及解釋器104的示例性計算機系統(tǒng)。如圖所示,計算機系統(tǒng)600包括一個或多個處理器602,及系統(tǒng)存儲器604。另外,計算機系統(tǒng)600包括大容量存儲設備606(比如磁盤、硬盤、CDROM等)、輸入/輸出設備608(比如鍵盤、光標控制器等)、以及通信接口610(比如網(wǎng)絡接口卡、調(diào)制解調(diào)器等)。這些元件都經(jīng)由系統(tǒng)總線612而彼此相互耦合,所述系統(tǒng)總線代表一條或多條總線。在多條總線的情況下,這些總線通過一個或多個總線橋(未示出)而橋接在一起的。這些元件中的每一個都執(zhí)行它們在本技術領域中所公知的常規(guī)功能。具體來講,利用系統(tǒng)存儲器604和大容量存儲器606來存儲實現(xiàn)本發(fā)明之解釋器和/或映射服務的程序設計指令的作業(yè)拷貝和永久拷貝。可以將所述程序設計指令的永久拷貝加載到工廠中的大容量存儲器606里,或者例如通過分布式介質(zhì)(未示出)或通過通信接口610(從分布式服務器(未示出))來將所述程序設計指令的永久拷貝加載到實地中的大容量存儲器里。這些元件602-612的結構組成都是已知的,因此將不作進一步描述。
結論和總結因此,從上面的說明可知,已經(jīng)描述了對基于腳本的語言的新穎XML擴展。所述新穎的方案特別適用于在程序設計語言與數(shù)據(jù)表示語言之間映射數(shù)據(jù)對象。雖然已經(jīng)參照舉例說明的實施例和上面枚舉的實施例對本發(fā)明作了描述,但是本發(fā)明并不局限于這些所描述的實施例。在符合以下權利要求中所闡述的本發(fā)明范圍的情況下,可以作出許多修改和變更。因此,上述實施例僅僅是說明性的,而不限制本發(fā)明本身。
權利要求
1.一種方法,包括接收映射定義,該映射定義將數(shù)據(jù)表示語言的選定元素映射到一個或多個程序設計語言的選定對象;判定映射定義是否包括映射定義部分,該映射定義部分具有一條或多條定義語句,所述定義語句以腳本語言的面向數(shù)據(jù)表示的語言元素來表示,所述腳本語言包括面向數(shù)據(jù)表示的語言元素;以及處理映射定義,包括依照所述數(shù)據(jù)表示語言元素的語法和語義定義,來處理具有映射定義語句的映射定義,所述映射定義語句包括所述腳本語言的數(shù)據(jù)表示語言元素。
2.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將數(shù)據(jù)表示語言的選定元素映射到一個或多個程序設計語言的選定對象;判定映射定義是否包括映射定義部分,該映射定義部分具有一條或多條定義語句,所述定義語句以腳本語言的面向數(shù)據(jù)表示的語言元素來表示,所述腳本語言包括面向數(shù)據(jù)表示的語言元素,以及處理映射定義,包括依照所述面向數(shù)據(jù)表示的語言元素的語法和語義定義,來處理具有映射定義語句的映射定義,所述映射定義語句包括所述腳本語言的面向數(shù)據(jù)表示的語言元素;和一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
3.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括賦值語句,該賦值語句包括具有XML數(shù)據(jù)類型的變量以及將被賦值給該變量的數(shù)據(jù)串;以及如果判定一條或多條定義語句包括賦值語句、而該賦值語句包括具有XML數(shù)據(jù)類型的變量,則處理所述賦值語句,包括將所述數(shù)據(jù)串作為XML對象來處理。
4.如權利要求3所述的方法,其中根據(jù)所述數(shù)據(jù)串的結構,將所述數(shù)據(jù)串隱式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
5.如權利要求4所述的方法,其中根據(jù)一元運算符的存在,將所述數(shù)據(jù)串隱式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
6.如權利要求5所述的方法,其中所述一元運算符由“<”符號來表示。
7.如權利要求4所述的方法,其中根據(jù)所述數(shù)據(jù)串當中一個或多個基于XML的文字的存在,將所述數(shù)據(jù)串隱式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
8.如權利要求3所述的方法,其中根據(jù)XML標識前綴的存在,將所述數(shù)據(jù)串顯式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
9.如權利要求8所述的方法,其中所述標識前綴是‘XML’。
10.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句,如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括賦值語句,該賦值語句包括具有XML數(shù)據(jù)類型的變量以及將被賦值給該變量的數(shù)據(jù)串,以及如果判定一條或多條定義語句包括賦值語句、而該賦值語句包括具有XML數(shù)據(jù)類型的變量,則處理所述賦值語句,包括將所述數(shù)據(jù)串作為XML對象來處理;以及一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
11.如權利要求10所述的設備,其中根據(jù)所述數(shù)據(jù)串的結構,將所述數(shù)據(jù)串隱式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
12.如權利要求11所述的設備,其中根據(jù)一元運算符的存在,將所述數(shù)據(jù)串隱式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
13.如權利要求11所述的設備,其中所述一元運算符由“<”符號來表示。
14.如權利要求11所述的設備,其中根據(jù)所述數(shù)據(jù)串當中一個或多個基于XML的文字的存在,將所述數(shù)據(jù)串隱式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
15.如權利要求10所述的設備,其中根據(jù)XML標識前綴的存在,將所述數(shù)據(jù)串顯式地標識為與XML數(shù)據(jù)類型相關聯(lián)。
16.如權利要求15所述的設備,其中所述標識前綴是‘XML’。
17.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括含有嵌入式表達式的表達式;如果一條或多條定義語句包括含有嵌入式表達式的表達式,則動態(tài)解析嵌入式表達式的值;以及將包含已解析的嵌入式函數(shù)的表達式作為XML數(shù)據(jù)類型來處理。
18.如權利要求17所述的方法,其中所述嵌入式函數(shù)由一對預定標識符包圍。
19.如權利要求18所述的方法,其中所述預定標識符對包括一組卷曲花括號。
20.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句,如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括含有嵌入式表達式的表達式,如果一條或多條定義語句包括含有嵌入式表達式的表達式,則動態(tài)解析嵌入式表達式的值,以及將包含已解析的嵌入式函數(shù)的表達式作為XML數(shù)據(jù)類型來處理;以及一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
21.如權利要求20所述的設備,其中所述嵌入式函數(shù)由一對預定標識符包圍。
22.如權利要求21所述的設備,其中所述預定標識符對包括一組卷曲花括號。
23.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定一條或多條定義語句是否包括一表達式,所述表達式包括被預定義的導航運算符分隔開的XML數(shù)據(jù)結構的第一元素和第二元素;以及處理所述表達式,并且返回所述第一元素的一個或多個子元素,所述第一元素具有與所述第二元素的名稱等同的名稱。
24.如權利要求23所述的方法,其中所述導航運算符包括一句點(“.”)。
25.如權利要求23所述的方法,進一步包括檢索與一個或多個子元素相關聯(lián)的內(nèi)容,并且至少利用所述內(nèi)容的與第二表達式有關聯(lián)的一部分。
26.如權利要求23所述的方法,進一步包括判定一個或多個子元素中的任意子元素是否包含第二組一個或多個子元素;以及如果判定所述一個或多個子元素中的至少一個包含第二組一個或多個子元素,則返回與第二組一個或多個子元素相關聯(lián)的值。
27.如權利要求23所述的方法,其中所述表達式進一步包括一文字值,并且在其中所述被訪問的元素被賦予該值。
28.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句,如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定一條或多條定義語句是否包括一表達式,所述表達式包括被預定義的導航運算符分隔開的XML數(shù)據(jù)結構的第一元素和第二元素,以及處理所述表達式以訪問XML數(shù)據(jù)結構的所述第二元素,并且返回所述第一元素的一個或多個子元素,所述第一元素具有與所述第二元素的名稱等同的名稱;以及一個或多個處理器,其與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
29.如權利要求28所述的設備,其中所述導航運算符包括一句點(“.”)。
30.如權利要求28所述的設備,進一步包括指令,當執(zhí)行這些指令時,使所述設備能夠檢索與所述一個或多個子元素相關聯(lián)的內(nèi)容,并且至少使用所述內(nèi)容的與第二表達式有關聯(lián)的一部分。
31.如權利要求28所述的設備,進一步包括指令,當執(zhí)行這些指令時,使所述設備能夠判定所述一個或多個子元素中的任意子元素是否包含第二組一個或多個子元素;以及如果判定所述一個或多個子元素中的至少一個包含第二組一個或多個子元素,則返回與第二組一個或多個子元素相關聯(lián)的值。
32.如權利要求28所述的設備,其中所述表達式進一步包括一文字值,并且在其中所述被訪問的元素被賦予該值。
33.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括一表達式,所述表達式包括與屬性運算符相關聯(lián)的XML數(shù)據(jù)結構的至少一個元素;以及如果一條或多條定義語句包括一表達式、而所述表達式包括與屬性運算符相關聯(lián)的XML數(shù)據(jù)結構的至少一個元素,則訪問與由所述屬性運算符來標識的屬性相關聯(lián)的值。
34.如權利要求33所述的方法,其中所述表達式進一步包括將被賦予所述屬性值的變量。
35.如權利要求33所述的方法,其中所述表達式進一步包括一文字值,并且在其中所述屬性被賦予該值。
36.如權利要求33所述的方法,其中所述屬性運算符是‘.@’。
37.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句,如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括一表達式,所述表達式包括與屬性運算符相關聯(lián)的XML數(shù)據(jù)結構的至少一個元素,以及如果一條或多條定義語句包括一表達式、而所述表達式包括與所述屬性運算符相關聯(lián)的XML數(shù)據(jù)結構的至少一個元素,則訪問與所述屬性相關聯(lián)的值;以及一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
38.如權利要求37所述的設備,其中所述屬性運算符是‘.@’。
39.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定一條或多條定義語句是否包括一表達式,所述表達式包括被預定義的導航運算符分隔開的XML數(shù)據(jù)結構的第一元素和第二元素;以及處理所述表達式以訪問XML數(shù)據(jù)結構的所述第二元素以及所述第二元素的所有后裔。
40.如權利要求39所述的方法,其中所述導航運算符包括至少兩個連續(xù)的句點(‘..’)。
41.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句,如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定一條或多條定義語句是否包括一表達式,所述表達式包括被預定義的導航運算符分隔開的XML數(shù)據(jù)結構的第一元素和第二元素,以及處理所述表達式以訪問XML數(shù)據(jù)結構的所述第二元素以及所述第二元素的所有后裔;以及一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
42.如權利要求41所述的設備,其中所述導航運算符包括至少兩個連續(xù)的句點(‘..’)。
43.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括一表達式,所述表達式包括定義左側(cè)操作數(shù)和索引值的索引運算符;以及處理所述表達式以訪問XML數(shù)據(jù)結構的單個元素,所述XML數(shù)據(jù)結構具有等同于索引值的次序位置。
44.如 權利要求43所述的方法,其中所述索引運算符包括一組方括號([])。
45.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句,如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括一表達式,所述表達式包括定義左側(cè)操作數(shù)和索引值的索引運算符,以及處理所述表達式以訪問XML數(shù)據(jù)結構的單個元素,所述XML數(shù)據(jù)結構具有等同于該索引值的次序位置;以及一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
46.如權利要求45所述的設備,其中所述索引運算符包括一組方括號([])。
47.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括映射定義部分,該映射定義部分具有一條或多條定義語句,所述一條或多條定義語句以腳本語言的面向XML的語言元素來表示,所述腳本語言包括面向XML的語言元素;以及處理映射定義,包括依照所述面向XML的語言元素的語法和語義定義來處理具有映射定義語句的映射定義,所述映射定義語句包括所述腳本語言的面向XML的語言元素。
48.一種設備,包括在其中存儲有多條程序設計指令的存儲介質(zhì),當執(zhí)行該程序設計指令時,使所述設備能夠接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象,判定映射定義是否包括映射定義部分,該映射定義部分具有一條或多條定義語句,所述一條或多條定義語句以腳本語言的面向XML的語言元素來表示,所述腳本語言包括面向XML的語言元素,以及處理映射定義,包括依照所述面向XML的語言元素的語法和語義定義來處理具有映射定義語句的映射定義,所述映射定義語句包括所述腳本語言的面向XML的語言元素;以及一個或多個處理器,與存儲介質(zhì)相耦合以執(zhí)行所述程序設計指令。
49.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括一表達式,所述表達式包括具有預定義的一元運算符的文字值;以及如果判定所述一條或多條定義語句包括一表達式,所述表達式包括具有預定義的一元運算符的文字值,則將所述表達式作為XML對象來處理。
50.如權利要求49所述的方法,其中所述一元運算符由“<”符號來表示。
51.一種方法,包括接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象;判定映射定義是否包括以腳本語言的語言元素來表示的一條或多條定義語句;如果映射定義包括以腳本語言的語言元素來表示的一條或多條定義語句,則判定所述一條或多條定義語句是否包括一表達式,所述表達式包括迭代運算符;以及如果判定所述一個或多個定義語句包括含有迭代運算符的表達式,則將所述表達式作為XML對象來處理,以迭代地訪問由迭代運算符來標識的一個或多個元素的列表。
全文摘要
提供了一種設備,該設備將數(shù)據(jù)表示語言的數(shù)據(jù)對象映射到程序設計語言內(nèi)相對應的對象,反之亦然。在一個實施例中,配置該設備以接收映射定義,該映射定義將XML數(shù)據(jù)結構的選定元素映射到一個或多個Java類的選定對象。進一步配置所述設備以判定映射定義是否包括一條或多條定義語句,所述定義語句以腳本語言的面向XML的語言元素來表示。此外,裝配所述設備以便依照面向XML的語言元素的語法和語義定義來處理映射定義語句,所述映射定義語句包括腳本語言的面向XML的語言元素。
文檔編號G06F9/44GK1549966SQ02817124
公開日2004年11月24日 申請日期2002年6月28日 優(yōu)先權日2001年7月2日
發(fā)明者T·L·魯卡斯, A·博斯沃思, K·E·瓦斯里克, T L 魯卡斯, 刮炙, 瓦斯里克 申請人:Bea系統(tǒng)公司