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

文档序号:6501687阅读:171来源:国知局
专利名称:有效的小占用xml分析的制作方法
技术领域
本发明一般涉及因特网技术。本发明尤其涉及用于XML(可扩展标记语言)分析的系统和方法。
背景技术
扩展的无线PC(个人计算机)、数字家庭和数字办公室的首创全部基于使用XML(可扩展标记语言)的标准协议。常规XML分析器很复杂且非常不适合嵌入式装置。由于XML分析的复杂性和开销,许多装置供应商很难将这些标准协议实现入它们的装置。例如,当前的XML分析器可分成两类DOM(文档对象模型)和SAX(用于XML的简单API(应用编程接口))。
DOM分析器通过分析XML串并返回XML元素的集合进行操作。每个元素都包含关于XML文档内特殊元素的信息。为使其可能,所有信息必须被复制入返回的结构中。这导致相当多的存储器开销。
SAX分析器的设计更简单。它们是无状态前向分析器。即,使用分析器的应用程序必须包含维护状态的逻辑且被传递到该应用程序的任何数据都必须被复制入应用程序的存储器缓冲器。尽管SAX分析器的设计比DOM分析器更简单,但SAX分析器仍需要大量的存储器开销。
因此,需要一种不需要大量存储器开销的用于分析XML的系统和方法。还需要一种设计简单但需要小占用(footprint)的用于分析XML的系统和方法。进一步需要一种简单并需要较少开销的用于分析XML的系统和方法,从而使设备供应商能将XML分析加入它们的设备中。


