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

有效的小占用xml分析的制作方法

文檔序號:6501687閱讀:203來源:國知局
專利名稱:有效的小占用xml分析的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及因特網(wǎng)技術(shù)。本發(fā)明尤其涉及用于XML(可擴(kuò)展標(biāo)記語言)分析的系統(tǒng)和方法。
背景技術(shù)
擴(kuò)展的無線PC(個人計算機(jī))、數(shù)字家庭和數(shù)字辦公室的首創(chuàng)全部基于使用XML(可擴(kuò)展標(biāo)記語言)的標(biāo)準(zhǔn)協(xié)議。常規(guī)XML分析器很復(fù)雜且非常不適合嵌入式裝置。由于XML分析的復(fù)雜性和開銷,許多裝置供應(yīng)商很難將這些標(biāo)準(zhǔn)協(xié)議實(shí)現(xiàn)入它們的裝置。例如,當(dāng)前的XML分析器可分成兩類DOM(文檔對象模型)和SAX(用于XML的簡單API(應(yīng)用編程接口))。
DOM分析器通過分析XML串并返回XML元素的集合進(jìn)行操作。每個元素都包含關(guān)于XML文檔內(nèi)特殊元素的信息。為使其可能,所有信息必須被復(fù)制入返回的結(jié)構(gòu)中。這導(dǎo)致相當(dāng)多的存儲器開銷。
SAX分析器的設(shè)計更簡單。它們是無狀態(tài)前向分析器。即,使用分析器的應(yīng)用程序必須包含維護(hù)狀態(tài)的邏輯且被傳遞到該應(yīng)用程序的任何數(shù)據(jù)都必須被復(fù)制入應(yīng)用程序的存儲器緩沖器。盡管SAX分析器的設(shè)計比DOM分析器更簡單,但SAX分析器仍需要大量的存儲器開銷。
因此,需要一種不需要大量存儲器開銷的用于分析XML的系統(tǒng)和方法。還需要一種設(shè)計簡單但需要小占用(footprint)的用于分析XML的系統(tǒng)和方法。進(jìn)一步需要一種簡單并需要較少開銷的用于分析XML的系統(tǒng)和方法,從而使設(shè)備供應(yīng)商能將XML分析加入它們的設(shè)備中。


