HermiT 是使用 Web Ontology Language(OWL)编写本体的推理器。给定一个 OWL 文件,HermiT 可以判断本体是否一致,识别类间的包含关系(subsumption),以及执行更多推理任务。
HermiT 是首个公开可用的 OWL 推理器,基于一种新颖的 “Hypertableau”(超表)演算,其推理效率远高于以往任何已知算法。以前分类需要几分钟或数小时的本体,现在通常可以在几秒内被 HermiT 完成分类。HermiT 也是第一个能够对许多此前被证明过于复杂、任何可用系统都无法处理的本体进行分类的推理器。
HermiT 使用直接语义(Direct Semantics),并通过了所有 OWL 2 直接语义推理器的符合性测试。
Node.java 定义了 Hypertableau 算法中最核心的数据结构——Node 类,它代表 Tableau 中的一个个体节点。
1 | public final class Node implements Serializable { |
| 成员 | 对应 Tableau 概念 | 说明 |
|---|---|---|
m_nodeState |
节点状态 | 枚举三种状态:ACTIVE(活跃)、MERGED(已合并)、PRUNED(已裁剪),比布尔标志更清晰 |
m_mergedInto |
≤-规则合并 |
指向被合并到的目标节点,实现节点的"逻辑合并"而不删除 |
m_unprocessedExistentials |
∃-规则待处理 |
存储尚未展开的存在量词,类似 FaCT++ 的 TODO 列表的局部视图 |
m_blocker / m_directlyBlocked |
阻塞机制 | 支持"任何地方阻塞"(Anywhere Blocking),m_blocker 指向阻塞者,m_directlyBlocked 区分直接/间接阻塞 |
m_blockingObject / m_blockingCargo |
阻塞缓存 | 优化阻塞检查的性能,避免重复计算 |
在 HermiT 中,角色边(Role Assertions)通过 Edge.java 定义。与 FaCT++ 的 DlCompletionTreeArc 类似,Edge 表示个体之间的角色关系 R(x, y):
1 | public final class Edge implements Serializable { |
与 FaCT++ 的对比:
| 特性 | FaCT++ (DlCompletionTreeArc) |
HermiT (Edge) |
|---|---|---|
| 双向性 | 通过 Reverse 指针 |
通过 getReverseEdge() 方法 |
| 逻辑删除 | Role = nullptr |
通过 isActive() 检查 |
| 依赖集 | DepSet depSet |
DependencySet m_dependencySet |
1 | public interface DependencySet { |
DependencySet 是 HermiT 实现**定向回溯(Directed Backtracking)**的核心抽象:
| 方法 | 说明 |
|---|---|
containsBranchingPoint(int branchingPoint) |
检查依赖集是否包含某个分支点 |
isEmpty() |
判断依赖集是否为空(确定性推理) |
getMaximumBranchingPoint() |
获取依赖集中最大的分支点(用于回溯跳跃) |
Reasoner.java 是 HermiT 的主入口类,负责协调整个推理过程。其核心工作流程分为三个阶段:
1 | ┌─────────────────────────────────────────────────────────────────────┐ |
| 方法 | 说明 |
|---|---|
isSatisfiable() |
检查本体是否一致 |
isEntailed() |
检查某个公理是否被蕴含 |
classify() |
计算所有类之间的包含关系 |
realize() |
计算个体的类型归属 |
| 特性 | FaCT++ | HermiT |
|---|---|---|
| 核心算法 | 标准 Tableau 演算 | Hypertableau(超表)演算 |
| 规则形式 | 直接应用 Tableau 规则 | 转换为 DL-Clauses |
| 非确定性 | 高(⊔-规则为每个个体创建分支) | 低(规则条件满足时才触发) |
| 阻塞策略 | 祖先阻塞(Ancestor Blocking) | 任何地方阻塞(Anywhere Blocking) |
| 回溯机制 | 标准回溯 | 定向回溯(Directed Backtracking) |
| 预处理 | 较少 | Datalog 规则预处理 |
AI 参与声明:本文档在撰写过程中使用了 AI 辅助工具进行内容整理、格式优化与润色。所有核心概念与代码分析均基于 HermiT 源码与公开学术文献,并经人工校验与补充。