一种组件引用关系重构方法、装置、系统及存储介质与流程

未命名 10-08 阅读:114 评论:0


1.本技术涉及平面设计技术领域,尤其涉及一种组件引用关系重构方法、装置、系统及存储介质。


背景技术:

2.在信息技术、软件开发以及各类设计领域,设计组件的应用越来越广泛。设计组件,或者简称组件,是用于构建复杂系统或应用的基础构造单元。它们通常封装了特定的功能或逻辑,可以被独立地开发、测试、部署和复用。
3.然而,在设计和开发大型系统或应用时,组件的数量可能会非常庞大,且这些组件之间可能存在复杂的依赖关系。依赖关系,指的是一个组件需要另一个或多个组件的功能或服务才能正常运行。这种依赖关系可能是直接的,也可能是间接的,例如,一个组件依赖于另一个组件,而后者又依赖于第三个组件。
4.管理和理解这些复杂的组件依赖关系对于系统的稳定性、性能、可维护性以及其他质量属性至关重要。例如,如果一个组件发生故障,那么依赖于它的其他组件可能也会受到影响。或者,如果一个组件需要进行升级或替换,那么可能需要同步修改依赖于它的其他组件。
5.现有的设计工具和平台通常提供了一些功能来帮助用户管理和理解组件依赖关系,例如,他们可能提供了一种方式来表示组件之间的引用关系,或者提供了一种机制来检查组件的依赖关系。然而,这些功能通常有以下限制:手动管理和分析:大部分设计工具需要用户手动管理和分析组件的依赖关系,这在大规模和复杂的系统中可能非常困难和耗时。
6.依赖关系的不完整性:现有的工具和方法往往只能识别和管理直接的依赖关系,而忽视了间接或潜在的依赖关系。
7.缺乏自动化的支持:现有的工具和方法往往缺乏自动化的支持,例如,缺乏自动提取和分析依赖关系的功能,或者缺乏自动检查和修复依赖关系的功能。
8.依赖关系的可视化:现有的工具和方法往往没有提供一种有效的方式来可视化和理解复杂的依赖关系。
9.因此,存在一种强烈的需求,即开发一种新的方法和系统,以更有效地管理和理解组件依赖关系,特别是在大规模和复杂的系统中。本发明就是为了满足这种需求而产生的。


技术实现要素:

