◈本体论工程手册
第八章 · 开源生态地图

8.4 语义基础设施:解析、推理、校验、存储

十四块地基,十年没怎么变过

这一格是「沉默的大多数」:rdflib 建于 2012 年、Jena 2013 年、Protégé 相关的 OWLAPI 也是 2013 年。它们不增长,但整个生态建在它们上面。两次分裂值得注意:推理机在萎缩(Pellet 2017 年停更、Openllet 2025 年停更),校验在增长(SHACL 相关全部活跃)。

判据:需要「缺了什么」用 SHACL,需要「能推出什么」用推理机。业务系统问的永远是前者。

RDFLib

S
★ 2,5422012-02-03PythonBSD-3-Clause
Python 的 RDF 图操作库:解析、序列化、命名空间、SPARQL 1.1。几乎所有 Python 本体工具都建在它上面。但它是内存图加朴素查询引擎,没有优化器,不是数据库。
何时采纳需要写一次性脚本做本体体检、格式转换或小规模查询时。

Apache Jena

A
★ 1,4902013-01-04JavaApache-2.0
Java 的 RDF / SPARQL 全栈:ARQ 查询引擎、TDB2 原生存储、Fuseki HTTP 端点,外加 RDFS 与规则推理。注意它不自带完整 OWL DL 推理机。
何时采纳要在 JVM 上起一个 SPARQL 服务、且需要事务与持久化时。

OWL API

A
★ 9442013-02-17Java—
OWL2 的 Java 对象模型与推理机接口。它的真正价值是标准化了「换推理机不改代码」这件事:HermiT、ELK、Openllet、Konclude 都实现同一套接口。
何时采纳需要在 Java 里操作 OWL 结构、或对比多个推理机时。

Neosemantics

A
★ 9712016-03-21JavaApache-2.0
Neo4j 与 RDF / SHACL 之间的桥:把 RDF 导入属性图、在库里跑 SHACL 校验、维护本体作为「schema 子图」。它证明了属性图与 RDF 不是二选一。
何时采纳已有属性图、需要接一层本体约束时。

Eclipse RDF4J

B
★ 4222016-01-14JavaBSD-3-Clause
Eclipse 的 Java RDF 框架,以 Repository 为中心抽象存储,GraphDB 的底座。比 Jena 多一个能力:SHACL Sail 把校验放进写入路径。
何时采纳需要「坏数据根本进不来」而不是「事后报表」时。

pySHACL

S
★ 3642018-09-05PythonApache-2.0
Python 的 SHACL 校验器,覆盖 Core、SPARQL、Advanced Features 与 JS 扩展,可先推理再校验。退出码非零,可以直接当 CI 闸门,不需要解析输出。
何时采纳要一份能执行的 schema 文档、并且真的会拒绝坏数据时。

TopBraid SHACL

B
★ 2462015-05-24JavaApache-2.0
基于 Jena 的 SHACL 实现,覆盖 Core + SPARQL + Advanced Features,也是规范参考实现之一。维护者联系信息已转到外部团队,后续活跃度需观察。
何时采纳JVM 技术栈、需要完整 SHACL-AF 规则时。

OWL-RL

S
★ 1812012-04-25PythonBSD-3-Clause
OWL2 RL 的前向链规则闭包,跑在 RDFLib 之上,同时支持基础 RDFS 推理。它是「不装推理机也能推一点」的折中:能推规则,但不会告诉你缺了什么。
何时采纳只需要子类继承、传递闭包这类规则推导时。

Reasonable

B
★ 1372019-10-31RustBSD-3-Clause
Rust 写的 OWL2 RL 推理机,基于 DataFrog 的差分数据流,提供 CLI 与 Python 绑定,README 直接给了与 OWL-RL、Allegro 的性能对比。
何时采纳Python 侧闭包太慢、又不想起 JVM 时。

Openllet

B
★ 1362016-01-21JavaNOASSERTION
Pellet 的活跃维护分支,OWL2 DL 推理,实现 OWLAPI 接口,保留了解释(explanation)能力。2025 年 8 月后无提交。
何时采纳需要 Pellet 行为兼容、且能接受 AGPL 时。

ELK Reasoner

A
★ 1292015-10-16JavaApache-2.0
OWL2 EL 推理机,consequence-based 算法,多项式时间,为 SNOMED 级(数十万类)规模设计,支持增量分类。它的价值不是「推理」而是「大规模分类的可维护性」。
何时采纳词表分类树大到人工维护必错时。

Konclude

B
★ 542019-07-02C++—
C++ 的 SROIQV(D) 推理机,tableau + 并行,性能取向,可当 HTTP 服务用。作者自己在 README 里写「当前版本可能含有 bug」。
何时采纳需要 DL 推理的吞吐上限、或做推理机性能基线时。

ERGS

B
★ 322020-08-20JavaApache-2.0
在属性图上做 RDF 与推理:RDF→属性图编码、SPARQL→Gremlin 转换、RDFS 加少量 OWL。名字里的 Expressive 是目标而非现状。
何时采纳阅读「RDF 如何编码进属性图」的具体方案时。

Pellet

C
★ 3572013-04-10Web Ontology LanguageNOASSERTION
经典的 OWL2 DL 推理机,2017 年后彻底停更。它存在的意义是提醒:DL 推理这个方向的开源供给正在萎缩。
何时采纳只在阅读推理机发展史时。