Page 86 - 《软件学报》2020年第10期
P. 86
3062 Journal of Software 软件学报 Vol.31, No.10, October 2020
• 实体图(entity graph):系统的核心数据结构——以实体图的形式维护所有数据信息,实体种类除了开源
软件外,还包括人员、公司(或组织)等多种其他类型,实体间的关系也丰富多样,包括供应、开发、维护、从属等,
以直观的形式建模整个开源世界的供应关系,本文将在第 3.2 节详细介绍这部分内容;
• 控制器(controller):负责协调和分发后台任务,包括数据分析和状态监控;
• 分析器(analyzer):以插件的形式实现,负责执行指定的分析任务,如软件可靠性分析等;
• 事件通知器(notifier):以插件的形式实现,负责当系统生成事件时(如监控发现异常或者存在潜在风险),
发送通知至指定的位置.
3.2 数据管理
本节重点介绍开源软件供应链系统的数据管理实现.如前文所述,系统以实体图的形式组织和维护供应链
相关信息,相比于其他数据组织形式,实体图能够更加直观地反映实体间的关系,蕴含更加丰富的语义信息,便
于理解数据本身并推导出新的事实.随着数据体量的不断增大和数据内容的不断丰富,最终目标是将其建设成
为一个关于开源软件供应链的知识图谱.
3.2.1 本体设计
本体设计是知识图谱构建的首要步骤,在该步骤中,我们需要抽象定义图谱中所包含的实体类型,并梳理它
们之间的关系,最终以图的形式将它们组织起来.为了限制知识图谱的规模和复杂性,在本文中,我们限定知识
图谱在开源软件领域.如图 3 所示,当前我们共定义了五大实体类型.
Fig.3 The ontology design of knowledge graph of open source software
图 3 开源软件知识图谱本体设计
• 软件(software):软件是开源软件图谱的核心实体类型,根据开源软件的协作模式,我们进一步分为包
(package)和操作系统(OS)两个实体子类型,和软件实体类型是“isA”的关系,其中,包是软件中最小粒度的实体,
而操作系统是由多个包组装而成的,因此它们之间存在“hasComponent”的关系,而包之间的供应关系通过
“hasSupplier”来描述,包自身的演化关系通过“hasPreversion”来描述;
• 开源协议(license):该实体类型描述某一种具体的开源协议,软件必须“obey”一种或多种开源协议,它限
制了开源软件的使用方式,对开源软件的可用性存在潜在的影响,因而使得开源软件供应链存在潜在的可靠性
风险;