10.为了解决上述技术问题,本技术提供了一种组件引用关系重构方法、装置、系统及存储介质。
11.本技术第一方面提供了一种组件引用关系重构方法,所述方法包括:通过预先配置的api获取目标平台的设计组件数据;对所述设计组件数据进行解析,获得表示所述设计组件数据中引用其组件信息的
目标字段的所有取值;对所述目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱,在所述知识图谱中,各个组件表示为节点,引用关系表示为连接节点的连接线;在所述知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;将所述初始节点加入目标数据结构中;重复以下步骤遍历整个知识图谱,直到所述目标数据结构中的组件为空,从而提取出组件之间的关联关系集合,并重构各个组件之间的引用关系:从所述目标数据结构中取出一个节点作为当前节点;检查所述当前节点的所有邻接节点,所述邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入所述目标数据结构中。
12.可选的,当组件被用于不同于所述目标平台的其它设计平台时,所述重构各个组件之间的引用关系包括:识别所述其它设计平台中用于表示组件之间引用关系的字段以及所有的取值;根据提取出的组件之间的关联关系集合,将各个组件之间的引用关系与所述其它设计平台的字段以及对应的取值进行匹配,并将原有的字段和取值替换为所述其它设计平台的字段和取值。
13.可选的,构建知识图谱的过程中,使用邻接矩阵或邻接表来表示图的数据结构。
14.可选的,还包括:将所述目标平台的设计组件数据存储至第一字典中;将重构后的组件以及各个组件之间的引用关系存储至第二字典中;比对所述第一字典与所述第二字典中的键和值;根据键和值的比对结果验证重构后组件之间的引用关系的正确性。
15.可选的,通过如下方式判断重构后的引用关系中是否存在组件循环引用:从每一个还没有被访问过的节点开始,进行搜索;在搜索的过程中,使用三种不同的标记来标记节点,分别为:第一标记:表示节点还没有被访问过;第二标记:表示节点已经被访问过,且搜索过程仍在该节点的子节点中进行;第三标记:表示节点已经被访问过,且搜索过程已经从该节点的所有子节点返回;遍历重构后的所有组件和引用关系,若在搜索的过程中,发现具有第二标记的节点成为了当前节点的子节点,则确定存在组件循环引用。
16.可选的,所述重构各个组件之间的引用关系包括:步骤a:将所有节点的距离设置为无穷大,将起始节点的距离设置为0;步骤b:创建一个空的优先队列,将所有节点加入队列,所述优先队列根据节点的距离进行排序;步骤c:从队列中选出到所述起始节点距离最小的节点,遍历其所有未访问的邻接节点,并使用下述式子更新所述邻接节点的距离:
dist[v]= min(dist[v],dist[u]+weight(u,v))式子(1);所述式子(1)中,dist[v]表示当前已知的从所述起始节点到节点v的最短路径长度,dist[u]表示从起始节点到当前节点u的最短路径长度,weight(u,v)表示从节点u到节点v的边的权重,所述节点u表示当前节点,所述节点v表示未访问的邻接节点;步骤d:将当前节点标记为已访问;重复步骤c和d,直到所述优先队列为空。
[0017]
可选的,在所述重构各个组件之间的引用关系之后,还包括:通过下述式子计算各个组件的目标参数b_i:b_i=σ_j,k(σ_jk(i)/σ_jk)式子(2)式子(2)中,σ_jk 是节点j和k之间的最短路径数量,σ_jk(i)是这些路径中经过节点i的路径数量;比对各个组件的目标参数b_i的大小,在各个组件中确定出组件母版。
[0018]
本技术第二方面提供了一种组件引用关系重构装置,包括:获取模块,用于通过预先配置的api获取目标平台的设计组件数据;解析模块,用于对所述设计组件数据进行解析,获得表示所述设计组件数据中引用其组件信息的目标字段的所有取值;识别构建模块,用于对所述目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱,在所述知识图谱中,各个组件表示为节点,引用关系表示为连接节点的连接线;选取模块,用于在所述知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;数据结构模块,用于将所述初始节点加入目标数据结构中;重构模块,用于重复以下步骤遍历整个知识图谱,直到所述目标数据结构中的组件为空,从而提取出组件之间的关联关系集合,并重构各个组件之间的引用关系:从所述目标数据结构中取出一个节点作为当前节点;检查所述当前节点的所有邻接节点,所述邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入所述目标数据结构中。
[0019]
本技术第三方面提供了一种组件引用关系重构系统,所述包括:处理器、存储器、输入输出单元以及总线;所述处理器与所述存储器、所述输入输出单元以及所述总线相连;所述存储器保存有程序,所述处理器调用所述程序以执行第一方面以及第一方面中任一项可选的所述方法。
[0020]
本技术第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质上保存有程序,所述程序在计算机上执行时执行第一方面以及第一方面中任一项可选的所述方法。
[0021]
从以上技术方案可以看出,本技术具有以下优点:(1)本技术方法通过分析组件数据和它们之间的引用关系,能够精确地识别出组
件之间的依赖关系,并以知识图谱的形式展现出来,这将有助于设计者更清晰地理解组件之间的关联。
[0022]
(2)由于此方法基于通用的api接口获取组件数据,因此它能够广泛地适用于不同的设计平台和环境。
[0023]
(3)在此方法中,重构过程中的目标数据结构可以是队列,堆栈或者其他任何可以用来执行搜索的数据结构。这使得方法在实现时有很大的灵活性。
[0024]
(4)通过构建知识图谱,能够将复杂的组件关系可视化,更加直观地展现出组件之间的关系,便于理解和分析。
[0025]
(5)此方法提供了一种从全局角度来理解和探索设计组件之间关系的方式,不仅可以发现直接的引用关系,也能发现间接的、复杂的引用关系。
[0026]
(6)通过识别和理解组件之间的关系,设计者可以找出设计中可能存在的问题,如循环依赖等,从而有针对性地进行优化,提高设计质量。
附图说明
[0027]
为了更清楚地说明本技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0028]
图1为本技术中提供的组件引用关系重构方法一个实施例流程示意图;图2为本技术中验证组件引用关系正确性部分的流程示意图;图3为本技术中判断组件循环引用部分的流程示意图;图4为本技术中确定最短引用路径部分的流程示意图;图5为本技术中提供的组件引用关系重构装置一个实施例结构示意图;图6为本技术中提供的组件引用关系重构系统一个实施例结构示意图。
具体实施方式
[0029]
需要说明的是,本技术提供的方法,可以应用于终端也可以应用于系统,还可以应用于服务器上,例如终端可以是智能手机或电脑、平板电脑、智能电视、智能手表、便携计算机终端也可以是台式计算机等固定终端。为方便阐述,本技术中以终端为执行主体进行举例说明。
[0030]
本技术首先提供了一种本发明的实施例,下面进行描述:请参阅图1,图1为本技术提供的方法一个实施例流程示意图,该实施例包括:s101、通过预先配置的api获取目标平台的设计组件数据;在大型软件系统中,了解各个组件之间的依赖关系是非常重要的。本实施例提供的方法可以用来重构软件的依赖关系图,帮助架构师理解系统的整体结构,并做出更好的设计决策。
[0031]
本实施例首先通过调用预先配置的api来获取目标平台的设计组件数据,这个目标平台可以是常见的矢量图形设计平台,这个api接口可能由目标平台直接提供,也可能是第三方提供的接口。获取数据的格式可能包括json、xml等。 例如在设计平台如adobe xd、figma等,可以调用它们的api接口获取设计组件数据。对于矢量图像设计平台,设计组件数
据可以包括组件的名称、类型等基本信息。例如,如果是一个图形组件,那么可能需要记录它的名称(如"圆形")、类型(如"几何图形")等。还可以包括组件的各种属性值。对于一个图形组件,可能的属性包括颜色、大小、形状、透明度等。还可以包括组件之间的引用关系。例如,一个复合图形可能引用了多个其他的图形组件(如圆形、矩形等)。还可以包括组件的位置和布局,这指的是组件在画布中的位置和布局信息。例如,一个图形可能被放置在画布的中央,或者它的上方有另一个图形。还可以包括组件的变换信息,这包括组件的旋转角度、翻转状态、缩放比例等变换信息。还可以包括组件的路径数据,对于矢量图形,还会有路径数据,描述图形的形状。这可能包括一系列的点、线、曲线等,用于定义图形的轮廓。还可以包括组件的层级关系,对于复杂的图形设计,还会有组件的层级关系,描述哪些图形在上层,哪些图形在下层。
[0032]
s102、对所述设计组件数据进行解析,获得表示所述设计组件数据中引用其组件信息的目标字段的所有取值;不同的设计平台上的设计组件数据所使用的数据结构可能不同,然而设计组件数据通常是结构化的数据,例如json格式。可以使用对应的解析库(如python的json库)来解析这些数据,并获取到包含引用关系信息的字段以及他们的取值。例如在处理网页设计时,需要解析html或css代码来获取组件的引用关系。
[0033]
当应用于矢量图形设计软件(如adobe illustrator, sketch, figma等)时,这一步骤需要对特定的文件格式(如svg,ai,sketch文件等)或者特定平台的api返回数据进行解析。
[0034]
对于文件格式,可以使用对应的解析库来解析这些数据。比如,对于svg文件,可以使用python的xml库或者更专业的svglib库来解析svg文件,并获取到组件的相关信息,包括其引用其他组件的信息。对于ai文件,可以使用adobe的pdf库,因为ai文件实际上是一种pdf格式的文件。
[0035]
对于使用平台api获取的数据,其返回的结构可以是json或xml等格式的数据,这时就需要对这些数据进行解析。比如,figma的api返回的就是json格式的数据,可以使用python的json库来解析这些数据,并获取到组件的相关信息,包括其引用其他组件的信息。
[0036]
s103、对所述目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱,在所述知识图谱中,各个组件表示为节点,引用关系表示为连接节点的连接线;该步骤中,首先需要对步骤s102中所获得的字段和对应的取值进行识别,不同的设计平台所采用的字段可能不一样,因此需要针对不同的设计平台提供不同的识别规则,例如在sketch中,sketch的设计元素(组件)包括形状、文本、图片、符号等。每个设计元素可以被包含在一个或多个画板中,而画板可以被组织在页面中。在sketch中,设计元素的引用关系可能表示为符号引用、样式引用、字体引用等。需要从sketch平台获取设计组件数据。这可以通过调用sketch提供的javascript api来完成。例如,可以使用sketch的document对象来获取到整个设计文档的数据,包括其中的所有页面、画板和设计元素。sketch的设计组件数据通常是以json格式表示的。在获取到数据后,可以使用json解析库(如python的json库或javascript的json对象)来解析这些数据。
[0037]
在解析完数据后,需要识别出表示引用关系的目标字段。在sketch中,这可能包括
以下几种字段:符号引用:sketch中的符号(symbol)是一种可以复用的设计元素。一个符号可以被多次引用,每次引用都会创建一个符号实例。符号引用可以通过查找每个符号实例所引用的符号id来识别。
[0038]
样式引用:sketch中的样式(style)是定义了一组视觉属性(如颜色、描边、阴影等)的对象。一个样式可以被多个设计元素引用。样式引用可以通过查找每个设计元素的样式id来识别。
[0039]
字体引用:sketch中的文本元素可以引用特定的字体。字体引用可以通过查找每个文本元素的字体属性来识别。
[0040]
在识别出目标字段后,就可以根据这些字段的取值来构建出各个组件之间的引用关系,从而建立知识图谱了。
[0041]
在知识图谱中,每个节点代表一个组件,每个连接线代表一个引用关系。 构建知识图谱可以利用python架构来完成,下面提供一个使用python中的库来实现的例子:构建知识图谱的第一步需要创建一个空的图来存储组件之间的引用关系。在python中,可以使用networkx库的digraph类来创建一个空的有向图。在其他编程语言中,可能需要自己实现图的数据结构,或者使用对应的图处理库。
[0042]
第二部是将组件添加到节点中,首先遍历解析后的设计组件数据,对于每个设计组件,将其作为一个节点添加到图中。在添加节点时,可以将设计组件的id或名称作为节点的标识符,将设计组件的内容信息(如类型、属性等)作为节点的属性。
[0043]
最后遍历解析后的设计组件数据,对于每个设计组件,查找它的目标字段(即引用其的组件信息),对于每个目标字段的取值,将其表示为一个引用关系,添加到图中。在添加引用关系时,可以将引用的源组件和目标组件作为边的两个节点,将引用的类型(如符号引用、样式引用、字体引用等)作为边的属性。
[0044]
构建知识图谱的过程中,可以使用邻接矩阵或邻接表来表示图的数据结构,具体可以根据实际所应用的场景来选择。
[0045]
s104、在所述知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;通过前述步骤s101至步骤s103,已经完成了用于存储组件之间引用关系的知识图谱的构建,接下来就需要对各个组件以及彼此之间的引用关系进行分析,从而从全局上确定出组件之间直接和间接的连接关系。
[0046]
那么在本步骤s104中,首先确定出一个特定的核心组件。一种方式是事先选择一个合适的节点作为起始节点,当然在实际中也可以通过其它方式来确定,例如选择一个度数最大(即有最多的引用关系)的节点。之后需要将这个起始节点标记为已访问。标记节点的目的是防止在后续的遍历过程中重复访问同一个节点。在这个过程中,可以使用一个数据结构,例如,一个字典或者集合,来保存已经访问过的节点。
[0047]
s105、将所述初始节点加入目标数据结构中;在该步骤中,将选定的初始节点加入到目标数据结构中。目标数据结构可以是各种形式,例如队列或者优先队列等。
[0048]
s106、重复以下步骤遍历整个知识图谱,直到所述目标数据结构中的组件为空,从
而提取出组件之间的关联关系集合,并重构各个组件之间的引用关系:从所述目标数据结构中取出一个节点作为当前节点;检查所述当前节点的所有邻接节点,所述邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入所述目标数据结构中。
[0049]
该步骤中是遍历整个知识图谱的过程,直到遍历完所有节点或者满足其他停止条件。在遍历的过程中可以记录节点的信息,更新节点的状态。这可以用来提取出组件之间的关联关系集合,从而达到重构各个组件之间的引用关系的目的。
[0050]
首先从目标数据结构中取出一个节点作为当前节点。具体的取出操作取决于目标数据结构的类型。例如,如果目标数据结构是队列,可以使用出队操作;如果目标数据结构是栈,可以使用出栈操作。
[0051]
检查当前节点的所有邻接节点。邻接节点是指与当前节点直接相连的节点。在图的数据结构中,可以通过查找邻接矩阵或者邻接表来获取当前节点的所有邻接节点。
[0052]
对于每个未访问的邻接节点,将其标记为已访问并将其加入到目标数据结构中。这个操作是为了防止在遍历过程中重复访问同一个节点。标记节点的已访问状态可以使用一个布尔型的数组或者哈希表来实现。
[0053]
在一个可选的实施例中,在进行ui设计时,设计师可能会在多个设计平台上进行设计,例如adobe xd,sketch,figma等。在某一平台上完成的设计可能需要迁移到其他平台进行后续的开发或者修改。在这种情况下,就需要根据这种方法来重构组件之间的引用关系。
[0054]
当组件被用于不同于所述目标平台的其它设计平台时,重构各个组件之间的引用关系还可以是:识别所述其它设计平台中用于表示组件之间引用关系的字段以及所有的取值;根据提取出的组件之间的关联关系集合,将各个组件之间的引用关系与所述其它设计平台的字段以及对应的取值进行匹配,并将原有的字段和取值替换为所述其它设计平台的字段和取值。
[0055]
下面对该可选的实施例进行说明:假设原有的设计平台是adobe xd,新的设计平台是sketch。
[0056]
在adobe xd中,设计组件的引用关系可能通过一种称为"symbol"的机制来表示,这个机制允许设计师创建复用的设计组件,这些组件可以在设计中被引用多次。
[0057]
假设有一个在adobe xd中的设计组件,它的引用关系在数据中表示为:"id": "123","type": "symbol","references": ["456", "789"]在这个例子中,这个设计组件的id是"123",它引用了id为"456"和"789"的其他两个设计组件。
[0058]
然后需要将这个设计组件迁移到sketch平台。在sketch中,设计组件的引用关系可能通过一种称为"symbolmaster"的机制来表示。
[0059]
在sketch中,设计组件的引用关系如下所示:"id": "abc","type": "symbolmaster","layers":"id": "def","symbolid": "ghi"在这个例子中,这个设计组件的id是"abc",它通过"layers"数组中的对象引用了id为"ghi"的设计组件。
[0060]
为了将adobe xd中的设计组件迁移到sketch,需要创建一套匹配规则,将"symbol"类型的组件转换为"symbolmaster"类型的组件,将"references"字段转换为"layers"数组,将被引用的组件的id转换为"symbolid"字段。这样的匹配规则可以通过一个映射表来完成,通过该可选的实施例,原有设计平台的数据就可以被转换为新设计平台的数据,从而实现数据的迁移和引用关系的重构。
[0061]
在另一个可选的实施例中,在完成对引用关系的重构之后,还可以对重构后的组件之间的引用关系进行验证,主要目的是验证是否存在错误引用的节点,参阅图2,下面提供一个进行验证的实施例:s201、将所述目标平台的设计组件数据存储至第一字典中;s202、将重构后的组件以及各个组件之间的引用关系存储至第二字典中;s203、比对所述第一字典与所述第二字典中的键和值;s204、根据键和值的比对结果验证重构后组件之间的引用关系的正确性。
[0062]
下面对该实施例进行举例说明:在该可选的实施例中,设计组件数据及其引用关系在进行重构后需要进行验证,确保重构的正确性。该实施例通过字典存储键值对(key-value pairs)来实现这种验证。首先设计组件数据被获取并存储在一个字典中。键(key)可以是组件的标识符,例如前述实施例提到的组件的id,值(value)可以是关于该组件的内容信息,例如前述实施例中提到的类型、属性,作为节点的属性。重构后的组件及其引用关系也被存储在一个字典中,使用与第一字典相同的方式,本实施例中定义为第二字典,最后遍历两个字典,并比较每个键值对是否相等。如果所有键值对都相等,那么可以认为重构是成功的。根据步骤s203的比对结果,可以验证重构后的组件之间的引用关系是否正确。如果所有键值对都相等,说明重构的结果与原始数据一致,重构是成功的。如果有任何键值对不相等,说明重构过程中可能发生了错误,需要检查并修正。
[0063]
前述可选的实施例提供了一种检查引用关系正确性的实施例,在另一个可选的实施例中,还提供了一个检查本技术方法所重构之后的引用关系中,是否存在有组件循环引用的问题,在矢量图形设计平台中,组件的循环引用可能会导致一些问题。如果组件a引用了组件b,组件b又引用了组件a,形成一个循环引用。在渲染时,渲染引擎可能会陷入无尽的循环,因为它总是在a和b之间切换,无法确定哪个组件应该先渲染。基于此,请参阅图3,本实施例提供了一种方法用于检查是否存在组件循环引用,下面进行说明:s301、从每一个还没有被访问过的节点开始,进行搜索;
s302、在搜索的过程中,使用三种不同的标记来标记节点,分别为:第一标记:表示节点还没有被访问过;第二标记:表示节点已经被访问过,且搜索过程仍在该节点的子节点中进行;第三标记:表示节点已经被访问过,且搜索过程已经从该节点的所有子节点返回;s303、遍历重构后的所有组件和引用关系,若在搜索的过程中,发现具有第二标记的节点成为了当前节点的子节点,则确定存在组件循环引用。
[0064]
下面通过举例进行说明:假设有一个设计项目数据,其中包含四个组件a、b、c和d,它们的引用关系如下:组件a引用了组件b和c组件b引用了组件d组件c引用了组件a和d组件d没有引用其他组件按照本实施例中的步骤:s301:可以从任何一个节点开始,比如从a开始。因为所有节点初始时都有第一标记,表示它们还没有被访问过。
[0065]
s302:先访问a,并将a的标记改为第二标记,表示正在访问a的子节点。然后访问a的子节点b和c。首先访问b,将b的标记也改为第二标记,并继续访问b的子节点d。由于d没有子节点,将d的标记改为第三标记,并返回b。此时b的所有子节点都被访问过了,所以将b的标记改为第三标记,返回a。然后开始访问a的另一个子节点c,将c的标记改为第二标记,并开始访问c的子节点a和d。
[0066]
s303:在访问c的子节点时,发现a的标记已经是第二标记,这意味着a已经被访问过,且搜索过程仍在a的子节点中进行。这就发现了一个循环引用:c引用了a,而搜索过程还在a的子节点中进行。所以,确定存在组件循环引用。
[0067]
通过本实施例提供的方法能够检查出重构后的引用关系中是否存在有组件循环引用,如果有循环引用,可以做一定的校正处理,例如打破引用循环。
[0068]
在渲染矢量图形或者处理设计元素时,可能会涉及到处理一些重复或者复杂的引用关系。如果能够知道最短的引用路径,就可以通过最少的步骤达到目标组件,提高处理速度。而对于合作团队或者需要交接工作的情况,通过可视化显示的最短路径,还可以更直观地理解复杂的引用关系,更容易地进行交流。基于此,为了能够知晓某个组件所引用其它组件的最短路径,参阅图4,本实施例同样提供了一种方法来确定,下面进行描述:步骤a:将所有节点的距离设置为无穷大,将起始节点的距离设置为0;步骤b:创建一个空的优先队列,将所有节点加入队列,所述优先队列根据节点的距离进行排序;步骤c:从队列中选出到所述起始节点距离最小的节点,遍历其所有未访问的邻接节点,并使用下述式子更新所述邻接节点的距离:dist[v]= min(dist[v],dist[u]+weight(u,v))式子(1);所述式子(1)中,dist[v]表示当前已知的从所述起始节点到节点v的最短路径长度,dist[u]表示从起始节点到当前节点u的最短路径长度,weight(u,v)表示从节点u到节点v的边的权重,所述节点u表示当前节点,所述节点v表示未访问的邻接节点;
步骤d:将当前节点标记为已访问;重复步骤c和d,直到所述优先队列为空。
[0069]
下面通过举例进行说明:假设对组件的引用关系进行重构之后,得到一个知识图谱,其中有4个组件a、b、c、d,引用关系如下:组件a引用组件b,权重为1;组件a引用组件c,权重为3;组件b引用组件c,权重为2;组件b引用组件d,权重为5;组件c引用组件d,权重为4。
[0070]
若需要出从组件a到组件d的最短引用路径。可以按照本实施例方法进行以下步骤:步骤a:将所有节点的距离初始化为无穷大,将a的距离设置为0,得到: dist[a] = 0 dist[b]= ∞ dist[c] = ∞ dist[d]= ∞步骤b:创建一个优先队列,将所有节点加入队列。
[0071]
步骤c-d:从该优先队列中取出距离最小的节点,也就是a,然后遍历a的邻接节点b和c。对于b,显然,通过a可以以更短的路径到达b,因此更新b的最短路径长度为1。对于c,同样可以通过a以更短的路径到达c,因此更新c的最短路径长度为3。然后将a标记为已访问。
[0072]
接下来再次从该优先队列中取出距离最小的节点,这时是b,然后遍历b的邻接节点c和d。显然通过b以更短的路径到达c,因此更新c的最短路径长度为3。对于d,其最短路径长度为6。将b标记为已访问。
[0073]
重复这个过程,直到该优先队列为空。
[0074]
最终,得到了以下的最短路径长度: dist[a] = 0 dist[b]= 1 dist[c] = 3 dist[d]= 6因此,从组件a到组件d的最短引用路径是a-》b-》d,最短路径长度为6。
[0075]
需要理解的是,实际中,权重的数值可以设置为全局一致。
[0076]
该实施例通过构建知识图谱,该方法可以将组件和组件之间复杂的引用关系以结构化的形式进行表示和分析。这种结构化的表达方式使得处理更加方便,同时也方便了对设计的可视化和理解。该实施例中找出组件之间最短的引用路径可以帮助设计师快速理解和定位组件之间的关联,从而作出更有效的设计决策。例如,如果一个组件需要修改,设计师可以通过查看最短路径来了解这个修改会影响哪些其他组件。基于该实施例,还可以提供更加丰富的可视化功能来改进设计师的使用体验。
[0077]
在矢量图形设计的场景中,例如,当在设计一个复杂的界面时,可能会使用许多不同的组件。某些组件可能在各种不同的设计元素和功能中被重复使用,而其他的可能只在特定的地方出现。
[0078]
因此,基于本技术中提供的方法,在重构引用关系之后,本实施例定义了一个目标参数b_i,通过计算每个组件的b_i参数,可以量化每个组件的重要性,从而在设计中确定哪些组件是“关键组件”或“母版组件”。
[0079]
下面对该实施例进行说明:
通过下述式子计算各个组件的目标参数b_i:b_i=σ_j,k(σ_jk(i)/σ_jk)式子(2)式子(2)中,σ_jk 是节点j和k之间的最短路径数量,σ_jk(i)是这些路径中经过节点i的路径数量;比对各个组件的目标参数b_i的大小,在各个组件中确定出组件母版。
[0080]
在该可选的实施例中,要计算出每个组件在所有最短路径中的出现频率。值得注意的是,最短路径指的是两个节点之间的最少跳数。σ_jk 是节点j和k之间的最短路径数量,σ_jk(i) 是这些路径中经过节点i的路径数量。
[0081]
对于每个组件i,计算其b_i参数,即所有通过i的最短路径数除以所有的最短路径数的总和。这个比例可以说明组件i在所有最短路径中的出现频率。
[0082]
下面通过举例进行说明:假设有以下几个组件:a、b、c、d。a是起始节点,d是终止节点,b和c是中间节点。假设有以下最短路径:a-》b-》d:经过b的路径a-》c-》d:经过c的路径a-》b-》c-》d:经过b和c的路径那么,σ_jk(总)=3,σ_jk(b)=2,σ_jk(c)=2。
[0083]
因此,b_i(b)=σ_jk(b)/σ_jk(总)=2/3,b_i(c)=σ_jk(c)/σ_jk(总)=2/3。这说明b和c在所有最短路径中的出现频率相同。
[0084]
比对所有组件的b_i参数,可以得出哪个组件在所有最短路径中出现的频率最高。而这个组件就是组件母版。在这个例子中,因为b和c的出现频率相同,因此,可以通过其他的规则来进一步确定哪一个是组件母版。例如,可以将度数最高的节点作为组件母版。
[0085]
本实施例提供的方法能够基于前述构建的知识图谱来确定出组件母版,这对于设计的优化、迭代和维护都非常有用。例如,对于那些重要性较高的组件,设计师可能需要付出更多的精力来优化和改进。同时,如果一个重要的组件需要修改,那么可能会影响到设计的很多部分,因此需要更仔细的规划和测试。通过这种方式,b_i参数的计算能够帮助设计师更好地理解和管理复杂的设计系统。
[0086]
上述内容对本技术中提供的方法的实施例进行了详细描述,下面对本技术中装置、系统及存储介质的实施例进行描述:参阅图5,本实施例提供了一种组件引用关系重构装置的实施例,包括:获取模块501,用于通过预先配置的api获取目标平台的设计组件数据;解析模块502,用于对所述设计组件数据进行解析,获得表示所述设计组件数据中引用其组件信息的目标字段的所有取值;识别构建模块503,用于对所述目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱,在所述知识图谱中,各个组件表示为节点,引用关系表示为连接节点的连接线;选取模块504,用于在所述知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;数据结构模块505,用于将所述初始节点加入目标数据结构中;
重构模块506,用于重复以下步骤遍历整个知识图谱,直到所述目标数据结构中的组件为空,从而提取出组件之间的关联关系集合,并重构各个组件之间的引用关系:从所述目标数据结构中取出一个节点作为当前节点;检查所述当前节点的所有邻接节点,所述邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入所述目标数据结构中。
[0087]
可选的,重构模块具体用于:当组件被用于不同于所述目标平台的其它设计平台时,所述重构各个组件之间的引用关系包括:识别所述其它设计平台中用于表示组件之间引用关系的字段以及所有的取值;根据提取出的组件之间的关联关系集合,将各个组件之间的引用关系与所述其它设计平台的字段以及对应的取值进行匹配,并将原有的字段和取值替换为所述其它设计平台的字段和取值。
[0088]
可选的,还包括验证模块507,用于:将所述目标平台的设计组件数据存储至第一字典中;将重构后的组件以及各个组件之间的引用关系存储至第二字典中;比对所述第一字典与所述第二字典中的键和值;根据键和值的比对结果验证重构后组件之间的引用关系的正确性。
[0089]
可选的,还包括循环引用检查模块508,用于:通过如下方式判断重构后的引用关系中是否存在组件循环引用:从每一个还没有被访问过的节点开始,进行搜索;在搜索的过程中,使用三种不同的标记来标记节点,分别为:第一标记:表示节点还没有被访问过;第二标记:表示节点已经被访问过,且搜索过程仍在该节点的子节点中进行;第三标记:表示节点已经被访问过,且搜索过程已经从该节点的所有子节点返回;遍历重构后的所有组件和引用关系,若在搜索的过程中,发现具有第二标记的节点成为了当前节点的子节点,则确定存在组件循环引用。
[0090]
可选的,重构模块506用于:步骤a:将所有节点的距离设置为无穷大,将起始节点的距离设置为0;步骤b:创建一个空的优先队列,将所有节点加入队列,所述优先队列根据节点的距离进行排序;步骤c:从队列中选出到所述起始节点距离最小的节点,遍历其所有未访问的邻接节点,并使用下述式子更新所述邻接节点的距离:dist[v]= min(dist[v],dist[u]+weight(u,v))式子(1);所述式子(1)中,dist[v]表示当前已知的从所述起始节点到节点v的最短路径长度,dist[u]表示从起始节点到当前节点u的最短路径长度,weight(u,v)表示从节点u到节点v的边的权重,所述节点u表示当前节点,所述节点v表示未访问的邻接节点;步骤d:将当前节点标记为已访问;
重复步骤c和d,直到所述优先队列为空。
[0091]
可选的,还包括母版确定模块509,用于:通过下述式子计算各个组件的目标参数b_i:b_i=σ_j,k(σ_jk(i)/σ_jk)式子(2)式子(2)中,σ_jk 是节点j和k之间的最短路径数量,σ_jk(i)是这些路径中经过节点i的路径数量;比对各个组件的目标参数b_i的大小,在各个组件中确定出组件母版。
[0092]
请参阅图6,本技术还提供了一种组件引用关系重构系统,包括:处理器601、存储器602、输入输出单元603、总线604;处理器601与存储器602、输入输出单元603以及总线604相连;存储器602保存有程序,处理器601调用程序以执行如上任一方法。
[0093]
本技术还涉及一种计算机可读存储介质,计算机可读存储介质上保存有程序,其特征在于,当程序在计算机上运行时,使得计算机执行如上任一方法。
[0094]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0095]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0096]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0097]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0098]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。

