专利名称:一种基于 fpga 实现的xml 并行投机解析方法
技术领域:
本发明涉及FPGA,尤其涉及一种基于FPGA实现的XML并行投机解析方法。
背景技术:
XML(Extensible Markup Language)即可扩展标记语言,它与 HTML—样,都是 SGML (Standard Generalized Markup Language,标准通用标记语言)。XML 是 Internet 环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言 XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
< xml version="1.0" encoding="IS0-8859-l" > <bookstore>
<book id=〃l〃>
<title>XML parser</title>
<author>ffangche</author)
<year>2011</year>
<price>48. 0</price>
</book>
〈book id=〃2〃>
<title>An introduction to XML</title> <author>Peter</author) <year>1999</year>
<price>56. 0</price> </book> </bookstore>上面的 XML 文档中,“〈bookstore〉” 是开始元素 start element,“〈/bookstore〉” 是与之匹配的结束元素end element。“〈book id =“1” >”中的“id”为属性名attribute name/'T'^MftrtW attribute content。 “XML parser" title" ^jjtM elementcontent。XML解析类型有文件对象模型(Document Object Model,DOM)型和XML简单应用程序接口(simple API for XML, SAX) DOM是万维网联盟W3C的推荐标准。DOM解析是将 XML文件全部载入,组装成一颗DOM树,然后通过节点以及节点之间的关系来解析XML文件。 SAX是一种XML解析的替代方法。相比于D0M,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于D0M,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。XML解析包含三个任务语法检查well-formed check,语义检查 khemavalidation,树的构建tree constructor。语法检查包括开始元素和结束元素的嵌套检查,属性名唯一性的检查,以及一些基本的格式的检查。语义检查包括数据类型的检查,元素是否出现的检查,元素出现顺序的检查,属性名是否出现的检查等。FPGA是高密度的可编程芯片,能够将大量逻辑功能集成到一个单片集成电路中, ASIC可以实现的逻辑功能,FPGA都可以实现,并且设计周期短,灵活,能够提高系统的可靠性和集成度。但是FPGA设计需要考虑器件本身的结构和性能,这就需要开发者对器件有相当程度的了解,从而使设计在速度和资源利用上都达到最优。通过使用FPGA进行硬件实现某些软件实现的功能,能够加速计算。
发明内容
针对现有技术中存在的上述问题,本发明提供了一种基于FPGA实现的XML并行投机解析方法。本发明提供了一种基于FPGA实现的XML并行投机解析方法,包括步骤1,将XML文件划分为N个子文件块;步骤2,抽取每个子文件块中的符号;步骤3,对符号进行前语法检查;步骤4,对N个子文件块完成前语法检查后,对符号进行后语法检查;步骤5,对抽取的符号进行子树构建,树中的每个节点代表XML文件中的相应符号;步骤6,将N个子树合并为一棵完整的文件对象模型树并写入FPGA的DDR2内存;步骤7,对每个子树的节点进行并行语义检查。在一个示例中,步骤1包括步骤10,在XML文件中标记N个位置Ptl,P1,……,P1^1,相邻位置之间的XML子文件大小相等;步骤11,根据各个XML子文件中的首次出现符号“〈”确定XML子文件的内容。在一个示例中,步骤20,设计有限状态机;有限状态机在第0状态遇到符号“〈”则跳转到第1状态,否则跳转到第9状态;有限状态机在第1状态遇到符号“/”则跳转到第2 状态,否则跳转到第3状态;有限状态机在第2状态遇到符号“〉”则跳转到第0状态;有限状态机在第3状态遇到符号“空格”,则跳转到第4状态;有限状态机在第4状态遇到符号 “=”则跳转到第5状态;有限状态机在第5状态遇到符号“””则跳转到第6状态,遇到符号 “ ’ ”则跳转到第7状态;有限状态机在第6状态遇到符号“ ””则跳转到第8状态;有限状态机在第7状态遇到符号“,,,则跳转到第8状态;有限状态机在第8状态遇到符号“〉”则跳转到状态0,遇到符号“空格”则跳转到第4状态,遇到符号“/”则跳转到第10状态;有限状态机在第10状态遇到符号“〉”则跳转到第0状态;有限状态机在第9状态遇到符号“〈” 则跳转到第1状态;有限状态机在第3状态抽取开始元素,在第4状态抽取属性名,在第6 状态和第7状态抽取属性内容,在第9状态抽取元素内容,在第10状态抽取结束元素;第0 状态、第1状态、第2状态、第5状态和第8状态为有限状态机的中间状态;步骤21,根据有限状态机抽取出不同类型的符号,其中符号类型包括开始元素,结束元素,元素内容,属性名和属性内容。在一个示例中,步骤3包括步骤30,将开始元素压入到开始元素堆栈,将结束元素开始元素堆栈中弹出的开始元素进行比较,如果每个字母都相同,则删除开始元素堆栈中的栈顶元素,否则将结束元素压入到结束元素堆栈;步骤31,使用布隆过滤器检查属性名的唯一性。在一个示例中,步骤4包括步骤40,将第i个子文件中经过前语法检查后的结束元素堆栈的栈底元素和第 i_l个子文件中经过前语法检查后的开始元素堆栈的栈顶元素比较,如果不相同,则发出语法检查错误,停止解析,如果相同,则删除这两个元素,继续依次进行剩余开始元素和结束元素的比较,直到两个栈为空;i为自然数;步骤41,如果结束元素堆栈为空,而开始元素堆栈非空,则结束元素堆栈和第i_2 个子文件中的开始元素堆栈比较;如果开始元素堆栈为空,而结束元素堆栈非空,则开始元素堆栈去和第i+Ι个子文件中的结束元素堆栈去比较。在一个示例中,步骤5包括步骤50,实现元素头、元素名、元素内容、属性头、属性名和属性内容的数据结构;步骤51,将生成的每个数据结构传入到写缓冲队列;步骤52,将FPAG中的DDR2内存划分为四个存储区域以存储元素头、属性头、元素名、属性名、属性内容和元素内容;步骤53,实例化MIG IP核;步骤M,通过MIG IP核将缓冲队列中的项写入到DDR2内存;在一个示例中,步骤6包括步骤60,确定不同子文件块中的开始元素堆栈中剩余的元素之间的父子关系;步骤61,更新开始元素的元素头,加入其父子信息;步骤63,将修改好的元素头写入到DDR2内存中。在一个示例中,步骤7包括步骤70,在解析工作开始前,预先保存XML语言结构文件中的信息;步骤71,每一个子文件块中的符号从预先保存的XSD信息中检查其语义是否符
I=I O本发明通过FPGA实现XML的并行投机解析,提高了解析速度并优化了资源的利用。
下面结合附图来对本发明作进一步详细说明,其中图1是本发明的系统结构图;图2是本发明的符号抽取模块中的有限状态机;图3a是本发明的元素的数据结构;图北是元素内容和属性头的数据结构;图3c是属性的数据结构;图4是本发明的DDR2内存划分情况。
具体实施例方式本发明提供的基于FPGA实现的XML并行投机解析方法包括1)块划分模块的设计;2)符号抽取模块的设计;幻前语法检查模块的设计;4)后语法检查模块的设计;5)子树构建模块的设计;6)子树合并模块的设计;7)并行语义检查模块的设计。下面参照附图进行详细说明。1)块划分模块的设计①确定需要划分块的数目N 在保证FPGA所提供的硬件资源满足实现需求的情况下,尽可能使并行数N变大;②在一个XML文件找到N个位置(标号为Pci-Pim),每个位置恰好将这个XML文件划分为大小相等的XML子文件,每个子文件大小为该XML文件大小S除以N ;P0位于XML文件的起始位置;③第一个子文件的内容开始于XML文件中的Ptl,结束于P1后首次出现的符号“〈”, 第二个子文件的内容开始于XML文件中的P1后首次出现的符号“〈”,结束于P2后首次出现的符号“〈”,其他子文件类似该过程,除最后一个子文件结束于整个XML文件的最后一个字符。2)符号抽取模块的设计①设计一个有限状态机,如图2所示;有限状态机开始进入状态0,当遇到符号 “〈”,跳转到状态1,否则跳转到状态9 ;状态1遇到符号“/”,跳转到状态2,否则跳转到状态 3 ;状态2遇到符号“〉”,跳转到状态0 ;状态3遇到符号空格,跳转到状态4 ;状态4遇到符号“=”,跳转到状态5 ;状态5遇到符号“ ””,跳转到状态6,遇到符号“ ’ ”,跳转到状态7 ;状态6遇到符号“ ””,跳转到状态8 ;状态7遇到符号“ ’ ”,跳转到状态8 ;状态8遇到符号“〉”, 跳转到状态0,遇到符号空格,跳转到状态4,遇到符号“/”,跳转到状态10 ;状态10遇到符号“〉”,跳转到状态0 ;状态9遇到符号“〈”,跳转到状态1 ;②通过有限状态机,抽取出不同类型的符号,其中符号类型有开始元素start element,结束兀素end element,兀素内容element content,属性名 attribute name,属性内容 attribute content ;③将抽取出的符号发送给前语法检查模块;3)前语法检查模块的设计①检查开始元素start element和结束元素end element的匹配情况I遇到开始元素start element,则将其压入到开始元素堆栈startelementstack ;II遇到结束元素end element,则将其和开始元素堆栈中弹出的开始元素进行比较,如果每个字母都相同,则删除开始元素堆栈中的栈顶元素,否则,将其压入到结束元素堆找 end element stack ;②使用布隆过滤器检查属性名的唯一性,如果有发生冲突,则把发生冲突的那个属性名和之前保存在属性名堆栈中的属性名逐个字符的比较,如果有相同的属性名,则发出语法检查错误,停止解析;4)后语法检查模块的设计①将第i个子文件中经过前语法检查后的结束元素堆栈的栈底元素和第i_l个子文件中经过前语法检查后的开始元素堆栈的栈顶元素比较;②如果不相同,则发出语法检查错误,停止解析;③如果相同,则删除这两个元素,继续依次进行其他元素的比较,直到两个栈为空;④如果结束元素堆栈为空,而开始元素堆栈非空,则结束元素堆栈去和第i_2个子文件中的开始元素堆栈去比较;⑤如果开始元素堆栈为空,而结束元素堆栈非空,则开始元素堆栈去和第i + Ι个子文件中的结束元素堆栈去比较;5)子树构建模块的设计①分另U设计元素头element header、元素名element name、元素内容element content、属性头attribute header、属性名 attribute name、属性内容attribute content 的数据结构并实现,图3为上述符号的数据结构;②将生成的每个数据结构传入到写缓冲队列write buffer中,等待写入到DDR2 内存中;③将FPAG板子上的DDR2内存划分为四个存储区域分别用于存储元素头element header,属性头 attribute header,兀素名 element name、属性名 attribute name、属性内容attribute content,元素内容element content,图4为DDR2内存的划分情况;元素名、 属性名和属性内容存入内存块2,属性头、元素头和元素内容存入内存块0、内存块1和内存块3中;④使用Xi 1 inx公司提供的内存接口生成器知识产权核(memory interface generator Intellectual Property core, MIG IP),在代码中实例化 MIG IP 核;⑤通过MIG IP核将缓冲队列中的项写入到DDR2内存;6)子树合并模块的设计①确定不同子文件块中的开始元素堆栈中剩余的元素之间的父子关系;②更新开始元素的元素头,加入其父子信息;③将修改好的元素头写入到DDR2内存中;7)并行语义检查模块的设计①在解析工作开始前,预先保存XML结构定义(XML Schema Definition, XSD)文件中的信息;②每一个子文件块中的符号从预先保存的XSD信息中检查其语义是否符合。
以上所述仅为本发明的优选实施方式,但本发明保护范围并不局限于此。任何本领域的技术人员在本发明公开的技术范围内,均可对其进行适当的改变或变化,而这种改变或变化都应涵盖在本发明的保护范围之内。
权利要求
1.一种基于FPGA实现的XML并行投机解析方法,其特征在于,包括 步骤1,将XML文件划分为N个子文件块;步骤2,抽取每个子文件块中的符号; 步骤3,对符号进行前语法检查;步骤4,对N个子文件块完成前语法检查后,对符号进行后语法检查; 步骤5,对抽取的符号进行子树构建,树中的每个节点代表XML文件中的相应符号; 步骤6,将N个子树合并为一棵完整的文件对象模型树并写入FPGA的DDR2内存; 步骤7,对每个子树的节点进行并行语义检查。
2.如权利要求1所述的XML并行投机解析方法,其特征在于,步骤1包括步骤10,在XML文件中标记N个位置Ptl,P1,……,Pim,相邻位置之间的XML子文件大小相等;步骤11,根据各个XML子文件中的首次出现符号“〈”确定XML子文件的内容。
3.如权利要求1所述的XML并行投机解析方法,其特征在于,步骤2包括步骤20,设计有限状态机;有限状态机在第0状态遇到符号“〈”则跳转到第1状态,否则跳转到第9状态;有限状态机在第1状态遇到符号“/”则跳转到第2状态,否则跳转到第 3状态;有限状态机在第2状态遇到符号“〉”则跳转到第0状态;有限状态机在第3状态遇到符号“空格”,则跳转到第4状态;有限状态机在第4状态遇到符号“=,,则跳转到第5状态;有限状态机在第5状态遇到符号“””则跳转到第6状态,遇到符号“’ ”则跳转到第7状态;有限状态机在第6状态遇到符号“ ””则跳转到第8状态;有限状态机在第7状态遇到符号“,,,则跳转到第8状态;有限状态机在第8状态遇到符号“〉”则跳转到状态0,遇到符号“空格”则跳转到第4状态,遇到符号“/”则跳转到第10状态;有限状态机在第10状态遇到符号“〉”则跳转到第0状态;有限状态机在第9状态遇到符号“〈”则跳转到第1状态; 有限状态机在第3状态抽取开始元素,在第4状态抽取属性名,在第6状态和第7状态抽取属性内容,在第9状态抽取元素内容,在第10状态抽取结束元素;第0状态、第1状态、第2 状态、第5状态和第8状态为有限状态机的中间状态;步骤21,根据有限状态机抽取出不同类型的符号,其中符号类型包括开始元素,结束元素,元素内容,属性名和属性内容。
4.如权利要求3所述的XML并行投机解析方法,其特征在于,步骤3包括步骤30,将开始元素压入到开始元素堆栈,将结束元素开始元素堆栈中弹出的开始元素进行比较,如果每个字母都相同,则删除开始元素堆栈中的栈顶元素,否则将结束元素压入到结束元素堆栈;步骤31,使用布隆过滤器检查属性名的唯一性。
5.如权利要求4所述的XML并行投机解析方法,其特征在于,步骤4包括步骤40,将第i个子文件中经过前语法检查后的结束元素堆栈的栈底元素和第i_l个子文件中经过前语法检查后的开始元素堆栈的栈顶元素比较,如果不相同,则发出语法检查错误,停止解析,如果相同,则删除这两个元素,继续依次进行剩余开始元素和结束元素的比较,直到两个栈为空;i为自然数;步骤41,如果结束元素堆栈为空,而开始元素堆栈非空,则结束元素堆栈和第i_2个子文件中的开始元素堆栈比较;如果开始元素堆栈为空,而结束元素堆栈非空,则开始元素堆栈去和第i+Ι个子文件中的结束元素堆栈去比较。
6.如权利要求1所述的XML并行投机解析方法,其特征在于,步骤5包括 步骤50,实现元素头、元素名、元素内容、属性头、属性名和属性内容的数据结构; 步骤51,将生成的每个数据结构传入到写缓冲队列;步骤52,将FPAG中的DDR2内存划分为四个存储区域以存储元素头、属性头、元素名、属性名、属性内容和元素内容; 步骤53,实例化MIG IP核;步骤M,通过MIG IP核将缓冲队列中的项写入到DDR2内存。
7.如权利要求1所述的XML并行投机解析方法,其特征在于,步骤6包括 步骤60,确定不同子文件块中的开始元素堆栈中剩余的元素之间的父子关系; 步骤61,更新开始元素的元素头,加入其父子信息;步骤63,将修改好的元素头写入到DDR2内存中。
8.如权利要求1所述的XML并行投机解析方法,其特征在于,步骤7包括 步骤70,在解析工作开始前,预先保存XML语言结构文件中的信息;步骤71,每一个子文件块中的符号从预先保存的XSD信息中检查其语义是否符合。
全文摘要
本发明公开了一种基于FPGA实现的XML并行投机解析方法,包括步骤1,将XML文件划分为N个子文件块;步骤2,抽取每个子文件块中的符号;步骤3,对符号进行前语法检查;步骤4,对N个子文件块完成前语法检查后,对符号进行后语法检查;步骤5,对抽取的符号进行子树构建,树中的每个节点代表XML文件中的相应符号;步骤6,将N个子树合并为一棵完整的文件对象模型树并写入FPGA的DDR2内存;步骤7,对每个子树的节点进行并行语义检查。本发明通过FPGA实现XML的并行投机解析,提高了解析速度并优化了资源的利用。
文档编号G06F17/30GK102411602SQ20111023247
公开日2012年4月11日 申请日期2011年8月15日 优先权日2011年8月15日
发明者吴斌斌, 张少斌, 王勋, 胡同森, 陈天洲, 黄文 申请人:浙江大学