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

Xml-機(jī)器人的制作方法

文檔序號:6649331閱讀:1384來源:國知局
專利名稱:Xml-機(jī)器人的制作方法
發(fā)明的領(lǐng)域和背景本發(fā)明涉及到一種用來直接執(zhí)行XML文檔的方法、系統(tǒng)以及裝置,詳見權(quán)利要求1和7-9。
XML-基礎(chǔ)XML被定義為SGML形式的一個子集。簡單地說,XML允許按照所謂標(biāo)注集的方法定義所建立的文檔格式。當(dāng)前的XML既定義了文檔的物理結(jié)構(gòu),又定義了文檔的邏輯結(jié)構(gòu),本發(fā)明核心集中在邏輯結(jié)構(gòu),而在物理結(jié)構(gòu)上使用了預(yù)先已有的方法。從物理結(jié)構(gòu)提煉,使用XML來給出文件類型定義(DTD,document type definition)和XML-文檔。使用一個特殊的DTDT來區(qū)分XML文檔中哪些關(guān)于T有效,哪些無效。簡單的說,所謂DTD T文檔,就是那些與T對應(yīng)有效的文檔。在邏輯方面DTD定義了元素與特征。每一個該類型的文檔(由DTD方法給出的),所包含的元素和特征的定義情況必須是唯一的,而元素的特征和內(nèi)容也必須同DTD相匹配。舉個例子,一個DTD T定義了一個元素A,其內(nèi)容包含元素A的從屬元素X,Y,Z和特征b和c,它在XML里可以被解釋如下<!ELEMENT A(X,Y,Z)><!ATTLIST A b#PCDATAc#PCDATA>在#PCDATA處定義了特征b和c的數(shù)據(jù)類型。上面用DTD T顯示的A文檔現(xiàn)在包含了元素A的實例。一個元素A的實例包含一個起始標(biāo)記符<A...>和一個末尾標(biāo)記符</A>。在起始標(biāo)記符中,特征被賦值,在起始標(biāo)注和末尾標(biāo)注之間,必須給出組成元素的實例。一個T類型文件必須包含如下所示這樣的實例<A b=”string 1”c=”string 2”><X...>...</X><Y...>...</Y><Z...>...</Z></A>其中X,Y和Z實例的準(zhǔn)確格式,由對應(yīng)的DTD T中的元素定義給出。
XML功能的之所以強(qiáng)大,一部分是由于元素組成的定義是允許被遞歸的,為了說明,一些組成可能性被引入并被用來完成上例。在已經(jīng)使用的序列(X,Y,Z)中顯示了,元素X后跟隨著元素Y,元素Y后跟隨著元素Z,如上例所示。另一個重要的組成操作是選擇(X|Y|Z),它表示對元素X,Y或Z中的一個選擇。其他的操作包括+和*操作,表示一個組件的循環(huán)。然而,他們在例子并沒有被使用。假設(shè)Y和Z沒有組件(<!ELEMENTY><!ELEMENT Z>),DTDA是通過對X的定義完成的,在這里就使用了對組件的選擇和對元素A的遞歸<!ELEMENTX(Y|A)>。這樣X就是Y或者是A。而A類型可能的文檔就變成現(xiàn)在這樣<A b=”..”c=”..”><Y></Y><Y></Y><Z></Z></A><A b=”..”c=”..”><Y></Y><Y></Y><Y></Y><Z></Z></A><A b=”..”c=”..”><Y></Y><Y></Y><Y></Y><Y></Y><Z></Z></A><A b=”..”c=”..”><Y></Y><Y></Y><Y></Y><Y></Y><Y></Y><Z></Z></A>直到<Y></Y>的無限多次循環(huán)。簡單地說,沒有特殊的組件操作像+和*一樣用于上面的循環(huán)。<Y></Y>可簡寫為</Y>。
XML是長期標(biāo)準(zhǔn)化的結(jié)果,它現(xiàn)在已被廣泛的使用和接受。其現(xiàn)存的應(yīng)用,按照當(dāng)前的技術(shù),可以被分成兩個不同的基礎(chǔ)類型數(shù)據(jù)交換和文檔發(fā)布。在數(shù)據(jù)交換應(yīng)用中,XML被用來定義數(shù)據(jù)格式,以便在兩個程序之間交換復(fù)雜的數(shù)據(jù)。此外,在一個相關(guān)聯(lián)數(shù)據(jù)庫系統(tǒng)中,XML還被用來作為存儲數(shù)據(jù)的交換格式。這樣的例子包括XML-data(Microsoft),MCF(Netscape),和RDF(WBC)的格式。在文檔發(fā)布應(yīng)用中,XML是一種理想的數(shù)據(jù)語言,可以用來構(gòu)建所有種類的文檔格式。主要的思想是將文檔的邏輯內(nèi)容放入一個XML-文檔,并將其一般性規(guī)劃信息傳給DTD。這種一般規(guī)劃性語言的例子包括CSS或XSL。其一般性規(guī)劃的輸出可以分別通過HTTP,SPDL,或者Postscript方式。XML處理現(xiàn)存的軟件和應(yīng)用程序正使用XML來表示數(shù)據(jù)和文檔,這些文檔和數(shù)據(jù)隨后被一般目的性編程語言處理?,F(xiàn)有的處理XML-文檔的方案可以分為事件驅(qū)動和樹操作技術(shù),這與它是否應(yīng)用于數(shù)據(jù)交換領(lǐng)域或是文檔發(fā)布領(lǐng)域無關(guān)。在一個事件驅(qū)動的方法中,文檔按嚴(yán)格的次序被處理。數(shù)據(jù)流中的每一個元素都被當(dāng)成是一個事件觸發(fā)器,它會觸發(fā)在應(yīng)用程序中某個部分的某個特定行動。SAX的應(yīng)用程序接口(API,application programmerinterface)可以被用來在現(xiàn)有的編程語言中實現(xiàn)事件驅(qū)動。樹的應(yīng)用是通過訪問一個結(jié)構(gòu)樹的形式訪問完整的文檔?;旧蟈ML-文檔的元素就是樹的節(jié)點。每個元素的組件就是該節(jié)點的子節(jié)點。常被用來訪問這樣的樹的API是DOM。使用API的不利之處在于,形成了普通用途編程的所有復(fù)雜性,尤其是系統(tǒng)和平臺的依賴性、可靠性和安全性而導(dǎo)致軟件的龐大與復(fù)雜。一些XML工具通過為數(shù)據(jù)交換或文檔發(fā)布生成專用代碼來掩蓋這種復(fù)雜性。盡管它們能夠幫助在傳統(tǒng)編程語言中很容易的生成一個程序模式,但它們并沒有完全從對明確的程序的使用中抽象出來,來引導(dǎo)必須被處理的文件。XML對比傳統(tǒng)性編程與傳統(tǒng)結(jié)構(gòu)概念相聯(lián)系的一個重點正如面向?qū)ο蟮某绦蛟O(shè)計方法一樣。兩種方法使用的都是未結(jié)構(gòu)化的數(shù)據(jù)源,這可以理解為這樣的數(shù)據(jù)沒有按某個生成規(guī)則給出,比如使用定義的程序結(jié)構(gòu)的XML或是BNF規(guī)則的元素定義。這樣的數(shù)據(jù)源,在傳統(tǒng)編程的情況下,用于與一個結(jié)構(gòu)相關(guān)聯(lián),但是卻又獨立于程序。另一方面,面向?qū)ο蟮某绦蛟O(shè)計方法結(jié)合了含有數(shù)據(jù)目標(biāo)的結(jié)構(gòu)化程序代碼段。但是目標(biāo)空間(數(shù)據(jù))沒有被結(jié)構(gòu)化在上述的程序中。這樣,當(dāng)然有可能使用與這些方法相關(guān)聯(lián)的結(jié)構(gòu)化數(shù)據(jù)模型。但是,在另一種情況下,由于程序結(jié)構(gòu)獨立于數(shù)據(jù)結(jié)構(gòu),從而需要進(jìn)行像上面所提到的復(fù)雜的處理。事實上,在當(dāng)前對XML-文檔處理的情況中包含了兩個獨立的結(jié)構(gòu),一個是XML-文檔而另一個是處理它的程序。這種應(yīng)用主要有兩種不利因素(a)如果一個程序員打算可靠地處理一個DTD在所有情況下的完整結(jié)構(gòu),這樣的代碼將會由于對應(yīng)XML-文檔的不同和任務(wù)的復(fù)雜性而無法完成。(b)處理XML-文檔的程序被典型化設(shè)計為處理某一DTD的所有文檔,從而由于代碼的固有一般特性而增加了程序的復(fù)雜性。
發(fā)明的目的本發(fā)明的目的是建立一種方法、系統(tǒng)和裝置,通過將數(shù)據(jù)和軟件合并到一個整體結(jié)構(gòu)中,來改進(jìn)對XML-文檔的處理,從而減少或避免復(fù)雜性、和/或在數(shù)據(jù)處理中對編程基本知識的要求以及對現(xiàn)存XML-文檔的再使用。
本發(fā)明的另一個目的是提供一種新的并且是全面的方法、系統(tǒng)和裝置來為XML-文檔生成這種整體化的數(shù)據(jù)和軟件結(jié)構(gòu)。本發(fā)明更進(jìn)一步的另一個目的是提供一種新穎的方法、系統(tǒng)和裝置來直接執(zhí)行標(biāo)準(zhǔn)化文檔結(jié)構(gòu),比如說,XML-文檔。發(fā)明概述本發(fā)明對上述問題的解決在權(quán)利要求1和7-9中有詳細(xì)解釋。
本發(fā)明的思想是基于一種新的方法/系統(tǒng),在一對并列的整體結(jié)構(gòu)中使用執(zhí)行軟件和數(shù)據(jù)。當(dāng)前本發(fā)明可能會被當(dāng)作是一種應(yīng)用程序,但是并不屬于上面所提到的應(yīng)用范疇,如程序交換或是文檔發(fā)布。與這些現(xiàn)存的應(yīng)用程序?qū)Ρ?,本發(fā)明提供了一種方法和裝置直接執(zhí)行(或是處理)一個XML-文檔。
當(dāng)前,發(fā)明再使用了現(xiàn)存的XML-文檔結(jié)構(gòu)從而避免了使用一個新的結(jié)構(gòu)和編程概念來處理上述文檔。在本發(fā)明的創(chuàng)造性方法中,為每一個文檔定義了一個程序(而不是為每一個DTD定義一個程序)從而大大減少了處理的復(fù)雜性。
直接執(zhí)行XML-文檔的功能,是通過分別定義每一個標(biāo)識符或每一個代碼的特性和作用,并以此來修飾一個已給出的XML-文檔和/或它的文件類型定義(DTD)而實現(xiàn)的。
通過將程序結(jié)構(gòu)合成指定串/并行控制和數(shù)據(jù)流的文本格式和/或圖形化流程圖,來實現(xiàn)這一功能。特別是,它是通過將一個XML-機(jī)器人的實例化結(jié)構(gòu)應(yīng)用于一個特定的XML-文檔的方法來實現(xiàn)的。其結(jié)果是生成一個可執(zhí)行的XML-文檔,其中包含了上述XML-文檔的完整執(zhí)行特征。
本發(fā)明的一個最佳實施例是應(yīng)用了一個獨特而全面性的DTD來具體指定為XML-機(jī)器人模塊使用的模塊結(jié)構(gòu)。通過將XML-機(jī)器人所給出的程序和規(guī)范應(yīng)用于XML-文檔,就可以來處理一個特殊的XML-文檔。從而,通過直接實現(xiàn)XML-文檔的執(zhí)行來將各個模塊合并到上述XML-文檔的結(jié)構(gòu)中。在制作中依靠幾個函數(shù)(初始的)來定義如何接口和如何修改一個給定的XML-文檔。此外,用一個特定的流程圖來定義上述XML-文檔的執(zhí)行過程。這些基本的獨創(chuàng)的定義是完整的。在某種意義上來說,按照本發(fā)明給出的XML-機(jī)器人示例通向直接執(zhí)行。
本發(fā)明的另一個最佳實施例是使用圖像化流程圖(GFC)的方法來提供一個給定的XML-文檔的每一種元素的完整信息。這種GFC定義了分別通過元素和組件的控制流,以及在控制流中執(zhí)行的動作。當(dāng)?shù)竭_(dá)GFC的某一狀態(tài)時,動作被執(zhí)行,數(shù)據(jù)流被發(fā)出。GFC的例子包括流程圖,有限狀態(tài)機(jī)器,狀態(tài)圖,UML狀態(tài)機(jī)器,所有的Petri網(wǎng),UML動作框圖和其他類型的計算機(jī)模型。通過將XML-文檔表示為一個結(jié)構(gòu)樹,本實施例可以用純圖表的方式來定義和解釋,從而為XML-機(jī)器人提供一個先進(jìn)的可視化綜合發(fā)展環(huán)境。另一方面,連續(xù)GFC模型(流程圖,有限狀態(tài)機(jī)器)按狀態(tài)執(zhí)行動作,這種圖像方法可以直接映射成文本格式方法。此外本實施例可以被推廣到一種允許并行(例如允許平行執(zhí)行多重動作)和有向動作(如有限狀態(tài)機(jī)器的轉(zhuǎn)變運動)的模式中去。本實施例中所有這些不同都可以通過使用GFC在方法中被映射出來。
這兩種實施例的特征在于具有一種模塊結(jié)構(gòu),每一個模塊用一個特定標(biāo)記符,如<A...>,來定義所有元素的執(zhí)行特征,以及這些元素組件的執(zhí)行特征,此外通過其他標(biāo)記符,如<B...>,來添加元素所有情況的執(zhí)行特征。一個模塊中的所有信息,無論是文本還是圖像都與一種描述該類元素的實例(<A...>)相關(guān)聯(lián),叫做self元素。在所有方法中,初始值被用來連接外部函數(shù),引導(dǎo)文件/樹結(jié)構(gòu),涉及某一種元素(<A...>)的所有情況以及定義文檔/樹的附加特征,它的定義已經(jīng)在一個純函數(shù)層中被給出了。如果存在一個將被執(zhí)行的XML-文檔的DTD,這個DTD明確提供了元素種類存在的特征,以及那些組件現(xiàn)在是屬于這些類的。從而,這樣的一個DTD就為書寫一個XML-機(jī)器人規(guī)范提供了結(jié)構(gòu)和指導(dǎo)。雖然兩個實施例都不直接依賴于一個的DTD工作,但是還是使用了一個DTD來定義和規(guī)范下面所描述的第一種方法。此外,它必須是一個簡單的,源于一個沒有DTD化的XML-文檔的DTD。
在最佳實施例中,其結(jié)果由動態(tài)創(chuàng)建的和重定義的文檔元素特征/結(jié)構(gòu)樹節(jié)點儲存。另外地,基于事件的模式和純函數(shù)/聲明的模式可能還是最好的。然而,動態(tài)處理信息還是由現(xiàn)存的文檔/結(jié)構(gòu)樹給出更合適。理解這點很重要,即與現(xiàn)存的處理模式相反,XML-文檔或是其結(jié)構(gòu)樹直接被用來當(dāng)作一個作為XML-文檔的執(zhí)行特征定義的GFC(或是一個相應(yīng)的文本格式)的基礎(chǔ)。因此,一個這樣的XML-機(jī)器人就是應(yīng)用XML技術(shù)和處理XML-文檔的基本的新方法。
由于本發(fā)明沒有限定特定的平臺或具體的處理執(zhí)行方式,例如現(xiàn)存的API如SAX和DOM,其中給出的規(guī)范必須是從具體的形式中抽象出來的。然而,使用的原始部分已被定義以便于執(zhí)行。更進(jìn)一步的,本發(fā)明的初始值被定義為任意可執(zhí)行的。而且發(fā)明并不限定特定的編程語言來實現(xiàn)流程圖或?qū)崿F(xiàn)其他的結(jié)構(gòu),比如,是否生成中間媒介形式/結(jié)果,XML-文檔是分別由編譯語言執(zhí)行的,還是解釋語言執(zhí)行的,抑或兩者共同執(zhí)行的。參考附圖對實施例的簡要描述圖1顯示一個名叫“query”的DTD實例圖2顯示一個與圖1所示DTD實例對應(yīng)有效的XML-文檔圖3顯示圖2所示的XML-文檔的樹型結(jié)構(gòu),該文檔被包含在圖一給出的DTD“query”中圖4顯示一個圖像化規(guī)范,與它的對應(yīng)的DTD情況見圖1圖5顯示一個規(guī)范模塊,其中壓縮了圖4左邊關(guān)于“query”元素定義的信息圖6顯示元素“setpoints”和“action”的規(guī)范化模塊圖7顯示每個元素定義的局部GFC是如何包含結(jié)構(gòu)樹中一個元素的每一種情況的。圖8顯示如何實現(xiàn)局部GFC同全球?qū)哟蜧FC的連接圖9顯示定義模塊結(jié)構(gòu)的獨特的DTD圖10-15顯示使用流程圖定義一個給定XML-文檔的執(zhí)行,該文檔使用了與DTD XML-機(jī)器人.dtd對應(yīng)的有效模塊圖16-18顯示圖1所示模塊實例的文本說明圖19a-19b舉例說明一個確定的XML-機(jī)器人規(guī)范是如何執(zhí)行的圖20顯示一種實施例的概述,適合于最佳實施例的基于網(wǎng)絡(luò)的XML-機(jī)器人描述本發(fā)明的最佳實施例在下文涉及的