技术特征:
1.一种组件引用关系重构方法,其特征在于,所述方法包括:通过预先配置的api获取目标平台的设计组件数据;对所述设计组件数据进行解析,获得表示所述设计组件数据中引用其组件信息的目标字段的所有取值;对所述目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱,在所述知识图谱中,各个组件表示为节点,引用关系表示为连接节点的连接线;在所述知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;将所述初始节点加入目标数据结构中;重复以下步骤遍历整个知识图谱,直到所述目标数据结构中的组件为空,从而提取出组件之间的关联关系集合,并重构各个组件之间的引用关系:从所述目标数据结构中取出一个节点作为当前节点;检查所述当前节点的所有邻接节点,所述邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入所述目标数据结构中。2.根据权利要求1中所述的组件引用关系重构方法,其特征在于,当组件被用于不同于所述目标平台的其它设计平台时,所述重构各个组件之间的引用关系包括:识别所述其它设计平台中用于表示组件之间引用关系的字段以及所有的取值;根据提取出的组件之间的关联关系集合,将各个组件之间的引用关系与所述其它设计平台的字段以及对应的取值进行匹配,并将原有的字段和取值替换为所述其它设计平台的字段和取值。3.根据权利要求2中所述的组件引用关系重构方法,其特征在于,并将原有的字段和取值替换为所述其它设计平台的字段和取值包括:将原有的symbol规则替换为symbolmaster规则;将原有的references字段替换为layers数组。4.根据权利要求1中所述的组件引用关系重构方法,其特征在于,构建知识图谱的过程中,使用邻接矩阵或邻接表来表示图的数据结构。5.根据权利要求1中所述的组件引用关系重构方法,其特征在于,还包括:将所述目标平台的设计组件数据存储至第一字典中;将重构后的组件以及各个组件之间的引用关系存储至第二字典中;比对所述第一字典与所述第二字典中的键和值;根据键和值的比对结果验证重构后组件之间的引用关系的正确性。6.根据权利要求1中所述的组件引用关系重构方法,其特征在于,通过如下方式判断重构后的引用关系中是否存在组件循环引用:从每一个还没有被访问过的节点开始,进行搜索;在搜索的过程中,使用三种不同的标记来标记节点,分别为:第一标记:表示节点还没有被访问过;第二标记:表示节点已经被访问过,且搜索过程仍在该节点的子节点中进行;第三标记:表示节点已经被访问过,且搜索过程已经从该节点的所有子节点返回;遍历重构后的所有组件和引用关系,若在搜索的过程中,发现具有第二标记的节点成
为了当前节点的子节点,则确定存在组件循环引用。7.根据权利要求1中所述的组件引用关系重构方法,其特征在于,所述重构各个组件之间的引用关系包括:步骤a:将所有节点的距离设置为无穷大,将起始节点的距离设置为0;步骤b:创建一个空的优先队列,将所有节点加入队列,所述优先队列根据节点的距离进行排序;步骤c:从队列中选出到所述起始节点距离最小的节点,遍历其所有未访问的邻接节点,并使用下述式子更新所述邻接节点的距离:dist[v]= min(dist[v],dist[u]+weight(u,v))式子(1);所述式子(1)中,dist[v]表示当前已知的从所述起始节点到节点v的最短路径长度,dist[u]表示从起始节点到当前节点u的最短路径长度,weight(u,v)表示从节点u到节点v的边的权重,所述节点u表示当前节点,所述节点v表示未访问的邻接节点;步骤d:将当前节点标记为已访问;重复步骤c和d,直到所述优先队列为空。8.根据权利要求1中所述的组件引用关系重构方法,其特征在于,在所述重构各个组件之间的引用关系之后,还包括:通过下述式子计算各个组件的目标参数b_i:b_i=σ_j,k(σ_jk(i)/σ_jk)式子(2)式子(2)中,σ_jk 是节点j和k之间的最短路径数量,σ_jk(i)是这些路径中经过节点i的路径数量;比对各个组件的目标参数b_i的大小,在各个组件中确定出组件母版。9.根据权利要求1中所述的组件引用关系重构方法,其特征在于,所述构建出用于表示各个组件之间引用关系的知识图谱包括:基于python中network库的digraph类创建一个空的有向图;遍历解析后的设计组件数据,将每个设计组件作为一个节点添加到所述有向图中,添加时,所述设计组件的id作为节点的标识符,所述设计组件的内容信息作为节点的属性;遍历解析后的设计组件数据,查找每个组件的目标字段以及取值,根据目标字段的取值,在对应的节点之间添加连接线,节点之间引用的类型存储在所述连接线的属性中。10.一种组件引用关系重构装置,其特征在于,包括:获取模块,用于通过预先配置的api获取目标平台的设计组件数据;解析模块,用于对所述设计组件数据进行解析,获得表示所述设计组件数据中引用其组件信息的目标字段的所有取值;识别构建模块,用于对所述目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱,在所述知识图谱中,各个组件表示为节点,引用关系表示为连接节点的连接线;选取模块,用于在所述知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;数据结构模块,用于将所述初始节点加入目标数据结构中;重构模块,用于重复以下步骤遍历整个知识图谱,直到所述目标数据结构中的组件为
空,从而提取出组件之间的关联关系集合,并重构各个组件之间的引用关系:从所述目标数据结构中取出一个节点作为当前节点;检查所述当前节点的所有邻接节点,所述邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入所述目标数据结构中。11.一种组件引用关系重构系统,其特征在于,所述装置包括:处理器、存储器、输入输出单元以及总线;所述处理器与所述存储器、所述输入输出单元以及所述总线相连;所述存储器保存有程序,所述处理器调用所述程序以执行如权利要求1至9任一项所述方法。12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上保存有程序,所述程序在计算机上执行时执行如权利要求1至9中任一项所述方法。

技术总结
本申请公开了一种组件引用关系重构方法、装置、系统及存储介质,用于对不同平台之间的组件进行引用关系重构。本申请方法包括:获取目标平台的设计组件数据;对设计组件数据进行解析;对目标字段的取值表示的引用关系进行识别,构建出用于表示各个组件之间引用关系的知识图谱;在知识图谱中,选择一个起始组件作为初始节点,并将其标记为已访问;将初始节点加入目标数据结构中;重复以下步骤遍历整个知识图谱:从目标数据结构中取出一个节点作为当前节点;检查当前节点的所有邻接节点,邻接节点为与当前节点直接相连的组件;对于每个未访问的邻接节点,将其标记为已访问并将其加入目标数据结构中。数据结构中。数据结构中。


技术研发人员:代金 刘松 莫建华 孟小江 练纯科
受保护的技术使用者:成都摹客科技有限公司
技术研发日:2023.08.30
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