航空认证:语义网栈的应用与实践
1. 本体维护与SADL语言
SADL语言相较于OWL,在读写方面具有显著优势,即使是其标准序列化形式也是如此。这使得非语义专家也能够读取、编写并为数据模型做出贡献,这对于模型的可维护性至关重要。我们的本体大约由7800行SADL代码组成,编译后可生成7400个三元组。完整的语义模型可在GitHub上找到。
为了维护本体,我们建立了一个参与式流程,让所有ARCOS项目的参与者都成为模型演进的利益相关者。数据模型决策团队(DMDT)由每个执行团队的一名代表组成,该团队每两周定期开会,任何成员都可以提出更改建议。我们遵循RAPID流程,TA2团队负责主持会议、实施商定的更改并维护本体。SADL在将语义网栈引入DARPA社区方面发挥了关键作用,如果使用关系模式或OWL,我们很难进行如此深入的讨论并达成良好的共识。
以下是本体维护流程的mermaid流程图:
graph LR
A[提出更改建议] --> B[DMDT会议讨论]
B --> C{是否通过}
C -- 是 --> D[TA2团队实施更改]
C -- 否 --> E[结束流程]
D --> F[更新本体]
2. 证据摄入管道
从多个提供者和大型团队中摄入数千条各种类型的证据,需要一套丰富的工具,这些工具分层构建在三元组存储之上,并组织成一个摄入管道。管道的底层是一个符合SPARQL 1.1标准的三元组存储,我们在项目的这个阶段使用Apache Fuseki。其上是语义工具包(SemTK)服务层,它基于“节点组”的概念,是GE多年来开发的一套语义工具。
SemTK包括SPARQLgraph界面,用于可视化编辑节点组和摄入映射模板、运行查询以及执行各种实用功能。它还提供Java和REST API,用于异步查询、摄入和实用功能。此外,还有一个Python API,在此基础上构建了多个其他工具,包括支持基本数据加载的用户界面RACK UI和命令行界面。
摄入管道的主要组件如下表所示:
| 组件 | 描述 |
| ---- | ---- |
| Apache Fuseki | 符合SPARQL 1.1标准的三元组存储 |
| SemTK服务层 | 基于“节点组”概念的语义工具包 |
| SPARQLgraph界面 | 用于可视化编辑和查询 |
| Java和REST API | 用于异步操作 |
| Python API | 构建其他工具的基础 |
3. SemTK节点组
“节点组”是SemTK层的基本概念,RACK的数据摄入和查询都基于此构建。可以使用SPARQLgraph通过将本体中的类拖到画布上并选择所需的属性来编辑节点组,它代表了特定查询或多个查询感兴趣的子图。路径查找功能可以辅助编辑过程,它可以仅基于本体或考虑现有实例数据来选择可能的路径。
默认情况下,一个节点不仅代表显示的类,还代表所有子类。数据属性仅显示名称,对象属性则显示为指向其他节点的链接。图形编辑器提供了丰富的注释,允许选择属性进行返回、标记为可选或排除、过滤以及应用函数。对象属性可以应用如*和+等运算符,并且支持联合操作。虽然节点组支持SPARQL的一个非常有用的子集,但尚未支持SPARQL的完整表达能力。
节点组的操作步骤如下:
1. 打开SPARQLgraph界面。
2. 从本体中拖动类到画布。
3. 选择所需的属性。
4. 使用路径查找功能辅助编辑。
5. 应用注释和运算符。
4. SemTK摄入模板
摄入模板基于节点组的概念构建,它将CSV文件中每行的数据映射到节点组,使得CSV文件的每行数据都能插入代表一个节点组子图的三元组。摄入模板的右侧显示目标CSV文件的列名,左侧显示每列映射到节点组的位置。
摄入过程支持许多功能,其中最重要的是URI查找功能。在摄入模板中,代表类的粗体行设置为“—Generate UUID”,这意味着在摄入过程中将生成随机URI,而不是从CSV中的字符串构建。在查找URI时,模板提供了“create-if-missing”、“error-if-missing”和“error-if-exists”等选项。
摄入过程还会检查所有以URI、日期、时间、数字等形式呈现的数据的格式,防止摄入格式不正确的数据。这与用于摄入每行数据的本体驱动节点组一起,确保所有三元组的类型、属性、域和范围都符合本体。
以下是摄入模板的主要功能列表:
- URI查找功能
- 数据格式检查
- 与本体的一致性保证
5. 自动摄入模板(按类摄入)
虽然基于节点组和模板的摄入过程强大且灵活,但我们发现一个不太灵活的标准化摄入模板可以加快项目中众多参与者对摄入的理解和采用。因此,我们可以为任何给定的类自动生成标准摄入模板。
RACK的自动生成类摄入模板具有以下属性:目标类的一个实例通过?identifier以“create-if-missing”模式进行查找;每个数据属性在CSV中有对应的列;每个传出对象属性的对象通过其标识符以“error-if-missing”模式进行查找。
自动生成模板的优点是易于理解和使用,但也存在一些局限性,如表达能力的损失、加载顺序的强制要求以及在许多情况下性能不如自定义摄入模板。尽管如此,到目前为止,RACK中的大部分数据摄入都利用了这一功能。
自动摄入模板的使用步骤如下:
1. 选择要生成模板的类。
2. 生成自动摄入模板。
3. 使用API获取节点组副本和示例CSV文件。
4. 进行数据摄入。
6. 检查量化基数
SemTK在摄入过程中可以访问包含基数约束的本体副本,但在摄入过程中强制执行量化基数并不实际。因此,我们提供了一个SemTK REST函数,用于在整个数据集摄入完成后检查量化基数。
基数检查会遍历本体,并为每个基数限制运行一个SPARQL查询,返回一个包含违规信息的表格,包括类、属性、限制类型、限制值、违规实例和实际基数等字段。
检查量化基数的操作步骤如下:
1. 完成整个数据集的摄入。
2. 调用SemTK REST函数进行基数检查。
3. 查看返回的违规表格。
7. 摄入包
为了保持数据整理和数据探索的清晰分离,并符合数据所有者将数据本地存储的要求,RACK支持一种存档格式,其中包含完整的本体、数据集、查询和报告副本。这些“摄入包”可以使用我们的数据整理工具生成,确保生成的RACK状态易于为多个用户和多次重新加载进行重现。
摄入包内部结构为zip文件,包含各种组件的OWL、CSV和JSON文件,并通过YAML文件进行索引。清单文件指示如何将内容加载到RACK中,包括OWL或CSV文件的加载顺序、要加载到的三元组存储图以及每个文件使用的摄入模板。
摄入包的使用步骤如下:
1. 使用数据整理工具生成摄入包。
2. 使用RACK命令行界面或用户界面加载摄入包。
3. 分享和重现摄入包。
8. 刮取工具包
系统开发通常会使用多种工具和方法,每种方法都会产生支持认证的证据。RACK提供的刮取工具包(STK)是一个Python库,它可以从本体自动生成,用于将证据收集到可摄入的包中。
使用STK时,需要创建一个Python脚本,该脚本从“CreateEvidenceFile”方法开始,初始化一个RACK - DATA.xml文件,用于收集证据。当找到证据时,使用“Add”方法将证据追加到该文件中。每个数据类都有自己的“Add”方法,根据其本体定义进行定制。最后,使用“createCDR”方法处理RACK - DATA.xml文件,生成一个完整的摄入包。
刮取工具包的使用步骤如下:
1. 导入STK库。
2. 创建Python脚本,使用“CreateEvidenceFile”初始化文件。
3. 使用“Add”方法收集证据。
4. 使用“createCDR”方法生成摄入包。
9. 实体解析
从多个来源收集数据时,可能会在同一数据图中创建不同的实例,即使它们代表的是同一条证据。为了解决这个问题,我们在RACK中进行实体解析,而不修改源数据图。
在RACK本体中,定义了一个SAME_AS类,具有两个对象属性:primary和secondary。当用户识别出数据图中应该合并的实例时,会创建一个新的SAME_AS实例来连接这两个实例。为了辅助这个过程,我们创建了一个实体解析工具,它根据本体指导的一组规则评估可能匹配的可能性,并将结果呈现给用户进行最终确定。
实体解析的步骤如下:
1. 用户识别需要合并的实例。
2. 实体解析工具评估匹配可能性。
3. 创建SAME_AS实例连接实例。
4. 合并实例到一个新的解析数据图。
10. 证据探索
我们对RACK的愿景是,用户可以基于RACK API构建工具来进行数据探索。我们已经构建了查询节点组,既可以作为独立的数据验证工具,也可以作为数据检索的示例。此外,RACK还包括一个通用报告工具,允许将查询组织成特定角色感兴趣的集合,并批量重复执行到一个摘要页面。
证据探索的主要方式如下:
- 使用查询节点组进行数据验证和检索。
- 利用通用报告工具生成摘要页面。
通过以上各个组件和流程,RACK能够有效地摄入、整理和探索证据,为航空认证等领域提供了强大的支持。
航空认证:语义网栈的应用与实践
11. 各组件间的协同工作流程
为了更清晰地展示RACK各个组件是如何协同工作的,我们可以通过以下mermaid流程图来呈现:
graph LR
A[原始证据源] --> B[刮取工具包(STK)]
B --> C[生成摄入包]
C --> D[摄入管道]
D --> E[三元组存储(Apache Fuseki)]
E --> F[SemTK服务层]
F --> G[节点组与摄入模板处理]
G --> H[数据验证与实体解析]
H --> I[证据探索工具]
I --> J[用户界面展示]
这个流程展示了从原始证据的收集,到最终通过证据探索工具呈现给用户的整个过程。首先,刮取工具包(STK)从原始证据源收集证据并生成摄入包。然后,摄入包通过摄入管道进入三元组存储(Apache Fuseki)。SemTK服务层对存储的数据进行处理,包括节点组和摄入模板的操作。在这个过程中,会进行数据验证和实体解析,确保数据的准确性和一致性。最后,用户可以通过证据探索工具和用户界面来查看和分析数据。
12. 关键技术点分析
- SADL语言的优势 :SADL语言在本体编写方面具有显著优势,它使得非语义专家也能够参与到数据模型的维护中。这对于项目的长期可持续性至关重要,因为在实际项目中,可能涉及到多个不同专业背景的人员。通过使用SADL语言,降低了参与门槛,提高了模型的可维护性。
- SemTK的核心作用 :SemTK作为整个系统的核心工具包,基于“节点组”的概念构建,为数据摄入和查询提供了强大的支持。其可视化的SPARQLgraph界面使得操作更加直观,而丰富的API则方便了其他工具的集成和开发。
- 自动摄入模板的利弊 :自动摄入模板虽然在一定程度上牺牲了表达能力和性能,但它的易用性使得更多的用户能够快速上手。在项目初期或者数据结构相对简单的情况下,自动摄入模板可以大大提高数据摄入的效率。
13. 实际应用案例分析
假设一个航空认证项目需要收集和分析大量的证据数据。以下是使用RACK进行数据处理的具体步骤:
1.
证据收集
:使用刮取工具包(STK)从各种文档、报告等原始证据源中收集证据。开发人员编写Python脚本,利用STK的“CreateEvidenceFile”和“Add”方法,将证据收集到RACK - DATA.xml文件中。最后,使用“createCDR”方法生成摄入包。
2.
数据摄入
:将生成的摄入包通过摄入管道加载到系统中。使用RACK命令行界面或用户界面,按照清单文件的指示,将OWL、CSV等文件加载到三元组存储(Apache Fuseki)中。
3.
数据验证
:在数据摄入过程中,SemTK会进行基本的数据格式检查。在整个数据集摄入完成后,调用SemTK REST函数进行量化基数检查,确保数据符合本体的基数约束。
4.
实体解析
:使用实体解析工具,对数据图中可能重复的实例进行合并。用户识别需要合并的实例,工具评估匹配可能性,创建SAME_AS实例连接实例,并将合并后的实例存储到新的解析数据图中。
5.
证据探索
:用户可以使用查询节点组进行数据验证和检索,也可以利用通用报告工具生成摘要页面,对数据进行深入分析。
14. 未来发展方向
- 增强表达能力 :目前,节点组尚未支持SPARQL的完整表达能力。未来可以进一步扩展节点组的功能,使其能够支持更多复杂的查询和操作。
- 提高性能 :在处理大规模数据时,自动摄入模板和实体解析等操作可能会面临性能瓶颈。可以通过优化算法和数据结构,提高系统的处理速度和效率。
- 拓展应用领域 :RACK目前主要应用于航空认证领域,未来可以将其拓展到其他领域,如医疗、金融等,为更多行业提供数据处理和分析的解决方案。
15. 总结
RACK通过一系列的组件和工具,包括本体维护、证据摄入、数据验证、实体解析和证据探索等,为航空认证等领域提供了一个完整的数据处理和分析平台。其核心技术如SADL语言、SemTK节点组和摄入模板等,使得系统具有良好的可维护性、易用性和扩展性。在实际应用中,RACK能够有效地帮助用户收集、整理和分析大量的证据数据,为决策提供有力支持。随着技术的不断发展,RACK有望在更多领域发挥更大的作用。
通过以上对RACK各个方面的介绍和分析,我们可以看到它在航空认证以及其他相关领域的巨大潜力。无论是从技术实现还是实际应用的角度,RACK都为数据处理和分析提供了一种创新的解决方案。
超级会员免费看
825

被折叠的 条评论
为什么被折叠?



