1.一种XML数据的快速查询方法,其特征在于,包括以下步骤:
步骤1、查询参数预处理:构建谓词表达式语法计算树、查询导航树
步骤101、如果谓词表达式不存在的话,跳转到步骤104,如果存在,顺序执行下一步骤;
步骤102、按照表达式EBNF范式,语法分析谓词条件表达式,并把操作数作为叶子节点,把相关的操作符作为其父节点,依次类推构造谓词语法计算树;
步骤103、把每个条件表达式子项中的标签路径追加到查询标签路径表中;
步骤104、针对查询标签列表中的每一个标签路径,分拆成一组标签序列;
步骤105至107针对此标签路径的标签序列,按照顺序处理每一个标签:如果此标签没在查询树结构中,则创建新的节点结构编入查询树中,在节点中放入此标签的详细信息,同时把导航信息放入此节点中,包括:“父子”指针、“子父”指针,按照顺序检查下一个标签、重复执行步骤105;如果在查询树结构中已经存在,顺序查找下一个标签,重复执行步骤105;
直到标签序列结束执行步骤108;
步骤108遍历查询导航树,继续丰富节点的导航信息;
步骤2、查询处理并提供二维结果集
步骤201、解析目标XML数据读入内存中,构造数据树,此数据树节点中只存在“父子关系”的向下单向指针,无“子父关系”的向上指针;
步骤202、遍历查询导航树同时遍历XML数据树,对于查询树中的查询节点和数据树中的相关数据节点采用“双树剪枝”算法作遍历检查处理:查询标签节点存在但无数据标签节点与之对应,则以此查询节点为根节点的查询分支不再遍历;查询节点和数据节点的标签名相同,则通过此标签节点或者收集其标签路径的结果值放入缓存;数据标签节点存在但无查询标签节点与之对应,则遍历跳过以此数据节点为根节点的数据分支;
其中,采用双树剪枝算法作遍历检查处理过程为:遍历的过程中,当前标签节点要选定下一个孩子标签节点时:假定Nq为当前查询树节点,NLqc为Nq的所有孩子节点集合,其标签列表为TLqc,Nqc为Nq的目标孩子节点,Tqc为其标签;Nd为当前数据树节点,其标签和Nq节点的标签相同,NLdc为Nd的所有孩子节点集合,其标签列表为TLdc,Ndc为Nd的孩子节点,Tdc为其标签;对于NLqc的所有查询子节点对应的标签,依次要到数据树的NLdc中查找和检查:A)当数据子节点标签Tdc不属于TLqc时,意味着以Ndc为根节点的数据分支无须继续查询,数据树遍历时可以剪掉此分支,即对数据树剪枝;
B)当Tdc等于Tqc时,意味着以Nqc和Ndc为根节点的分支都需要继续深入遍历查询,如果Nqc为叶子节点,则收集此标签对应的结果,否则要对其孩子节点重复上述过程;
C)当Tqc不属于TLdc时,意味着要查询的标签在NLdc中不存在,那么以Nqc为根节点的查询分支无须继续查询,查询树遍历时可以剪掉此分支,即对查询树剪枝;
步骤203和204、如果遍历到已标注谓词计算位置的标签节点上,则提取表达式中的各标签路径对应值,然后开始按照谓词表达式语法计算树结构要求计算表达式,结果为真则执行步骤205,结果为假则执行步骤206;
步骤205、收集本次的标签对应值并放入缓存中;
步骤206、越过此指定循环点路径的分支,继续下一个分支,如果是最后的数据分支,则执行步骤207,如果不是则执行步骤202;
步骤207、收集所有缓存中的标签对应结果集,合并组成二维标签结果集,并返回。