中將詳述。
本發(fā)明實現(xiàn)了一個XML-文檔的直接執(zhí)行。接下來的實施例中描述了對其手段,系統(tǒng)和工具的圖像和文字實現(xiàn)。雖然后面的例子是關(guān)于一個已知DTD的XML-文檔的,但是必須理解的一點是,出于考慮到某些不利之處,如不明確的結(jié)果,本發(fā)明允許在未知DTD的情況下處理XML-文檔。無論何種DTD(如果預(yù)先知道)或是XML-文檔都被直接合并成XML-機(jī)器人規(guī)范(對DTD或XML-文檔的“修飾”)。如上面所描述的,本發(fā)明是基本上獨立于具體的媒介(平臺,編程語言,結(jié)構(gòu)化形式如存儲和處理)的。然而,在需要的地方,最佳實施例使用了下面所描述的確定的媒介。
參考圖1至8介紹本發(fā)明的第一圖示實施例。
圖1顯示一個DTD例子的元素query,它包含三個組件,兩個是動作類型而一個是query類型的可選擇組件。元素query的特征清單包含一個特征問題,一個必需的特征數(shù)據(jù)。元素的行動由元素setpoint或query確定。元素setpoint沒有組件只是個單一特征點。
圖2顯示了一個與圖1中的DTD例子對應(yīng)的有效文檔,在圖1中可查到這個叫做“query.dtd”的DTD。這個實例提供了一個實例文檔,用于在下文中進(jìn)行更深入的表述。
圖3顯示了一個與圖2文檔相對應(yīng)的可能的特征結(jié)構(gòu)樹畫法。這樣一個特征結(jié)構(gòu)樹是對XML-文檔的一種選擇性圖像表述。節(jié)點1和3是元素query的實例。它們有兩個必需的子行動即s1-行動和s2-行動,而對query子行動并沒有進(jìn)行選擇。如果要對一個query的子節(jié)點進(jìn)行選擇,即用到S-query。節(jié)點2,4和5是元素setpoint的實例,它沒有子節(jié)點。在方框中可見它的特征和數(shù)值。
圖4顯示了一個DTD的執(zhí)行規(guī)范和DTD實例的執(zhí)行之間的關(guān)系。規(guī)格包括純粹的DTD定義和最合適的圖像化流程圖(GFC),以及到達(dá)流程圖某一狀態(tài)所觸發(fā)的動作。左邊的方框顯示了一個DTD執(zhí)行規(guī)范,它被結(jié)構(gòu)化成純DTD組件,圖像化流程圖定義(形象描述)和轉(zhuǎn)換規(guī)則。后者在控制流通過圖表的時候被激活。作為一種選擇,同樣的規(guī)范可以應(yīng)用于沒有DTD的XML-文檔的元素實例。
右邊的方框中圖解了這個結(jié)構(gòu)是如何代表XML-文檔的直接執(zhí)行的。DTD如果存在的話,就被用來驗證XML-文檔。一個特征結(jié)構(gòu)樹(AST)被建立。GFC被用來修飾這個AST,從而生成一個整體流程圖對應(yīng)于分解的XML-文檔。文檔的執(zhí)行是通過執(zhí)行GFC完成的,例如,與GFC特定狀態(tài)相關(guān)的動作觸發(fā)和伴隨GFC狀況的控制流處理。
一個完整的執(zhí)行規(guī)范被結(jié)構(gòu)化成許多規(guī)范模塊。每一個規(guī)范模塊對應(yīng)于一個描述元素執(zhí)行特征的元素聲明,和附加的該元素組件的執(zhí)行特征以及其他元素類的實例。
圖5給出了一個例子,顯示了圖1中query元素的規(guī)范模塊。模塊最上面的部分包含了相關(guān)的元素和特征定義。中間部分給出了一個GFC段,它指定了元素query實例的執(zhí)行特性。GFC段用圖像表述的最佳方法給出。最后,在圖5的底部顯示的是轉(zhuǎn)換規(guī)則。
現(xiàn)在詳細(xì)說明一下在圖4和圖5中涉及的,對圖1DTD示例的最佳圖像表示方法。例子描述了伴隨連續(xù)控制的GFC,與有限狀態(tài)機(jī),狀態(tài)圖,正規(guī)流程圖,或UML狀態(tài)機(jī)相似。分散的GFC工作程序同Petr1網(wǎng)的變量,或UML動態(tài)圖表類似。在這種方法中一個XML-文檔的執(zhí)行特征,由一個連續(xù)的,其狀態(tài)與動作相關(guān)聯(lián)的圖像化流程圖給出。在選擇性實施例中,GFC的箭頭可以代表動作。在當(dāng)前示例的實施例中,處于GFC的任意狀態(tài)下,當(dāng)一種狀態(tài)轉(zhuǎn)變成下一種狀態(tài)時,相應(yīng)的行動就會被實施。同其他的基于狀態(tài)的形式體系中(如Harel’s狀態(tài)圖)相似,當(dāng)前的GFC控制箭頭可以用布爾變量標(biāo)志,它被用以監(jiān)測控制流來確定標(biāo)注為何被省略。一個沒有標(biāo)注的控制箭頭有其缺省特征,例如,如果從箭頭源中引出的其他箭頭都沒有被設(shè)為真,那么無標(biāo)注的箭頭就為真。
一個如圖4左邊所示的DTD特征規(guī)范中包含三個部分DTD的自身定義,一個代表GFC的可視化的符號,以及動作規(guī)范。另外可能還有一個在制作前計算附加特性的規(guī)范,它可能以函數(shù)形式給出。還有安全條件,由DTD和附加導(dǎo)出特征規(guī)范做出的特征定義給出。DTD被用來生成一個剖析算法,然后按照規(guī)范的方法將被剖析的XML-文檔繪制成一個AST。規(guī)范的第二部分描述了與GFC狀態(tài)轉(zhuǎn)變相關(guān)的控制流。關(guān)于DTD聲明中每一個元素的圖像化描述,定義了一個局部GFC,并進(jìn)而指定了該GFC如何通過一個AST修飾嵌入到全局GFC中去。這一部分的最后,AST的每一個節(jié)點都被一個GFC段復(fù)本的圖像說明所修飾。一個節(jié)點的子部分引用,定義了一個全局GFC的相應(yīng)結(jié)構(gòu),在下面(如圖7和8)解釋了它的執(zhí)行。最后一部分包含轉(zhuǎn)換規(guī)則,指定在文檔執(zhí)行過程中的動作的觸發(fā)。GFC的任何一個狀態(tài)都同一個轉(zhuǎn)換規(guī)則對應(yīng),當(dāng)?shù)竭_(dá)這一狀態(tài)時,就會套用該規(guī)則。GFC的轉(zhuǎn)化是有條件的,其條件是從AST節(jié)點中建立的。
圖5的GFC包含了一個圓形節(jié)點,它代表名叫“ask”的狀態(tài)。如果到達(dá)這個狀態(tài),在模塊中最下面所示的相應(yīng)的行動就會被觸發(fā)。之后,控制信息將會流向標(biāo)有S1-action的框圖或是標(biāo)有S2-action的框圖,具體流向由箭頭上標(biāo)注的條件決定??驁D表示了對應(yīng)于子節(jié)點的GFC,這些子節(jié)點由標(biāo)簽引用。I和T箭頭表示控制流的入口和出口。
在第一實施例中,像后者所描述的一樣,I和T被看作是一種標(biāo)準(zhǔn)狀態(tài)叫做“起點initial”和“終點terminal”。此外,進(jìn)入框圖的箭頭必須被明確指向框圖的“initial”狀態(tài),而離開框圖的箭頭必須從框圖的“terminal”狀態(tài)離開。聯(lián)系圖1至8,用文本格式表示GFC,這樣的對應(yīng)關(guān)系就很容易理解。
圖6顯示了圖1中的DTD示例的模塊action和setpoint的規(guī)范。Action就是在setpoint和query中做選擇,從而它繼承了這些元素定義的GFC定義。setpoint元素模塊引入了一個僅包含一個狀態(tài)的微型GFC,它的響應(yīng)動作就是增加一個點計數(shù)器的值,具體增加的數(shù)值是由特征點給出的。
如注釋,每個規(guī)范模塊中的可視化符號包含了的局部GFC的信息,該GFC是同AST的每個節(jié)點相對應(yīng)的,而該AST是與規(guī)范模塊,以及將這個GFC嵌入到對應(yīng)輸入文檔的全局GFC中所需的信息相對應(yīng)的。
圖7顯示了來源于每個圖像化表述的圖像化片段是怎樣與示例文件的AST節(jié)點建立連接的。并且舉例說明,通過將圖5和圖6所示的GFC同AST相應(yīng)的節(jié)點相匹配,一個全局GFC是如何被一個AST所包含的。一個中間包含了模塊query(如圖5)的GFC片段的兩個實例,和模塊setpoint(如圖6)的微型GFC片段的3個實例。本圖再次用圖像表示法顯示了對每個AST節(jié)點的修飾。這種圖像修飾可以更好的獲得控制流。然而,必須理解的是,本發(fā)明也可以應(yīng)用于其他情況,即用文本程序指令或其他手段來取代本例中的用圖像化流程圖所獲得的控制流和動作觸發(fā)。
圖8顯示了一個由這些片段相互嵌套形成的分級GFC。圖7中的GFC片段包含了引用子節(jié)點的框圖,通過分解這些引用來完成嵌套。
在接下來的說明書中,將對用于控制流的可視化符號,給出一個更詳細(xì)解釋。在說明書模塊中使用的圖像化符號的含義可以被表述如下有兩種節(jié)點橢圓框和方框。橢圓框表示GFC的一般狀態(tài)。同時他們還標(biāo)有一個動作名,該動作(由轉(zhuǎn)化規(guī)則指定)在到達(dá)該狀態(tài)時被激發(fā)。方框圖對應(yīng)特殊的狀態(tài),這些狀態(tài)自身就是GFC。另外方框還同AST節(jié)點相對應(yīng)。這種GFC中的特殊狀態(tài)和AST中的節(jié)點之間直接的一一對應(yīng)關(guān)系是,AST結(jié)構(gòu)和執(zhí)行特征結(jié)構(gòu)的標(biāo)識的詳細(xì)方法。當(dāng)然,被描述的方框的用途,對它們的組件的引用以及結(jié)構(gòu)之間一一對應(yīng)的關(guān)系,都是獨立于GFC,流條件以及行動的具體構(gòu)成的。
方框圖就是GFC,它對應(yīng)著元素定義右邊的組件。這些GFC的定義是由分別對應(yīng)各個元素的說明模塊給出的。箭頭指向生成的GFC的分級狀態(tài)轉(zhuǎn)化圖框的邊緣。箭頭的來源和目標(biāo)可以是橢圓框或方框。除此以外,還有兩個箭頭,一個的來源被標(biāo)志為I(作為起點),它的目標(biāo)是一個方框或一個橢圓框,另一個的目標(biāo)被標(biāo)志為T(作為終點),它的來源是一個方框或橢圓框。標(biāo)志有I的箭頭代表局部GFC的輸入端,標(biāo)志有T的箭頭代表其輸出端。一個向GFC特殊狀態(tài)的轉(zhuǎn)變引發(fā)了一個輸入,進(jìn)入這個特殊狀態(tài)的GFC的第一個狀態(tài)(由箭頭I標(biāo)志)。在每個規(guī)范模塊的可視化描述中,方框是對相應(yīng)的GFC的引用。對圖7所示的被修飾的文檔例子的引用進(jìn)行分解,生成了如圖8所示的GFC。所生成的這個分級GFC給出了XML-文檔的執(zhí)行特征,并且該分級GFC的直接執(zhí)行是可能的,從而允許直接執(zhí)行XML-文檔。直接執(zhí)行XML-文檔的能力并不依賴于特定的,在最佳實施例所顯示的那一類GFC,任意形式的GFC都適用。
在例子所示的GFC的形式中,就像在狀態(tài)圖中,從初始狀態(tài)進(jìn)入一個分級狀態(tài),由一個箭頭I來表示。如果到達(dá)末狀態(tài)(由輸出箭頭T標(biāo)志),那么就實現(xiàn)了向一個高一級狀態(tài)的轉(zhuǎn)化。
這樣一個如圖8所示的分級GFC的工作如下。控制進(jìn)入結(jié)構(gòu)樹的根部,例如,節(jié)點1。相應(yīng)的GFC的初始狀態(tài)就是節(jié)點1中的詢問狀態(tài)。這個節(jié)點中的問題是“Is Paris the Capital of France?”。在觸發(fā)了詢問行動之后,就要給出回答“是”或“否”。如果回答等于“是”,控制沿著上面一條控制箭頭離開詢問狀態(tài),進(jìn)入特殊狀態(tài)2。特殊狀態(tài)2的起始狀態(tài)和末端狀態(tài)是固定動作。當(dāng)執(zhí)行了固定動作之后,離開特殊狀態(tài)2,訪問子節(jié)點(任意的,事實上不存在的)S-query,并不觸發(fā)任何動作,就離開了特殊狀態(tài)1。如果在特殊狀態(tài)1的詢問狀態(tài)中回答“否”,就進(jìn)入了特殊狀態(tài)3,特殊狀態(tài)3的初始詢問狀態(tài)被訪問。這次提出的問題是“Are you sure?”。如果答案堅持“是”,點計數(shù)器就被置為0,反之則置為1(特殊狀態(tài)4和5)。
在發(fā)明的最佳實施例中,使用數(shù)據(jù)塊的方法來處理上述狀態(tài)。動作的轉(zhuǎn)化規(guī)則重新定義了這些數(shù)據(jù)塊中每一點的內(nèi)容。通過假設(shè)一個必要的編程系統(tǒng)的簡單模型,將有助于更好的理解它。系統(tǒng)狀態(tài)由一個多維數(shù)據(jù)庫給出。數(shù)據(jù)庫包含了n-維塊。一個n-維塊f的內(nèi)容可以從下面的條件f(t1;:::;tn)讀出,其中t1;:::;tn是建立在數(shù)據(jù)庫塊基礎(chǔ)上的條件。一個一般變量對應(yīng)一個0-維塊,反之一個列和記錄集可以被模型化成1-維塊。
可能儲存在塊中的數(shù)值會包含很多常見的數(shù)據(jù)類型像整型、實型、布爾變量或其他在一個特定應(yīng)用中需要的類型,例如結(jié)構(gòu)樹節(jié)點或動態(tài)生成的對象。結(jié)構(gòu)樹節(jié)點的特征被模型化成一維塊,而節(jié)點n中特征a的值可以通過條件a(n)得到。為了方便,在特征語法和面向?qū)ο蟮某绦蛑惺褂昧它c這個符號,例如用n.a來替代a(n)使用。
舉個例子,一個基本的更新規(guī)則的形式如f(t1;:::;tn)=v,其中f(t1;:::;tn)和v都是基于系統(tǒng)中塊建立的條件。這個規(guī)則的含義是通過對v進(jìn)行調(diào)整,來更新塊f。規(guī)則可以由串接或是并列的方式組成,以便于一次執(zhí)行完相應(yīng)的更新。除了上面提到的基本轉(zhuǎn)化規(guī)則之外,還可以存在其它的轉(zhuǎn)化規(guī)則,例如依靠布爾變量的條件來激活的條件化規(guī)則,允許對所有某一類元素使用同樣的規(guī)則的全局有效規(guī)則,允許從一類元素中選擇其中的一個的選擇性規(guī)則,而最后是用來引入新的元素的擴(kuò)展規(guī)則。轉(zhuǎn)化規(guī)則是在這些規(guī)則之上遞歸建立的。
下面詳述轉(zhuǎn)換規(guī)則的執(zhí)行過程,依然是引用圖8。用圖5和圖6的圖像化表述中的動作規(guī)則來描述簡單程序的執(zhí)行是可能的。初始狀態(tài)是一個被標(biāo)志為動作ask的簡單狀態(tài),它的入口在屬于AST根節(jié)點的圖像片段中,由箭頭I標(biāo)出。詢問動作在前面所提到的query-模塊(如圖3)中指定,其結(jié)果是將問題打印出來,可用的特征問題是“Is Paris the Capital ofFrance?”。然后獲取一個用戶輸入(例如get(stdin))并將特征答案作為輸入。這個動作之后規(guī)則就被執(zhí)行了,從這個狀態(tài)出發(fā)的輸出箭頭情況被確定。從詢問狀態(tài)引出兩個箭頭,一個標(biāo)志著條件答案=“是”,另一個標(biāo)志著條件答案=“否”。根據(jù)答案的值選擇相應(yīng)的箭頭,通向特殊狀態(tài)節(jié)點2,或是特殊狀態(tài)節(jié)點3。假定答案是“否”,那么就要沿著下面的箭頭,進(jìn)入特殊狀態(tài)3。因為這是一個特殊狀態(tài),它導(dǎo)致一系列的轉(zhuǎn)化,這些轉(zhuǎn)化是沿著組成該特殊狀態(tài)的流程圖進(jìn)行的。在這種情況下,進(jìn)入這個特殊狀態(tài)的初始狀態(tài)還是一個用橢圓表示的簡單狀態(tài),它也再一次被標(biāo)志為動作ask。這一次打印出來的特征問題是“Are you sure?”,根據(jù)用戶的答案的不同,接下來將緊跟著節(jié)點4或節(jié)點5。這些節(jié)點就是特殊狀態(tài),它包含一個被標(biāo)志為動作set的單一狀態(tài)。該動作把由得分特征確定的得分值添加到0-維塊中去。這樣,在初始問題中回答“是”的用戶得到10分,一個先回答“否”,又選擇了“是”的用戶得0分,第一次回答“否”而第二次回答“否”的用戶得1分。按照生成的GFC結(jié)構(gòu),第一次回答了“是”的用戶就不會被問及第二個問題。
更抽象一些,一個XML-文檔被執(zhí)行,是通過像上面敘述的那樣,通過生成它的GFC,然后從它的根元素的初始狀態(tài)(或同時執(zhí)行的狀態(tài))開始。初始狀態(tài)是在特殊狀態(tài)的入口,對應(yīng)文檔的根部,順著箭頭I。如果箭頭I指向一個普通的狀態(tài),就進(jìn)入這個狀態(tài),否則就沿著箭頭I按遞歸原則向下走。如果初始狀態(tài)被進(jìn)入,那么它的動作就被觸發(fā)。然后評估流出控制箭頭上的條件,選擇符合條件的一個箭頭(或同一情況的多個箭頭)。如果該箭頭指向一個一般狀態(tài),該狀態(tài)被執(zhí)行,程序被重復(fù)。如果箭頭指向一個特殊狀態(tài),沿I-箭頭遞歸向下,至下一個狀態(tài)執(zhí)行,程序被重復(fù)。如果箭頭是一個T箭頭,那么退出特殊狀態(tài),選擇一個擁有合適條件的特殊狀態(tài)輸出箭頭。然后像上文所描述的那樣沿該箭頭進(jìn)行下去。
這樣,一個XML-元素定義的動作組成,可通過圖像化和/或文本化的,連續(xù)或并行的控制和/或數(shù)據(jù)流程圖來表述。特殊的文本化和/或圖像化方法被用來代表XML-元素定義的組件,允許組件動作同步或不同步執(zhí)行,以便于由每個元素定義中的組件給出的文檔結(jié)構(gòu),在由組件動作的觸發(fā)給出執(zhí)行結(jié)構(gòu)中能被直接再使用。此外,特殊的、被用來定義動作成分的連續(xù)或并行的執(zhí)行順序的圖像化和/或文本化方法,和用來保證指定順序的執(zhí)行路徑的條件一起給出。這些特殊的圖像化和/或文本化方法可能被包含在條件和行動的定義中,或定義合并行動的節(jié)點引用中,用來引用它的組件,和引用它的特征,組件和特征由XML-特征定義給出。
參考圖9到18為對本發(fā)明第二文本實施例的描述。
圖9顯示了發(fā)明中表示XML-文檔執(zhí)行特征的XML-機(jī)器人模塊的特殊而全面的DTD。在下文圖9ff的引用中,對一個用文本實現(xiàn)發(fā)明的實施例進(jìn)行了更詳細(xì)的描述。為了描述圖9ff,所必需的語法和主要的函數(shù)將首先在下面被定義和解釋。下面的定義其重點集中于文本化(基于文本的)實現(xiàn)。
一個要被執(zhí)行的XML-文檔名叫“doc.xml”,而XML-機(jī)器人由文檔所定義,如果元素名為X,給出的文件名就為“moduleX.xml”的。此外,假定所有這些文件可以被圖10ff所示的流程圖隨意替換,來解釋doc.xml的執(zhí)行。執(zhí)行的狀態(tài)內(nèi)包含了上面提及的文檔,以及十一個全局變量,分別命名為cur,mod,state,derived,subcur,submod,curstate,action,trans,src,和trg。通過新建和重定義特征,通過將元素狀態(tài)模塊傳送到文檔“doc.xml”中去,執(zhí)行改變了上述給出的文檔。此外在執(zhí)行中重定義(更新)全局變量的值。例如,如果在當(dāng)前執(zhí)行狀態(tài)中,變量cur的值為v1,執(zhí)行更新cur=v2的結(jié)果就是進(jìn)入了一個新狀態(tài),在該狀態(tài)中變量cur的值為v2。在前面的定義中,全局變量的值在XML-文檔中或由undef中給出。
前面所描述的標(biāo)準(zhǔn)化結(jié)構(gòu)被用來處理XML-文檔,其中的元素的起始和末尾的標(biāo)注形式如<A...>...</A>。元素的引用即文檔中的指示器。引用的實現(xiàn),可以通過(a)使用文本定位(如果過多的文本被粘貼到文檔中將會促進(jìn)它們的更新),(b)在XML-鏈接定義中現(xiàn)存的引用機(jī)制,(c)指向在XML-結(jié)構(gòu)樹的一個目標(biāo)模型中的目標(biāo)的指示器,如DOM,或是在使用GFC的實施例中描述的樹。
為了更好的理解執(zhí)行過程,重點將集中于上述元素的特征。舉個例子,一個元素A的特征aa通過如下語句賦值為“13”<A aa=“13”>...</A>。為了讀出特征值,給出了一個函數(shù)evalAttr(_,_),有兩個變量,分別代表一個元素名和一個特征名,并返回一個特征的值。假設(shè)doc.xml包含上述元素A,r是這個元素的引用,條件evalAttr(r,“aa”)被賦值為“13”。語句“r.evalAttr(“aa”)”,同evalAttr(r,“aa”)等價,其他動作的類似語法也被用于圖10ff中,以方便描述。
在下面這一段中描述的XML-文檔的執(zhí)行,需要動態(tài)更新和/或創(chuàng)建的特征。這樣,就給出了一個函數(shù)setAttr(_,_,_),它包含3個變量第一個是一個元素的引用,第二個是一個特征名,第三個是要被更新(新建)的新的(初始的)特征值。例如,動作r.setAttr(“aa”,“15”)將文檔doc.xml中,上述被r引用的元素A,變?yōu)樾稳?amp;lt;A aa=“15”>...</A>。一個動作r.setAttr(“bb”,“7”)變換文檔doc.xml中r所引用的元素為形如<A aa=“15”bb=“7”>...</A>。如果這兩個動作被按任一次序觸發(fā),其結(jié)果都是使r所引用的元素形式變?yōu)?amp;lt;A aa=“15”bb=“7”>...</A>。在這一方法中,被引用的元素是物理文檔的一部分,如doc.xml。對上述元素的變換將造成XML-文檔的破壞性的、不可逆的變化。
此外,除了XML中存在的標(biāo)準(zhǔn)值v以外,像字符串和數(shù)字,特征還可以通過引用文檔中(其他)的元素來賦值,例如,在上面例子中的引用r。正如所提到的,這樣的引用可以通過不同的方式來實現(xiàn),動作r1.setAttr(a,v)的執(zhí)行使得條件r1.evalAttr(a)的狀態(tài)值被定為v,直到另一個動作r1.setAttr(a,v’)被觸發(fā),它基于同一個元素,同一個特征,但有不同的值v’。
動作“Pasteinside”被用來把文本粘貼進(jìn)一個XML-文檔。它有兩個變量,第一個代表一個元素,而第二個是要被粘貼的文本。文本被粘貼在指定元素的起始標(biāo)注之后。再次使用引用r,動作r.Pasteinside(“textsample”)將doc.xml中元素A的引用變換成了如下形式<A aa=“13”>textsample...</A>
動作“Copy”被用來在引用中添加一個字符串。再次使用指向doc.xml中元素A的引用r這個例子,條件r.copy定義字符串為“<A aa=13>...</A>”,它與元素引用的語法相同,但物理結(jié)構(gòu)不同。如果這個元素被復(fù)制,元素特征保持不變,但被復(fù)制元素的引用僅指向復(fù)制源。
上述動作Pasteinside和Copy被用來從一個文檔中復(fù)制一部分到另一個文檔。給出兩個文檔doc1.XML<A>
<B><A></A>
</B>
</A>doc2.XML<C>
<D><C a=””12””b=””2””>
<D></D>
</C>
</D>
</C>和引用r1指向文檔doc1.XML的元素B。r2指向doc2.XML的內(nèi)部元素C,動作r1.pasteinside(r2.copy)導(dǎo)致了一種變換doc1.XML<A>
<B><A></A>
<C a=”12”b=”2”>
<D></D>
</C>
</B>
</A>doc2.XML保持不變。元素C的特征被r2引用,是復(fù)制的,但是在doc2.XML中的引用沒有改變。
給出一個物理文檔,例如,文件doc.xml(或者模塊XYZ.xml的一個文件),條件getRef(“doc.xml”)得到一個對文件根部的引用,例如,最外一層的一對開始/結(jié)束標(biāo)注符。此外,條件r.getLabel得到被r引用的元素的名稱。在上面的關(guān)于doc1.XML和doc2.XML的例子中,r1.getLabel得到了“B”而r2.getLabel得到了“C”。
XML-文檔內(nèi)的定位用函數(shù)getFirst(_,_),getNext(_),和parent(_)。這3個函數(shù)的第一個變量是一個由引用r給出的XML-文檔中的一個內(nèi)部元素的引用,例如,r.getFirst(″A″)為在r的開始和結(jié)束標(biāo)注之間的第一個直系元素引用定值。沒有考慮嵌套的情況。在doc1.XML和doc2.XML的例子中,引用r1可以通過使用條件函數(shù)getRef(″doc1.XML″)獲得,引用r2可以通過使用條件函數(shù)getRef(“doc2.XML”)獲得。
如果沒有所要求名字的元素,getFirst會按undef確定。此外getRef并不涉及嵌套的元素。在上面的例子中,getRef(doc1.XML).getFirst(″A″)并沒有得到在內(nèi)部A元素的引用,而是得到undef中的定義。為了得到內(nèi)部A元素的引用,必須使用getRef(doc1.XML).getFirst(“B”).getFirst(“A”)。
如果存在這樣一個元素的話,函數(shù)getNext(_,_)返回下一個有同樣標(biāo)記的元素的引用,否則就返回undef。下面給出一個XML-片段的引用。<A>
<B x=”1”></B>
<B x=”2”><B x=”3”></B></B>
<b x=”4”></B></A>引用r.getFirst(”B”)取出B-元素的x=”1”,引用r.getFirst(”B”).getNext取出B-元素的x=”2”,引用r.getFirst(”B”).getNext.getNext取出B-元素的x=”4”,為了取出B-元素中的x=”3”,就必須寫成r.getFirst(”B”).getNext..getFirst(”B”)。
函數(shù)“parent”對一個元素的引用映射到最小封閉元素的引用。在doc1.XML和doc.XML的例子中,r1.parent=getRef(“doc1.XML”)而rl.parent=getRef(“doc1.XML”)。
函數(shù)“<CopyList(_,_)”的第一個變量是一個引用,第二個變量是一個元素名。r.CopyList(a)將r中所有直屬的(不是嵌套的)元素A集合成一個字符串。因此,在上面所舉的getNext例子段中,r.CopyList生成了一個字符串“<B x=”1”></B><B x=”2”><B x=”3”><</B></B><B x=”4”></B>”,包含3個B元素,其中第二個包含了一個相同的而嵌套的B元素。
最后給出的是函數(shù)traverse。從根部的說明開始,traverse按某種順序列舉了文檔中所有的元素。
現(xiàn)在,在圖9中,定義DTD的模塊。這個DTD中的元素在下面逐一被解釋。有代表性的是,模塊是由不同的模塊文件給出。當(dāng)然,DTD必須由唯一的根元素來完成。然而,一個有所有模塊清單的完整語言可以被一個DTD包含。最上端的模塊元素就是這些模塊文件的根部。
一個模塊的組件包括一個導(dǎo)出特征清單,一個選擇表達(dá)式,一個狀態(tài)清單和一個模塊清單(下級模塊)。名字特征告訴元素哪個模塊是可用的。定義是基于假設(shè)在當(dāng)前被處理文檔中有一個元素“X”,這樣的XML-文檔名為“moduleX.xml”,它的根元素是一個“module”元素,上述根元素有一個“name”特征,它的值是“X”。
<!element module(derived*,expression?,state*,module*)>
<!attlist module name CDATA#REQUIREDnumber CDATA“1”>
導(dǎo)出特征的清單中包含特征定義,這些特征定義由調(diào)用其他特征定義的函數(shù)給出。選擇表達(dá)式給出一個安全條件,該條件必須在該一個元素的每一種情況中實現(xiàn)。狀態(tài)清單指的是這樣一個元素的每一種情況的(非嵌套的)狀態(tài)。最后,模塊清單指向元素的每一個模塊,其中的每一個下級模塊都包含狀態(tài)和更下一級的模塊。對下級模塊而言,其數(shù)字特征表示它代表那一種情況。如果它代表第一種情況,數(shù)字值就定為“1”,等等。如果它代表所有情況,數(shù)字值就定為“all”。
<!element derived(argument*,expression)>
<!attlist derived name CDATA>
<!element argument EMPTY>
<!attlist argument name CDATA>
一個導(dǎo)出特征定義由兩個部分組成變量,在定義和當(dāng)前的定義中用到的,由表達(dá)式的形式給出;名字特征,給出了導(dǎo)出特征名。一個導(dǎo)出特征通過確定變量值和給定義表達(dá)式賦值來確定其屬性。
一個狀態(tài)的組件包含一個動作清單,如果到達(dá)該狀態(tài)就被觸發(fā);和一個從該狀態(tài)出發(fā)的轉(zhuǎn)化清單。狀態(tài)名被用來作為某些轉(zhuǎn)化的目標(biāo)來引用。<!element state(action*,transition)><!attlist state name CDATA>
一個轉(zhuǎn)化有兩個組件,一個是表達(dá)式,用來對轉(zhuǎn)化提供保護(hù);另一個是路徑,用來指示轉(zhuǎn)化的目標(biāo)。所有導(dǎo)出函數(shù)的表達(dá)式,路徑,動作和定義取決于它們的初始端,即模塊的根,也就是在將被執(zhí)行的XML-文檔中它的各個情況。<!element transition(expression,path)>
一個路徑包括一個選擇性組件,和一個特征狀態(tài)。狀態(tài)表示了路徑指向的狀態(tài)的名稱。典型的狀態(tài)如表示初始狀態(tài)的“initial”,和表示結(jié)束狀態(tài)的“terminal”。組件指向被嵌套的組件,特征數(shù)字再一次表示被選擇的實例。如果數(shù)字的值是“all”,路徑就對應(yīng)指向所有實例的路徑集合。<!element path(component?)><!attlist path state CDATA“initial”><!element component(component?)><!attlist component name CDATA #REQUIREDnumber CDATA“1”>表達(dá)式有不同的使用情況,其定義如下<!element expression(path|self|src|trg|evalattr|getfirst|getnext|parent|root|apply|external|constant)>
path被用來表示是對應(yīng)元素而不是對應(yīng)引用路徑的狀態(tài)。Self表示該元素是包含了使用自身的定義的模塊實例。Src如果在動作中使用,表示了包含最后被執(zhí)行的狀態(tài)的元素;如果在轉(zhuǎn)化中使用,表示包含轉(zhuǎn)化來源的元素。Trg表示包含轉(zhuǎn)化目標(biāo)的元素。Evalattr,getfirst,getnext,parent表示上面提到的對應(yīng)的主要函數(shù)。root表示被執(zhí)行文件的根部。Apply被用來固定二元的和一元的操作,像數(shù)學(xué)運算(+,-,*,...),布爾量運算(和,或,否,...)和字符串操作(添加,合并,...)。External被用來調(diào)用由任意的編程語言寫成的外部函數(shù)。最后,constant被用來表示常量,像數(shù)字,布爾量和字符串。
在流程圖中,一個抽象函數(shù)evaluate(_)被用來對元素的表述進(jìn)行評估。
如果達(dá)到一種狀態(tài),那么就觸發(fā)動作,且它們具有這種結(jié)構(gòu)<!element action(setAttr|ifthen|forall|external)>
該setAttr動作符合上面所描述的setAttr基元。使用ifthen來執(zhí)行只有滿足某些條件的某些動作,而使用forall來執(zhí)行文檔中某一要素所有狀態(tài)的動作。該external結(jié)構(gòu)再次用來調(diào)用擴(kuò)展函數(shù)。
在流程圖中,使用一個抽象程序execute(_)來執(zhí)行動作要素。
既然定義應(yīng)當(dāng)獨立于表達(dá)式和動作語法的具體選擇而有效,按照圖9所得的DTD使用起始于帶有要素<!element src EMPTY>的第19行的剩余行來完成。
關(guān)于圖10~16,將更加詳細(xì)地解釋一個給定的XML-文檔doc.xml的執(zhí)行。圖10~16顯示六張固定的流程圖F1、F2、F2、F3、F4和F7,它們規(guī)定了執(zhí)行過程。與首選方法的語言環(huán)境中所描述的GFC的執(zhí)行過程相比較,這些流程圖并不依賴于需要執(zhí)行的文檔和機(jī)器人-模塊,但對任何文檔和任何機(jī)器人-模塊來說,都是固定的。每張流程圖引用一個給定的、即將執(zhí)行的XML-文檔doc.xml的一個執(zhí)行邏輯塊。作為獨立的文件moduleX.xml,為每一要素-名稱X提供模塊。使用[Fx.Sy]來引用每一張流程圖Fy的狀態(tài),此處的x表示流程圖的編號,而y表示相應(yīng)的流程圖中的狀態(tài)編號。
按照本發(fā)明,首先遍歷XML-文檔(或在其它實施例中的一個DTD),而且來自模塊的所有狀態(tài)和轉(zhuǎn)換都被復(fù)制到XML-文檔中。隨后,獨立執(zhí)行XML-文檔。在復(fù)制過程中,設(shè)定每一狀態(tài)的“origin”特征為當(dāng)前轉(zhuǎn)換的要素,例如,來自已經(jīng)觸發(fā)復(fù)制動作的要素。因而引用初始特征值給doc.xml的要素。
在所示的圖10中,執(zhí)行的初始狀態(tài)是[F1.S1]。全局變量cur的值設(shè)定為引用文檔“doc.xml”的根目錄。然后控制轉(zhuǎn)向狀態(tài)[F1.S2],設(shè)定全局變量mod的值為引用描述根目錄執(zhí)行特征的“module”要素,例如,具有相應(yīng)的cur標(biāo)記名稱的模塊。然后,控制轉(zhuǎn)向流程圖F2的狀態(tài)[F2.S1]。F2的作用是將所有“state”-和“derived”-要素從模塊mod復(fù)制到要素cur,設(shè)定所有狀態(tài)和派生的特征“origin”為cur??刂茝腇2的最終狀態(tài)[F2.S99]轉(zhuǎn)向F3的初始狀態(tài)[F1.S3]。F3的作用是將模塊mod的子模塊的“state”-和“derived”-要素復(fù)制到要素cur的相應(yīng)部分,仍然設(shè)定所有狀態(tài)和派生的特征“origin”為cur??刂茝腇3的最終狀態(tài)[F3.S99]轉(zhuǎn)向[F1.S3],將cur更新為cur.traverse。接下來,決策[F1.S2]依賴條件cur=undef而分叉。如果條件估算為真,終止遍歷,并將控制轉(zhuǎn)向[F5];否則,控制返回到[F1.S2]。
模塊F5可能包含附加程序,用于處理嵌套在嵌套模塊中的模塊和校驗安全條件。僅僅在特殊的裝置中使用的這些程序,可能使用標(biāo)準(zhǔn)過程結(jié)構(gòu)來執(zhí)行??刂茝腫F5]轉(zhuǎn)向[F6]。此外,只為特殊裝置使用模塊F6,而且F6包含根據(jù)不同策略記錄的狀態(tài)、轉(zhuǎn)換和派生特征,例如轉(zhuǎn)換中關(guān)于條件的參數(shù)選擇和執(zhí)行的類??刂茝腇6轉(zhuǎn)向F7的初始狀態(tài)[F7.S1]。
作為注釋,F(xiàn)2(圖11)的作用是將模塊mod的“state”-和“derived”-要素復(fù)制到要素cur,并設(shè)定這些要素的“origin”-特征為cur。不是先復(fù)制要素再設(shè)定特征,而是先設(shè)定特征為模塊mod中的正確值,然后將這些“state”-和“derived”-要素從模塊mod復(fù)制到要素cur。使用全局變量state遍歷mod中的“state”-要素,而使用全局變量derived遍歷“derived”-要素。初始狀態(tài)[F2.S1]設(shè)定變量state為mod中的初始“state”-要素。接下來,控制轉(zhuǎn)向[F2.D1],而且,如果state=undef,控制從那兒轉(zhuǎn)向[F2.S3];否則轉(zhuǎn)向[F2.S4]。在[F2.S3]中,如果state不等于undef,那就到達(dá)[F2.S3],設(shè)定state的特征“origin”為cur??刂茝哪莾恨D(zhuǎn)向[F2.S3],設(shè)定state為state.getNext??刂圃俅螐哪莾恨D(zhuǎn)向決策[F2.D1]。在[F2.S4]中,所有“state”-要素復(fù)制完后,就到達(dá)它,設(shè)定全局變量derived為初始“derived”-要素。同“state”-要素一樣,決策[F2.D2]依賴條件derived=undef而分叉;而且,狀態(tài)[F2.S6]觸發(fā)derived=derived.getNext,使用[F2.S6]來迭代遍歷所有“derived”-要素,在[F2.S5]中,設(shè)定“origin”-特征為cur。如果迭代終止,控制轉(zhuǎn)向[F2.S7],將deriveds的完整列表傳遞給cur。接下來,在[F2.S99]中,將“state”-要素的列表從mod復(fù)制并粘貼到cur中。
在F3(圖12)中,使用迭代變量submod來訪問mod的所有子模塊。如果迭代終止,例如如果決策[F3.D1]估算出submod等于undef,那么將控制轉(zhuǎn)向F3的最終狀態(tài),[F3.S99]。否則,控制轉(zhuǎn)向[F3.S2],在這兒設(shè)定變量subcur為第一個部件,它的標(biāo)記與子模塊submod的標(biāo)記相匹配。如果子模塊submod的“number”-特征是“1”或“all”,那么正確地設(shè)定subcur為初始狀態(tài),并將控制從決策[F3.D2]轉(zhuǎn)向F4的初始狀態(tài),[F4.S1]。否則,設(shè)定[F3.S3]中的subcur為下一種狀態(tài),并將控制轉(zhuǎn)向決策[F3.D3],它檢查subcur是否等于undef。如果不等于,那么假定必須檢查第二種狀態(tài)或者所有狀態(tài),并再次將控制轉(zhuǎn)向狀態(tài)[F4.S1]。F4的作用與F2的作用正好一樣,但是不是用mod和cur,而是使用submod和subcur,除了設(shè)定“origin”的特征為cur以外。
控制從最終狀態(tài)[F4.S99]轉(zhuǎn)向決策[F3.D4]。如果分支條件估算出子模塊submod的“number”-特征是“all”,那么控制轉(zhuǎn)向[F3.S3],用正確的標(biāo)記遍歷所有狀態(tài)。如果遍歷停止,那么通過觸發(fā)決策[F3.D3]為真,或通過在決策[F3.D4]中尋找數(shù)目不是“all”,來繼續(xù)訪問狀態(tài)[F3.S4]中的所有子模塊。在這兒設(shè)定submod為“module”-要素的下一種狀態(tài)??刂圃俅螐腫F3.S4]轉(zhuǎn)向決策[F3.D1],注明一下,它要么繼續(xù)訪問子模塊,要么將控制發(fā)送到F3的最終狀態(tài),即[F3.S99]。
按照上面所述,F(xiàn)4(圖13)的工作原理同F(xiàn)2完全一樣。使用變量state和derived來迭代遍歷模塊submod的“state”-要素和“derived”-要素,設(shè)定它們的“origin”-特征為要素cur。然后將所有“state”-和“derived”-要素復(fù)制并粘貼到要素subcur中。
在狀態(tài)[F4.S99]中,將所有“state”-和“derived”-要素復(fù)制并粘貼到文檔doc.xml的相應(yīng)要素中,并設(shè)定“origin”-特征,這樣就不再需要那些模塊了。既然只需設(shè)定狀態(tài)的一種特征,且所有的“transition”-、“action”-和“derived”-要素是并保留原封不動,一種可供選擇的辦法是只復(fù)制“state”-要素和“derived”-要素最外面的部分,并引用其余模塊。
在所示的圖14中,流程圖F7的初始狀態(tài)[F7.S1]表示了實際執(zhí)行階段的開始。在F7中,觸發(fā)與當(dāng)前狀態(tài)curstate相匹配的所有狀態(tài)的動作。設(shè)定cur返回到文檔doc.xml的根目錄。然后將控制轉(zhuǎn)向[F7.S2],在此處將全局變量curstate設(shè)定為“initial”。變量curstate的作用是指明當(dāng)前要素cur內(nèi)部的當(dāng)前狀態(tài)。在[F7.S3],[F7.D1]和[F7.S9]中,通過變量state來迭代遍歷當(dāng)前要素cur的所有“state”-要素。初始化迭代[F7.S3],[F7.D1]是終止條件,如果它終止,就發(fā)送控制給[F8.S1];[F7.S9]是實際迭代程序,它設(shè)定state為“state”-要素的下一種狀態(tài)。在迭代內(nèi)部,決策[F7.D2]用來校驗state的“name”-特征是否與當(dāng)前狀態(tài)curstate相匹配。如果匹配,接下來訪問[F7.S4],設(shè)定變量cur為state的“origin”特征值。該更新的作用是估算右邊的動作。在[F7.S5],[F7.D3]和[F7.S7]中,通過變量action來迭代遍歷state內(nèi)部的所有動作,并在[F7.S6]中執(zhí)行它們。當(dāng)?shù)K止時,控制轉(zhuǎn)向[F7.S8],在這兒重新設(shè)定cur的值為其初始值。states的迭代從那兒重新開始,終止后通向[F8.S1]。
最后,如圖15所示,在F8中,觸發(fā)轉(zhuǎn)換,更新當(dāng)前要素cur和當(dāng)前狀態(tài)curstate。轉(zhuǎn)換條件的估算取決于它們的定義的初值、轉(zhuǎn)換的源-要素src和轉(zhuǎn)換的目標(biāo)-要素trg。在表示條件的“expression”-要素中,這三個要素可以分別作為<self/>、<src/>和<trg/>來訪問。在流程圖F8中,兩個嵌套的迭代代替了“state”-要素和其“transition”-要素。初始狀態(tài)[F8.S1]設(shè)定src等于當(dāng)前要素cur。接下來,[F8.S2]、[F8.D1]和[F8.S9]迭代變量state來遍歷當(dāng)前要素cur的所有狀態(tài)。如果迭代終止,控制返回到[F7.S3],再次執(zhí)行同樣的動作。否則,[F8.D2]校驗state的“name”-特征是否與當(dāng)前狀態(tài)curstate相匹配。如果匹配,那么進(jìn)入[F8.S4],并設(shè)定變量cur為state的“origin”特征值。接下來,使用[F8.S5]、[F8.D3]和[F8.S8]來迭代變量trans遍歷state內(nèi)部的所有轉(zhuǎn)換。在迭代內(nèi)部,[F8.S6]設(shè)定trg等于估算通路的結(jié)果。接下來,[F8.D4]驗證trans的表達(dá)式是否估算為真。必須指出,對于該估算來說,必須正確地設(shè)定cur、src和trg。如果估算的結(jié)果為真,那么設(shè)定cur等于trg,并將curstate設(shè)定為trans的通路-組件的“state”-特征。然后控制轉(zhuǎn)向[F7.S3]。目的是為了執(zhí)行新當(dāng)前要素和狀態(tài)的動作。
在圖16、17和18中,顯示了按照圖1ff而定的詢問程序語言例子的模塊。這些模塊關(guān)于圖11給出的DTD來說,是有效的。示例XML-文檔的執(zhí)行可以使用圖12所述的過程來完成。根據(jù)上述的圖象化流程圖,可以自動從圖象化輸入生成上面所說的模塊。另一方面,可以從這兒給出的文本形式生成它們的圖象化表示。
關(guān)于圖19a-19d,XML-機(jī)器人規(guī)范的執(zhí)行,它按照上面的解釋給出了XML-文檔的執(zhí)行特征,這兒將更加詳細(xì)地描述它。給定XML-機(jī)器人規(guī)范m0,寫入XML-機(jī)器人規(guī)范語言M,如上面所描述的可視化/文本化詢問程序語言那樣,以及關(guān)于m0的文檔類型定義DTD0有效的XML-文檔d,執(zhí)行規(guī)范給出關(guān)于抽象過程m0Exec(d)為了執(zhí)行d將做何動作的所有信息。為了執(zhí)行抽象過程m0Exec(d),需要在現(xiàn)存的計算機(jī)上執(zhí)行一個程序,例如,按程序化語言C或Java書寫的一個程序。這兒有四種基本方式來執(zhí)行上面所說的程序。
在圖19a-19d中,以方框的形式顯示所有過程,以普通方式顯示文檔,即一個帶曲線頂邊的方框和一個可執(zhí)行文檔,例如,一個程序顯示為一個文檔和一個過程的結(jié)合,如程序的執(zhí)行。每一過程可能有一個以文檔形式的輸入,有一個以文檔形式的輸出,并且它可能是另一過程的開始??梢栽谝慌_真實的機(jī)器上執(zhí)行的具體過程,顯示在實線方框中;而抽象的過程,如過程m0Exec(d),顯示在點劃線方框中。所描述的執(zhí)行XML-機(jī)器人的可能性是通過編譯器和解釋器技術(shù)的不同組合來實現(xiàn)的??梢詾樵问接浄∕和形式記法DTD0使用兩種技術(shù)中的一種。因此,通常有四種組合形式,編譯器后跟解釋器(圖19a),編譯器后跟編譯器(圖19b),解釋器后跟解釋器(圖19c),以及解釋器后跟編譯器(圖19d)。
圖19a顯示,通過從XML規(guī)范m0生成一個解釋器IntDTD0的一種執(zhí)行方式。解釋器IntDTD0選用XML-文檔d作為輸入,并校驗它關(guān)于DTD0是否有效。隨后它啟動執(zhí)行這樣一個文檔d的過程,以這樣的一種方式進(jìn)行該過程與上面所介紹的抽象過程m0Exec(d)等效。通過一個可執(zhí)行文檔IG給出執(zhí)行,它的執(zhí)行選用XML-機(jī)器人執(zhí)行規(guī)范m0作為輸入,并生成一個可執(zhí)行文檔intDTD0作為輸出,即所說的解釋器。
圖19b顯示另一種可能性,它提供一個編譯器生成程序,通過一個可執(zhí)行文檔CG給出來,該CG從XML規(guī)范m0生成一個編譯器CompDTD0。編譯器CompDTD0變換文檔d,并接收d作為輸入,進(jìn)入到可執(zhí)行文檔d’,它的執(zhí)行必須與抽象的過程m0Exec(d)等效。
圖19c顯示,規(guī)范語言M的解釋器IntMtoInt以m0的一個解釋過程作為開始。解釋器IntMtoInt以一個XML-機(jī)器人規(guī)范m0作為輸入,并啟動過程IntDTD0,而它又作為XML-文檔d的輸入。過程IntDTD0現(xiàn)在啟動一系列執(zhí)行文檔d的過程,該過程必須與抽象的過程m0Exec(d)等效。
作為最后一種可能性,圖19d顯示了規(guī)范語言M的一種解釋器IntMtoComp。解釋器IntMtoComp以XML-機(jī)器人規(guī)范m0作為輸入,但與前述的解釋器IntMtoInt相比,它啟動一個編譯器過程CompDTD0,并以XML-文檔d作為輸入,產(chǎn)生一個可執(zhí)行文檔d’作為輸出,d’的執(zhí)行必須與抽象的過程m0Exec(d)等效。
可能很容易認(rèn)識到,上述的每一種可能性都有其獨特的優(yōu)點和缺點。大家知道,使用解釋器技術(shù)的優(yōu)點是執(zhí)行的即時有效性,更復(fù)雜的編譯器技術(shù)的優(yōu)點是良好的運行和產(chǎn)生的可執(zhí)行文檔的有效性,它可以單獨地重復(fù)使用,獨立于XML-機(jī)器人規(guī)范m0。
在圖20中,顯示了一種基于網(wǎng)絡(luò)XML-機(jī)器人的最佳實施例。服務(wù)器21,通常是一個高效網(wǎng)絡(luò)服務(wù)器,連接一個數(shù)據(jù)庫22和一個或更多個功能性程序庫23。通過網(wǎng)絡(luò)連接,尤其是因特網(wǎng),一個或更多個客戶25.1、25.2,通常使用一個在遠(yuǎn)程系統(tǒng)上運行的瀏覽器,可以訪問上述的服務(wù)器21。這些客戶25.1和25.2的接受力或多或少的受到限制,通??赡苁沁\行諸如Java虛擬機(jī)器之類的有限抽象機(jī)器。
服務(wù)器21按照上述的XML-機(jī)器人規(guī)范,提供執(zhí)行XML-文檔的服務(wù)。XML-機(jī)器人規(guī)范中的動作在服務(wù)器21上執(zhí)行,例如,訪問服務(wù)器的數(shù)據(jù)庫22或者調(diào)用服務(wù)器的函數(shù)功能庫23。此外還有一些動作和可能附加的工具27,通過電子郵件、網(wǎng)頁、WAP、存儲管理服務(wù)和類似的形式來公布結(jié)果,來管理訪問權(quán)和管理潛在的數(shù)據(jù)庫和軟件系統(tǒng)的結(jié)構(gòu)。XML-機(jī)器人規(guī)范可能只在服務(wù)器21上執(zhí)行,但也可能用作服務(wù)文件提供給客戶。
這種情況可以和應(yīng)用程序服務(wù)供應(yīng)商(ASP)模型相比較,應(yīng)用程序在服務(wù)器上運行,所有的客戶都能訪問他們。本發(fā)明分享了ASP的優(yōu)點,所有的計算都是在服務(wù)器上完成。因此,客戶可以是非常小的裝置,如因特網(wǎng)工具。而且,本發(fā)明具有先進(jìn)之處,即一個有限的XML-機(jī)器人規(guī)范可以執(zhí)行無限多不同的XML-文檔,只要與相應(yīng)的文件類型定義(DTD)相匹配。
執(zhí)行服務(wù)供應(yīng)商方法的應(yīng)用程序范圍,包括從現(xiàn)存應(yīng)用程序的輸入/控制,到新應(yīng)用程序的規(guī)劃或設(shè)計。輸入/控制應(yīng)用程序使用XML-文檔來控制一個應(yīng)用程序。XML-機(jī)器人規(guī)范將簡單地把文檔翻譯成交互式的輸入/控制序列,用來控制應(yīng)用程序。在新應(yīng)用程序的規(guī)劃/設(shè)計中,XML-文檔符合程序的語法結(jié)構(gòu),而XML-機(jī)器人規(guī)范給出執(zhí)行特征。下面給出一個例子,一個帶有DTD的XML-機(jī)器人規(guī)范,它表示了C語言程序的句法結(jié)構(gòu),而XML-機(jī)器人給出了它們的執(zhí)行特征,這將允許發(fā)送任意的C語言程序到服務(wù)器并讓它們在服務(wù)器上執(zhí)行。
與前面所描述的帶有執(zhí)行服務(wù)供應(yīng)商的裝置相比較,另一種首選裝置可以分別提供LangLets(小XML-機(jī)器人規(guī)范)和可移植語言。這里,服務(wù)器21為客戶25.1和25.2提供服務(wù),它首先發(fā)送XML-機(jī)器人規(guī)范,然后按照規(guī)格執(zhí)行XML-文檔。這種裝置要求客戶25.1和25.2來執(zhí)行XML-文檔,這些客戶能夠從XML-機(jī)器人規(guī)范那兒生成解釋器/編譯器。因此XML-機(jī)器人規(guī)范的動作在客戶25.1和25.2上面執(zhí)行。這種方法可以在較大意義上比喻為發(fā)送Java代碼到一個客戶,隨后它可以執(zhí)行這段代碼。然而,與整個Java相比,XML-機(jī)器人規(guī)范所給出的執(zhí)行特征非常簡單且遠(yuǎn)不及Java那樣富有表達(dá)力。盡管如此,像Java這樣的語言可能用來設(shè)計XML-機(jī)器人規(guī)范的動作。在XML-機(jī)器人規(guī)范中,按照這樣一個XML-機(jī)器人規(guī)范來執(zhí)行的所有XML-文檔(無限多的)執(zhí)行特征,被限制在有限數(shù)目且固定的(但參數(shù)化的)Java-動作中。
本發(fā)明一個重要的優(yōu)點是,可以調(diào)查一個限定的XML-機(jī)器人規(guī)范的安全特性。對那些打算在客戶25.1和25.2上執(zhí)行的、無限多的不同XML文檔來說,這些特性可以分別被擔(dān)?;驒z查。例如,如果某一關(guān)鍵性的安全動作沒有包含到XML-機(jī)器人規(guī)范的動作中去,那么對于那些按照這種XML-機(jī)器人規(guī)范執(zhí)行的任何一個XML文檔來說,可以擔(dān)保(基于直接定義)不執(zhí)行這個動作。或者,如果另一個關(guān)鍵性動作只有通過某一條件保護(hù)的狀態(tài)來觸發(fā),那么它可以擔(dān)保只有完成了這個條件,才觸發(fā)這個動作。
再考慮一下可移植代碼可能有所幫助,在那兒源代碼發(fā)送到網(wǎng)絡(luò)上。然而,與它對比,這兒首先發(fā)送XML-機(jī)器人規(guī)范,它給出可移植語言/DTD的執(zhí)行特征,然后傳遞程序/XML-文檔。因此,通過給定的網(wǎng)絡(luò),提供一種可移植語言。借助可移植代碼的可移植語言的優(yōu)點是,通過類的方式,在XML-機(jī)器人規(guī)范中嵌入了重復(fù)計算,而且,描述計算的實際例子的XML-文檔并不復(fù)雜。
這樣使用本發(fā)明的XML-機(jī)器人規(guī)范,允許定義一種新的語言,并執(zhí)行上面所說語言中所寫的代碼,然后產(chǎn)生相應(yīng)的編譯器和/或解釋器。進(jìn)一步可能建立編輯器,調(diào)試器和分析工具。所描述的數(shù)據(jù)和代碼相互協(xié)作,直接允許我們定義有效XML-文檔的執(zhí)行或其它過程,并不需要書寫一個單獨的程序來清楚地解析和分析該文檔的結(jié)構(gòu)樹。
本發(fā)明提供一種裝置25.1和25.2,尤其是因特網(wǎng)裝置,這可以用于網(wǎng)絡(luò)環(huán)境中,尤其是因特網(wǎng),它包含從遠(yuǎn)程計算機(jī)接受和發(fā)送數(shù)據(jù)的方法。該裝置提供存儲和訪問數(shù)據(jù)(XML-文檔)的設(shè)備,這些數(shù)據(jù)發(fā)送到上述的遠(yuǎn)程計算機(jī)。該裝置還包含檢驗從上述遠(yuǎn)程計算機(jī)所接收到的數(shù)據(jù)的設(shè)備,如果合適,驗證這些數(shù)據(jù)是否有效和/或是否接受XML-機(jī)器人規(guī)范。該裝置進(jìn)一步包含使XML-機(jī)器人規(guī)范和XML-文檔相結(jié)合的方法。然后通過該裝置執(zhí)行XML-文檔,更可取地是通過一個處理部件來執(zhí)行,它可以執(zhí)行XML-文檔的指令。對該技術(shù)領(lǐng)域中的熟練人員來說,他們很容易理解,該工具所包含的方法歸結(jié)為這樣一種方式,即用于執(zhí)行XML-文檔的處理部件可以為該裝置的發(fā)送/接受操作提供函數(shù)功能性。而且,該裝置通常包含一個用戶界面,如果愿意,它可以提供激勵執(zhí)行和分析XML-文檔或XML-機(jī)器人規(guī)范的設(shè)備。然而,它只可以用作一個網(wǎng)絡(luò)內(nèi)部的一個服務(wù)平臺。
本發(fā)明進(jìn)一步提供一種裝置,它包含XML-機(jī)器人規(guī)范的圖象化顯示方法,例如,在一個高級的可視化完整發(fā)展環(huán)境中,參考圖3ff.描述的那樣。按照上述的規(guī)范,這種圖象化表示法用來生成描繪上述XML-機(jī)器人規(guī)范的XML-文檔。
本發(fā)明進(jìn)一步允許提供XML-文檔的分布式執(zhí)行。使用多路XML-機(jī)器人來分布XML-文檔的計算,應(yīng)歸于這樣一個事實文檔的結(jié)構(gòu)同時是處理它們的應(yīng)用程序的結(jié)構(gòu)。因此,XML-文檔的一部分可以輕易地在XML-機(jī)器人的不同情況下執(zhí)行,這些XML-機(jī)器人可能放置在不同場所。同樣地,專用的應(yīng)用程序可能要求文檔的一部分在服務(wù)器上執(zhí)行,文檔的另一部分在客戶端執(zhí)行。
權(quán)利要求
1.用于直接執(zhí)行XML-文檔的方法,其特征在于通過對XML-文檔的每一個要素定義局部行為和過程,和使可執(zhí)行的指令和文檔類型定義(DTD)、XML-文檔或其作為結(jié)構(gòu)樹的表示法相結(jié)合,并通過動態(tài)創(chuàng)建和重新定義元素特征來存儲中間狀態(tài)。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包含如下步驟a)通過規(guī)定每一個XML-元素的定義和它的狀態(tài)來使可執(zhí)行指令更完整,通過簡單的可執(zhí)行動作組成的動作,以及這些動作要么引用為要素的組件之一定義的動作,要么引用為任何其它要素定義的動作;b)通過執(zhí)行為它的根段定義的動作來執(zhí)行XML-文檔。
3.按照前面的聲明之一所采用的方法,其特征在于通過表示時序或并行控制和/或數(shù)據(jù)流的圖象化流程圖,至少為一個XML-要素的定義或狀態(tài)規(guī)定動作的組成。
4.按照前面的權(quán)利要求之一所述的方法,其特征在于以表示時序或并行控制和/或數(shù)據(jù)流的文本形式,至少為一個XML-要素的定義或狀態(tài)規(guī)定動作的組成。
5.根據(jù)前面的權(quán)利要求之一所述的方法,其特征在于以n維數(shù)據(jù)塊的形式來表示系統(tǒng)狀態(tài),具有一個開放的面向系統(tǒng)的界面,它使n維數(shù)據(jù)塊可讀寫其它程序和/或數(shù)據(jù)庫系統(tǒng),且可從上述的系統(tǒng)中訪問其它程序和數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)和功能性函數(shù)。
6.按照前面的權(quán)利要求之一所述的方法,其特征在于為每一要素定義過程的模塊,這些模塊關(guān)于下面的DTD有效<![CDATA[<!element module(derived*,expression?,state*,module*><!attlist module name CDATA#REQUIRED  number CDATA”1”><!element derived(argument*,expression)><!attlist derived name CDATA><!element argument EMPTY><!attlist argument name CDATA><!element state(action*,transition*)><!attlist state name CDATA><!element transition(expression,path)><!element path(component?)><!attlist path state CDATA“initial”><!element component(component?)><!attlist component name CDATA#REQUIRED   number CDATA”1”><!element expression(path|self|src|trg|evalattr|getfirst|   getnext|parent|root|apply|external|constant><!element action(setattr|ifthen|forall|external)><!element src EMPTY><!element trg EMPTY><!element self EMPTY><!element evalattr(expression?)><!attlist evalattr attribute CDATA#REQUIRED><!element getfirst(expression?)><!attlist getfirst attribute CDATA#REQUIRED><!element getnext(expression?)><!element parent(expression?)><!element root EMPTY><!element apply(expression,expression?)><!attlist apply op CDATA#REQUIRED><!element external(expression*)><!attlist external name CDATA   language CDATA><!element constant EMPTY><!attlist constant value CDATA#REQUIRED><!element setAttr(expression?,expression)><!attlist setAttr attribute CDATA#REQUIRED><!element ifthenelse(expression,action*)><!element forall(action*)><!attlist forall range CDATA“all-elements”  variable CDATA>]]>
7.一種使用前面權(quán)利要求之一所述的方法的系統(tǒng),其特征在于服務(wù)器按照從客戶發(fā)送到服務(wù)器的XML-機(jī)器人規(guī)范,至少執(zhí)行XML-文檔的一部分為至少一個客戶提供服務(wù);或者,服務(wù)器通過發(fā)送一個XML-機(jī)器人規(guī)范和一個XML-文檔給客戶,為至少一個客戶提供服務(wù),使得通過至少執(zhí)行客戶端所發(fā)送文檔的一部分來提供上述服務(wù),該文檔符合所發(fā)送的XML-機(jī)器人規(guī)范。
8.一種使用前面權(quán)利要求1~5之一所述的方法的裝置,包含用于往遠(yuǎn)程計算機(jī)發(fā)送和接收數(shù)據(jù)的設(shè)備;存取和訪問XML-文檔的設(shè)備;使XML-機(jī)器人規(guī)范和XML-文檔相結(jié)合的設(shè)備,以及執(zhí)行這些完整的文檔的設(shè)備。
9.一種使用前面權(quán)利要求1~7之一所述的方法的裝置,包含在一個高級可視化完整發(fā)展環(huán)境中,用于XML-機(jī)器人規(guī)范的圖象化顯示的設(shè)備,以及生成表示上述XML-機(jī)器人規(guī)范的XML-文檔的設(shè)備。
10.一種根據(jù)權(quán)利要求8或9所述的裝置,進(jìn)一步包含檢驗、驗證或激勵XML-文檔或XML-機(jī)器人規(guī)范的設(shè)備。
全文摘要
本發(fā)明涉及一種直接執(zhí)行XML-文檔的方法,系統(tǒng)和工具,是通過分別使用文本化或圖像化流程圖,將XML-文檔、文件類型定義(DTD)或他們的代表修飾成結(jié)構(gòu)樹。XML-文檔的數(shù)據(jù)結(jié)構(gòu)被重新用于處理其代碼并與其合并。
文檔編號G06F9/45GK1454357SQ00819741
公開日2003年11月5日 申請日期2000年8月2日 優(yōu)先權(quán)日2000年8月2日
發(fā)明者菲利普·庫特 申請人:菲利普·庫特
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
嵊州市| 海安县| 甘谷县| 新昌县| 博罗县| 克拉玛依市| 东阳市| 牙克石市| 汶上县| 绥棱县| 彭山县| 施甸县| 渭源县| 修武县| 务川| 贡山| 临高县| 阿勒泰市| 赤峰市| 达日县| 玉龙| 哈密市| 青岛市| 宝应县| 玉龙| 古蔺县| 福海县| 如东县| 封开县| 临武县| 安仁县| 驻马店市| 长汀县| 宝坻区| 华容县| 清徐县| 濉溪县| 岐山县| 南漳县| 吴忠市| 遂平县|