一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

文件循环引用检测方法、装置以及存储介质与流程

2021-12-17 20:53:00 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,尤其涉及一种文件循环引用检测方法、装置以及存储介质。


背景技术:

2.在编写例如yang模型等多种模型时,模型文件经常会被引用,模型建立规则规定模型文件只能被单向引用。随着模型文件的数量越来越多,在建模时会出现模型文件循环引用的问题。目前,现有的文件循环引用检验方法主要通过遍历各模型文件或靠人工进行检验,效率低、易出错。


技术实现要素:

3.有鉴于此,本发明要解决的一个技术问题是提供一种文件循环引用检测方法、装置以及存储介质。
4.根据本公开的第一方面,提供一种文件循环引用检测方法,包括:对多个目标文件进行解析,获取文件引用信息;根据所述文件引用信息获取文件集合以及所述文件集合中各个文件之间的引用关系;其中,所述文件集合中的文件包括:引用其他文件的文件和被引用的文件;根据所述文件集合以及所述引用关系建立文件引用关系矩阵;其中,所述文件引用关系矩阵的行数和列数都为所述文件集合中的文件数量,所述文件引用关系矩阵的元素用于表征两个文件之间的引用关系;基于所述文件引用关系矩阵判断是否出现文件循环引用。
5.可选地,所述根据所述文件集合以及所述引用关系建立文件引用关系矩阵包括:获取所述文件集合中的各个文件的编号,生成编号序列;基于所述引用关系和所述编号序列建立所述文件引用关系矩阵;其中,所述文件引用关系矩阵的行号序列和列号序列分别与所述编号序列相对应。
6.可选地,所述基于所述文件引用关系矩阵判断是否出现文件循环引用包括:获取位于所述文件引用关系矩阵的对角线一侧的半矩阵;遍历所述半矩阵,获取所述半矩阵中表征第一文件被第二文件引用的目标元素;获取与所述目标元素相对于所述对角线对称的转置元素;如果所述转置元素表征所述第二文件被所述第一文件引用,则确定所述第一文件和所述第二文件之间出现循环引用。
7.可选地,所述基于所述文件引用关系矩阵判断是否出现文件循环引用包括:围绕所述文件引用关系矩阵的对角线将所述文件引用关系矩阵旋转45度;在所述文件引用关系矩阵中获取相对于所述对角线对称的两个元素;如果所述两个元素都表征两个文件之间具有引用关系,则确定此两个文件之间出现循环引用。
8.可选地,获取出现循环引用的全部文件的集合以及文件之间的循序引用信息;基于所述集合和所述循环引用信息生成校验报告。
9.可选地,所述对多个目标文件进行解析,获取文件引用信息包括:遍历所述多个目
标文件,解析各个目标文件中的文件引用段落,用以获取与各个目标文件相对应的所述文件引用信息。
10.可选地,所述根据所述文件引用信息获取文件集合以及所述文件集合中各个文件之间的引用关系;其中,所述文件集合中的文件包括:引用其他文件的文件和被引用的文件包括:根据与各个目标文件相对应的文件引用信息,获取全部引用其他文件的文件和被引用的文件;根据所述全部引用其他文件的文件和被引用的文件生成所述文件集合。
11.可选地,所述文件引用关系矩阵的元素为a[i][j];其中,i,j为文件的编号;如果a[i][j]为1,则表征第i个文件引用了第j个文件。
[0012]
可选地,所述目标文件包括:yang文件。
[0013]
根据本公开的第二方面,提供一种文件循环引用检测装置,包括:引用信息获取模块,用于对多个目标文件进行解析,获取文件引用信息;引用文件获取模块,用于根据所述文件引用信息获取文件集合以及所述文件集合中各个文件之间的引用关系;其中,所述文件集合中的文件包括:引用其他文件的文件和被引用的文件;关系矩阵建立模块,用于根据所述文件集合以及所述引用关系建立文件引用关系矩阵;其中,所述文件引用关系矩阵的行数和列数都为所述文件集合中的文件数量,所述文件引用关系矩阵的元素用于表征两个文件之间的引用关系;循环引用判断模块,用于基于所述文件引用关系矩阵判断是否出现文件循环引用。
[0014]
根据本公开的第三方面,提供一种文件循环引用检测装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上所述的方法。
[0015]
根据本公开的第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述指令被处理器执行如上的方法。
[0016]
本公开的文件循环引用检测方法、装置以及存储介质,基于文件引用关系建立文件引用关系矩阵,用以判断是否出现文件循环引用,可以自动并快速、直观地输出检测结果,检测结果准确,能够减少遍历次数,提高检测效率,可以减少查找文件循环引所花费的时间,提高工作效率。
附图说明
[0017]
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
[0018]
图1为根据本公开的文件循环引用检测方法的一个实施例的流程示意图;
[0019]
图2a为根据本公开的文件循环引用检测方法的一个实施例中的判断是否出现文件循环引用的流程示意图;
[0020]
图2b为基于文件引用关系矩阵的判断循环引用的示意图;
[0021]
图3a为根据本公开的文件循环引用检测方法的另一个实施例中的判断是否出现文件循环引用的流程示意图;
[0022]
图3b为基于文件引用关系矩阵的旋转示意图;
[0023]
图4为根据本公开的文件循环引用检测装置的一个实施例的模块示意图;
[0024]
图5为根据本公开的文件循环引用检测装置的一个实施例中的循环引用判断模块的模块示意图;
[0025]
图6为根据本公开的文件循环引用检测装置的又一个实施例的模块示意图。
具体实施方式
[0026]
下面参照附图对本公开进行更全面的描述,其中说明本公开的示例性实施例。下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。下面结合各个图和实施例对本公开的技术方案进行多方面的描述。
[0027]
下文中的“第一”、“第二”等仅用于描述上相区别,并没有其它特殊的含义。
[0028]
图1为根据本公开的文件循环引用检测方法的一个实施例的流程示意图,如图1所示:
[0029]
步骤101,对多个目标文件进行解析,获取文件引用信息。
[0030]
目标文件可以为多种文件,例如为yang文件等。yang是一种数据建模语言,被用来为netconf、netconf远程过程调用、netconf notification操作的配置和状态数据进行建模。yang文件为使用yang语言的文件。文件引用信息为在目标文件中引用的其他文件的信息。
[0031]
步骤102,根据文件引用信息获取文件集合以及文件集合中各个文件之间的引用关系。文件集合中的文件包括引用其他文件的文件和被引用的文件。
[0032]
步骤103,根据文件集合以及引用关系建立文件引用关系矩阵。
[0033]
文件引用关系矩阵为二维矩阵,文件引用关系矩阵的行数和列数都为文件集合中的文件数量,文件引用关系矩阵的元素用于表征两个文件之间的引用关系。
[0034]
步骤104,基于文件引用关系矩阵判断是否出现文件循环引用。
[0035]
上述实施例中的文件循环引用检测方法,通过建立文件引用关系矩阵并判断是否出现文件循环引用,可以自动并快速输出检测结果,使项目人员不需在查找文件循环引用错误上花费过多时间,可以专注于业务模型的制定,能够提高工作效率。
[0036]
在一个实施例中,遍历多个目标文件,解析各个目标文件中的文件引用段落,用以获取与各个目标文件相对应的文件引用信息。根据与各个目标文件相对应的文件引用信息,获取全部引用其他文件的文件和被引用的文件。根据全部引用其他文件的文件和被引用的文件生成文件集合。
[0037]
获取文件集合中的各个文件的编号,生成编号序列。基于引用关系和编号序列建立文件引用关系矩阵;其中,文件引用关系矩阵的行号序列和列号序列分别与编号序列相对应。
[0038]
例如,在对接入型otn设备管控系统项目开发中,开发人员需要编写yang模型的yang文件。yang模型按不同的类型分为不同的模块,例如eth,otn,eos,sdh,alarm,performance,protection,connection,devm等。根据rfc6020协议规则,每个模块中都定义了内部数据结构,同时为了减少重复定义,规定彼此之间为单向引用。
[0039]
加载并遍历所有yang文件,截取yang文件中的import段落,import段落为文件引用段落。解析各个yang文件中的文件引用段落,获取与各个yang文件相对应的文件引用信息。以yang文件中的eth文件和sdh文件为例,eth文件的文件引用信息为:{eth:[ietf-otn-types,devm,connection,otn,sdh]},其中,ietf-otn-types,devm,connection,otn,sdh分别为eth文件中的被引用文件。sdh文件的文件引用信息为:{sdh:[devm,connection,otn,eth]},其中,devm,connection,otn,eth分别为sdh文件中的被引用文件。
[0040]
根据与各个yang文件相对应的文件引用信息,获取全部文件以及文件之间的引用关系。将全部文件合并到一个大集合中,形成一个字典{eth:[ietf-otn-types,devm,connection,otn,sdh],sdh:[devm,connection,otn,eth],......}。
[0041]
获取字典中的全部文件的集合得到一维数组,即得到文件集合:[eth,sdh......]。对文件集合中的各个文件分配数字编号[1,2,3......],获取文件集合中的各个文件的编号,生成编号序列。基于文件之间的引用关系和编号序列建立文件引用关系矩阵,文件引用关系矩阵的行号序列和列号序列分别与编号序列相对应。
[0042]
文件引用关系矩阵可以为n*n的二维矩阵,n为文件集合中的文件数量。例如,文件集合中有5个yang文件,n=5,得到5*5的二维文件引用关系矩阵。这5个yang文件的编号分别为1-5,文件引用关系矩阵的文件引用关系矩阵的行号和列号分别为1-5,分别与5个yang文件相对应。
[0043]
文件引用关系矩阵中所有元素的初始值为0,根据5个yang文件之间的引用关系,对文件引用关系矩阵的元素a[i][j]进行赋值,其中,i,j为文件的编号。如果a[i][j]为1,则表征第i个文件引用了第j个文件。如果发现a[i][j]=a[j][i]=1,则确定第i个文件引用了第j个文件,并且第j个文件也引用了第i个文件,在第i个文件和第j个文件之间发生了循环引用。生成的5*5的文件引用关系矩阵如下所示:
[0044][0045]
图2a为根据本公开的文件循环引用检测方法的一个实施例中的判断是否出现文件循环引用的流程示意图,如图2a所示:
[0046]
步骤201,获取位于文件引用关系矩阵的对角线一侧的半矩阵。
[0047]
步骤202,遍历半矩阵,获取半矩阵中表征第一文件被第二文件引用的目标元素。
[0048]
步骤202,获取与目标元素相对于对角线对称的转置元素。
[0049]
步骤203,如果转置元素表征第二文件被第一文件引用,则确定第一文件和第二文件之间出现循环引用。
[0050]
获取出现循环引用的全部文件的集合以及文件之间的循序引用信息;基于集合和循环引用信息生成校验报告。
[0051]
在一个实施例中,如图2b所示,文件集合中的文件数量为5个。文件引用关系矩阵的元素为a[i][j],i,j为文件的编号,如果a[i][j]为1,则表征第i个文件引用了第j个文件,如果a[i][j]为0,则表征第i个文件没有引用第j个文件。
[0052]
可以采用多种遍历算法,遍历位于文件引用关系矩阵的对角线上侧的半矩阵,记录a[i][j]=1的目标元素;将文件引用关系矩阵进行转置处理后,如果位于目标元素的位置处的转置元素仍为1,则确定出现循环引用。
[0053]
对于半矩阵进行遍历的逻辑代码如下:
[0054][0055]
如图2b所示,从左上角到右下角连线为对称轴,查找右侧所有值为1的位置并记录至集合a:a[1][3],a[2][5]。将该矩阵进行转置,重新查找对称轴右侧所有值为1的位置并记录至集合:b[1][3],b[2][5]。获取a与b的交集即为循环引用的文件编码,即文件1与文件3、文件2与文件5发生了循环引用。
[0056]
图3a为根据本公开的文件循环引用检测方法的另一个实施例中的判断是否出现文件循环引用的流程示意图,如图3a所示:
[0057]
步骤301,围绕文件引用关系矩阵的对角线将文件引用关系矩阵旋转45度。
[0058]
步骤302,在文件引用关系矩阵中获取相对于对角线对称的两个元素。
[0059]
步骤303,如果两个元素都表征两个文件之间具有引用关系,则确定此两个文件之间出现循环引用。
[0060]
在一个实施例中,如图3b所示,围绕文件引用关系矩阵的对角线将文件引用关系矩阵旋转45度。以对角线为对称轴从上至下,横向查找对称点,检测的次数最多仅有2n次,检测出文件1与文件3、文件2与文件5发生了循环引用。
[0061]
可以将文件引用关系矩阵存储为图片,或者打印后,旋转45度,从上至下逐行遍历,遍历行数最多是n行。可以使用现有的图像分析方法,确定对称轴两边为1的对称点,或者通过人工观察的方法检测是否出现文件循环引用。
[0062]
本公开的文件循环引用检测方法,将检测文件之间的循环引用关系从传统的一一遍历查找比对的方式转化为以二维矩阵为辅助,查找对称点的方式来进行,与传统方式有着本质的区别;针对于少量yang文件,可以由抽象的数字化的统计数据直接转为图形对称轴式人工观察法,能够脱离程序辅助,进行直观地检测。
[0063]
在一个实施例中,如图4所示,本公开提供一种文件循环引用检测装置40,包括引用信息获取模块41、引用文件获取模块42、关系矩阵建立模块43和循环引用判断模块44。
[0064]
引用信息获取模块41对多个目标文件进行解析,获取文件引用信息。引用文件获取模块42根据文件引用信息获取文件集合以及文件集合中各个文件之间的引用关系;其中,文件集合中的文件包括:引用其他文件的文件和被引用的文件。
[0065]
关系矩阵建立模块43根据文件集合以及引用关系建立文件引用关系矩阵;其中,文件引用关系矩阵的行数和列数都为文件集合中的文件数量,文件引用关系矩阵的元素用于表征两个文件之间的引用关系。循环引用判断模块44基于文件引用关系矩阵判断是否出现文件循环引用。
[0066]
在一个实施例中,引用信息获取模块41遍历多个目标文件,解析各个目标文件中的文件引用段落,用以获取与各个目标文件相对应的文件引用信息。引用文件获取模块42根据与各个目标文件相对应的文件引用信息,获取全部引用其他文件的文件和被引用的文件。引用文件获取模块42根据全部引用其他文件的文件和被引用的文件生成文件集合。
[0067]
关系矩阵建立模块43获取文件集合中的各个文件的编号,生成编号序列。关系矩阵建立模块43基于引用关系和编号序列建立文件引用关系矩阵;其中,文件引用关系矩阵的行号序列和列号序列分别与编号序列相对应。
[0068]
在一个实施例中,如图5所示,循环引用判断模块44包括:第一判断单元441、第二判断单元442和检验结果生成单元443。第一判断单元441获取位于文件引用关系矩阵的对角线一侧的半矩阵。第一判断单元441遍历半矩阵,获取半矩阵中表征第一文件被第二文件引用的目标元素。第一判断单元441获取与目标元素相对于对角线对称的转置元素,如果转置元素表征第二文件被第一文件引用,则第一判断单元441确定第一文件和第二文件之间出现循环引用。
[0069]
第二判断单元442围绕文件引用关系矩阵的对角线将文件引用关系矩阵旋转45度。第二判断单元442在文件引用关系矩阵中获取相对于对角线对称的两个元素,如果两个元素都表征两个文件之间具有引用关系,则第二判断单元442确定此两个文件之间出现循环引用。检验结果生成单元443获取出现循环引用的全部文件的集合以及文件之间的循序引用信息,基于集合和循环引用信息生成校验报告。
[0070]
在一个实施例中,图6为根据本公开的文件循环引用检测装置的又一个实施例的模块示意图。如图6所示,该装置可包括存储器61、处理器62、通信接口63以及总线64。存储器61用于存储指令,处理器62耦合到存储器61,处理器62被配置为基于存储器61存储的指令执行实现上述的文件循环引用检测方法。
[0071]
存储器61可以为高速ram存储器、非易失性存储器(non-volatilememory)等,存储器61也可以是存储器阵列。存储器61还可能被分块,并且块可按一定的规则组合成虚拟卷。处理器62可以为中央处理器cpu,或专用集成电路asic(application specific integrated circuit),或者是被配置成实施本公开的文件循环引用检测方法的一个或多个集成电路。
[0072]
在一个实施例中,本公开提供一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,指令被处理器执行时实现如上任一个实施例中的文件循环引用检测方法。
[0073]
上述实施例提供的文件循环引用检测方法、装置以及存储介质,基于文件引用关系建立文件引用关系矩阵,用以判断是否出现文件循环引用,可以自动并快速、直观地输出检测结果,检测结果准确,能够减少遍历次数,提高检测效率,可以减少查找文件循环引所花费的时间,提高工作效率。
[0074]
可能以许多方式来实现本公开的方法和系统。例如,可通过软件、硬件、固件或者
软件、硬件、固件的任何组合来实现本公开的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
[0075]
本公开的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本公开限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本公开的原理和实际应用,并且使本领域的普通技术人员能够理解本公开从而设计适于特定用途的带有各种修改的各种实施例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献