這里結(jié)合附圖構(gòu)成說明書的一部分,附圖示出了本發(fā)明的實(shí)施例并與描述部分一起進(jìn)一步用于說明本發(fā)明的原理并使相關(guān)領(lǐng)域的熟練技術(shù)人員實(shí)施和使用本發(fā)明。附圖中,相同的標(biāo)號一般表示相同的、功能相似的和/或結(jié)構(gòu)相似的元件。首先出現(xiàn)元件的附圖由相應(yīng)標(biāo)號中的最左面的數(shù)字指出。
圖1是示出根據(jù)本發(fā)明實(shí)施例的用于分析XML串的示例系統(tǒng)的框圖。
圖2A是描述根據(jù)本發(fā)明實(shí)施例的用于分析XML串的示例方法的流程圖。
圖2B示出了根據(jù)本發(fā)明實(shí)施例的示例性鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
圖2C示出了根據(jù)本發(fā)明實(shí)施例的示例性鏈接列表屬性結(jié)構(gòu)。
圖3A示出了示例性XML串。
圖3B是描述根據(jù)本發(fā)明實(shí)施例的用于權(quán)標(biāo)化源XML的方法的示例性流程圖。
圖3C和3D是描述根據(jù)本發(fā)明實(shí)施例的用于生成鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的示例性方法的流程圖。
圖3E示出了根據(jù)本發(fā)明實(shí)施例的用于圖3A所示的示例性XML串的示例性鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
圖4是描述根據(jù)本發(fā)明實(shí)施例的用于確定XML串是否有效的示例性方法的流程圖。
圖5A和5B是描述根據(jù)本發(fā)明實(shí)施例的用于從鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中建立屬性結(jié)構(gòu)的鏈接列表的示例性方法的流程圖。
圖5C示出了根據(jù)本發(fā)明實(shí)施例的用于圖3A中的示例性XML串的示例性鏈接列表屬性結(jié)構(gòu)。
圖6A是描述根據(jù)本發(fā)明實(shí)施例的從開始和關(guān)閉鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中獲得數(shù)據(jù)的示例性方法的流程圖。
圖6B示出了根據(jù)本發(fā)明實(shí)施例的從圖3A中的示例性XML串提取的數(shù)據(jù)。
具體實(shí)施例方式
雖然這里參考用于特殊應(yīng)用的說明性實(shí)施例描述了本發(fā)明,但應(yīng)理解,本發(fā)明不限于此。接觸這里提供的教示的相關(guān)技術(shù)領(lǐng)域中的熟練技術(shù)人員將理解其范圍以及本發(fā)明實(shí)施例明顯有用的其它領(lǐng)域內(nèi)的附加修改、應(yīng)用和實(shí)施例。
說明書中對本發(fā)明的“一個實(shí)施例”、“一實(shí)施例”或“另一實(shí)施例”的引用意味著聯(lián)系該實(shí)施例描述的特殊特點(diǎn)、結(jié)構(gòu)或特征包含在本發(fā)明的至少一個實(shí)施例中。因此,貫穿說明書各處出現(xiàn)的短語“在一個實(shí)施例中”或“在一實(shí)施例中”不必都指同一實(shí)施例。
本發(fā)明的實(shí)施例針對不需要大量存儲器開銷的用于分析XML的系統(tǒng)和方法。本發(fā)明通過使用零存儲器復(fù)制實(shí)現(xiàn)這點(diǎn),從而形成具有較小占用的非常有效的分析器。盡管相對于XML描述了本發(fā)明的實(shí)施例,也可應(yīng)用其它類型的標(biāo)記語言。
圖1是示出用于分析XML的系統(tǒng)100的示例性框圖。系統(tǒng)100包括零復(fù)制串分析器模塊102和分析器邏輯模塊104。零復(fù)制串分析器模塊102與分析器邏輯模塊104耦合。
零復(fù)制串分析器模塊102負(fù)責(zé)分析XML串而不復(fù)制任何數(shù)據(jù)。零復(fù)制串分析器模塊102是單程分析器,因此從應(yīng)用程序接收的輸入串是只讀一次的。
如圖1所示,分析器邏輯模塊104構(gòu)建于零復(fù)制串分析器模塊102之上。分析器邏輯模塊104包含分析XML實(shí)體所需的邏輯。因此,分析器邏輯模塊104與零復(fù)制串分析器模塊102交互以分析XML串而不必將XML串復(fù)制入存儲器。
零復(fù)制串分析器模塊102從一應(yīng)用程序接收要分析的輸入串以及該輸入串的長度。分析邏輯模塊104向零復(fù)制串分析器模塊102提供定界符以便分析,從而使得零復(fù)制串分析器模塊102能權(quán)標(biāo)化該串。每個權(quán)標(biāo)將一索引包括到源XML串(即,輸入串)中,該索引表示其值和描述該值長度的屬性,以及描述值長度的屬性。一旦該串已被權(quán)標(biāo)化,使用權(quán)標(biāo)構(gòu)建鏈接列表節(jié)點(diǎn)結(jié)構(gòu)并使用鏈接列表節(jié)點(diǎn)結(jié)構(gòu)構(gòu)建鏈接列表屬性結(jié)構(gòu)。該節(jié)點(diǎn)和屬性結(jié)構(gòu)包含指向源XML串的指針。從存儲器中釋放鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu)同時保持與源XML串相關(guān)聯(lián)的指針。在刪除結(jié)構(gòu)的同時保持這些指針避免了必須復(fù)制XML串,從而最小化存儲器開銷。
在權(quán)標(biāo)化該串后,零復(fù)制串分析器模塊12將把每個權(quán)標(biāo)發(fā)送給分析邏輯模塊104以建立鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。在接收到這些權(quán)標(biāo)時,分析邏輯模塊104一次一個地將權(quán)標(biāo)連同權(quán)標(biāo)長度和定界符一起返回給零復(fù)制串分析器模塊102。零復(fù)制串分析器模塊102隨后將使用定界符分析該權(quán)標(biāo)以獲得用于鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的指針。該過程持續(xù)到已正確地分析了所有權(quán)標(biāo)。一旦建立了鏈接列表節(jié)點(diǎn)結(jié)構(gòu),將該鏈接列表節(jié)點(diǎn)結(jié)構(gòu)用于建立鏈接列表屬性結(jié)構(gòu)以向XML串中包含的屬性提供指針。也可以使用來自鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的指針提取XML串內(nèi)的數(shù)據(jù)。
至少五個定界符被用于分析一XML串。定界符包括,但不限于,開括號“<”、空格“ ”、冒號“”、等于號“=”以及閉括號“>”。邏輯分析器模塊104分析權(quán)標(biāo)并向零復(fù)制串分析器102提供合適的定界符以分析每個權(quán)標(biāo)?,F(xiàn)在將參考圖2A描述分析XML串的過程。
圖2A是描述根據(jù)本發(fā)明實(shí)施例的用于分析XML串的示例性方法的流程圖200。本發(fā)明不限于這里參考流程圖200描述的實(shí)施例。相反,相關(guān)領(lǐng)域的熟練技術(shù)人員在閱讀這里的教示后顯見的是其它功能流程圖也在本發(fā)明的范圍內(nèi)。該過程開始于框202,其中過程立刻進(jìn)行到框204。
框204中,從應(yīng)用程序輸入零復(fù)制串分析器模塊102的XML串被轉(zhuǎn)換成節(jié)點(diǎn)結(jié)構(gòu)的鏈接列表。XML串中的每個元素都被轉(zhuǎn)換成兩個節(jié)點(diǎn)結(jié)構(gòu);用于開始標(biāo)簽的一個節(jié)點(diǎn)結(jié)構(gòu)和用于結(jié)束標(biāo)簽的一個節(jié)點(diǎn)結(jié)構(gòu)。
圖2B示出了根據(jù)本發(fā)明實(shí)施例的示例性節(jié)點(diǎn)結(jié)構(gòu)220。節(jié)點(diǎn)結(jié)構(gòu)220包括名稱字段222、名稱長度字段224、名稱空間字段226、名稱空間長度字段228、開始標(biāo)簽字段230、空標(biāo)簽字段232、保留字段234、下一個字段236、父字段238、對等字段240和閉標(biāo)簽字段242。
名稱字段222表示元素標(biāo)簽的名稱。名稱長度字段224表示元素標(biāo)簽名稱的長度。名稱空間字段226表示與元素標(biāo)簽相關(guān)聯(lián)的任何前綴的名稱。名稱空間長度字段228表示與元素標(biāo)簽相關(guān)聯(lián)的任何前綴的長度。
開始標(biāo)簽字段230表示一標(biāo)記,它在被設(shè)定時指定該元素標(biāo)簽是開始標(biāo)簽。當(dāng)開始標(biāo)簽字段230被清除時,該標(biāo)簽是關(guān)閉標(biāo)簽??諛?biāo)簽字段232表示一標(biāo)記,它在被設(shè)定時指示元素標(biāo)簽是空標(biāo)簽??諛?biāo)簽是自身備用的標(biāo)簽。換句話說,空標(biāo)簽不包含任何內(nèi)容??諛?biāo)簽用短斜線和閉括號(即“/>”)結(jié)束,代替閉括號(即“>”)。
如果標(biāo)簽是開始標(biāo)簽,保留字段234可表示下一個閉括號(即“>”)處的位置。如果標(biāo)簽是閉標(biāo)簽,保留字段234可表示第一個開括號(即“<”)的位置。下一個字段236表示指向下一個節(jié)點(diǎn)結(jié)構(gòu)的指針。
父字段238表示指向父元素的開元素的指針。父元素是包圍嵌套元素的元素。對等字段240表示指向?qū)Φ仍氐拈_元素的指針。對等元素是與另一元素共同定位的元素。換句話說,對等元素處于同一水平。例如,具有同一父元素的子元素是對等元素。閉標(biāo)簽字段242表示指向元素標(biāo)簽的閉元素的指針。
返回到圖2中的框204,最初填充節(jié)點(diǎn)結(jié)構(gòu)220內(nèi)的某些字段。這些字段包括名稱字段222、名稱長度字段、名稱空間字段226、名稱空間長度字段228、開始標(biāo)簽字段230、空標(biāo)簽字段232、保留字段234和下一個字段236。名稱、名稱空間、保留和下一個字段是指向源XML串的指針。以下參考圖3B-3D進(jìn)一步描述用于從XML串中確定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的方法。
框206中,驗證XML輸入串的語法以確定輸入串是否有效。這是通過驗證每個元素是否被正確地打開和關(guān)閉來完成。XML文檔的一個約束在于它們被良好地構(gòu)成。某些規(guī)則確定XML文檔是否被良好地構(gòu)成。一種這種規(guī)則是每個開始標(biāo)簽都具有閉標(biāo)簽,且該閉標(biāo)簽必須具有與開始標(biāo)簽相同的名稱、相同的名稱空間等。例如,名稱為<AElementTag>的開始標(biāo)簽必須以名為</AElementTag>的閉標(biāo)簽結(jié)束。同樣,所有標(biāo)簽必須被完全嵌套。例如,可以是<ElementTag>...<InnerTag>...</InnerTag>...</ElementTag>,但不能是<ElementTag>...<InnerTag>...</ElementTag>...</InnerTag>。
在正驗證XML串時,填充鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的剩余字段。這些字段包括父字段238、對等字段240和閉標(biāo)簽字段242。以下參考圖4描述用于驗證XML串的語法的方法。
框208中,從鏈接列表節(jié)點(diǎn)結(jié)構(gòu)建立屬性結(jié)構(gòu)的鏈接列表。示例性鏈接列表屬性結(jié)構(gòu)250在圖2C中示出。鏈接列表屬性結(jié)構(gòu)250包括屬性名稱字段252、屬性名稱長度字段254、屬性值字段260、前綴名稱字段256、前綴名稱長度字段258、屬性值長度字段262和下一個屬性字段264。
屬性名稱字段252表示屬性的名稱。屬性名稱長度字段254表示屬性名稱的長度。前綴名稱字段256表示前綴的名稱。前綴名稱長度字段258表示前綴名稱的長度。屬性值字段260表示屬性的值。屬性值長度字段262表示屬性值的長度。下一個屬性字段264表示指向可能有的下一個屬性的指針。以下參考圖5A和5B描述用于建立鏈接列表屬性結(jié)構(gòu)的方法。
返回到圖2A,框210中,獲得來自給定節(jié)點(diǎn)結(jié)構(gòu)的數(shù)據(jù)段。在一個實(shí)施例中,給定元素的數(shù)據(jù)可以是簡單串。在一個實(shí)施例中,給定元素的數(shù)據(jù)可以是XML子樹。以下參考圖6A描述數(shù)據(jù)段的確定。
框212中,隨后清除或釋放節(jié)點(diǎn)結(jié)構(gòu)鏈接列表和屬性結(jié)構(gòu)鏈接列表,僅留下指向原始XML串的指針。
在描述用于建立鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和鏈接列表屬性結(jié)構(gòu)的方法之前,將描述在描述這些方法時將引用到的示例性XML串。圖3A示出了示例性XML串302。XML串302包括名為“uElementTag”的開始標(biāo)簽304、名為“id”的屬性306、名為“TestValue”的屬性值308、名為“InnerTag”的開始標(biāo)簽310、名為“SampleValue”的文本數(shù)據(jù)312、名為“InnerTag”的閉標(biāo)簽314以及名為“uElementTag”的閉標(biāo)簽316。每個開始標(biāo)簽304和310都分別具有相匹配的閉標(biāo)簽316和314。因此,每個開始標(biāo)簽都由開括號“<”標(biāo)識且每個閉標(biāo)簽都由開括號緊接短斜線”</”標(biāo)識。
圖3B是描述根據(jù)本發(fā)明實(shí)施例的用于權(quán)標(biāo)化源XML的方法的示例性流程圖320。本發(fā)明不限于這里參考流程圖320描述的實(shí)施例。相反,相關(guān)領(lǐng)域的技術(shù)人員在閱讀這里提供的教示后顯見的是,其它功能流程圖也在本發(fā)明的范圍內(nèi)。該過程以框322開始,其中該過程立即進(jìn)行到框324。
框324中,來自應(yīng)用程序的XML串以及來自分析邏輯104的開括號(“<”)定界符被輸入零復(fù)制串分析器模塊102。零復(fù)制串分析器模塊102使用開括號定界符分析XML串,以獲得權(quán)標(biāo)的列表(框326)。權(quán)標(biāo)的列表表示XML輸入串中每個標(biāo)簽的開始。使用來自圖3A的示例性XML串302,將返回以下的權(quán)標(biāo)列表(1)uElementTag;(2)InnerTag;(3)/InnerTag;和(4)/uElementTag。每個權(quán)標(biāo)代表進(jìn)入源XML串的一索引,它表示其值,以及描述值長度的屬性。
框328中,權(quán)標(biāo)列表被返回到分析器邏輯模塊104。來自權(quán)標(biāo)列表的每個權(quán)標(biāo)都被用于形成分開的鏈接列表節(jié)點(diǎn)結(jié)構(gòu),這將參考圖3C和3D進(jìn)一步進(jìn)行描述。
圖3C和3D是描述根據(jù)本發(fā)明實(shí)施例的用于生成鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的示例性方法的流程圖204。本發(fā)明不限于這里參考流程圖204所述的實(shí)施例。相反,相關(guān)領(lǐng)域的熟練技術(shù)人員在閱讀這里提供的教示后顯見的是,其它功能流程圖也在本發(fā)明的范圍內(nèi)。該過程開始于圖3C中的框330,其中該過程立刻進(jìn)行到框332。
框332中,一權(quán)標(biāo)和一空格定界符(即“ ”)從分析器邏輯模塊104輸入零復(fù)制串分析器模塊102。
框334中,根據(jù)空格(即“ ”)定界符來分析該權(quán)標(biāo)以標(biāo)識結(jié)構(gòu)的標(biāo)簽名稱。例如,使用權(quán)標(biāo)uElementTag id=“TestValue”,零復(fù)制串分析器模塊102將利用空格定界符分析該權(quán)標(biāo)并將該權(quán)標(biāo)的兩個部分返回到分析器邏輯模塊104,即第一部分為uElementTag;且第二部分為id=“TestValue”。權(quán)標(biāo)的第一部分,uElementTag,總是包括標(biāo)簽名稱。權(quán)標(biāo)的第二部分,id=“TestValue”,可包括屬性。對于不包含空格的權(quán)標(biāo),零復(fù)制串分析器模塊102將按原樣返回該權(quán)標(biāo)。由于在這種情況中返回權(quán)標(biāo)是第一權(quán)標(biāo),所以它包括標(biāo)簽名稱。
框336中,分析器邏輯模塊104將包含標(biāo)簽名稱的權(quán)標(biāo)的第一部分連同冒號字符(即“”)定界符一起發(fā)送到零復(fù)制串分析器102。冒號定界符用于從標(biāo)簽的本地名稱中提取名稱空間。
在判斷框338中,確定包括標(biāo)簽名稱的權(quán)標(biāo)的第一字符是否以“/”開始。如果包含標(biāo)簽名稱的權(quán)標(biāo)的第一字符以“/”開始,則該標(biāo)簽是閉標(biāo)簽。在本例中,開始標(biāo)簽被清除(框340)且第一開括號(“<”)的位置被設(shè)定為保留指針(342)。隨后,過程進(jìn)行到框348。
返回到判斷框338,如果包含標(biāo)簽名稱的權(quán)標(biāo)的第一字符不以“/”開始,則該標(biāo)簽是開始標(biāo)簽。在本例中,開始標(biāo)簽被設(shè)定(框344)且下一個閉括號(“>”)處的位置被設(shè)定為保留指針(框346)。隨后,過程進(jìn)行到框348。
框348中,利用冒號定界符分析包含標(biāo)簽名稱的權(quán)標(biāo)。
圖3D的判斷框350中,確定是否在包含標(biāo)簽名稱的權(quán)標(biāo)內(nèi)找到冒號定界符。如果在該權(quán)標(biāo)內(nèi)找到冒號定界符,則冒號左邊的所有字符都被設(shè)定為名稱空間且冒號右邊的所有字符都被設(shè)定為元素的本地名稱或標(biāo)簽名稱(框352)。例如,在被分析時,開始標(biāo)簽uElementTag將“u”表示為名稱空間前綴并將“ElementTag”表示為本地標(biāo)簽名稱。如果權(quán)標(biāo)內(nèi)未找到冒號定界符,則權(quán)標(biāo)中的所有字符都表示標(biāo)簽名稱(框354)。
框356中,確定可能存在的標(biāo)簽名稱的長度以及名稱空間的長度。
框358中,可能存在的標(biāo)簽名稱和名稱空間被返回給分析器邏輯模塊104。隨后,在框360中,將權(quán)標(biāo)的第二部分傳遞到零復(fù)制串分析器模塊102。
判斷框362中,確定權(quán)標(biāo)的第二部分的第一字符是否是“/”。如果確定第一權(quán)標(biāo)的第二部分的第一字符是“/”,則該標(biāo)簽是空標(biāo)簽,且過程進(jìn)行到框364。
框364中,設(shè)定空標(biāo)簽字段232。隨后,過程進(jìn)行到框368。
返回到判斷框362,如果確定第一權(quán)標(biāo)的第二部分的第一字符不是“/”,則過程進(jìn)行到框366。
框366中,清除空標(biāo)簽字段232,且過程進(jìn)行到框368。
框368中,下一個字段236被設(shè)定為指向下一個標(biāo)簽的開始的指針。例如,在示例性XML串302中,用于開始標(biāo)簽uElementTag的下一個字段236是指向InnerTag的指針。
圖3E示出了根據(jù)本發(fā)明實(shí)施例的用于圖3A所示的示例性XML串302的示例性鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。示出了用于XML串302中的每個開始和閉標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。來自于鏈接界標(biāo)節(jié)點(diǎn)結(jié)構(gòu)的字段的箭頭指示指向?qū)嶋HXML串的指針。
第一鏈接列表節(jié)點(diǎn)結(jié)構(gòu)370代表開始標(biāo)簽uElementTag。標(biāo)簽名稱是ElementTag。ElementTag的長度是10個字符,如名稱長度字段224中所指示的。名稱空間前綴是u,且長度是一個字符,如名稱空間長度字段228中所指示的。設(shè)定開始標(biāo)簽??諛?biāo)簽是清零的。保留字段234指向開始標(biāo)簽uElementTag的閉括號。下一個字段236指向下一個標(biāo)簽,它是InnerTag。閉標(biāo)簽字段242指向uElementTag的閉標(biāo)簽,它是/uElementTag。
第二鏈接列表節(jié)點(diǎn)結(jié)構(gòu)372代表開始標(biāo)簽InnerTag。標(biāo)簽名稱是InnerTag。InnerTag的長度是8個字符,如字段224所指示的。InnerTag沒有名稱空間(這通過InnerTag中缺少冒號字符來指示)。因此,名稱空間長度是零(0),如字段228所指示的。設(shè)定開始標(biāo)簽??諛?biāo)簽是清零的。保留字段234指向開始標(biāo)簽InnerTag的閉括號。下一個字段236指向下一個標(biāo)簽,它是/InnerTag。InnerTag的父是uElementTag。閉標(biāo)簽字段242指向InnerTag的閉標(biāo)簽,它是/InnerTag。
第三鏈接列表節(jié)點(diǎn)結(jié)構(gòu)374代表閉標(biāo)簽/InnerTag。標(biāo)簽名稱是InnerTag,它的長度是8個字符。如前所述,InnerTag沒有名稱空間,因此名稱空間長度是零。開始標(biāo)簽是清零的??諛?biāo)簽是清零的。保留字段234指向閉標(biāo)簽/InnerTag的開括號。下一個字段236指向下一個標(biāo)簽,它是/uElementTag。由于節(jié)點(diǎn)結(jié)構(gòu)374表示一閉標(biāo)簽,所以剩余字段238、240和242是空。
第四鏈接列表節(jié)點(diǎn)結(jié)構(gòu)376代表閉標(biāo)簽/uElementTag。標(biāo)簽名稱是ElementTag,它的長度是10個字符。名稱空間是u,且長度是一(1)個字符。開始標(biāo)簽是清零的??諛?biāo)簽是清零的。保留字段234指向閉標(biāo)簽/uElementTag的開括號。由于節(jié)點(diǎn)結(jié)構(gòu)376表示閉標(biāo)簽并且是XML串302的最后的標(biāo)簽,下一個字段236、父字段238、對等字段240和閉標(biāo)簽字段242是空。
圖4是描述根據(jù)本發(fā)明實(shí)施例的用于確定XML串是否有效的方法的示例性流程圖206。本發(fā)明不限于這里參考流程圖206所述的實(shí)施例。相反,相關(guān)領(lǐng)域的熟練技術(shù)人員在閱讀這里提供的教示后顯見的是,其它功能流程圖也在本發(fā)明的范圍內(nèi)。該過程開始于框402,其中該過程立刻進(jìn)行到框404。
框404中,初始化堆棧。這是通過清除堆棧來完成的。
框406中,接收鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。在判斷框408中,確定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)是否表示一開始標(biāo)簽。如果確定該鏈接列表節(jié)點(diǎn)結(jié)構(gòu)表示一開始標(biāo)簽,則過程進(jìn)行到判斷框410。
判斷框410中,確定在堆棧中是否已存在開始標(biāo)簽。如果堆棧中已存在開始標(biāo)簽,則父字段238用指向堆棧頂部處的當(dāng)前項的指針填充(框412)。例如,使用圖3A中的XML串302,ElementTag是InnerTag的父。這也在圖3E的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)372中指出。隨后,過程進(jìn)行到框414。
返回到框410,如果確定堆棧中不存在開始標(biāo)簽(即堆棧為空),則該過程進(jìn)行到框414。
框414中,將當(dāng)前鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的開始標(biāo)簽置于堆棧上。隨后,過程返回到框406以接收下一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
返回到框408,如果確定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)是閉標(biāo)簽,則該過程進(jìn)行到框416???16中,堆棧頂部處的開始標(biāo)簽出棧。
框418中,出棧的開始標(biāo)簽的對等字段240用當(dāng)前閉標(biāo)簽的下一個字段指針236填充。以下的XML結(jié)構(gòu)示出了一對等<uElementTag id=””TestValue”>
<InnerTag>SampleValue</InnerTag>
<AnotherTag>AnotherValue</AnotherTag>
</uElementTag>
在以上示例中,InnerTag和AnotherTag是對等體。InnerTag和AnotherTag也是uElementTag的兩個子。隨后,過程進(jìn)行到判斷框420。
判斷框420中,確定出棧的開始標(biāo)簽是否匹配當(dāng)前的閉標(biāo)簽。如果出棧的開始標(biāo)簽匹配當(dāng)前的閉標(biāo)簽,則XML串被認(rèn)為是有效串(框422)。換句話說,XML串的語法在這點(diǎn)上是正確的。隨后,用當(dāng)前閉標(biāo)簽填充閉標(biāo)簽字段242(框424)。
判斷框426中,確定當(dāng)前的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)是否是當(dāng)前XML串的最后結(jié)構(gòu)。如果確定當(dāng)前的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)不是當(dāng)前XML串的最后結(jié)構(gòu),則過程回到框406以接收下一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
返回到判斷框426,如果確定當(dāng)前的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)是當(dāng)前XML串的最后結(jié)構(gòu),隨后過程進(jìn)行到框430,其中該過程結(jié)束。
返回到判斷框420,如果確定出棧的開始標(biāo)簽不匹配當(dāng)前閉標(biāo)簽,則XML串被認(rèn)為是無效串(框428)。隨后,過程進(jìn)行到框430,其中過程立刻結(jié)束。
當(dāng)應(yīng)用程序希望訪問包含在給定元素中的屬性時,應(yīng)用程序可向零復(fù)制串分析器102提供鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。零復(fù)制串分析器102將使用元素的保留指針以分析屬性。零復(fù)制串分析器102將返回屬性結(jié)構(gòu)(AttributeStructures)的鏈接列表,它包含進(jìn)入原始串的指針以表示屬性名稱和屬性值,以及描述這些值的長度的屬性。當(dāng)應(yīng)用程序不需要屬性分析時,使用該方法分析屬性導(dǎo)致對于多數(shù)情況較少的開銷。此外,在分析屬性時,零存儲器復(fù)制導(dǎo)致與常規(guī)分析方法相比更高的性能和更少的資源使用。
圖5A和5B是描述根據(jù)本發(fā)明實(shí)施例的用于通過鏈接列表節(jié)點(diǎn)結(jié)構(gòu)建立屬性結(jié)構(gòu)鏈接列表的示例性方法的流程圖208。本發(fā)明不限于這里參考流程圖208描述的實(shí)施例。相反,相關(guān)領(lǐng)域的熟練技術(shù)人員在閱讀這里提供的教示后顯見的是,其它功能流程圖也在本發(fā)明的范圍內(nèi)。該過程開始于圖5A中的框502,其中該過程立刻進(jìn)行到框504。
框504中,將用于開始標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)輸入零復(fù)制串分析器102。
框506中,使用來自鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的保留指針的位置,遞減該保留指針直到在XML串中找到開括號字符。開括號字符和保留指針之間的信息定義了屬性串。
框508中,使用空格字符將屬性串分析為權(quán)標(biāo)。如前所述,第一權(quán)標(biāo)是標(biāo)簽名稱。如果有的話,其余一個或多個權(quán)標(biāo)是實(shí)際屬性???10中,放棄第一權(quán)標(biāo),因為它不是一屬性。
框512中,使用等號字符來分析其余一個或多個權(quán)標(biāo)以使屬性名稱與屬性值分開。屬性名稱等效于等號左邊的所有字符且屬性值等效于等號右邊的所有字符(框514)。
框516中,利用冒號(即,””)來分析屬性名稱,以獲得前綴信息(如果有的話)。在圖5B的判斷框518中,確定是否在屬性名稱內(nèi)找到冒號字符。如果找到冒號字符,則冒號左邊的所有字符都被設(shè)定為前綴名稱且冒號右邊的所有字符都被設(shè)定為屬性名稱(框520)。如果確定在屬性名稱內(nèi)不存在冒號字符,則在框522中將整個權(quán)標(biāo)設(shè)定為屬性名稱。
框524中,確定屬性名稱、屬性值和前綴名稱的長度。如果不存在前綴名稱,則將前綴名稱的長度設(shè)為零。
框526中,如果在XML串中存在另外的屬性,則將下一個屬性字段264設(shè)定為指向下一個屬性的指針。
圖5C示出了根據(jù)本發(fā)明實(shí)施例的用于圖3A中的示例性XML串302的示例性鏈接列表屬性結(jié)構(gòu)530。如圖5C所示,僅一個屬性(即id=“TestValue”)包含于XML串302中。鏈接列表屬性結(jié)構(gòu)530內(nèi)的指針用指向XML串302內(nèi)的位置的箭頭指示。其余字段254、258和262分別指示屬性名稱、前綴名稱和屬性值的長度。由于XML串302僅包含一個屬性,所以下一個屬性字段264不包括指向XML串302內(nèi)的位置的指針。
當(dāng)應(yīng)用程序希望訪問元素內(nèi)包含的數(shù)據(jù)時,在一個實(shí)施例中,應(yīng)用程序?qū)⑾蛄銖?fù)制串分析器模塊102給出開始鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。使用開始鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的指針,零復(fù)制串分析器模塊102將定位閉標(biāo)簽。在另一實(shí)施例中,應(yīng)用程序?qū)⑾蛄銖?fù)制串分析器模塊102給出開始和閉鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。零復(fù)制串分析器模塊102將使用傳遞給分析器102的結(jié)構(gòu)的開始和閉標(biāo)簽的保留指針來確定數(shù)據(jù)段,并隨后將數(shù)據(jù)段返回到應(yīng)用程序。
圖6A是描述根據(jù)本發(fā)明實(shí)施例的從開始和閉鏈接列表節(jié)點(diǎn)結(jié)構(gòu)獲得數(shù)據(jù)段的示例性方法的流程圖210。本發(fā)明不限于這里參考流程圖210所述的實(shí)施例。相反,相關(guān)領(lǐng)域的熟練技術(shù)人員在閱讀這里提供的教示后顯見的是,其它功能流程圖也在本發(fā)明的范圍內(nèi)。該過程開始于框602,其中該過程立刻進(jìn)行到框604。
框604中,接收到用于相應(yīng)開始和閉標(biāo)簽兩者的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
框606中,使用開始和閉標(biāo)簽的保留指針,確定數(shù)據(jù)段。用于開始標(biāo)簽的保留指針指向閉括號,且用于閉標(biāo)簽的保留指針指向開括號。因此,數(shù)據(jù)段是這兩個保留指針之間的所有字符。圖6B示出了根據(jù)本發(fā)明實(shí)施例的從圖3A中的示例性XML串提取的數(shù)據(jù)。用于InnerTag的開始標(biāo)簽的保留指針610指向InnerTag的閉括號,同時用于/InnerTag的閉標(biāo)簽的保留指針612指向/InnerTag的開或開始括號。因此,SampleValue614是所述數(shù)據(jù)段,因為它位于保留指針610和612之間。
框608中,將該數(shù)據(jù)段返回給應(yīng)用程序。
本發(fā)明實(shí)施例的某些方面可用硬件、軟件或其組合實(shí)現(xiàn)并可以在一個或多個計算機(jī)系統(tǒng)或其它處理系統(tǒng)中實(shí)現(xiàn)。事實(shí)上,在一個實(shí)施例中,這些方法可以在諸如移動或固定計算機(jī)、個人數(shù)字助理(PDA)、機(jī)頂盒、移動電話和尋呼機(jī)的可編程機(jī)器以及各自包括處理器、處理器可讀取的存儲媒介(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入裝置和一個或多個輸出裝置的其它電子裝置上執(zhí)行的程序中實(shí)現(xiàn)。將程序代碼應(yīng)用于使用輸入裝置輸入的數(shù)據(jù)以執(zhí)行所描述的功能并產(chǎn)生輸出信息。輸出信息可應(yīng)用于一個或多個輸出裝置。本領(lǐng)域的普通技術(shù)人員將理解,本發(fā)明的實(shí)施例可用各種計算機(jī)系統(tǒng)配置實(shí)施,包括微處理器系統(tǒng)、微型計算機(jī)、大型機(jī)計算機(jī)等。本發(fā)明的實(shí)施例也可在分布式計算環(huán)境中實(shí)施,在分布式計算環(huán)境中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理裝置執(zhí)行。
每個程序都可以同處理系統(tǒng)通信的高級過程編成語言或面向?qū)ο蟮木幊陶Z言實(shí)現(xiàn)。但是如需要,程序也可以匯編或機(jī)器語言實(shí)現(xiàn)。無論如何,可以編譯或解釋語言。
程序指令可用于使得用這些指令編程的通用或?qū)S锰幚硐到y(tǒng)執(zhí)行這里所述的方法?;蛘?,這些方法可以通過包含用于執(zhí)行這些方法的硬件邏輯的特殊硬件組件或者通過編程的計算機(jī)組件和定制的硬件組件的任何組合執(zhí)行。這里所述的方法可作為包含機(jī)器可讀媒介的計算機(jī)程序產(chǎn)品提供,該機(jī)器可讀媒介上存儲有用于編程處理系統(tǒng)或其它電子裝置以執(zhí)行方法的指令。這里使用的術(shù)語“機(jī)器可讀媒介”或“機(jī)器可訪問媒介”應(yīng)包括能存儲或編碼用于由機(jī)器執(zhí)行并使得機(jī)器執(zhí)行這里所述的任一方法的指令序列的任何媒介。因此,術(shù)語“機(jī)器可讀媒介”和“機(jī)器可訪問媒介”應(yīng)包括,但不限于,固態(tài)存儲器、光盤或磁盤、以及編碼數(shù)據(jù)信號的載波。此外,本領(lǐng)域中使一種或另一種形式的軟件(例如,程序、過程、進(jìn)程、應(yīng)用程序、模塊、邏輯等)執(zhí)行動作或引發(fā)結(jié)果是普通的。這種表達(dá)僅僅是語句處理器系統(tǒng)執(zhí)行軟件以使處理器執(zhí)行動作或產(chǎn)生結(jié)果的簡寫方法。
雖然以上已描述了本發(fā)明的各種實(shí)施例,但應(yīng)理解它們僅僅是作為示例而非限制。本領(lǐng)域的熟練技術(shù)人員應(yīng)理解,可以在其中進(jìn)行形式和細(xì)節(jié)方面的各種變化而不背離所附權(quán)利要求書所限定的本發(fā)明的精神和范圍。因此,本發(fā)明的范圍不應(yīng)由任何上述示例性實(shí)施例限制,但應(yīng)根據(jù)以下權(quán)利要求書和它們的等效物限定。
權(quán)利要求
1.一種用于分開標(biāo)記語言語句的方法,包括將輸入串轉(zhuǎn)換為鏈接列表節(jié)點(diǎn)結(jié)構(gòu);驗證所述輸入串語法;從包括屬性的所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中建立鏈接列表屬性結(jié)構(gòu);從包括數(shù)據(jù)的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中獲得數(shù)據(jù)段;以及釋放所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和屬性結(jié)構(gòu)。
2.如權(quán)利要求1所述的方法,其特征在于,釋放所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和屬性結(jié)構(gòu)刪除了鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu),同時維持所述鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu)內(nèi)定義的指向輸入串的指針,所述指針確定了在所述輸入串內(nèi)包含的多個元素中的每一個內(nèi)的數(shù)據(jù)和屬性。
3.如權(quán)利要求2所述的方法,其特征在于,所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)內(nèi)的指針包括指向標(biāo)簽名稱、名稱空間、保留位置、下一標(biāo)簽、父元素、對等元素和閉標(biāo)簽的一個或多個指針。
4.如權(quán)利要求2所述的方法,其特征在于,所述鏈接列表屬性結(jié)構(gòu)內(nèi)的指針包括指向?qū)傩悦Q、屬性值、前綴名稱和下一屬性的一個或多個指針。
5.如權(quán)利要求3所述的方法,其特征在于,指向所述保留位置的指針包括指向用于開始標(biāo)簽的下一閉括號的指針以及指向用于閉標(biāo)簽的開括號的指針。
6.如權(quán)利要求1所述的方法,其特征在于,將輸入串轉(zhuǎn)換為鏈接列表節(jié)點(diǎn)結(jié)構(gòu)包括接收輸入串和作為定界符的開括號字符;根據(jù)所述開括號定界符分析所述輸入串;返回權(quán)標(biāo)的鏈接列表,其中分析鏈接列表中的每個權(quán)標(biāo)以提供一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
7.如權(quán)利要求6所述的方法,其特征在于,分析鏈接列表中的每個權(quán)標(biāo)以提供一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)包括確定所述權(quán)標(biāo)是否以短斜線(“/”)開始;如果所述權(quán)標(biāo)不以短斜線開始,則設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的開始標(biāo)簽字段,以及如果所述權(quán)標(biāo)以短斜線開始,則清除所述開始標(biāo)簽字段;如果在權(quán)標(biāo)中找到空格字符,則根據(jù)作為定界符的空格字符分析所述權(quán)標(biāo)以將權(quán)標(biāo)分成第一部分和第二部分;如果在權(quán)標(biāo)內(nèi)找到空格字符,在鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中設(shè)定名稱空間指針,指向用于名稱空間的權(quán)標(biāo)的第一部分中的第一字符,名稱空間的長度從權(quán)標(biāo)的第一部分中的第一字符跨到權(quán)標(biāo)的第一部分中冒號前的字符;設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的標(biāo)簽名稱指針,指向用于標(biāo)簽名稱的權(quán)標(biāo)的第一部分中的冒號右邊的字符,標(biāo)簽名稱的長度從冒號右邊的字符跨到權(quán)標(biāo)的第一部分的最后一個字符;如果未在權(quán)標(biāo)內(nèi)找到空格字符,在鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中設(shè)定標(biāo)簽名稱指針,指向權(quán)標(biāo)中的字符,標(biāo)簽名稱的長度就是權(quán)標(biāo)的長度;設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的名稱空間指針作為一空指針,名稱空間的長度為零;以及設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的下一字段指針,以指向下一權(quán)標(biāo)的開始。
8.如權(quán)利要求7所述的方法,其特征在于,還包括如果權(quán)標(biāo)是開始標(biāo)簽,則在鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中設(shè)定保留指針以指向權(quán)標(biāo)末端處的閉括號,以及如果權(quán)標(biāo)是閉標(biāo)簽,則設(shè)定保留指針以指向權(quán)標(biāo)開始處的開括號。
9.如權(quán)利要求7所述的方法,其特征在于,還包括確定權(quán)標(biāo)的第二部分的第一字符是否以短斜線開始;如果所述權(quán)標(biāo)的第二部分以短斜線開始,則設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的空標(biāo)簽字段;以及如果所述權(quán)標(biāo)的第二部分未以短斜線開始,則清除鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的空標(biāo)簽字段。
10.如權(quán)利要求1所述的方法,其特征在于,驗證輸入串語法包括初始化一堆棧;接收用于輸入串的鏈接列表節(jié)點(diǎn)結(jié)構(gòu);確定所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)是否表示開始標(biāo)簽和閉標(biāo)簽之一;如果鏈接列表節(jié)點(diǎn)結(jié)構(gòu)表示一當(dāng)前的開始標(biāo)簽,如果所述堆棧不空,則用指向堆棧頂部處的開始標(biāo)簽的指針填充鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的父字段;以及將所述當(dāng)前開始標(biāo)簽置于堆棧上;如果鏈接列表節(jié)點(diǎn)結(jié)構(gòu)表示一當(dāng)前的閉標(biāo)簽,出棧堆棧頂部處的開始標(biāo)簽;用指向當(dāng)前閉標(biāo)簽的下一字段指針的指針填充所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的對等字段;確定所述當(dāng)前閉標(biāo)簽是否匹配出棧的開始標(biāo)簽;如果當(dāng)前閉標(biāo)簽不匹配出棧的開始標(biāo)簽,則將輸入串表示成無效;以及如果當(dāng)前閉標(biāo)簽匹配出棧的開始標(biāo)簽,則將所述輸入串表示成有效并用當(dāng)前的閉標(biāo)簽填充鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的閉標(biāo)簽;以及如果輸入串有效且如果鏈接列表節(jié)點(diǎn)結(jié)構(gòu)不是用于輸入串的最后的鏈接列表節(jié)點(diǎn)結(jié)構(gòu),則利用來自輸入串的下一鏈接列表節(jié)點(diǎn)結(jié)構(gòu)重復(fù)以上過程,堆棧的初始化除外。
11.如權(quán)利要求1所述的方法,其特征在于,從包括屬性的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中建立鏈接列表屬性結(jié)構(gòu)包括接收用于開始標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu);使用鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的保留指針,遞減保留指針的位置,直到在輸入串中找到開括號字符,其中開括號字符與保留指針之間的所有字符表示一屬性串;利用作為定界符的空格字符分析所述屬性串以提供屬性串的第一部分和屬性串的第二部分;放棄屬性串的第一部分;利用作為定界符的等號來分析屬性串的第二部分;在鏈接列表屬性結(jié)構(gòu)中設(shè)定屬性值指針,指向?qū)傩源牡诙糠值牡忍栕址蟮牡谝蛔址?,屬性值長度從屬性串的第二部分的第一字符跨到屬性串的第二部分的末端;利用作為定界符的冒號分析屬性串的第一部分;如果在屬性串的第一部分中找到冒號字符,設(shè)定鏈接列表屬性結(jié)構(gòu)中的前綴名稱指針指向?qū)傩源牡谝徊糠种械牡谝蛔址熬Y名稱長度從屬性串的第一部分中的第一字符跨到屬性串的第一部分中冒號前的字符;設(shè)定鏈接列表屬性結(jié)構(gòu)中的屬性名稱指針指向?qū)傩源牡谝徊糠种械拿疤柡蟮牡谝蛔址?,屬性名稱長度從屬性串的第一部分中的冒號后的第一字符跨到屬性串的第一部分的最后一個字符;如果未在屬性串的第一部分中找到冒號字符,在鏈接列表屬性結(jié)構(gòu)中設(shè)定前綴名稱指針作為空指針,其中前綴名稱的長度為零;在鏈接列表屬性結(jié)構(gòu)中設(shè)定屬性名稱指針作為屬性串的第一部分的第一字符,屬性名稱的長度就是屬性串的第一部分的長度;以及在鏈接列表屬性結(jié)構(gòu)中設(shè)定下一屬性字段以指向輸入串中的下一屬性。
12.如權(quán)利要求1所述的方法,其特征在于,從包括數(shù)據(jù)的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中獲得數(shù)據(jù)段包括接收用于相應(yīng)開始和閉標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu);以及使用用于開始和閉標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的保留指針以確定所述數(shù)據(jù)段,其中所述數(shù)據(jù)段包括開始標(biāo)簽的保留指針和閉標(biāo)簽的保留指針之間的數(shù)據(jù)。
13.如權(quán)利要求1所述的方法,其特征在于,所述輸入串包括XML(可擴(kuò)展標(biāo)記語言)輸入串。
14.一種制品,包括具有多個機(jī)器可訪問指令的存儲媒介,其中當(dāng)這些指令由處理器執(zhí)行時,這些指令用于將輸入串轉(zhuǎn)換為鏈接列表節(jié)點(diǎn)結(jié)構(gòu);驗證所述輸入串語法;從包括屬性的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中建立鏈接列表屬性結(jié)構(gòu);從包括數(shù)據(jù)的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中獲得數(shù)據(jù)段;以及釋放所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和屬性結(jié)構(gòu)。
15.如權(quán)利要求14所述的制品,其特征在于,釋放所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和屬性結(jié)構(gòu)刪除了鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu),同時維持所述鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu)內(nèi)定義的指向輸入串的指針,所述指針確定了所述輸入串內(nèi)包含的多個元素中的每一個內(nèi)的數(shù)據(jù)和屬性。
16.如權(quán)利要求15所述的制品,其特征在于,所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)內(nèi)的指針包括指向標(biāo)簽名稱、名稱空間、保留位置、下一標(biāo)簽、父元素、對等元素和閉標(biāo)簽的一個或多個指針。
17.如權(quán)利要求15所述的制品,其特征在于,所述鏈接列表屬性結(jié)構(gòu)內(nèi)的指針包括指向?qū)傩悦Q、屬性值、前綴名稱和下一屬性的一個或多個指針。
18.如權(quán)利要求16所述的制品,其特征在于,指向所述保留位置的指針包括指向用于開始標(biāo)簽的下一閉括號的指針以及指向用于閉標(biāo)簽的開括號的指針。
19.如權(quán)利要求14所述的制品,其特征在于,用于將輸入串轉(zhuǎn)換為鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的指令包括用于下列功能的指令接收輸入串和作為定界符的開括號字符;根據(jù)所述開括號定界符分析所述輸入串;返回權(quán)標(biāo)的鏈接列表,其中分析鏈接列表中的每個權(quán)標(biāo)以提供一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
20.如權(quán)利要求19所述的制品,其特征在于,用于分析鏈接列表中的每個權(quán)標(biāo)以提供一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的指令包括用于下列功能的指令確定所述權(quán)標(biāo)是否以短斜線(“/”)開始;如果所述權(quán)標(biāo)不以短斜線開始,則設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的開始標(biāo)簽字段,以及如果所述權(quán)標(biāo)以短斜線開始,則清除所述開始標(biāo)簽字段;如果在權(quán)標(biāo)中找到空格字符,則根據(jù)作為定界符的空格字符分析所述權(quán)標(biāo)以將權(quán)標(biāo)分成第一部分和第二部分;如果在權(quán)標(biāo)內(nèi)找到空格字符,在鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中設(shè)定名稱空間指針指向用于名稱空間的權(quán)標(biāo)的第一部分中的第一字符,名稱空間的長度從權(quán)標(biāo)的第一部分中的第一字符跨到權(quán)標(biāo)的第一部分中冒號前的字符;設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的標(biāo)簽名稱指針指向用于標(biāo)簽名稱的權(quán)標(biāo)的第一部分中的冒號右邊的字符,標(biāo)簽名稱的長度從冒號右邊的字符跨到權(quán)標(biāo)的第一部分的最后一個字符;如果未在權(quán)標(biāo)內(nèi)找到空格字符,在鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中設(shè)定標(biāo)簽名稱指針指向權(quán)標(biāo)中的字符,標(biāo)簽名稱的長度就是權(quán)標(biāo)的長度;設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的名稱空間指針作為一空指針,名稱空間的長度為零;以及設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的下一字段指針以指向下一權(quán)標(biāo)的開始。
21.如權(quán)利要求20所述的制品,其特征在于,還包括用于下列功能的指令如果權(quán)標(biāo)是開始標(biāo)簽,則在鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中設(shè)定保留指針以指向權(quán)標(biāo)末端處的閉括號,以及如果權(quán)標(biāo)是閉標(biāo)簽,則設(shè)定保留指針以指向權(quán)標(biāo)開始處的開括號。
22.如權(quán)利要求20所述的制品,其特征在于,還包括指令用于確定權(quán)標(biāo)的第二部分的第一字符是否以短斜線開始;如果所述權(quán)標(biāo)的第二部分以短斜線開始,則設(shè)定鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的空標(biāo)簽字段;以及如果所述權(quán)標(biāo)的第二部分未以短斜線開始,則清除鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的空標(biāo)簽字段。
23.如權(quán)利要求14所述的制品,其特征在于,用于驗證輸入串語法的指令包括用于下列功能的指令初始化一堆棧;接收用于輸入串的鏈接列表節(jié)點(diǎn)結(jié)構(gòu);確定所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)是否表示開始標(biāo)簽和閉標(biāo)簽之一;如果鏈接列表節(jié)點(diǎn)結(jié)構(gòu)表示一當(dāng)前的開始標(biāo)簽,如果所述堆棧不空,則用指向堆棧頂部處的開始標(biāo)簽的指針填充鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的父字段;以及將所述當(dāng)前開始標(biāo)簽置于堆棧上;如果鏈接列表節(jié)點(diǎn)結(jié)構(gòu)表示一當(dāng)前的閉標(biāo)簽,出棧堆棧頂部處的開始標(biāo)簽;用指向當(dāng)前閉標(biāo)簽的下一字段指針的指針填充所述鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的對等字段;確定所述當(dāng)前閉標(biāo)簽是否匹配出棧的開始標(biāo)簽;如果當(dāng)前閉標(biāo)簽不匹配出棧的開始標(biāo)簽,則將輸入串表示為無效;以及如果當(dāng)前閉標(biāo)簽匹配出棧的開始標(biāo)簽,則將所述輸入串表示為有效并用當(dāng)前的閉標(biāo)簽填充鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的閉標(biāo)簽;以及如果輸入串有效且如果鏈接列表節(jié)點(diǎn)結(jié)構(gòu)不是用于輸入串的最后的鏈接列表節(jié)點(diǎn)結(jié)構(gòu),則利用來自輸入串的下一個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)重復(fù)以上過程,堆棧的初始化除外。
24.如權(quán)利要求14所述的制品,其特征在于,用于從包括屬性的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中建立鏈接列表屬性結(jié)構(gòu)的指令包括指令用于接收用于開始標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu);使用鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中的保留指針,遞減保留指針的位置,直到在輸入串中找到開括號字符,其中開括號字符與保留指針之間的所有字符表示一屬性串;利用作為定界符的空格字符分析所述屬性串以提供屬性串的第一部分和屬性串的第二部分;放棄屬性串的第一部分;利用作為定界符的等號來分析屬性串的第二部分;在鏈接列表屬性結(jié)構(gòu)中設(shè)定屬性值指針指向?qū)傩源牡诙糠值牡忍栕址蟮牡谝蛔址?,屬性值長度從屬性串的第二部分的第一字符跨到屬性串的第二部分的末端;利用作為定界符的冒號分析屬性串的第一部分;如果在屬性串的第一部分中找到冒號字符,在鏈接列表屬性結(jié)構(gòu)中設(shè)定前綴名稱指針指向?qū)傩源牡谝徊糠种械牡谝蛔址?,前綴名稱長度從屬性串的第一部分中的第一字符跨到屬性串的第一部分中冒號前的字符;在鏈接列表屬性結(jié)構(gòu)中設(shè)定屬性名稱指針指向?qū)傩源牡谝徊糠种械拿疤柡蟮牡谝蛔址?,所述名稱長度從屬性串的第一部分中的冒號后的第一字符跨到屬性串的第一部分的最后一個字符;如果未在屬性串的第一部分中找到冒號字符,在鏈接列表屬性結(jié)構(gòu)中設(shè)定前綴名稱指針作為空指針,其中前綴名稱的長度為零;在鏈接列表屬性結(jié)構(gòu)中設(shè)定屬性名稱指針作為屬性串的第一部分的第一字符,屬性名稱的長度就是屬性串的第一部分的長度;以及在鏈接列表屬性結(jié)構(gòu)中設(shè)定下一屬性字段以指向輸入串中的下一屬性。
25.如權(quán)利要求14所述的制品,其特征在于,用于從包括數(shù)據(jù)的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)中獲得數(shù)據(jù)段的指令包括用于下列功能的指令接收用于相應(yīng)開始和閉標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu);以及使用用于開始和閉標(biāo)簽的鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的保留指針以確定所述數(shù)據(jù)段,其中所述數(shù)據(jù)段包括開始標(biāo)簽的保留指針和閉標(biāo)簽的保留指針之間的數(shù)據(jù)。
26.如權(quán)利要求14所述的制品,其特征在于,所述輸入串包括XML(可擴(kuò)展標(biāo)記語言)輸入串。
27.一種用于分開標(biāo)記語言語句的系統(tǒng),包括零復(fù)制串分析器;以及與所述零復(fù)制串分析器耦合的邏輯分析器,其中所述零復(fù)制串分析器和邏輯分析器交互以分析來自應(yīng)用程序的輸入串而不將所述輸入串復(fù)制入存儲器。
28.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述零復(fù)制串分析器包括單程分析器。
29.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述邏輯分析器包括分析XML(可擴(kuò)展標(biāo)記語言)串所需的邏輯。
30.如權(quán)利要求27所述的系統(tǒng),其特征在于,所述輸入串包括與所述輸入串相關(guān)聯(lián)的長度,以及所述邏輯分析器提供定界符給零復(fù)制串分析器以使所述零復(fù)制串分析器能將輸入串分析為一個或多個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。
31.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述一個或多個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)包括指向輸入串的指針以使所述零復(fù)制串分析器能進(jìn)一步利用所述指針分析輸入串以建立鏈接列表屬性結(jié)構(gòu),所述鏈接列表屬性結(jié)構(gòu)包括指向輸入串內(nèi)發(fā)現(xiàn)的一個或多個屬性的附加指針。
32.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述一個或多個鏈接列表節(jié)點(diǎn)結(jié)構(gòu)包括指向輸入串的保留指針以使零復(fù)制串分析器能進(jìn)一步分析輸入串以獲得輸入串中包含的元素內(nèi)找到的數(shù)據(jù)。
全文摘要
一種用于分析XML串的系統(tǒng)和方法。根據(jù)該方法,將輸入串變換為鏈接列表節(jié)點(diǎn)結(jié)構(gòu)。驗證輸入串的語法。使用包括屬性的鏈接列表節(jié)點(diǎn)結(jié)構(gòu),建立鏈接列表屬性結(jié)構(gòu)。使用來自鏈接列表節(jié)點(diǎn)結(jié)構(gòu)的保留指針,獲得輸入串內(nèi)的數(shù)據(jù)段。釋放鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和屬性結(jié)構(gòu)。釋放鏈接列表節(jié)點(diǎn)結(jié)構(gòu)和屬性結(jié)構(gòu)刪除了鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu)同時維持鏈接列表節(jié)點(diǎn)和屬性結(jié)構(gòu)內(nèi)限定的指向輸入串的指針,這些指針定義了輸入串內(nèi)包含的多個元素中的每一個內(nèi)的數(shù)據(jù)和屬性。
文檔編號G06F9/45GK1898644SQ200480035984
公開日2007年1月17日 申請日期2004年12月1日 優(yōu)先權(quán)日2003年12月18日
發(fā)明者B·羅伊, Y·圣希萊爾, N·基迪 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
南京市| 翼城县| 乌海市| 黎川县| 鱼台县| 柘荣县| 河西区| 鄢陵县| 双辽市| 铅山县| 左云县| 久治县| 边坝县| 灌阳县| 诸暨市| 哈尔滨市| 册亨县| 合阳县| 齐河县| 新河县| 怀化市| 高雄市| 英山县| 喜德县| 敦化市| 崇阳县| 天长市| 武鸣县| 红安县| 正镶白旗| 库车县| 奎屯市| 海晏县| 乐至县| 颍上县| 桐庐县| 闻喜县| 苏尼特左旗| 温泉县| 濉溪县| 公主岭市|