Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

切片、映射与溯源

在各引擎之外,PurRDF 还提供了一个严肃的词汇或数据管道项目所需的基础设施:用于组织所编写 RDF 的切片目录、用于有损投影的显式损失台账,以及 SSSOM 与 FnO 交换格式的原生编解码器。

切片目录

purrdf-slice(重新导出为 purrdf::slice)是面向以_切片_(slice)组织的本体/词汇仓库的工具——切片即所编写 RDF 的目录(slices/<group>/<name>/),每个都由一个 manifest.ttl 描述:

  • 目录——基于清单的发现(SliceCatalog::discover)、带类型的切片元数据(SliceRecord、SliceTier)以及工件角色。切片的标识来自清单,而不是目录名。
  • 所有权与依赖——术语所有权分析(每个已声明的术语恰好有一个拥有它的切片)、附带证据的依赖边、禁止边规则(扩展切片只依赖核心切片),以及可由机器应用的修复建议。
  • 内容寻址——用于增量管道的确定性工件摘要与缓存键。
  • 生成器——投影/映射生成器与 lint:前缀映射、JSON-LD 上下文、FnO 函数目录、声称(claim)视图。

秉承 PurRDF 不生成任何词汇 IRI 的规则,切片框架读取或输出的每个术语都属于调用方的词汇:SliceVocab 由调用方构造(它没有 Default),并贯穿每一个公共入口传递。

#![allow(unused)]
fn main() {
use std::path::Path;
use purrdf::slice::{SliceCatalog, SliceVocab};

// 调用方自己的词汇命名空间——PurRDF 不编造任何命名空间。
let vocab = SliceVocab::for_namespace("https://example.org/vocab/");
assert_eq!(vocab.slice_class(), "https://example.org/vocab/Slice");

// 在调用方的 slices 目录下发现各个 manifest.ttl。
let catalog = SliceCatalog::discover(Path::new("slices"), vocab)
    .expect("slices discovered");
for slice in catalog.records() {
    println!("{} ({:?})", slice.manifest.slice_iri, slice.manifest.tier);
}
}

损失台账

PurRDF 的投影允许有损——但绝不静默。内核带有一个机器可读的 RDF↔GTS 损失矩阵(generated/rdf-loss-matrix.json,一个生成的工件)以及一个 LossLedger API:当不具 star 能力的编解码器丢弃具体化节点(reifier)绑定,或 CSV 结果丢弃溯源信息时,实际丢弃的数量会被记录下来并呈报给调用方。参见编解码器与确定性以及结果格式。

溯源

purrdf-core 为冻结的 IR 提供了一个通用的溯源旁挂结构(sidecar)——归属、源集合以及逐四元组的溯源,引擎可以携带它们而不污染数据图。SPARQL 结果扩展(结果格式)与 SARIF 边界都会在各自的序列化边缘,把这些仅在运行时存在的溯源 id 解析为公开的 IRI。

SSSOM 与 FnO

内核中有两个原生的交换格式编解码器:

  • SSSOM——对 Simple Standard for Sharing Ontological Mappings 映射集 TSV 的支持(SssomMappingSet、SssomMapping,附带带类型的诊断),用于在数据旁携带跨词汇的映射。SssomSetComment 把集合级的普通注释与溯源建模为一个无损的文档封套,独立于类 YAML 的表头元数据。新追加的溯源使用可互操作的「元数据到表格」位置;解析得到的表后注释作为一种显式扩展被保留。原始的 Unicode 注释行及其顺序得以保留,而物理行尾在序列化时确定性地统一为 LF。
  • FnO——一个 Function Ontology 函数目录编解码器(FnoCatalog、fno_to_quads、fno_to_ntriples),切片生成器用它把函数目录描述为 RDF。

与工具包中的其他一切一样,这些是针对_调用方_数据的编解码器——PurRDF 不定义自己的映射或函数。SSSOM 封套注释同样仍是与调用方无关的投影数据:它们不生成 RDF 谓词,不改变映射验证,也不改变 RDF 投影。

相关内容