这里结合附图构成说明书的一部分,附图示出了本发明的实施例并与描述部分一起进一步用于说明本发明的原理并使相关领域的熟练技术人员实施和使用本发明。附图中,相同的标号一般表示相同的、功能相似的和/或结构相似的元件。首先出现元件的附图由相应标号中的最左面的数字指出。
图1是示出根据本发明实施例的用于分析XML串的示例系统的框图。
图2A是描述根据本发明实施例的用于分析XML串的示例方法的流程图。
图2B示出了根据本发明实施例的示例性链接列表节点结构。
图2C示出了根据本发明实施例的示例性链接列表属性结构。
图3A示出了示例性XML串。
图3B是描述根据本发明实施例的用于权标化源XML的方法的示例性流程图。
图3C和3D是描述根据本发明实施例的用于生成链接列表节点结构的示例性方法的流程图。
图3E示出了根据本发明实施例的用于图3A所示的示例性XML串的示例性链接列表节点结构。
图4是描述根据本发明实施例的用于确定XML串是否有效的示例性方法的流程图。
图5A和5B是描述根据本发明实施例的用于从链接列表节点结构中建立属性结构的链接列表的示例性方法的流程图。
图5C示出了根据本发明实施例的用于图3A中的示例性XML串的示例性链接列表属性结构。
图6A是描述根据本发明实施例的从开始和关闭链接列表节点结构中获得数据的示例性方法的流程图。
图6B示出了根据本发明实施例的从图3A中的示例性XML串提取的数据。
具体实施例方式
虽然这里参考用于特殊应用的说明性实施例描述了本发明,但应理解,本发明不限于此。接触这里提供的教示的相关技术领域中的熟练技术人员将理解其范围以及本发明实施例明显有用的其它领域内的附加修改、应用和实施例。
说明书中对本发明的“一个实施例”、“一实施例”或“另一实施例”的引用意味着联系该实施例描述的特殊特点、结构或特征包含在本发明的至少一个实施例中。因此,贯穿说明书各处出现的短语“在一个实施例中”或“在一实施例中”不必都指同一实施例。
本发明的实施例针对不需要大量存储器开销的用于分析XML的系统和方法。本发明通过使用零存储器复制实现这点,从而形成具有较小占用的非常有效的分析器。尽管相对于XML描述了本发明的实施例,也可应用其它类型的标记语言。
图1是示出用于分析XML的系统100的示例性框图。系统100包括零复制串分析器模块102和分析器逻辑模块104。零复制串分析器模块102与分析器逻辑模块104耦合。
零复制串分析器模块102负责分析XML串而不复制任何数据。零复制串分析器模块102是单程分析器,因此从应用程序接收的输入串是只读一次的。
如图1所示,分析器逻辑模块104构建于零复制串分析器模块102之上。分析器逻辑模块104包含分析XML实体所需的逻辑。因此,分析器逻辑模块104与零复制串分析器模块102交互以分析XML串而不必将XML串复制入存储器。
零复制串分析器模块102从一应用程序接收要分析的输入串以及该输入串的长度。分析逻辑模块104向零复制串分析器模块102提供定界符以便分析,从而使得零复制串分析器模块102能权标化该串。每个权标将一索引包括到源XML串(即,输入串)中,该索引表示其值和描述该值长度的属性,以及描述值长度的属性。一旦该串已被权标化,使用权标构建链接列表节点结构并使用链接列表节点结构构建链接列表属性结构。该节点和属性结构包含指向源XML串的指针。从存储器中释放链接列表节点和属性结构同时保持与源XML串相关联的指针。在删除结构的同时保持这些指针避免了必须复制XML串,从而最小化存储器开销。
在权标化该串后,零复制串分析器模块12将把每个权标发送给分析逻辑模块104以建立链接列表节点结构。在接收到这些权标时,分析逻辑模块104一次一个地将权标连同权标长度和定界符一起返回给零复制串分析器模块102。零复制串分析器模块102随后将使用定界符分析该权标以获得用于链接列表节点结构的指针。该过程持续到已正确地分析了所有权标。一旦建立了链接列表节点结构,将该链接列表节点结构用于建立链接列表属性结构以向XML串中包含的属性提供指针。也可以使用来自链接列表节点结构的指针提取XML串内的数据。
至少五个定界符被用于分析一XML串。定界符包括,但不限于,开括号“<”、空格“ ”、冒号“”、等于号“=”以及闭括号“>”。逻辑分析器模块104分析权标并向零复制串分析器102提供合适的定界符以分析每个权标。现在将参考图2A描述分析XML串的过程。
图2A是描述根据本发明实施例的用于分析XML串的示例性方法的流程图200。本发明不限于这里参考流程图200描述的实施例。相反,相关领域的熟练技术人员在阅读这里的教示后显见的是其它功能流程图也在本发明的范围内。该过程开始于框202,其中过程立刻进行到框204。
框204中,从应用程序输入零复制串分析器模块102的XML串被转换成节点结构的链接列表。XML串中的每个元素都被转换成两个节点结构;用于开始标签的一个节点结构和用于结束标签的一个节点结构。
图2B示出了根据本发明实施例的示例性节点结构220。节点结构220包括名称字段222、名称长度字段224、名称空间字段226、名称空间长度字段228、开始标签字段230、空标签字段232、保留字段234、下一个字段236、父字段238、对等字段240和闭标签字段242。
名称字段222表示元素标签的名称。名称长度字段224表示元素标签名称的长度。名称空间字段226表示与元素标签相关联的任何前缀的名称。名称空间长度字段228表示与元素标签相关联的任何前缀的长度。
开始标签字段230表示一标记,它在被设定时指定该元素标签是开始标签。当开始标签字段230被清除时,该标签是关闭标签。空标签字段232表示一标记,它在被设定时指示元素标签是空标签。空标签是自身备用的标签。换句话说,空标签不包含任何内容。空标签用短斜线和闭括号(即“/>”)结束,代替闭括号(即“>”)。
如果标签是开始标签,保留字段234可表示下一个闭括号(即“>”)处的位置。如果标签是闭标签,保留字段234可表示第一个开括号(即“<”)的位置。下一个字段236表示指向下一个节点结构的指针。
父字段238表示指向父元素的开元素的指针。父元素是包围嵌套元素的元素。对等字段240表示指向对等元素的开元素的指针。对等元素是与另一元素共同定位的元素。换句话说,对等元素处于同一水平。例如,具有同一父元素的子元素是对等元素。闭标签字段242表示指向元素标签的闭元素的指针。
返回到图2中的框204,最初填充节点结构220内的某些字段。这些字段包括名称字段222、名称长度字段、名称空间字段226、名称空间长度字段228、开始标签字段230、空标签字段232、保留字段234和下一个字段236。名称、名称空间、保留和下一个字段是指向源XML串的指针。以下参考图3B-3D进一步描述用于从XML串中确定链接列表节点结构的方法。
框206中,验证XML输入串的语法以确定输入串是否有效。这是通过验证每个元素是否被正确地打开和关闭来完成。XML文档的一个约束在于它们被良好地构成。某些规则确定XML文档是否被良好地构成。一种这种规则是每个开始标签都具有闭标签,且该闭标签必须具有与开始标签相同的名称、相同的名称空间等。例如,名称为<AElementTag>的开始标签必须以名为</AElementTag>的闭标签结束。同样,所有标签必须被完全嵌套。例如,可以是<ElementTag>...<InnerTag>...</InnerTag>...</ElementTag>,但不能是<ElementTag>...<InnerTag>...</ElementTag>...</InnerTag>。
在正验证XML串时,填充链接列表节点结构的剩余字段。这些字段包括父字段238、对等字段240和闭标签字段242。以下参考图4描述用于验证XML串的语法的方法。
框208中,从链接列表节点结构建立属性结构的链接列表。示例性链接列表属性结构250在图2C中示出。链接列表属性结构250包括属性名称字段252、属性名称长度字段254、属性值字段260、前缀名称字段256、前缀名称长度字段258、属性值长度字段262和下一个属性字段264。
属性名称字段252表示属性的名称。属性名称长度字段254表示属性名称的长度。前缀名称字段256表示前缀的名称。前缀名称长度字段258表示前缀名称的长度。属性值字段260表示属性的值。属性值长度字段262表示属性值的长度。下一个属性字段264表示指向可能有的下一个属性的指针。以下参考图5A和5B描述用于建立链接列表属性结构的方法。
返回到图2A,框210中,获得来自给定节点结构的数据段。在一个实施例中,给定元素的数据可以是简单串。在一个实施例中,给定元素的数据可以是XML子树。以下参考图6A描述数据段的确定。
框212中,随后清除或释放节点结构链接列表和属性结构链接列表,仅留下指向原始XML串的指针。
在描述用于建立链接列表节点结构和链接列表属性结构的方法之前,将描述在描述这些方法时将引用到的示例性XML串。图3A示出了示例性XML串302。XML串302包括名为“uElementTag”的开始标签304、名为“id”的属性306、名为“TestValue”的属性值308、名为“InnerTag”的开始标签310、名为“SampleValue”的文本数据312、名为“InnerTag”的闭标签314以及名为“uElementTag”的闭标签316。每个开始标签304和310都分别具有相匹配的闭标签316和314。因此,每个开始标签都由开括号“<”标识且每个闭标签都由开括号紧接短斜线”</”标识。
图3B是描述根据本发明实施例的用于权标化源XML的方法的示例性流程图320。本发明不限于这里参考流程图320描述的实施例。相反,相关领域的技术人员在阅读这里提供的教示后显见的是,其它功能流程图也在本发明的范围内。该过程以框322开始,其中该过程立即进行到框324。
框324中,来自应用程序的XML串以及来自分析逻辑104的开括号(“<”)定界符被输入零复制串分析器模块102。零复制串分析器模块102使用开括号定界符分析XML串,以获得权标的列表(框326)。权标的列表表示XML输入串中每个标签的开始。使用来自图3A的示例性XML串302,将返回以下的权标列表(1)uElementTag;(2)InnerTag;(3)/InnerTag;和(4)/uElementTag。每个权标代表进入源XML串的一索引,它表示其值,以及描述值长度的属性。
框328中,权标列表被返回到分析器逻辑模块104。来自权标列表的每个权标都被用于形成分开的链接列表节点结构,这将参考图3C和3D进一步进行描述。
图3C和3D是描述根据本发明实施例的用于生成链接列表节点结构的示例性方法的流程图204。本发明不限于这里参考流程图204所述的实施例。相反,相关领域的熟练技术人员在阅读这里提供的教示后显见的是,其它功能流程图也在本发明的范围内。该过程开始于图3C中的框330,其中该过程立刻进行到框332。
框332中,一权标和一空格定界符(即“ ”)从分析器逻辑模块104输入零复制串分析器模块102。
框334中,根据空格(即“ ”)定界符来分析该权标以标识结构的标签名称。例如,使用权标uElementTag id=“TestValue”,零复制串分析器模块102将利用空格定界符分析该权标并将该权标的两个部分返回到分析器逻辑模块104,即第一部分为uElementTag;且第二部分为id=“TestValue”。权标的第一部分,uElementTag,总是包括标签名称。权标的第二部分,id=“TestValue”,可包括属性。对于不包含空格的权标,零复制串分析器模块102将按原样返回该权标。由于在这种情况中返回权标是第一权标,所以它包括标签名称。
框336中,分析器逻辑模块104将包含标签名称的权标的第一部分连同冒号字符(即“”)定界符一起发送到零复制串分析器102。冒号定界符用于从标签的本地名称中提取名称空间。
在判断框338中,确定包括标签名称的权标的第一字符是否以“/”开始。如果包含标签名称的权标的第一字符以“/”开始,则该标签是闭标签。在本例中,开始标签被清除(框340)且第一开括号(“<”)的位置被设定为保留指针(342)。随后,过程进行到框348。
返回到判断框338,如果包含标签名称的权标的第一字符不以“/”开始,则该标签是开始标签。在本例中,开始标签被设定(框344)且下一个闭括号(“>”)处的位置被设定为保留指针(框346)。随后,过程进行到框348。
框348中,利用冒号定界符分析包含标签名称的权标。
图3D的判断框350中,确定是否在包含标签名称的权标内找到冒号定界符。如果在该权标内找到冒号定界符,则冒号左边的所有字符都被设定为名称空间且冒号右边的所有字符都被设定为元素的本地名称或标签名称(框352)。例如,在被分析时,开始标签uElementTag将“u”表示为名称空间前缀并将“ElementTag”表示为本地标签名称。如果权标内未找到冒号定界符,则权标中的所有字符都表示标签名称(框354)。
框356中,确定可能存在的标签名称的长度以及名称空间的长度。
框358中,可能存在的标签名称和名称空间被返回给分析器逻辑模块104。随后,在框360中,将权标的第二部分传递到零复制串分析器模块102。
判断框362中,确定权标的第二部分的第一字符是否是“/”。如果确定第一权标的第二部分的第一字符是“/”,则该标签是空标签,且过程进行到框364。
框364中,设定空标签字段232。随后,过程进行到框368。
返回到判断框362,如果确定第一权标的第二部分的第一字符不是“/”,则过程进行到框366。
框366中,清除空标签字段232,且过程进行到框368。
框368中,下一个字段236被设定为指向下一个标签的开始的指针。例如,在示例性XML串302中,用于开始标签uElementTag的下一个字段236是指向InnerTag的指针。
图3E示出了根据本发明实施例的用于图3A所示的示例性XML串302的示例性链接列表节点结构。示出了用于XML串302中的每个开始和闭标签的链接列表节点结构。来自于链接界标节点结构的字段的箭头指示指向实际XML串的指针。
第一链接列表节点结构370代表开始标签uElementTag。标签名称是ElementTag。ElementTag的长度是10个字符,如名称长度字段224中所指示的。名称空间前缀是u,且长度是一个字符,如名称空间长度字段228中所指示的。设定开始标签。空标签是清零的。保留字段234指向开始标签uElementTag的闭括号。下一个字段236指向下一个标签,它是InnerTag。闭标签字段242指向uElementTag的闭标签,它是/uElementTag。
第二链接列表节点结构372代表开始标签InnerTag。标签名称是InnerTag。InnerTag的长度是8个字符,如字段224所指示的。InnerTag没有名称空间(这通过InnerTag中缺少冒号字符来指示)。因此,名称空间长度是零(0),如字段228所指示的。设定开始标签。空标签是清零的。保留字段234指向开始标签InnerTag的闭括号。下一个字段236指向下一个标签,它是/InnerTag。InnerTag的父是uElementTag。闭标签字段242指向InnerTag的闭标签,它是/InnerTag。
第三链接列表节点结构374代表闭标签/InnerTag。标签名称是InnerTag,它的长度是8个字符。如前所述,InnerTag没有名称空间,因此名称空间长度是零。开始标签是清零的。空标签是清零的。保留字段234指向闭标签/InnerTag的开括号。下一个字段236指向下一个标签,它是/uElementTag。由于节点结构374表示一闭标签,所以剩余字段238、240和242是空。
第四链接列表节点结构376代表闭标签/uElementTag。标签名称是ElementTag,它的长度是10个字符。名称空间是u,且长度是一(1)个字符。开始标签是清零的。空标签是清零的。保留字段234指向闭标签/uElementTag的开括号。由于节点结构376表示闭标签并且是XML串302的最后的标签,下一个字段236、父字段238、对等字段240和闭标签字段242是空。
图4是描述根据本发明实施例的用于确定XML串是否有效的方法的示例性流程图206。本发明不限于这里参考流程图206所述的实施例。相反,相关领域的熟练技术人员在阅读这里提供的教示后显见的是,其它功能流程图也在本发明的范围内。该过程开始于框402,其中该过程立刻进行到框404。
框404中,初始化堆栈。这是通过清除堆栈来完成的。
框406中,接收链接列表节点结构。在判断框408中,确定链接列表节点结构是否表示一开始标签。如果确定该链接列表节点结构表示一开始标签,则过程进行到判断框410。
判断框410中,确定在堆栈中是否已存在开始标签。如果堆栈中已存在开始标签,则父字段238用指向堆栈顶部处的当前项的指针填充(框412)。例如,使用图3A中的XML串302,ElementTag是InnerTag的父。这也在图3E的链接列表节点结构372中指出。随后,过程进行到框414。
返回到框410,如果确定堆栈中不存在开始标签(即堆栈为空),则该过程进行到框414。
框414中,将当前链接列表节点结构的开始标签置于堆栈上。随后,过程返回到框406以接收下一个链接列表节点结构。
返回到框408,如果确定链接列表节点结构是闭标签,则该过程进行到框416。框416中,堆栈顶部处的开始标签出栈。
框418中,出栈的开始标签的对等字段240用当前闭标签的下一个字段指针236填充。以下的XML结构示出了一对等<uElementTag id=””TestValue”>
<InnerTag>SampleValue</InnerTag>
<AnotherTag>AnotherValue</AnotherTag>
</uElementTag>
在以上示例中,InnerTag和AnotherTag是对等体。InnerTag和AnotherTag也是uElementTag的两个子。随后,过程进行到判断框420。
判断框420中,确定出栈的开始标签是否匹配当前的闭标签。如果出栈的开始标签匹配当前的闭标签,则XML串被认为是有效串(框422)。换句话说,XML串的语法在这点上是正确的。随后,用当前闭标签填充闭标签字段242(框424)。
判断框426中,确定当前的链接列表节点结构是否是当前XML串的最后结构。如果确定当前的链接列表节点结构不是当前XML串的最后结构,则过程回到框406以接收下一个链接列表节点结构。
返回到判断框426,如果确定当前的链接列表节点结构是当前XML串的最后结构,随后过程进行到框430,其中该过程结束。
返回到判断框420,如果确定出栈的开始标签不匹配当前闭标签,则XML串被认为是无效串(框428)。随后,过程进行到框430,其中过程立刻结束。
当应用程序希望访问包含在给定元素中的属性时,应用程序可向零复制串分析器102提供链接列表节点结构。零复制串分析器102将使用元素的保留指针以分析属性。零复制串分析器102将返回属性结构(AttributeStructures)的链接列表,它包含进入原始串的指针以表示属性名称和属性值,以及描述这些值的长度的属性。当应用程序不需要属性分析时,使用该方法分析属性导致对于多数情况较少的开销。此外,在分析属性时,零存储器复制导致与常规分析方法相比更高的性能和更少的资源使用。
图5A和5B是描述根据本发明实施例的用于通过链接列表节点结构建立属性结构链接列表的示例性方法的流程图208。本发明不限于这里参考流程图208描述的实施例。相反,相关领域的熟练技术人员在阅读这里提供的教示后显见的是,其它功能流程图也在本发明的范围内。该过程开始于图5A中的框502,其中该过程立刻进行到框504。
框504中,将用于开始标签的链接列表节点结构输入零复制串分析器102。
框506中,使用来自链接列表节点结构的保留指针的位置,递减该保留指针直到在XML串中找到开括号字符。开括号字符和保留指针之间的信息定义了属性串。
框508中,使用空格字符将属性串分析为权标。如前所述,第一权标是标签名称。如果有的话,其余一个或多个权标是实际属性。框510中,放弃第一权标,因为它不是一属性。
框512中,使用等号字符来分析其余一个或多个权标以使属性名称与属性值分开。属性名称等效于等号左边的所有字符且属性值等效于等号右边的所有字符(框514)。
框516中,利用冒号(即,””)来分析属性名称,以获得前缀信息(如果有的话)。在图5B的判断框518中,确定是否在属性名称内找到冒号字符。如果找到冒号字符,则冒号左边的所有字符都被设定为前缀名称且冒号右边的所有字符都被设定为属性名称(框520)。如果确定在属性名称内不存在冒号字符,则在框522中将整个权标设定为属性名称。
框524中,确定属性名称、属性值和前缀名称的长度。如果不存在前缀名称,则将前缀名称的长度设为零。
框526中,如果在XML串中存在另外的属性,则将下一个属性字段264设定为指向下一个属性的指针。
图5C示出了根据本发明实施例的用于图3A中的示例性XML串302的示例性链接列表属性结构530。如图5C所示,仅一个属性(即id=“TestValue”)包含于XML串302中。链接列表属性结构530内的指针用指向XML串302内的位置的箭头指示。其余字段254、258和262分别指示属性名称、前缀名称和属性值的长度。由于XML串302仅包含一个属性,所以下一个属性字段264不包括指向XML串302内的位置的指针。
当应用程序希望访问元素内包含的数据时,在一个实施例中,应用程序将向零复制串分析器模块102给出开始链接列表节点结构。使用开始链接列表节点结构中的指针,零复制串分析器模块102将定位闭标签。在另一实施例中,应用程序将向零复制串分析器模块102给出开始和闭链接列表节点结构。零复制串分析器模块102将使用传递给分析器102的结构的开始和闭标签的保留指针来确定数据段,并随后将数据段返回到应用程序。
图6A是描述根据本发明实施例的从开始和闭链接列表节点结构获得数据段的示例性方法的流程图210。本发明不限于这里参考流程图210所述的实施例。相反,相关领域的熟练技术人员在阅读这里提供的教示后显见的是,其它功能流程图也在本发明的范围内。该过程开始于框602,其中该过程立刻进行到框604。
框604中,接收到用于相应开始和闭标签两者的链接列表节点结构。
框606中,使用开始和闭标签的保留指针,确定数据段。用于开始标签的保留指针指向闭括号,且用于闭标签的保留指针指向开括号。因此,数据段是这两个保留指针之间的所有字符。图6B示出了根据本发明实施例的从图3A中的示例性XML串提取的数据。用于InnerTag的开始标签的保留指针610指向InnerTag的闭括号,同时用于/InnerTag的闭标签的保留指针612指向/InnerTag的开或开始括号。因此,SampleValue614是所述数据段,因为它位于保留指针610和612之间。
框608中,将该数据段返回给应用程序。
本发明实施例的某些方面可用硬件、软件或其组合实现并可以在一个或多个计算机系统或其它处理系统中实现。事实上,在一个实施例中,这些方法可以在诸如移动或固定计算机、个人数字助理(PDA)、机顶盒、移动电话和寻呼机的可编程机器以及各自包括处理器、处理器可读取的存储媒介(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和一个或多个输出装置的其它电子装置上执行的程序中实现。将程序代码应用于使用输入装置输入的数据以执行所描述的功能并产生输出信息。输出信息可应用于一个或多个输出装置。本领域的普通技术人员将理解,本发明的实施例可用各种计算机系统配置实施,包括微处理器系统、微型计算机、大型机计算机等。本发明的实施例也可在分布式计算环境中实施,在分布式计算环境中任务由通过通信网络链接的远程处理装置执行。
每个程序都可以同处理系统通信的高级过程编成语言或面向对象的编程语言实现。但是如需要,程序也可以汇编或机器语言实现。无论如何,可以编译或解释语言。
程序指令可用于使得用这些指令编程的通用或专用处理系统执行这里所述的方法。或者,这些方法可以通过包含用于执行这些方法的硬件逻辑的特殊硬件组件或者通过编程的计算机组件和定制的硬件组件的任何组合执行。这里所述的方法可作为包含机器可读媒介的计算机程序产品提供,该机器可读媒介上存储有用于编程处理系统或其它电子装置以执行方法的指令。这里使用的术语“机器可读媒介”或“机器可访问媒介”应包括能存储或编码用于由机器执行并使得机器执行这里所述的任一方法的指令序列的任何媒介。因此,术语“机器可读媒介”和“机器可访问媒介”应包括,但不限于,固态存储器、光盘或磁盘、以及编码数据信号的载波。此外,本领域中使一种或另一种形式的软件(例如,程序、过程、进程、应用程序、模块、逻辑等)执行动作或引发结果是普通的。这种表达仅仅是语句处理器系统执行软件以使处理器执行动作或产生结果的简写方法。
虽然以上已描述了本发明的各种实施例,但应理解它们仅仅是作为示例而非限制。本领域的熟练技术人员应理解,可以在其中进行形式和细节方面的各种变化而不背离所附权利要求书所限定的本发明的精神和范围。因此,本发明的范围不应由任何上述示例性实施例限制,但应根据以下权利要求书和它们的等效物限定。
权利要求
1.一种用于分开标记语言语句的方法,包括将输入串转换为链接列表节点结构;验证所述输入串语法;从包括属性的所述链接列表节点结构中建立链接列表属性结构;从包括数据的链接列表节点结构中获得数据段;以及释放所述链接列表节点结构和属性结构。
2.如权利要求1所述的方法,其特征在于,释放所述链接列表节点结构和属性结构删除了链接列表节点和属性结构,同时维持所述链接列表节点和属性结构内定义的指向输入串的指针,所述指针确定了在所述输入串内包含的多个元素中的每一个内的数据和属性。
3.如权利要求2所述的方法,其特征在于,所述链接列表节点结构内的指针包括指向标签名称、名称空间、保留位置、下一标签、父元素、对等元素和闭标签的一个或多个指针。
4.如权利要求2所述的方法,其特征在于,所述链接列表属性结构内的指针包括指向属性名称、属性值、前缀名称和下一属性的一个或多个指针。
5.如权利要求3所述的方法,其特征在于,指向所述保留位置的指针包括指向用于开始标签的下一闭括号的指针以及指向用于闭标签的开括号的指针。
6.如权利要求1所述的方法,其特征在于,将输入串转换为链接列表节点结构包括接收输入串和作为定界符的开括号字符;根据所述开括号定界符分析所述输入串;返回权标的链接列表,其中分析链接列表中的每个权标以提供一个链接列表节点结构。
7.如权利要求6所述的方法,其特征在于,分析链接列表中的每个权标以提供一个链接列表节点结构包括确定所述权标是否以短斜线(“/”)开始;如果所述权标不以短斜线开始,则设定链接列表节点结构中的开始标签字段,以及如果所述权标以短斜线开始,则清除所述开始标签字段;如果在权标中找到空格字符,则根据作为定界符的空格字符分析所述权标以将权标分成第一部分和第二部分;如果在权标内找到空格字符,在链接列表节点结构中设定名称空间指针,指向用于名称空间的权标的第一部分中的第一字符,名称空间的长度从权标的第一部分中的第一字符跨到权标的第一部分中冒号前的字符;设定链接列表节点结构中的标签名称指针,指向用于标签名称的权标的第一部分中的冒号右边的字符,标签名称的长度从冒号右边的字符跨到权标的第一部分的最后一个字符;如果未在权标内找到空格字符,在链接列表节点结构中设定标签名称指针,指向权标中的字符,标签名称的长度就是权标的长度;设定链接列表节点结构中的名称空间指针作为一空指针,名称空间的长度为零;以及设定链接列表节点结构中的下一字段指针,以指向下一权标的开始。
8.如权利要求7所述的方法,其特征在于,还包括如果权标是开始标签,则在链接列表节点结构中设定保留指针以指向权标末端处的闭括号,以及如果权标是闭标签,则设定保留指针以指向权标开始处的开括号。
9.如权利要求7所述的方法,其特征在于,还包括确定权标的第二部分的第一字符是否以短斜线开始;如果所述权标的第二部分以短斜线开始,则设定链接列表节点结构中的空标签字段;以及如果所述权标的第二部分未以短斜线开始,则清除链接列表节点结构中的空标签字段。
10.如权利要求1所述的方法,其特征在于,验证输入串语法包括初始化一堆栈;接收用于输入串的链接列表节点结构;确定所述链接列表节点结构是否表示开始标签和闭标签之一;如果链接列表节点结构表示一当前的开始标签,如果所述堆栈不空,则用指向堆栈顶部处的开始标签的指针填充链接列表节点结构中的父字段;以及将所述当前开始标签置于堆栈上;如果链接列表节点结构表示一当前的闭标签,出栈堆栈顶部处的开始标签;用指向当前闭标签的下一字段指针的指针填充所述链接列表节点结构中的对等字段;确定所述当前闭标签是否匹配出栈的开始标签;如果当前闭标签不匹配出栈的开始标签,则将输入串表示成无效;以及如果当前闭标签匹配出栈的开始标签,则将所述输入串表示成有效并用当前的闭标签填充链接列表节点结构的闭标签;以及如果输入串有效且如果链接列表节点结构不是用于输入串的最后的链接列表节点结构,则利用来自输入串的下一链接列表节点结构重复以上过程,堆栈的初始化除外。
11.如权利要求1所述的方法,其特征在于,从包括属性的链接列表节点结构中建立链接列表属性结构包括接收用于开始标签的链接列表节点结构;使用链接列表节点结构中的保留指针,递减保留指针的位置,直到在输入串中找到开括号字符,其中开括号字符与保留指针之间的所有字符表示一属性串;利用作为定界符的空格字符分析所述属性串以提供属性串的第一部分和属性串的第二部分;放弃属性串的第一部分;利用作为定界符的等号来分析属性串的第二部分;在链接列表属性结构中设定属性值指针,指向属性串的第二部分的等号字符后的第一字符,属性值长度从属性串的第二部分的第一字符跨到属性串的第二部分的末端;利用作为定界符的冒号分析属性串的第一部分;如果在属性串的第一部分中找到冒号字符,设定链接列表属性结构中的前缀名称指针指向属性串的第一部分中的第一字符,前缀名称长度从属性串的第一部分中的第一字符跨到属性串的第一部分中冒号前的字符;设定链接列表属性结构中的属性名称指针指向属性串的第一部分中的冒号后的第一字符,属性名称长度从属性串的第一部分中的冒号后的第一字符跨到属性串的第一部分的最后一个字符;如果未在属性串的第一部分中找到冒号字符,在链接列表属性结构中设定前缀名称指针作为空指针,其中前缀名称的长度为零;在链接列表属性结构中设定属性名称指针作为属性串的第一部分的第一字符,属性名称的长度就是属性串的第一部分的长度;以及在链接列表属性结构中设定下一属性字段以指向输入串中的下一属性。
12.如权利要求1所述的方法,其特征在于,从包括数据的链接列表节点结构中获得数据段包括接收用于相应开始和闭标签的链接列表节点结构;以及使用用于开始和闭标签的链接列表节点结构的保留指针以确定所述数据段,其中所述数据段包括开始标签的保留指针和闭标签的保留指针之间的数据。
13.如权利要求1所述的方法,其特征在于,所述输入串包括XML(可扩展标记语言)输入串。
14.一种制品,包括具有多个机器可访问指令的存储媒介,其中当这些指令由处理器执行时,这些指令用于将输入串转换为链接列表节点结构;验证所述输入串语法;从包括属性的链接列表节点结构中建立链接列表属性结构;从包括数据的链接列表节点结构中获得数据段;以及释放所述链接列表节点结构和属性结构。
15.如权利要求14所述的制品,其特征在于,释放所述链接列表节点结构和属性结构删除了链接列表节点和属性结构,同时维持所述链接列表节点和属性结构内定义的指向输入串的指针,所述指针确定了所述输入串内包含的多个元素中的每一个内的数据和属性。
16.如权利要求15所述的制品,其特征在于,所述链接列表节点结构内的指针包括指向标签名称、名称空间、保留位置、下一标签、父元素、对等元素和闭标签的一个或多个指针。
17.如权利要求15所述的制品,其特征在于,所述链接列表属性结构内的指针包括指向属性名称、属性值、前缀名称和下一属性的一个或多个指针。
18.如权利要求16所述的制品,其特征在于,指向所述保留位置的指针包括指向用于开始标签的下一闭括号的指针以及指向用于闭标签的开括号的指针。
19.如权利要求14所述的制品,其特征在于,用于将输入串转换为链接列表节点结构的指令包括用于下列功能的指令接收输入串和作为定界符的开括号字符;根据所述开括号定界符分析所述输入串;返回权标的链接列表,其中分析链接列表中的每个权标以提供一个链接列表节点结构。
20.如权利要求19所述的制品,其特征在于,用于分析链接列表中的每个权标以提供一个链接列表节点结构的指令包括用于下列功能的指令确定所述权标是否以短斜线(“/”)开始;如果所述权标不以短斜线开始,则设定链接列表节点结构中的开始标签字段,以及如果所述权标以短斜线开始,则清除所述开始标签字段;如果在权标中找到空格字符,则根据作为定界符的空格字符分析所述权标以将权标分成第一部分和第二部分;如果在权标内找到空格字符,在链接列表节点结构中设定名称空间指针指向用于名称空间的权标的第一部分中的第一字符,名称空间的长度从权标的第一部分中的第一字符跨到权标的第一部分中冒号前的字符;设定链接列表节点结构中的标签名称指针指向用于标签名称的权标的第一部分中的冒号右边的字符,标签名称的长度从冒号右边的字符跨到权标的第一部分的最后一个字符;如果未在权标内找到空格字符,在链接列表节点结构中设定标签名称指针指向权标中的字符,标签名称的长度就是权标的长度;设定链接列表节点结构中的名称空间指针作为一空指针,名称空间的长度为零;以及设定链接列表节点结构中的下一字段指针以指向下一权标的开始。
21.如权利要求20所述的制品,其特征在于,还包括用于下列功能的指令如果权标是开始标签,则在链接列表节点结构中设定保留指针以指向权标末端处的闭括号,以及如果权标是闭标签,则设定保留指针以指向权标开始处的开括号。
22.如权利要求20所述的制品,其特征在于,还包括指令用于确定权标的第二部分的第一字符是否以短斜线开始;如果所述权标的第二部分以短斜线开始,则设定链接列表节点结构中的空标签字段;以及如果所述权标的第二部分未以短斜线开始,则清除链接列表节点结构中的空标签字段。
23.如权利要求14所述的制品,其特征在于,用于验证输入串语法的指令包括用于下列功能的指令初始化一堆栈;接收用于输入串的链接列表节点结构;确定所述链接列表节点结构是否表示开始标签和闭标签之一;如果链接列表节点结构表示一当前的开始标签,如果所述堆栈不空,则用指向堆栈顶部处的开始标签的指针填充链接列表节点结构中的父字段;以及将所述当前开始标签置于堆栈上;如果链接列表节点结构表示一当前的闭标签,出栈堆栈顶部处的开始标签;用指向当前闭标签的下一字段指针的指针填充所述链接列表节点结构中的对等字段;确定所述当前闭标签是否匹配出栈的开始标签;如果当前闭标签不匹配出栈的开始标签,则将输入串表示为无效;以及如果当前闭标签匹配出栈的开始标签,则将所述输入串表示为有效并用当前的闭标签填充链接列表节点结构的闭标签;以及如果输入串有效且如果链接列表节点结构不是用于输入串的最后的链接列表节点结构,则利用来自输入串的下一个链接列表节点结构重复以上过程,堆栈的初始化除外。
24.如权利要求14所述的制品,其特征在于,用于从包括属性的链接列表节点结构中建立链接列表属性结构的指令包括指令用于接收用于开始标签的链接列表节点结构;使用链接列表节点结构中的保留指针,递减保留指针的位置,直到在输入串中找到开括号字符,其中开括号字符与保留指针之间的所有字符表示一属性串;利用作为定界符的空格字符分析所述属性串以提供属性串的第一部分和属性串的第二部分;放弃属性串的第一部分;利用作为定界符的等号来分析属性串的第二部分;在链接列表属性结构中设定属性值指针指向属性串的第二部分的等号字符后的第一字符,属性值长度从属性串的第二部分的第一字符跨到属性串的第二部分的末端;利用作为定界符的冒号分析属性串的第一部分;如果在属性串的第一部分中找到冒号字符,在链接列表属性结构中设定前缀名称指针指向属性串的第一部分中的第一字符,前缀名称长度从属性串的第一部分中的第一字符跨到属性串的第一部分中冒号前的字符;在链接列表属性结构中设定属性名称指针指向属性串的第一部分中的冒号后的第一字符,所述名称长度从属性串的第一部分中的冒号后的第一字符跨到属性串的第一部分的最后一个字符;如果未在属性串的第一部分中找到冒号字符,在链接列表属性结构中设定前缀名称指针作为空指针,其中前缀名称的长度为零;在链接列表属性结构中设定属性名称指针作为属性串的第一部分的第一字符,属性名称的长度就是属性串的第一部分的长度;以及在链接列表属性结构中设定下一属性字段以指向输入串中的下一属性。
25.如权利要求14所述的制品,其特征在于,用于从包括数据的链接列表节点结构中获得数据段的指令包括用于下列功能的指令接收用于相应开始和闭标签的链接列表节点结构;以及使用用于开始和闭标签的链接列表节点结构的保留指针以确定所述数据段,其中所述数据段包括开始标签的保留指针和闭标签的保留指针之间的数据。
26.如权利要求14所述的制品,其特征在于,所述输入串包括XML(可扩展标记语言)输入串。
27.一种用于分开标记语言语句的系统,包括零复制串分析器;以及与所述零复制串分析器耦合的逻辑分析器,其中所述零复制串分析器和逻辑分析器交互以分析来自应用程序的输入串而不将所述输入串复制入存储器。
28.如权利要求27所述的系统,其特征在于,所述零复制串分析器包括单程分析器。
29.如权利要求27所述的系统,其特征在于,所述逻辑分析器包括分析XML(可扩展标记语言)串所需的逻辑。
30.如权利要求27所述的系统,其特征在于,所述输入串包括与所述输入串相关联的长度,以及所述逻辑分析器提供定界符给零复制串分析器以使所述零复制串分析器能将输入串分析为一个或多个链接列表节点结构。
31.如权利要求30所述的系统,其特征在于,所述一个或多个链接列表节点结构包括指向输入串的指针以使所述零复制串分析器能进一步利用所述指针分析输入串以建立链接列表属性结构,所述链接列表属性结构包括指向输入串内发现的一个或多个属性的附加指针。
32.如权利要求30所述的系统,其特征在于,所述一个或多个链接列表节点结构包括指向输入串的保留指针以使零复制串分析器能进一步分析输入串以获得输入串中包含的元素内找到的数据。
全文摘要
一种用于分析XML串的系统和方法。根据该方法,将输入串变换为链接列表节点结构。验证输入串的语法。使用包括属性的链接列表节点结构,建立链接列表属性结构。使用来自链接列表节点结构的保留指针,获得输入串内的数据段。释放链接列表节点结构和属性结构。释放链接列表节点结构和属性结构删除了链接列表节点和属性结构同时维持链接列表节点和属性结构内限定的指向输入串的指针,这些指针定义了输入串内包含的多个元素中的每一个内的数据和属性。
文档编号G06F9/45GK1898644SQ200480035984
公开日2007年1月17日 申请日期2004年12月1日 优先权日2003年12月18日
发明者B·罗伊, Y·圣希莱尔, N·基迪 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1