开放本体
用于知识图谱的 Terraforming MCP
验证、分类并治理 AI 生成的本体。使用 Rust 编写。以单个二进制文件形式发布。
快速入门 · Studio · 基准测试 · IES · 工具 · 架构 · 文档
Open Ontologies 是一个用于 AI 原生本体工程的 Rust MCP 服务器 和 桌面 Studio。它暴露了 70+ 工具,使 Claude 能够使用内存中的 Oxigraph 三元组存储来构建、验证、查询、差异比较、检查、版本控制、推理、对齐、规划、认证和治理 RDF/OWL 本体——具备完整的三层 Dynamics → Causal → Planner 架构、包含 33 个标准本体的市场、临床交叉映射、语义嵌入以及完整的谱系审计跟踪。
Studio 将引擎封装在一个可视化的桌面环境中:带有层级线的虚拟化本体树、面包屑导航和连接浏览器;带有 /build(IES 级深度)和 /sketch(快速原型)命令的 AI 聊天面板;Protégé 风格的属性检查器;以及谱系查看器。
无 JVM。无 Protégé。
新增内容(三层架构 + 13 个新原语)
完整的 Dynamics → Causal → Planner 技术栈以及 13 个新原语。每个组件都遵循 MCP-native 约定:服务器提供验证和脚手架,连接的 LLM(通过 MCP 连接的 Claude)负责智能处理。没有内部 LLM 客户端,没有 API 密钥,没有提供商抽象。
三层架构
| 层级 | 提供内容 |
|---|---|
| Dynamics | ActionSchema + 4 个 MCP 工具:onto_action_register / _applicable / _apply / _list。并发原子 tick,静态因果定律(不变量),默认值定律,通过 OWL-RL 闭包实现的 ramification,具有可复现种子的非确定性结果。 |
| Causal | onto_certify_action 支持可选的 PyWhy 后门识别(通过 causal-pywhy 功能启用)。结构代理默认 + do-calculus 可选 + 优雅回退。 |
| Planner | onto_plan_compile_pddl + onto_plan_classical(Fast Downward 子进程)+ onto_plan_validate(sandbox-simulate)。求解器保持在客户端;服务器负责编译 + 验证。 |
13 个新原语
onto_owl_shacl_coevolve_check+onto_owl_shacl_coevolve_incremental— 针对 OWL-RL 闭包的 SHACL 验证,采用依赖图路由,仅重新验证触及已更改 IRI 的形状。onto_segment_retrieve— 用于基于本体的 RAG 的 TBox 切片检索。onto_extract_scaffold+onto_extract_validate— 模式引导的结构化提取,包含类型化数据类型验证 + 一致性评分。onto_cq_run+onto_verify_cq+onto_cq_verdicts_list— 能力问题运行器,包含陷阱提示 + LLM 判断循环。onto_classify_el— OWL-EL 分类(传递包含表,排除平凡对)。onto_eval_alignment— 基于参考 + 计算对齐集的 P/R/F1。onto_shape_combinatorics+onto_shape_induce— 属性组合格 + 数据驱动的 SHACL 形状归纳,采用支持度 × 置信度排名。borderline_partition+borderline_record_verdict— 适用于任何候选集的广义双阈值审查循环。onto_align_fuzzy— 无嵌入的模糊逻辑裁决,采用 10 规则 Mamdani 推理;HNSW 降级为候选生成器。onto_align_flora— 将信号提取器与模糊裁决器配对的端到端对齐管道。onto_policy_register+onto_policy_list+onto_policy_check— 与onto_certify_action组合的授权门(因果 = 风险;策略 = 授权)。eval_rag+eval_rag_mmrag— 用于检索器管道的 Hit@k / MRR / 忠实度 / token-Jaccard / ROUGE-1 评分,包含数据集适配器。graph_projection_lossy_check— 与onto_segment_retrieve配对的审计器。
端到端验证
cargo run --example three_layer_pipeline
Walks Dynamics 注册 → PDDL 编译 → Fast-Downward 形状的 sas_plan 解析 → 编排器侧 IRI 绑定 → 沙箱验证 → CIVeX 认证 → 应用 OWL-RL 推论 → 最终状态检查。每一层均通过其公共 API 实现,无需外部依赖(Python、DoWhy、Fast Downward)。
零新增外部 Rust 依赖;所有可选功能均通过 Cargo 特性进行门控。完整测试套件(160+ 测试)在默认构建下全部通过;cargo clippy --lib --tests --examples -- -D warnings 在默认和 causal-pywhy 配置下均保持干净。
快速入门(MCP / CLI)
安装
预构建二进制文件:
# macOS (Apple Silicon)
curl -LO https://github.com/fabio-rovai/open-ontologies/releases/latest/download/open-ontologies-aarch64-apple-darwin
chmod +x open-ontologies-aarch64-apple-darwin && mv open-ontologies-aarch64-apple-darwin /usr/local/bin/open-ontologies
# macOS (Intel)
curl -LO https://github.com/fabio-rovai/open-ontologies/releases/latest/download/open-ontologies-x86_64-apple-darwin
chmod +x open-ontologies-x86_64-apple-darwin && mv open-ontologies-x86_64-apple-darwin /usr/local/bin/open-ontologies
# Linux (x86_64)
curl -LO https://github.com/fabio-rovai/open-ontologies/releases/latest/download/open-ontologies-x86_64-unknown-linux-gnu
chmod +x open-ontologies-x86_64-unknown-linux-gnu && mv open-ontologies-x86_64-unknown-linux-gnu /usr/local/bin/open-ontologies
Docker:
docker pull ghcr.io/fabio-rovai/open-ontologies:latest
docker run -i ghcr.io/fabio-rovai/open-ontologies serve
serve启动一个通过 stdin/stdout 使用 JSON-RPC 通信的 MCP 服务器 — 它不是交互式 CLI,因此启动后在等待 MCP 客户端连接时看起来会“挂起”。这是预期行为。若要直接在终端中试用这些工具,请使用 CLI 子命令(例如open-ontologies validate <file.ttl>);若要将其与 LLM 配合使用,请按照 Connect to your MCP client 中的说明将其接入 MCP 客户端。
从源码构建(Rust 1.85+):
git clone https://github.com/fabio-rovai/open-ontologies.git
cd open-ontologies && cargo build --release
./target/release/open-ontologies init
有关原生 Windows 构建,请参阅 docs/windows.md。
连接到你的 MCP 客户端
Claude Code
添加到 ~/.claude/settings.json:
{
"mcpServers": {
"open-ontologies": {
"command": "/path/to/open-ontologies/target/release/open-ontologies",
"args": ["serve"]
}
}
}
重新启动 Claude Code。onto_* 工具现已可用。
Claude Desktop
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"open-ontologies": {
"command": "/path/to/open-ontologies/target/release/open-ontologies",
"args": ["serve"]
}
}
}
Cursor / Windsurf / 任何兼容 MCP 的 IDE
添加到 .cursor/mcp.json 或等效项:
{
"mcpServers": {
"open-ontologies": {
"command": "/path/to/open-ontologies/target/release/open-ontologies",
"args": ["serve"]
}
}
}
Docker
{
"mcpServers": {
"open-ontologies": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/fabio-rovai/open-ontologies", "serve"]
}
}
}
构建你的第一个本体
Build me a Pizza ontology following the Manchester University tutorial.
Include all 49 toppings, 24 named pizzas, spiciness value partition,
and defined classes (VegetarianPizza, MeatyPizza, SpicyPizza).
Validate it, load it, and show me the stats.
Claude 生成 Turtle,然后自动运行完整的流水线:
onto_validate → onto_load → onto_stats → onto_reason → onto_stats → onto_lint → onto_enforce → onto_query → onto_save → onto_version
每次构建均包含 OWL 推理(物化推断三元组)、设计模式强制以及自动版本控制。
Studio(桌面应用)
Studio 是一款原生桌面应用程序,在可视化环境中封装了相同的引擎——无需浏览器,也无需管理服务器。它完全在你的机器上运行:引擎边车(sidecar)处理 RDF/OWL 操作,而 UI 则实时渲染图谱。
可以将其视为 Protege 与 AI 副驾驶的结合。输入“构建关于猫的 ontology”,即可在树中看到一个包含 1,400 个类的 ontology 出现——类、属性、个体和公理通过 13 个流水线步骤自动构建。点击任意节点以检查其三元组,通过可点击的标签追踪连接,并通过谱系面板跟踪每一次变更。
为什么使用虚拟化树(而非 3D 图谱)
在 v0.1.12 之前,Studio 使用 D3.js 水平树和 3D 力导向图(Three.js / WebGL)。两者对于小型 ontology(约 100 个类)都能正常工作,但在 IES 级别的深度下变得不可用:D3 树无法处理 500 个以上的节点而不出现布局抖动,且 3D 图谱在超过 1,000 个节点时会使 WebKit webview 冻结。
v2 深度构建器改变了这一局面——单个 /build 命令现在可以生成 1,400 个以上的类。我们用虚拟化 DOM 树替换了这两种视图:只有可见的行存在于 DOM 中(无论 ontology 大小如何,内存占用恒定),并配有层级连接线、类型过滤图例、搜索、面包屑导航和连接面板。这可以无延迟地处理完整的 IES Common(511 个类)和深度构建的 ontology(1,400 个以上的类)。
工作原理
The Studio 启动三个在本地通信的进程:
- Tauri 2 shell — native window (macOS/Linux/Windows) with a WebKit webview
- Engine sidecar — the same Rust binary, running as an HTTP MCP server on
localhost:8080 - Agent sidecar — Node.js process running Claude via the Agent SDK, connected to the engine over MCP
当您在聊天面板中输入时,您的消息会发送到 Agent sidecar,然后由它发送给 Claude。Claude 决定调用哪些 onto_* 工具,引擎执行这些工具,UI 刷新图形。整个循环——从提示到视觉更新——只需几秒钟。
安装和运行
前提条件: Rust + Cargo · Node.js 18+
# 1. Build the engine binary (from repo root)
cargo build --release
# 2. Install JS dependencies
cd studio && npm install
# 3. Run
PATH=/opt/homebrew/bin:~/.cargo/bin:$PATH npm run tauri dev
首次启动会编译 Tauri 外壳(约 2 分钟)。后续启动仅需数秒。
功能
| 功能 | 描述 |
|---|---|
| 虚拟化树 | 本体浏览器,可流畅处理 1,500+ 个类。包含层级连接线、可折叠分支、按类型过滤的图例(Class/Property/Individual)、带自动展开的搜索、面包屑路径导航,以及一个显示 domain/range 关系为可点击药丸的连接面板。仅可见行存在于 DOM 中——无论本体大小,内存占用恒定。 |
| AI Agent 聊天 | 通过 Claude Opus 4.8 + Agent SDK 进行自然语言本体工程。两种构建模式:/build 运行 13 步流水线,生成 IES 级本体(500-1,500+ 个类,100-200+ 个属性),/sketch 运行 3 步用于快速原型设计(约 80 个类)。每次工具调用均实时显示。 |
| 属性检查器 | Protege 风格的内联三元组编辑器。点击任意节点即可查看其 rdfs:subClassOf、rdfs:label、rdfs:domain、rdfs:range 及其他所有三元组。就地编辑,悬停删除,+ Add 新建三元组。更改会立即反映在图中。 |
| 血缘面板 | 来自 SQLite 的完整审计轨迹:每个 plan、apply、enforce、drift、monitor 和 align 事件,按会话分组并带有时间戳。确切查看 Claude 做了什么以及执行顺序。 |
| 命名保存 | ⌘S 以 ~/.open-ontologies/<name>.ttl 保存。每次变更后自动保存到 studio-live.ttl,确保您不会丢失工作。 |
键盘快捷键
| 快捷键 | 操作 |
|---|---|
⌘J | 切换 AI 聊天面板 |
⌘I | 切换属性检查器 |
⌘S | 保存本体 |
F | 适应视口(树视图) |
R | 重置缩放(树视图) |
Esc | 取消选择节点 |
Shift+click | 折叠/展开分支(树视图) |
Scroll | 放大/缩小 |
Click + drag | 平移 |
研究问题
以下基准测试并非功能巡礼。每一项的存在都是为了回答一个具体问题,而答案中包括那些令人不快的部分。
| # | 问题 | 测量位置 | 实测答案 |
|---|---|---|---|
| RQ1 | 结构化工具访问是否使 LLM 获得了一种与直接提供原始 OWL 文件,或仅提供类和属性名称相比,在本质上不同的本体访问模式? | OntoAxiom, 3 conditions, 2 models | 部分成立。 两者都显著优于名称列表。工具提取与原始文件读取处于同等水平:原始 OWL 在宏平均上占优,提取在微平均上占优。工具剩余的 advantages 在于每一对结果都可追溯至对真实三元组的查询。 |
| RQ2 | 当两个评估条件不一致时,差距中有多少归因于方法,有多少归因于评分器? | OntoAxiom, legacy vs unified evaluator | 足以反转结论。 三个评分器不对称性,均指向同一方向,导致在共享评估器下,两个模型和两种平均方式下,报告结果的符号发生反转。 |
| RQ3 | 在本体对齐中,决定结果的是相似性信号的加权方式,还是匹配必须为一对一的约束? | OAEI Anatomy, 5 weight configurations vs stable-matching ablation | 约束,压倒性地。 仅移除稳定匹配这一变量,F1 从 0.829 降至 0.728;五种权重配置的差异为 0.0033,且即便如此仍高估了影响(零结构信号分支完全绕过了权重)。 |
| RQ4 | 在没有任何领域背景知识(无 UMLS、无 BioPortal、无 LLM oracle)的情况下,对齐系统在生物医学赛道上能取得多高的成绩? | OAEI Anatomy 和 Conference,2025 完整赛道 | 远远不够。 在 Anatomy 赛道中位列 13 个系统中的第 9 名,与轻量级词汇匹配器持平,比字符串相等基线高 0.063 F1。在 Conference 赛道中低于所有系统和两个基线。精确率具有竞争力;召回率是失败所在。 |
| RQ5 | 封闭世界词汇检查能否捕捉到开放世界 SHACL 验证会静默接受的生成术语? | onto-correctness-bench:3 个词汇表,418 个虚构术语,300 个图 | 是的,完全能。 SHACL 在包含虚构术语的 300/300 个图中返回了 conforms=true。封闭世界门控标记了 300/300,在干净图上零误报。开放世界语义将未声明的谓词视为仅未知,因此 SHACL 在结构上无法看到它。 |
RQ2 和 RQ4 是你在决定是否信任此仓库时值得阅读的部分。两者都是关于在此处所做工作的负面结果。
基准测试
如何解读这些数字。 除非另有说明,LLM 结果为单次运行(未对种子取平均),并使用 Claude Opus 4.8。多个基准本体(Pizza、FOAF、Schema.org、OWL-Time)已广泛发布,可能出现在 LLM 的预训练数据中,因此裸 LLM 分数是一个包含污染的基线,而非推理能力的干净度量——贡献在于 MCP 工具在该基线之上增加的增量,以及该增量是否能在不同模型间复现。为了精确检查这一点,该仓库附带了一个跨模型消融实验,使用本地 Qwen3-Coder-30B 以及 Claude 来驱动相同的任务——参见
benchmark/ontoaxiom/。如果工具增强带来的增益在第二个开源模型上依然成立,那么该增益是工具本身的属性,而非某一家供应商模型的属性。
OntoAxiom — LLM 公理识别
OntoAxiom 在 9 个本体和 3,042 个真实公理上测试公理识别。
以下所有条件均由单一评估器(benchmark/ontoaxiom/score_all_conditions.py)使用一个共享的归一化器进行评分,并报告两种平均值,因为原始脚本在这些方面存在分歧。macro = 每个(本体,公理)F1 的均值;micro = 基于汇总 TP/FP/FN 的 F1。
| 方法 | 输入 | 宏 F1 | 微 F1 |
|---|---|---|---|
| o1 (论文最佳) | 名称列表 | — | 0.197 |
| 裸 Claude Opus | 名称列表 | 0.451 | 0.397 |
| 裸 Qwen3-Coder-30B | 名称列表 | 0.223 | 0.176 |
| Claude Opus, 原始 OWL 文件 | 完整 Turtle | 0.768 | 0.686 |
| Qwen3-Coder-30B, 原始 OWL 文件 | 完整 Turtle | 0.673 | 0.667 |
| MCP 提取 | 完整 OWL | 0.713 | 0.717 |
该论文中“原始 OWL 有害”的结论是一个评分伪影。 OntoAxiom 报告称,给定完整 OWL 文件的 LLM(F1 = 0.323)表现差于仅给定类/属性名称列表的 LLM(0.431)。这两个数字来自在三个维度上不一致的脚本:名称列表评分器拆分 camelCase,而原始 OWL 评分器仅转换为小写;前者报告宏平均值,后者报告微 F1;并且它们在不同公理类型上翻转了配对顺序。这些差异中的每一个都惩罚了原始 OWL 条件,因为在该条件下,模型读取真实的 Turtle,因此以 QName(foaf:Person)和 rdfs:label 文本("personal mailbox" 对应 mbox)作答,而不是裸局部名称。0.431 和 0.323 从来不是同一个统计量。
在单一评估器下对相同的存储预测重新评分,两个模型在两种平均值下均出现符号翻转:Claude 0.451 → 0.768 宏平均(0.397 → 0.686 微平均),Qwen 0.246 → 0.673 宏平均,分别赢得 33/43 和 33/38 个单元格。score_condition_d.py --legacy 精确复现了错误的 0.323,因此该缺陷是被证明而非断言的。修正移动了 0 个 5,083 个名称列表对,因此它不能美化基线,并且它仍然低估了原始 OWL:Claude 的 51.8% 的配对是此处任何规范化器都无法匹配的标签文本。完整分析和复现:benchmark/ontoaxiom/ONTOAXIOM_SHOWDOWN.md.
修正后,阅读本体和通过 SPARQL 提取它在持平——原始 OWL 在宏平均上获胜(0.768 对 0.713),提取在微平均上获胜(0.717 对 0.686)。因此,工具的优势是可审计性,而非 F1:每个 MCP 配对都可追溯到针对真实三元组的查询,而 LLM 阅读文件仍可能幻觉出一个合理的配对,且没有 F1 分数会指出哪一个。
披萨本体 — 曼彻斯特教程
单句输入:"按照曼彻斯特教程规范构建一个披萨本体。"
| 指标 | 参考(Protégé,约 4 小时) | AI 生成(约 5 分钟) | 覆盖率 |
|---|---|---|---|
| 类 | 99 | 95 | 96% |
| 属性 | 8 | 8 | 100% |
| 配料 | 49 | 49 | 100% |
| 命名披萨 | 24 | 24 | 100% |
/sketch 对 /build — 两种构建模式
Studio 提供了两种针对不同使用场景的构建命令。两者接受相同的输入——"构建关于猫的 ontology"——但产生的结果截然不同:
| 指标 | /sketch (3 步, ~2 分钟) | /build (13 步, ~15 分钟) | IES Common (参考) |
|---|---|---|---|
| 类 | 95 | 1,433 | 511 |
| 对象属性 | 15 | 218 | 162 |
| 数据类型属性 | 5 | 101 | 44 |
| 个体 | 3 | 358 | 21 |
| 不相交 | 6 | 60+ | — |
| 最大层级深度 | 5 | 11 | 8 |
| 构建时间 | ~2 分钟 | ~15 分钟 | — (手工构建) |
/sketch 执行 3 个步骤:在一个 Turtle 块中处理类 + 属性,公理 + 个体,然后保存。适用于快速领域探索或演示原型设计。它生成一个包含层级、属性和个体的完整 ontology——但深度仅为前者的一小部分。
/build 在单个持久化 Claude 会话中运行一个 13 步的流水线:基础类 → 按分支深化 (4 遍) → 填补空白 → 对象属性 (2 批) → 数据类型属性 → 不相交 → 个体 → 推理 → 保存。每个步骤专注于 ontology 的一个方面,在保持输出 token 限制的同时,基于前一步的上下文进行构建。结果在所有指标上均超过 IES Common。
/sketch 与 Pizza 基准 (95 个类, 8 个属性) 相当。/build 生成 IES 级别的 ontology——深度足以用于生产环境。
蘑菇分类 — OWL 推理 vs 专家标签
数据集: UCI 蘑菇数据集 — 8,124 个由真菌学专家分类的样本。
| 指标 | 结果 |
|---|---|
| 准确率 | 98.33% |
| 召回率(有毒) | 100% — 零漏检有毒蘑菇 |
| 假阴性 | 0 |
| 分类规则 | 6 条 OWL 公理 |
本体市场 — 33 个标准本体
29 个通用市场本体(四个 IES 条目在 IES 支持) 下单独覆盖)已获取、owl:imports 解析、加载,并使用 RDFS 和 OWL-RL 配置文件进行推理。使用 python3 benchmark/marketplace_benchmark.py 重新生成:
| 本体 | 类 | 属性 | 三元组 | + RDFS | + OWL-RL | 获取 | RDFS | OWL-RL |
|---|---|---|---|---|---|---|---|---|
| OWL 2 | 29 | 0 | 537 | +230 | +230 | 276ms | 1ms | 1ms |
| RDF Schema | 4 | 0 | 87 | +35 | +35 | 268ms | 0ms | 0ms |
| RDF Concepts | 13 | 0 | 127 | +31 | +31 | 175ms | 0ms | 0ms |
| BFO (ISO 21838) | 35 | 2 | 1,221 | +186 | +186 | 254ms | 2ms | 1ms |
| DOLCE/DUL | 79 | 118 | 1,917 | +666 | +692 | 181ms | 7ms | 8ms |
| Schema.org | 1,032 | 1,674 | 17,949 | +4,082 | +14,236 | 679ms | 56ms | 136ms |
| FOAF | 15 | 62 | 631 | +4 | +31 | 656ms | 1ms | 1ms |
| SKOS | 5 | 28 | 252 | +55 | +55 | 81ms | 1ms | 1ms |
| Dublin Core Elements | 0 | 15 | 107 | +0 | +0 | 315ms | 1ms | 0ms |
| Dublin Core Terms | 23 | 70 | 700 | +256 | +261 | 129ms | 2ms | 2ms |
| DCAT | 49 | 110 | 2,841 | +223 | +254 | 356ms | 7ms | 8ms |
| VoID | 7 | 27 | 216 | +0 | +0 | 333ms | 0ms | 0ms |
| DOAP | 22 | 45 | 741 | +0 | +0 | 352ms | 1ms | 1ms |
| PROV-O | 31 | 59 | 1,146 | +202 | +203 | 204ms | 3ms | 2ms |
| OWL-Time | 29 | 58 | 1,296 | +165 | +165 | 206ms | 3ms | 2ms |
| W3C Organization | 17 | 38 | 748 | +9 | +21 | 259ms | 2ms | 2ms |
| SSN | 23 | 38 | 1,815 | +84 | +84 | 262ms | 2ms | 2ms |
| SOSA | 17 | 23 | 396 | +0 | +0 | 323ms | 1ms | 1ms |
| GeoSPARQL | 15 | 54 | 796 | +4 | +12 | 227ms | 1ms | 1ms |
| LOCN | 3 | 15 | 206 | +0 | +0 | 363ms | 1ms | 1ms |
| SHACL | 48 | 101 | 1,128 | +268 | +268 | 277ms | 2ms | 2ms |
| vCard | 64 | 84 | 882 | +0 | +46 | 316ms | 1ms | 1ms |
| ODRL | 31 | 58 | 2,157 | +73 | +76 | 212ms | 3ms | 3ms |
| Creative Commons | 21 | 13 | 115 | +0 | +49 | 564ms | 1ms | 1ms |
| SIOC | 17 | 86 | 615 | +0 | +2 | 364ms | 1ms | 1ms |
| ADMS | 8 | 16 | 151 | +0 | +0 | 377ms | 1ms | 1ms |
| GoodRelations | 43 | 102 | 1,834 | +15 | +42 | 303ms | 3ms | 4ms |
| FIBO (metadata) | 0 | 0 | 48 | +0 | +0 | 505ms | 4ms | 4ms |
| QUDT | 99 | 196 | 2,434 | +1,574 | +1,581 | 2,100ms | 50ms | 49ms |
| Total | 1,779 | 3,092 | 43,093 | +8,162 | +18,560 | — | — | — |
29/29 个本体已加载,导入已解析,并完成推理。RDFS 增加了 18% 的三元组。OWL-RL 增加了 43% —— 传递/对称/逆属性以及 equivalentClass 扩展发现了大量隐式知识。Schema.org 的推断三元组从 +4,082(RDFS)跃升至 +14,236(OWL-RL),耗时 136ms。
类和属性的计数是结构性的,而非仅基于声明:如果一个术语被类型化(owl:Class, rdfs:Class, owl:ObjectProperty, owl:DatatypeProperty, rdf:Property)或被用作类型(rdfs:subClassOf/subPropertyOf/domain/range 位置),则计入该术语。因此,从不发出 OWL 类型声明的词汇表(如 Schema.org)会被计数,而不是报告为空。rdf:、rdfs: 和 owl: 命名空间中的术语被排除,以免将词汇表所编写的元词汇表归功于该词汇表。正是由于这种排除,OWL 2、RDF Schema 和 RDF Concepts 报告 0 个属性:它们定义的每个属性,根据定义,都位于被排除的命名空间中。FIBO 的市场条目仅包含元数据模块(48 个三元组),该模块未声明任何自身的术语。
编译声明验证 — 实测与 HermiT
claimcheck 模块将本体一次性编译(推断层级 +
不相交性,包括通过可靠传播规则推导出的对)为每类的令牌位集,然后验证候选声明——即“这组三元组是否与本体一致?”的问题——在查询时不进行推理:每对类执行两次 64 位 AND 操作,并提取见证公理用于解释。
同一本体(规范 pizza.owl)、同一任务、同一机器,判定结果已与 HermiT 1.4.3.456 交叉核对:
| 逐声明一致性检查 | 中位数 | p95 | 吞吐量 |
|---|---|---|---|
| HermiT(热 JVM,本体预加载) | 4,936 µs | — | ~200/s |
| open-ontologies 编译检查 | 0.3 µs | 0.4 µs | 3.1M/s(批量 11.2M/s) |
正确性优先于速度:
- 在 78,884 个经全面审计的类对(13 个本体)和 793 个结构性对抗性声明中,与 HermiT 零分歧。
- 构造上可靠:每个
Rejected判定均由可推导的矛盾支撑,并指明见证公理。在两个完全审计的本体上,矛盾召回率为 100%。 - 显式的不完备性包络:编译表面无法判定的任何内容均返回
Undetermined并路由至推理器支持的剩余层——绝不进行猜测。 - 封闭世界词汇检查可捕获开放世界 OWL 语义在结构上无法标记的幻觉类/属性。
离线编译:通过任意完整 OWL 推理器执行一次分类遍历(Pizza 约 120 ms);发布的热点路径为纯 Rust,无 JVM 依赖。 复现脚本:benchmark/layer3-prototype/.
设计、测量与包络:docs/layer3-compiled-reasoning.md. 完整基准测试方法论:docs/benchmarks.md
OAEI 本体对齐 — 解剖赛道
OAEI](https://oaei.ontologymatching.org/) 是本体对齐系统的标准基准。Anatomy 赛道将小鼠解剖本体(2,744 个类)与 NCI Thesaurus 的人类解剖片段(3,304 个类)进行对齐,并对照 1,516 个参考映射。
下表是 完整 的 OAEI 2025 Anatomy 领域数据,摘自官方结果论文(Vol-4144, om2025-oaei-paper0)的表 9,包含两个基线。Open Ontologies 按其测量排名插入。未进行任何过滤。
| System | Precision | Recall | F1 |
|---|---|---|---|
| Matcha | 0.951 | 0.931 | 0.941 |
| Agent-OM | 0.959 | 0.883 | 0.920 |
| ALIN | 0.942 | 0.884 | 0.912 |
| LogMapLLM | 0.964 | 0.842 | 0.899 |
| LogMap-Bio | 0.885 | 0.911 | 0.898 |
| MDMapper | 0.899 | 0.879 | 0.889 |
| LogMap | 0.917 | 0.848 | 0.881 |
| LogMapKG | 0.917 | 0.848 | 0.881 |
| Open Ontologies | 0.960 | 0.730 | 0.829 |
| DRAL-OA | 0.830 | 0.827 | 0.828 |
| LogMapLt | 0.962 | 0.728 | 0.828 |
| StringEquiv (baseline) | 0.997 | 0.622 | 0.766 |
| LSMatch | 0.952 | 0.634 | 0.761 |
请诚实地阅读此内容。 Open Ontologies 在 F1 指标上位列 13 个系统中的第 9 名。其精确率(0.960)在领域内排名第三,但其召回率(0.730)在非基线系统中倒数第二,由此产生的 F1 值与刻意轻量化的词汇匹配器 LogMapLt 持平,且比领先者低 0.112。StringEquiv 基线仅通过归一化字符串相等性即可达到 0.766,因此该系统相对于纯字符串匹配所获得的边际优势为 +0.063 F1。这是需要超越的数值,而目前这仍不是一个具有竞争力的结果。
差距在于召回率,且其原因可识别:该系统不包含任何领域背景知识。解剖学是一个 UMLS 和 BioPortal 查询将 0.88+ 区间与其他系统区分开来的赛道,表格中排在 Open Ontologies 之上的每个系统要么使用生物医学背景知识,要么使用 LLM 预言机,要么两者兼用。此处的对齐使用了 7 个加权信号(标签相似度、属性/父级/实例/限制/邻域重叠、嵌入相似度)、稳定的 1 对 1 匹配,以及在无结构证据可用时的标签惩罚。
因此,从该赛道得出的可辩护结论并非头条 F1 值。而是消融实验:稳定的 1 对 1 匹配才是产生差异的关键,且一旦应用了它,信号权重几乎无关紧要。
| 配置 | 精确率 | 召回率 | F1 |
|---|---|---|---|
| 使用稳定匹配 | 0.960 | 0.730 | 0.829 |
| 不使用稳定匹配 | 0.102 | 0.846 | 0.182 |
移除稳定匹配后,针对 1,516 映射的参考集,产生了 12,557 个候选项。参见问题 #8, #9, #10;背景知识集成是未完成的工作。
OAEI 本体对齐 — 会议赛道
21 个会议赛道配对中的 15 个,微平均:
| 系统 | 精确率 | 召回率 | F1 |
|---|---|---|---|
| ALIN | 0.62 | 0.68 | 0.65 |
| LogMap | 0.76 | 0.56 | 0.64 |
| Matcha | 0.77 | 0.53 | 0.63 |
| Agent-OM | 0.64 | 0.59 | 0.61 |
| MDMapper | 0.69 | 0.50 | 0.58 |
| edna (基线) | 0.74 | 0.45 | 0.56 |
| LogMapLt | 0.68 | 0.47 | 0.56 |
| LSMatch | 0.83 | 0.41 | 0.55 |
| StringEquiv (基线) | 0.76 | 0.41 | 0.53 |
| Open Ontologies | 0.693 | 0.320 | 0.438 |
不可直接对比,且表现比看起来更差。 OAEI 行来自 2025 年结果论文的表 10,针对所有 21 个配对,在每个系统 F1 最优阈值下,依据 rar2 参考集进行评估。Open Ontologies 行覆盖 15 个配对,采用固定置信度阈值。在说明该前提的情况下,结果明确无误:低于所有参与系统,且低于两个基线。最佳配对为 ekaw-iasted (0.588) 和 ekaw-sigkdd (0.533);最差为 edas-sigkdd (0.211)。会议赛道中,导致 Anatomy 排名下降的相同召回率失败代价更大,因为此处没有词汇冗余可供回退。
IES 支持
IES(信息交换标准) 是英国国家数字孪生计划的核心本体框架。它采用 4D 外延主义(BORO)方法对实体、事件、状态和关系进行建模。Open Ontologies 支持完整的 IES 技术栈——包括所有三个层级、SHACL 形状以及来自 IES-Org GitHub 仓库的示例数据集。
IES 层级
市场包含 IES 框架的所有三个层级:
onto_marketplace install ies-top # ToLO — BORO foundations (~22 classes)
onto_marketplace install ies-core # Core — persons, states, events (~131 classes)
onto_marketplace install ies # Common — full ontology (511 classes, 206 properties)
基准测试
| 指标 | IES 通用 |
|---|---|
| 类 | 511 |
| 对象属性 | 162 |
| 数据类型属性 | 44 |
| 属性总数 | 206 |
| 加载的三元组 | 4,041 |
| + RDFS 推理 | +3,094 (+77%) |
| 获取时间 | 911ms |
| RDFS 推理 | 63ms |
| Lint 问题 | 0 |
IES 是按类数量计的市场中第二大本体(仅次于 Schema.org)。RDFS 推理在所有非通用本体中产生了最丰富的推理增益——State、ClassOfEntity 和 Event 的子类均生成了深层传递链。
示例数据
直接从官方仓库加载 IES 示例数据集:
onto_pull https://raw.githubusercontent.com/IES-Org/ont-ies/main/docs/examples/sample-data/event-participation.ttl
onto_pull https://raw.githubusercontent.com/IES-Org/ont-ies/main/docs/examples/sample-data/hospital.ttl
onto_pull https://raw.githubusercontent.com/telicent-oss/ies-examples/main/additional_examples/ship_movement.ttl
SHACL 验证
onto_pull https://raw.githubusercontent.com/IES-Org/ont-ies/main/docs/specification/ies-common.shacl
onto_shacl
数据映射:EPC → IES
该仓库包含一份真实的英国能源性能证书样本(benchmark/epc/epc-sample.csv),并附带一个映射配置,用于将表格形式的 EPC 数据转换为 IES 形状的 RDF:
onto_load benchmark/generated/ies-building-extension.ttl
onto_ingest benchmark/epc/epc-sample.csv --mapping benchmark/epc/epc-ies-mapping.json
onto_reason --profile rdfs
这反映了 NDTP 的实际流水线:CSV → IES RDF → 验证 → 推理 → 查询。
IES 建筑扩展 — 与 NDTP/IRIS 的对比
该仓库包含一个基于英国 EPC 数据模式和建筑科学基础构建的 IES 建筑扩展,使用了 IES 4D 模式。它是独立构建的——未参考任何现有实现——然后与用于政府数据流水线的 NDTP/IRIS 生产级建筑本体进行了对比。
| 指标 | NDTP/IRIS(手工构建) | Open Ontologies(AI 构建) |
|---|---|---|
| 模式 | ||
| 类 | 244 | 525 |
| 属性 | 34 | 104 |
| 三元组(原始) | 1,346 | 3,229 |
| Lint 问题 | 2 | 0 |
| 推理 | ||
| RDFS 推断 | 621 | 662 |
| RDFS 后三元组 | 1,967 | 3,891 |
| 最大层级深度 | 7 | 10 |
| 平均层级深度 | 2.89 | 2.02 |
| EPC 覆盖 | ||
| 覆盖的 EPC 列 | 18/36 (50%) | 36/36 (100%) |
| 4D 模式 | ||
| 完整三元组(实体+状态+类) | 14 | 129 |
| 枚举个体 | 2 | 214 |
基于 105 列的 EPC 模式、SAP 方法论和 BORO 4D 外延性盲构建——零参考 IRIS 实现。这两个本体做出了不同的权衡:IRIS 经过更严格的策划,具有更高的平均层级深度(2.89 对 2.02),反映了领域专家的刻意分组。Open Ontologies 覆盖了更多的 EPC 数据模式,并在整个领域中更系统地应用了 BORO 4D 模式。
层级结构如何从建筑科学中涌现
本体论的深度(最多 10 层)并非人工调整——它遵循建筑科学家所使用的自然分类。EPC 数据模式将供暖系统描述为扁平的文本字段("Condensing gas boiler with radiators"),但底层领域具有分层结构:
graph TD
HS[Heating System] --> CH[Central Heating]
HS --> NC[Non-Central / Room Heating]
CH --> WET[Wet Central Heating<br/><i>hydronic distribution</i>]
CH --> WA[Warm Air Central Heating<br/><i>ducted air</i>]
CH --> EC[Electric Central Heating<br/><i>storage / underfloor</i>]
WET --> BB[Boiler-Based]
WET --> HP[Heat Pump]
WET --> DH[Community / District]
BB --> CB[Combustion Boiler]
BB --> CHP[Micro-CHP]
CB --> GAS["Gas boiler"]
CB --> OIL["Oil boiler"]
CB --> LPG["LPG boiler"]
CB --> COND["Condensing boiler"]
CB --> COMBI["Combi boiler"]
CB --> BACK["Back boiler"]
HP --> ASHP["Air source"]
HP --> GSHP["Ground source"]
HP --> WSHP["Water source"]
EC --> STOR["Storage heaters"]
EC --> PNL["Panel heaters"]
EC --> UF["Underfloor electric"]
NC --> FIX[Fixed Room Heater]
NC --> PORT[Portable Heater]
FIX --> GROOM["Gas room heater"]
FIX --> EROOM["Electric room heater"]
FIX --> SFROOM["Solid fuel room heater"]
style HS fill:#1a1a2e,color:#fff
style CH fill:#16213e,color:#fff
style NC fill:#16213e,color:#fff
style WET fill:#0f3460,color:#fff
style WA fill:#0f3460,color:#fff
style EC fill:#0f3460,color:#fff
style BB fill:#533483,color:#fff
style HP fill:#533483,color:#fff
style DH fill:#533483,color:#fff
style CB fill:#e94560,color:#fff
style CHP fill:#e94560,color:#fff
同样的模式也适用于建筑围护结构——传热物理决定了分组方式:
graph TD
TE[Building Thermal Envelope] --> OP[Opaque Elements<br/><i>conduction-dominated</i>]
TE --> TR[Transparent Elements<br/><i>radiation + conduction</i>]
OP --> WALL[Walls]
OP --> ROOF[Roofs]
OP --> FLOOR[Floors]
TR --> WIN[Windows]
TR --> DOOR[Doors]
WALL --> MAS[Masonry Walls<br/><i>thermal mass</i>]
WALL --> FRM[Framed Walls<br/><i>stud bridges</i>]
MAS --> CAV["Cavity wall"]
MAS --> SOL["Solid brick"]
MAS --> SND["Sandstone"]
MAS --> GRN["Granite"]
MAS --> COB["Cob"]
FRM --> TF["Timber frame"]
FRM --> SYS["System-built"]
FRM --> PH["Park home"]
ROOF --> PIT[Pitched Roof]
ROOF --> FLT[Flat Roof]
PIT --> COLD["Cold roof<br/><i>insulation at ceiling</i>"]
PIT --> WARM["Warm roof<br/><i>insulation at rafter</i>"]
PIT --> THATCH["Thatched"]
WIN --> SGL["Single glazed"]
WIN --> DBL["Double glazed"]
WIN --> TPL["Triple glazed"]
WIN --> SEC["Secondary glazing"]
style TE fill:#1a1a2e,color:#fff
style OP fill:#16213e,color:#fff
style TR fill:#16213e,color:#fff
style WALL fill:#0f3460,color:#fff
style ROOF fill:#0f3460,color:#fff
style FLOOR fill:#0f3460,color:#fff
style WIN fill:#0f3460,color:#fff
style DOOR fill:#0f3460,color:#fff
style MAS fill:#533483,color:#fff
style FRM fill:#533483,color:#fff
style PIT fill:#533483,color:#fff
style FLT fill:#533483,color:#fff
树中的每一层都是真实的建筑科学区分——中央供暖与房间供暖、水暖与暖风、燃烧与电加热、砌体与框架、空腔与实心。一位独立的建筑科学家,在给定相同的 EPC 数据值的情况下,会得出这些相同的中间分组(已通过洁净室复现验证)。RDFS 推理以传递方式遍历这些链,这就是为什么一个 10 级层次结构会从 3,229 个原始三元组中生成 662 个推断三元组。
EPC 列覆盖基准测试
两种本体均针对 36 个关键 EPC 数据列进行了测试——每种本体能否接收并表示该列的数据?
| 指标 | NDTP/IRIS | Open Ontologies |
|---|---|---|
| 覆盖的 EPC 列 | 18/36 (50%) | 36/36 (100%) |
| 三元组 | 1,346 | 3,229 |
查询源自已发布的 DESNZ/ONS EPC 统计报告——而非源自任一本体的类结构。完整基准测试:benchmark/epc/
使用 onto_align 将其映射到其他领域本体:
onto_load benchmark/generated/ies-building-extension.ttl
onto_align <other-ontology.ttl>
层级强制 — 自动化推理改进
hierarchy enforce 包可检测任何本体中的扁平区域,并建议中间分组类。这与用于深化建筑扩展的过程相同——现已固化为可重复使用的工具:
onto_load my-ontology.ttl
onto_enforce --pack hierarchy
# → flags classes with >5 direct children
# → reports max depth, avg depth, hierarchy density
在 IES Common(511 个类)上测试,该工具发现了 24 个平坦点。一个洁净室智能体——没有任何先验上下文——仅基于被标记子类的领域含义,提出了 38 个中间分组类:
graph LR
subgraph Before["IES Common — before"]
EP1[EventParticipant] --> P1["Prosecutor"]
EP1 --> P2["Observer"]
EP1 --> P3["Driver"]
EP1 --> P4["Supplier"]
EP1 --> P5["WeaponLocation"]
EP1 --> P6["...52 direct children"]
end
subgraph After["IES Common — after hierarchy enforce"]
EP2[EventParticipant] --> R[RoleInEvent]
EP2 --> L[LocationInEvent]
EP2 --> A[AssetInEvent]
R --> LR2[LegalRole]
R --> IR[InvestigativeRole]
R --> CR[CommercialRole]
LR2 --> Q1["Prosecutor"]
LR2 --> Q2["Signatory"]
IR --> Q3["Observer"]
IR --> Q4["Investigator"]
CR --> Q5["Supplier"]
CR --> Q6["Negotiator"]
L --> Q7["WeaponLocation"]
L --> Q8["TargetLocation"]
A --> Q9["VehicleUsed"]
end
style EP1 fill:#e94560,color:#fff
style EP2 fill:#1a1a2e,color:#fff
style R fill:#16213e,color:#fff
style L fill:#16213e,color:#fff
style A fill:#16213e,color:#fff
style LR2 fill:#0f3460,color:#fff
style IR fill:#0f3460,color:#fff
style CR fill:#0f3460,color:#fff
| 指标 | 之前 | 之后 | 变化 |
|---|---|---|---|
| 类 | 511 | 549 | +38 |
| RDFS 推断 | 3,094 | 3,422 | +328 (+10.6%) |
同一工具,应用于任何本体,都会产生相同类型的改进。中间类源自领域知识——而非参考任何其他实现。
延伸阅读
| 主题 | 链接 |
|---|---|
| IES 生态系统演示 | docs/ies-ecosystem.md |
| SPARQL 示例 | docs/ies-examples.md |
| 构建对齐 | docs/ies-alignment.md |
工具
按功能组织的 70+ 工具 — 可作为 MCP 工具(前缀为 onto_)和 CLI 子命令使用:
| 类别 | 工具 | 用途 |
|---|---|---|
| 核心 | validate load save clear stats query diff lint convert status | RDF/OWL 验证、查询和管理 |
| 仓库 | repo_list repo_load | 从配置的 [general] ontology_dirs 目录中浏览和加载本体 |
| 缓存 | cache_status cache_list cache_remove unload recompile | 磁盘上的 N-Triples 编译缓存、空闲 TTL 驱逐、按名称管理(详情) |
| 市场 | marketplace | 浏览并安装 33 个标准 W3C/ISO/行业本体 |
| 远程 | pull push import | 获取/推送本体,解析 owl:imports |
| 模式 | import-schema sql-ingest | Postgres + DuckDB → OWL + SQL → RDF 摄取 |
| 数据 | map ingest shacl shacl_check vocab_check reason extend | 结构化数据 → RDF 管道;vocab_check = 封闭世界检查,确保生成的数据仅使用本体中声明的术语(捕获开放世界 SHACL 遗漏的内容) |
| 版本控制 | version history rollback | 命名快照和回滚 |
| 生命周期 | plan apply lock drift enforce monitor monitor-clear lineage | 带有 Webhook 警报和 OpenCheir 治理集成的 Terraform 风格变更管理 |
| 对齐 | align align_feedback align_fuzzy align_flora | 跨本体类匹配,具有自校准权重 + 模糊逻辑裁决以及端到端信号驱动管道 |
| HNSW | hnsw_build | 基于类嵌入的持久化 HNSW 索引(余弦 + Poincaré) |
| 临床 | crosswalk enrich validate_clinical | ICD-10 / SNOMED / MeSH 交叉表(93 行示例包含在 data/crosswalks.parquet 中;运行 python scripts/build_crosswalks.py 以重建或扩展) |
| 反馈 | lint_feedback enforce_feedback | 自校准抑制 |
| 嵌入 | embed search similarity | 双空间语义搜索(文本 + Poincaré 结构) |
| 推理 | reason dl_explain dl_check classify_el | 原生 OWL2-DL SHOIQ 树表法 + OWL-EL 分类 |
| 动态 | action_register action_applicable action_apply action_list action_apply_concurrent invariant_register invariant_list invariant_remove invariant_check default_register default_apply | 动作模式 + 并发原子滴答 + 静态因果律 + 默认值 |
| 因果 | certify_action | 四裁决因果证书(EXECUTE / REJECT / EXPERIMENT / ABSTAIN);可选 causal-pywhy 功能启用后门识别 |
| 规划器 | plan_compile_pddl plan_classical plan_validate | 在服务器上编译 + 验证;求解器(Fast Downward)是客户端子进程 |
| 治理 | policy_register policy_list policy_check | 授权规则;与 certify_action 组合 |
| RAG | segment_retrieve graph_projection_lossy_check | TBox 切片检索 + 投影损失审计器 |
| 提取 | extract_scaffold extract_validate | 模式引导的结构化提取提示 + 验证器 |
| CQs | cq_run verify_cq cq_verdicts_list | 带有陷阱提示 + 判断循环的能力问题运行器 |
| 形状归纳 | shape_combinatorics shape_induce | 属性组合格 + 数据驱动的 SHACL 归纳 |
| 边界循环 | borderline_partition borderline_record_verdict | 针对任何候选集的广义双阈值审查模式 |
| SQL 同步 | sql_sync_state sql_sync_reset sql_sync_states_list | 用于增量 SQL 摄入的 CDC 水位跟踪 |
| 评估 | eval_alignment eval_rag eval_rag_mmrag | 对齐 P/R/F1 + RAG Hit@k / MRR / 忠实度 + 数据集适配器 |
架构
引擎
flowchart TD
subgraph Clients["Clients"]
Claude["Claude / LLM\nMCP stdio"]
CLI["CLI\nonto_* subcommands"]
Studio["Studio\nHTTP REST"]
end
subgraph Server["Open Ontologies Server"]
direction TB
subgraph Transport["Transport Layer"]
MCP_HTTP["MCP Streamable HTTP\n/mcp"]
REST["REST API\n/api/query · /api/update\n/api/save · /api/load · /api/lineage"]
end
subgraph ToolGroups["70+ Tools"]
direction LR
Core["Core\nvalidate · load · save · clear\nstats · query · diff · lint\nconvert · status"]
DataPipe["Data Pipeline\nmap · ingest · shacl\nreason · extend · import-schema"]
Lifecycle["Lifecycle\nplan · apply · lock · drift\nenforce · monitor · lineage"]
Advanced["Alignment + Clinical\nalign · crosswalk · enrich\nenrich · embed · search · similarity\ndl_explain · dl_check"]
Version["Versioning\nversion · history · rollback"]
end
subgraph Core2["Core Engine"]
GraphStore["Oxigraph Triple Store\nRDF/OWL in-memory\nSPARQL 1.1"]
SQLite["SQLite\nlineage events\nversion snapshots\nlint/enforce feedback\nembedding vectors"]
Reasoner["OWL2-DL Reasoner\nSHOIQ tableaux\nRDFS · OWL-RL"]
Embedder["Embedding Engine\ntract-onnx (ONNX)\ntext + Poincaré structural"]
end
end
subgraph External["External Sources"]
PG["PostgreSQL\nschema import"]
SPARQL["Remote SPARQL\nendpoints"]
OWL["OWL URLs\nowl:imports chains"]
Parquet["Parquet / Arrow\nclinical crosswalks\nICD-10 · SNOMED · MeSH"]
Files["Files\nCSV · JSON · XML\nYAML · XLSX · Parquet"]
end
Claude -->|"MCP stdio"| MCP_HTTP
CLI -->|"subcommands"| MCP_HTTP
Studio -->|"sessionless"| REST
MCP_HTTP --> ToolGroups
REST --> ToolGroups
ToolGroups --> GraphStore
ToolGroups --> SQLite
ToolGroups --> Reasoner
ToolGroups --> Embedder
Reasoner --> GraphStore
Embedder --> SQLite
DataPipe --> Files
Advanced --> Parquet
Core --> OWL
Core --> SPARQL
DataPipe --> PG
工作室
flowchart TD
subgraph UI["React UI (Vite + Tailwind CSS)"]
Graph["Virtualized Tree\nDOM + virtual scroll"]
Chat["AI Chat Panel\nZustand store"]
Inspector["Property Inspector\nInline SPARQL edit"]
Lineage["Lineage Panel\nAudit trail"]
Save["Named Save\n⌘S → ~/.open-ontologies/"]
end
subgraph Tauri["Tauri 2 Shell (Rust)"]
IPC["Tauri IPC\ninvoke / event"]
ChatState["ChatState\nstdin/stdout pipe"]
end
subgraph Engine["Engine Sidecar (Rust / Axum)"]
MCP["/mcp — MCP Streamable HTTP\nonto_* tools"]
REST2["/api/query · /api/update\n/api/save · /api/load-turtle\n/api/stats · /api/lineage"]
Store["Arc<GraphStore>\nOxigraph"]
DB["SQLite"]
end
subgraph Agent["Agent Sidecar (Node.js)"]
SDK["Claude Opus 4.8\nAgent SDK"]
Proto["stdin/stdout JSON protocol"]
end
Graph -->|"SPARQL SELECT/UPDATE · REST"| REST2
Inspector -->|"SPARQL UPDATE · REST"| REST2
Lineage -->|"GET /api/lineage"| REST2
Save -->|"POST /api/save"| REST2
Chat -->|"invoke send_chat_message"| IPC
IPC --> ChatState
ChatState -->|"stdin { type: chat }"| Proto
Proto --> SDK
SDK -->|"MCP tools/call"| MCP
SDK -->|"stdout { type: text/tool_call/done }"| Proto
Proto -->|"Tauri emit agent-message"| Chat
MCP --> Store
REST2 --> Store
Store --> DB
###设计决策
| 决策 | 原因 |
|---|---|
| UI 读取使用无会话 REST | SPARQL 查询或统计无需 MCP 会话管理 |
UI 写入使用 REST /api/update + /api/save | 避免 Tauri WebKit 网络视图中的会话生命周期问题 |
Agent 写入通过 MCP tools/call | Agent SDK 管理其自身的 MCP 会话;Claude 需要完整的工具集 |
共享 Arc<GraphStore> | 所有 MCP 会话和 REST 处理器共享同一个内存三元组存储 |
| Agent 边车通过 stdin/stdout | 保持 Node.js 隔离;Tauri 管理完整生命周期 |
技术栈
| 层级 | 技术 |
|---|---|
| 引擎语言 | Rust (edition 2024) — 单一二进制文件,无 JVM |
| 三元组存储 | Oxigraph 0.4 — 纯 Rust RDF/SPARQL 1.1 引擎 |
| MCP 协议 | rmcp — Streamable HTTP 传输 |
| 状态 / 血缘 / 反馈 | SQLite (rusqlite) |
| 临床交叉映射 | Apache Arrow / Parquet |
| 嵌入运行时 | tract-onnx — 纯 Rust ONNX(可选) |
| 桌面外壳 | Tauri 2 |
| 前端 | React 19, Vite 7, TypeScript 5.8, Tailwind CSS 4 |
| 树视图 | 带虚拟滚动的虚拟化 DOM 树(无 canvas/WebGL 依赖) |
| UI 状态 | Zustand 5 |
| AI 智能体 | 通过 Agent SDK 使用 Claude Opus 4.8(Node.js 边车进程) |
文档
| 主题 | 链接 |
|---|---|
| 快速入门 | docs/quickstart.md |
| 数据管道 | docs/data-pipeline.md |
| 本体生命周期 | docs/lifecycle.md |
| 模式对齐 | docs/alignment.md |
| OWL2-DL 推理 | docs/reasoning.md |
| 语义嵌入 | docs/embeddings.md |
| 临床交叉映射 | docs/clinical.md |
| IES 生态系统 | docs/ies-ecosystem.md |
| IES SPARQL 示例 | docs/ies-examples.md |
| IES:构建对齐 | docs/ies-alignment.md |
| 基准测试 | docs/benchmarks.md |
| 确定性与修正结果 | docs/determinism.md |
| 贡献指南 | CONTRIBUTING.md |
| 变更日志 | CHANGELOG.md |
引用
Open Ontologies 在一篇预印本中有所描述。对齐引擎实现了其中介绍的稳定匹配方法;因果层则基于 CIVeX 的干预验证框架构建。
- Open Ontologies: Tool-Augmented Ontology Engineering with Stable Matching Alignment. Fabio Rovai, 2026. arXiv:2605.09184
- CIVeX: Causal Intervention Verification for Language Agents. Fabio Rovai, 2026. arXiv:2605.09168
@article{rovai2026openontologies,
title = {Open Ontologies: Tool-Augmented Ontology Engineering with Stable Matching Alignment},
author = {Rovai, Fabio},
journal = {arXiv preprint arXiv:2605.09184},
year = {2026},
doi = {10.48550/arXiv.2605.09184},
url = {https://arxiv.org/abs/2605.09184}
}
参见 CITATION.cff 获取机器可读的元数据。它驱动了 GitHub 的“引用此仓库”按钮。
维护者
由 The Tesseract Academy (Kampakis and Co Ltd) 维护,这是一家英国的研究与数据科学机构。使用本工具包构建的应用案例研究发表于 Tesseract Foundational Research 计划中。
许可证
MIT