Page 93 - 《软件学报》2020年第10期
P. 93
梁冠宇 等:面向操作系统可靠性保障的开源软件供应链 3069
实体图是系统实现的重要组成部分,基于图 3 描述的本体设计,我们将其映射为图 8 所示的数据结构.具体
地,我们严格按照面向对象的设计思想,将每个实体视作一个类,并为每个类定义相关的属性和类型.在图中,我
们以不同形式的箭头描述了类间的关系.其中,Entity 和 Relation 是基础类型;空心箭头表示继承关系,即
Software、License、Organization、Location、Human 继承实现 Entity,而 Package 和 OS 继承实现 Software;虚线
单箭头表示依赖关系,描述类属性对其他类及其属性的依赖关系;实线单箭头表示关联关系,即图中 Relation 通
过 from 和 to 属性分别指向关联 Entity 的 key 属性,将两个不同的 Entity 实例连接起来,以表示两个 Entity 之间
存在某种 Relation.
Fig.8 The data structure of knowledge graph of open source software
图 8 开源软件知识图谱数据结构
在我们的实现中,使用图数据库保存知识图谱数据.根据 G2(当用户寻找最优解决方案时,G2(https://www.
g2.com/)通过多维数据分析给出客观的建议,帮助用户做出决策)的推荐,在众多候选的图数据库中,我们锁定在
排名前二的 Neo4j(图数据库,2007 年发布第 1 个版本,使用 Java 语言开发实现)和 ArangoDB(图数据库,2011 年
发布第 1 个版本,使用 C++和 Javascript 语言开发实现)两款工具上,通过进一步比较,虽然 Neo4j 的工程采用度
更高,但在开放性方面,前者的社区版本(Neo4j 分为商用版本和社区版本)在横向扩展能力上严重受限;相比之
下,后者完全开源,因此我们选择更具开放性的 ArangoDB.基于 ArangoDB 提供的数据访问接口,我们根据实际
的业务需求,参照 RESTful [23] 标准实现一套接口,用于其他组件检索和更新实体图.
由于开源软件体量巨大,可以预见,开源软件知识图谱将包含海量的数据.为便于用户探索和获取相关知
识,并进行直观的数据分析工作,我们通过图形化界面实现开源软件供应链可视化,降低使用门槛.在实现供应
链可视化时,需要同时兼顾全局信息的完整性和局部细节的明确性,然而,对开源操作系统发行版而言,供应链