Ontop 详解:不搬数据库,也能把 MySQL / PostgreSQL 变成知识图谱

如果企业的数据已经全部存在 MySQL、PostgreSQL、Oracle 里,还需要为了知识图谱重新搬一遍数据吗?

Ontop 给出的答案是:不一定。

GitHub:

https://github.com/ontop/ontop

官网:

https://ontop-vkg.org/


一、先说结论:Ontop 是干什么的?

Ontop 是一个开源的 Virtual Knowledge Graph,虚拟知识图谱系统

它最核心的能力可以用一句话说明:

把关系型数据库"映射"为知识图谱,但数据依然保留在原来的数据库里。

也就是说:

text 复制代码
MySQL
PostgreSQL
Oracle
SQL Server
     ↓
   Ontop
     ↓
Virtual Knowledge Graph
     ↓
   SPARQL

你并不一定需要:

text 复制代码
MySQL
   ↓
ETL
   ↓
RDF
   ↓
Neo4j / RDF Store

把整个数据库复制一份。

Ontop 会在查询的时候,把针对知识图谱的 SPARQL Query 转换成关系数据库能够执行的 SQL Query,然后直接查询原始数据库。

这就是它最有意思的地方。

截至 2026 年 8 月,Ontop GitHub 主仓库约有 900+ Stars,采用 Apache 2.0 License;GitHub Release 页面显示当前稳定版为 Ontop 5.5.0,发布时间为 2026 年 2 月 14 日。


二、为什么会出现 Ontop?

先看一个非常常见的企业系统。

比如一个电商平台的数据可能全部放在 MySQL 里:

text 复制代码
users

orders

products

suppliers

payments

表之间通过:

text 复制代码
user_id

order_id

product_id

supplier_id

连接。

对后端开发来说,这种结构非常熟悉。

例如:

sql 复制代码
SELECT
    u.name,
    o.id,
    p.name
FROM users u
JOIN orders o
    ON u.id = o.user_id
JOIN order_items oi
    ON o.id = oi.order_id
JOIN products p
    ON oi.product_id = p.id;

但是知识图谱不是这么理解世界的。

知识图谱可能会把它描述成:

text 复制代码
User
 |
 | places
 ↓
Order
 |
 | contains
 ↓
Product
 |
 | suppliedBy
 ↓
Supplier

也就是说:

数据库关注的是:

text 复制代码
表
字段
主键
外键

知识图谱关注的是:

text 复制代码
实体
关系
语义

两套世界观不一样。


三、传统知识图谱的问题

如果企业已经有:

text 复制代码
1000 万用户

5000 万订单

1 亿商品记录

传统做法可能是:

text 复制代码
生产数据库
     ↓
ETL
     ↓
数据清洗
     ↓
RDF Triple
     ↓
Knowledge Graph

问题马上就来了。

1. 数据重复

原来 MySQL 已经有一份:

text 复制代码
100GB

现在知识图谱里又有:

text 复制代码
100GB+

相当于复制了一份。


2. 数据同步

数据库发生变化:

text 复制代码
订单状态:

pending

↓

paid

知识图谱里面也必须同步。

于是开始出现:

text 复制代码
CDC

Kafka

ETL

同步任务

定时任务

系统越来越复杂。


3. 实时性

数据库已经:

text 复制代码
payment_status = paid

知识图谱可能还停留在:

text 复制代码
payment_status = pending

如果 Agent 使用的是知识图谱,就有可能拿到旧数据。


4. 数据治理成本

企业实际上变成:

text 复制代码
业务数据库一套

知识图谱一套

搜索一套

向量数据库一套

数据越多,维护成本越高。

于是 Ontop 提出了另外一种思路:

不复制数据,让知识图谱成为数据库上面的一层语义视图。


四、什么是 Virtual Knowledge Graph?

Virtual Knowledge Graph,简称:

text 复制代码
VKG

可以翻译成:

虚拟知识图谱。

所谓"虚拟",意思就是:

图并不真正完整存储在那里。

真正的数据还是:

text 复制代码
MySQL

PostgreSQL

Oracle

Ontop 在数据库上方增加一层:

text 复制代码
Ontology

+

Mapping

最终:

text 复制代码
                 SPARQL

                    ↓

                Ontology

                    ↓

                 Mapping

                    ↓

                  Ontop

                    ↓

                   SQL

                    ↓

            Relational Database

用户看见:

text 复制代码
Knowledge Graph

数据库看见:

text 复制代码
SQL

Ontop 负责中间翻译。

这就是它的核心。


五、一个具体例子

假设数据库里有一张:

sql 复制代码
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(200),
    company_id BIGINT
);

还有:

sql 复制代码
CREATE TABLE companies (
    id BIGINT PRIMARY KEY,
    name VARCHAR(200)
);

数据库世界里:

text 复制代码
users.company_id

只是一个外键。

但是在 Ontology 里面可以定义:

text 复制代码
User

Company

以及:

text 复制代码
User

   worksFor

Company

于是从语义层面:

text 复制代码
王仕宇
   |
   | worksFor
   ↓
JavaPub

不再只是:

text 复制代码
company_id = 1001

这就是语义层的价值。


六、Ontop 的三个核心部分

Ontop 可以简单理解为三个核心模块:

text 复制代码
Ontology

Mapping

Query Rewriting

七、第一部分:Ontology

Ontology 负责定义:

这个业务世界里面有哪些概念,以及它们之间是什么关系。

例如电商:

text 复制代码
User

Order

Product

Supplier

Payment

关系:

text 复制代码
User
 ↓ places
Order

Order
 ↓ contains
Product

Product
 ↓ suppliedBy
Supplier

Order
 ↓ paidBy
Payment

如果使用 OWL / RDF 表示,可以进一步描述:

text 复制代码
User is a Person

Supplier is an Organization

Order hasPayment Payment

Ontology 不负责保存具体:

text 复制代码
王仕宇

订单 10001

iPhone 17

它主要定义:

世界的结构。


八、第二部分:Mapping

Mapping 是 Ontop 最重要的部分之一。

因为数据库和 Ontology 本身是完全不同的两个世界。

需要告诉 Ontop:

text 复制代码
数据库里的 users 表

=

Ontology 里的 User

比如:

text 复制代码
users.id

对应:

text 复制代码
User URI

然后:

text 复制代码
users.name

对应:

text 复制代码
User.name

再比如:

text 复制代码
users.company_id

对应:

text 复制代码
User worksFor Company

这就是 Mapping。


九、一个 Mapping 示例

假设:

sql 复制代码
SELECT
    id,
    name
FROM users;

可以映射成类似:

text 复制代码
http://example.com/user/{id}

rdf:type

ex:User

以及:

text 复制代码
http://example.com/user/{id}

ex:name

{name}

最终数据库:

text 复制代码
id = 1

name = Alice

在图世界里:

text 复制代码
User/1
 |
 rdf:type
 |
User

以及:

text 复制代码
User/1
 |
 name
 |
Alice

这就是:

text 复制代码
Relational Data

↓

RDF View

十、R2RML 是什么?

Ontop 支持 R2RML Mapping

R2RML 是 W3C 用来描述:

如何把关系型数据库映射成 RDF 的标准。

名字也很好理解:

text 复制代码
RDB

to

RDF Mapping Language

它主要描述:

text 复制代码
哪张表?

哪个 SQL?

生成什么 Subject?

Predicate 是什么?

Object 从哪个字段来?

例如概念上:

text 复制代码
SELECT id, name
FROM users

映射:

text 复制代码
{id}

→ User

然后:

text 复制代码
{name}

→ User.name

Ontop 就可以知道该怎么构造知识图谱。


十一、Ontop 最核心的一步:SPARQL 转 SQL

这才是 Ontop 真正厉害的地方。

用户写:

sparql 复制代码
SELECT ?name
WHERE {
    ?user a :User .
    ?user :name ?name .
}

Ontop 接收到之后,并不会去一个 RDF Database 里查。

它会根据:

text 复制代码
Ontology

Mapping

进行 Query Rewriting。

最后可能生成:

sql 复制代码
SELECT name
FROM users;

数据库执行 SQL:

text 复制代码
Alice

Bob

Charlie

Ontop 再把结果转换回 SPARQL Result。

整个流程:

text 复制代码
SPARQL

   ↓

Ontology Reasoning

   ↓

Mapping

   ↓

Query Rewriting

   ↓

SQL

   ↓

Database

   ↓

Result

十二、复杂查询会发生什么?

例如 SPARQL:

sparql 复制代码
SELECT ?user ?product
WHERE {

    ?user :places ?order .

    ?order :contains ?product .

}

语义层看起来非常简单:

text 复制代码
User
 ↓ places
Order
 ↓ contains
Product

但是数据库可能是:

text 复制代码
users

orders

order_items

products

Ontop 最终需要翻译成:

sql 复制代码
SELECT
    u.id,
    p.id
FROM users u
JOIN orders o
    ON o.user_id = u.id
JOIN order_items oi
    ON oi.order_id = o.id
JOIN products p
    ON p.id = oi.product_id;

对于上层开发者来说:

不再需要了解:

text 复制代码
order_items

product_id

user_id

各种 JOIN

只需要理解:

text 复制代码
User

places

Order

contains

Product

这就是 Ontology 带来的抽象。


十三、Ontop 和数据库 View 有什么区别?

有人可能会说:

这不就是数据库 View 吗?

不完全一样。

数据库 View:

text 复制代码
SQL Schema

↓

SQL View

本质还是:

text 复制代码
表
字段

Ontop:

text 复制代码
Relational Schema

↓

Semantic Model

你看到的是:

text 复制代码
User

Organization

Order

Product

worksFor

purchased

owns

而不是:

text 复制代码
tbl_user

company_id

order_user_rel

更重要的是 Ontology 还可以表达:

text 复制代码
继承

类型关系

语义规则

这已经不是普通 View 能直接替代的。


十四、为什么企业特别适合 Ontop?

因为企业数据最大的特点就是:

数据很多,但都已经存在数据库里。

比如银行:

text 复制代码
Customer

Account

Transaction

Loan

实际存储:

text 复制代码
Oracle

医院:

text 复制代码
Patient

Doctor

Diagnosis

Treatment

存储:

text 复制代码
PostgreSQL

制造业:

text 复制代码
Machine

Factory

Order

Supplier

Part

存储:

text 复制代码
ERP Database

这时候如果要上知识图谱,最麻烦的是:

text 复制代码
重新构建一套数据系统。

Ontop 的优势就在于:

text 复制代码
数据库不用动。

只增加语义层。

十五、一个企业 Ontop 架构

可以设计:

text 复制代码
                       AI Agent

                          |

                          ↓

                       GraphRAG

                          |

                          ↓

                       SPARQL

                          |

                          ↓

                       Ontop

                   /             \

             Ontology          Mapping

                   \             /

                         |

                         ↓

          -----------------------------

          |             |             |

        MySQL       PostgreSQL       Oracle

          |             |             |

          -----------------------------

                         |

                    企业业务数据

这时候 Ontop 就像:

企业数据库和 AI 之间的语义中间层。


十六、Ontop + AI Agent

这也是我觉得 Ontop 在今天重新变得非常有意思的地方。

以前:

Ontop 更多是:

text 复制代码
Semantic Web

Knowledge Graph

SPARQL

现在可以把 AI Agent 放上去。

比如用户问:

text 复制代码
去年购买过服务器,并且当前合同仍然有效的客户有哪些?

Agent 首先理解:

text 复制代码
Customer

purchased

Server

hasContract

Contract

然后生成:

text 复制代码
SPARQL

交给 Ontop。

Ontop:

text 复制代码
SPARQL

↓

SQL

然后:

text 复制代码
MySQL / PostgreSQL

返回真实业务数据。

整个链条:

text 复制代码
自然语言

↓

LLM

↓

SPARQL

↓

Ontology

↓

Ontop

↓

SQL

↓

业务数据库

这就是一个非常漂亮的:

Semantic Data Agent。


十七、为什么不直接让 LLM 生成 SQL?

这个问题很关键。

现在很多项目是:

text 复制代码
自然语言

↓

LLM

↓

SQL

也就是 Text-to-SQL。

比如用户问:

text 复制代码
查询购买过服务器的客户。

LLM 必须知道:

text 复制代码
customers 表

orders 表

order_items 表

products 表

字段名称

JOIN 条件

问题是企业数据库可能有:

text 复制代码
2000 张表

数万个字段

LLM 很难理解。


加 Ontology 之后

Agent 看到的是:

text 复制代码
Customer

Order

Product

purchased

不需要知道:

text 复制代码
crm_customer_base_v2

sales_order_master

sales_item_relation

底层复杂度交给:

text 复制代码
Mapping + Ontop

于是:

text 复制代码
自然语言

↓

Semantic Query

↓

SPARQL

↓

Ontop

↓

SQL

从系统设计上可能更加稳定。


十八、这可能比 Text-to-SQL 更适合大型企业

小项目:

text 复制代码
10 张表

Text-to-SQL 完全够用。

但是大型 ERP:

text 复制代码
500+

1000+

5000 张表

如果全部把 Schema 扔给 LLM:

基本不可行。

Ontology 可以把:

text 复制代码
5000 张数据库表

抽象成:

text 复制代码
Customer

Order

Product

Supplier

Employee

Factory

可能只有几十、几百个核心概念。

于是:

text 复制代码
复杂物理数据模型

↓

简单业务语义模型

这就是 Ontology 最大的价值之一。


十九、Ontop + RAG

Ontop 也可以和传统 RAG 配合。

比如:

结构化数据:

text 复制代码
MySQL

走:

text 复制代码
Ontop

非结构化数据:

text 复制代码
PDF

Word

Wiki

走:

text 复制代码
Vector Database

然后:

text 复制代码
             用户问题

                 |

                 ↓

              Agent

           /           \

        Graph          Vector

          |              |

        Ontop           RAG

          |              |

      Database       Documents

           \           /

              ↓

             LLM

这比纯 Vector RAG 能处理更多问题。


二十、Ontop + GraphRAG

进一步可以:

text 复制代码
Ontology

↓

Virtual Knowledge Graph

↓

Graph Retrieval

↓

Document Retrieval

↓

LLM

例如用户问:

text 复制代码
A 公司最近为什么出现交付延期?

首先通过 Ontop 找:

text 复制代码
A 公司

↓

订单

↓

供应商

↓

产品

↓

物流

然后再到向量数据库搜索:

text 复制代码
这些订单对应的合同

邮件

会议纪要

故障报告

这就是:

text 复制代码
Structured Graph

+

Unstructured RAG

结合起来。


二十一、Ontop 支持什么数据库?

Ontop 面向关系数据库。

常见场景包括:

text 复制代码
PostgreSQL

MySQL

Oracle

SQL Server

本质依赖:

text 复制代码
JDBC

连接数据库。

因此它本身特别适合 Java / 企业后端生态。


二十二、Ontop 是 Java 项目

Ontop 主体使用 Java 开发。

GitHub 项目本身是 Maven 工程。

源码构建:

bash 复制代码
git clone https://github.com/ontop/ontop.git

cd ontop

然后:

bash 复制代码
mvn clean install

官方当前 Version 5 分支的 README 标明构建使用 Maven 3.6+ 和 Java 11。


二十三、Ontop 也支持 Docker

Ontop 提供官方 Docker 镜像。

因此生产环境可以:

text 复制代码
PostgreSQL

+

Ontop

+

Ontology

+

Mapping

直接容器化。

一个典型结构:

text 复制代码
docker-compose.yml

ontology.owl

mapping.obda

ontop.properties

然后:

bash 复制代码
docker compose up -d

最终暴露一个:

text 复制代码
SPARQL Endpoint

给其他系统访问。


二十四、Ontop + Protégé

Ontop 还有一个很方便的东西:

Ontop Protégé Plugin。

也就是说:

text 复制代码
Protégé

+

Ontop

可以直接结合起来。

你可以在 Protégé 里:

text 复制代码
设计 Ontology

编写 Mapping

连接数据库

执行 SPARQL

然后看查询结果。

这对于学习 Ontology 非常方便。

官方 GitHub Release 也提供 macOS、Windows 和 Linux 的 Protégé Bundle。


二十五、Ontop 不是什么?

理解一个项目最好的方式,有时候是先知道:

它不是什么。

Ontop 不是:

text 复制代码
Neo4j

它不会要求你把全部数据搬进 Graph Database。

Ontop 不是:

text 复制代码
Vector Database

它主要不是做 Embedding Search。

Ontop 也不是:

text 复制代码
LLM

它不会帮你聊天。

它真正负责的是:

text 复制代码
Semantic Layer

+

Query Translation

二十六、Ontop 和 Neo4j 的区别

可以简单对比:

能力 Ontop Neo4j
数据存储 原数据库 图数据库
是否搬数据 不一定 通常需要
Query SPARQL Cypher
数据模型 RDF / Ontology Property Graph
实时同步 直接查询源库 通常需要同步
Ontology 原生方向 需要额外设计
企业关系库集成 需要数据导入

所以:

Neo4j 更像:

text 复制代码
真正的 Graph Database

Ontop 更像:

text 复制代码
数据库上方的 Virtual Graph Layer

二十七、Ontop 最大优势

我觉得有三个。

第一:不用搬数据

这是最大的优势。

text 复制代码
Business DB

↓

直接查询

不存在:

text 复制代码
复制

同步

一致性

这些额外问题。


第二:数据实时

数据库发生:

text 复制代码
UPDATE orders
SET status = 'paid'

下一次 Ontop 查询:

理论上就可以直接看到最新状态。

因为它查询的是源数据库。


第三:语义层解耦

底层:

text 复制代码
tbl_order_2026

user_base_v3

sku_master_info

上层:

text 复制代码
Order

User

Product

这对 Agent 特别重要。

因为 AI 更容易理解:

text 复制代码
Customer purchases Product

而不是:

text 复制代码
customer_id JOIN sku_order_relation

二十八、Ontop 的缺点也很明显

当然,它并不是万能的。

1. Mapping 成本

真正难的部分:

text 复制代码
Database Schema

↓

Ontology

如何建立 Mapping。

大型企业可能需要大量人工设计。


2. 复杂 SQL 性能

SPARQL:

text 复制代码
Graph Traversal

最终可能被翻译成:

text 复制代码
大量 JOIN

如果数据库设计不合理,SQL 性能可能会变差。


3. 依赖 Ontology 质量

Ontology 如果设计得不好:

text 复制代码
语义层

本身就可能变成新的技术债务。


二十九、LLM 可能解决 Ontop 最大的问题

这也是我现在非常关注的方向。

Ontop 最大的问题:

text 复制代码
Mapping 太麻烦。

但是 LLM 出现之后,可以尝试:

text 复制代码
Database Schema

↓

LLM

↓

理解表和字段

↓

生成 Ontology

↓

生成 Mapping

↓

人工审核

↓

Ontop

例如:

数据库:

text 复制代码
t_customer

customer_name

enterprise_id

LLM 自动理解:

text 复制代码
Customer

Customer.name

Customer belongsTo Enterprise

然后生成:

text 复制代码
R2RML Mapping

这样 Ontology 工程的成本就可能大幅下降。


三十、Ontop + LLM 可能形成新的 Data Agent

完整路线:

text 复制代码
                用户

                  |

                  ↓

                 LLM

                  |

                  ↓

          Semantic Understanding

                  |

                  ↓

               SPARQL

                  |

                  ↓

               Ontop

                  |

             Mapping

                  |

                  ↓

        ---------------------

        |         |         |

      MySQL    Oracle   PostgreSQL

        |         |         |

        ---------------------

                  |

            Enterprise Data

最终:

用户可以直接问:

text 复制代码
今年购买 AI 服务超过 10 万元,
但最近 30 天没有续费的客户有哪些?

LLM 不需要知道全部数据库字段。

它只需要理解:

text 复制代码
Customer

Purchase

AI Service

Renewal

Ontop 负责:

text 复制代码
Semantic

↓

Physical Database

转换。


三十一、Ontology 在 AI 时代重新有价值

过去大家觉得 Ontology 很学术。

因为:

text 复制代码
OWL

RDF

SPARQL

学习成本很高。

但是 AI Agent 时代出现一个新问题:

AI 到底应该怎样理解企业的业务世界?

直接给它:

text 复制代码
5000 张表

很难。

直接给它:

text 复制代码
100 万个 Chunk

也不够。

我们真正需要的可能是:

text 复制代码
Customer

Order

Contract

Product

Supplier

这样的:

Business Semantic Layer。

Ontology 恰好就是干这个的。


三十二、我怎么看 Ontop

如果只把 Ontop 看成:

text 复制代码
一个 SPARQL 转 SQL 工具

其实有点低估它。

我更愿意把它理解成:

关系数据库和 AI 之间的一层语义操作系统。

下面是:

text 复制代码
MySQL

PostgreSQL

Oracle

上面是:

text 复制代码
Agent

GraphRAG

LLM

中间:

text 复制代码
Ontology

+

Ontop

于是:

text 复制代码
                 AI Agent

                    ↓

                Ontology

                    ↓

                  Ontop

                    ↓

             Business Data

这条路线,我觉得未来在企业 AI 里面会越来越有价值。


三十三、总结

一句话总结 Ontop:

Ontop 让关系数据库无需迁移数据,就可以通过 Ontology 和 Mapping 被虚拟成知识图谱,并使用 SPARQL 查询。

它解决的不是:

text 复制代码
如何存一张图

而是:

如何让现有数据库拥有知识图谱的语义能力。

传统方式:

text 复制代码
Database

↓

ETL

↓

Knowledge Graph

Ontop:

text 复制代码
Database

↓

Virtual Knowledge Graph

未来再结合:

text 复制代码
LLM

GraphRAG

AI Agent

可能形成:

text 复制代码
Natural Language

↓

LLM

↓

Ontology

↓

SPARQL

↓

Ontop

↓

SQL

↓

Enterprise Database

如果说 Graphiti 更偏:

给 Agent 建立长期、动态的记忆。

那么 Ontop 更偏:

让 Agent 直接理解和访问企业现有的结构化数据。

这两个项目实际上代表了两条非常值得关注的路线:

text 复制代码
Graphiti
    ↓
Agent Memory


Ontop
    ↓
Agent Data Layer

再往上汇合:

text 复制代码
Ontology

↓

Knowledge Graph

↓

Context / Data

↓

AI Agent

这也是我认为 Ontology 在 AI Agent 时代真正值得重新研究的原因。


项目地址

GitHub:

https://github.com/ontop/ontop

官网:

https://ontop-vkg.org/


王仕宇 JavaPub

https://javapub.net.cn/

相关推荐
xiaoxiang96091 小时前
Git 分支同步实战:`merge -X theirs` 与完全合并方案
数据库·git·elasticsearch
GoppViper1 小时前
用户测试如何提升SEO转化率?四种实操方法与案例解析
数据库·经验分享
先吃饱再说2 小时前
后端开发绕不开的 SQL:从建表、查询到索引优化,一篇讲透
数据库·后端·sql
敲代码的小小酥2 小时前
InfluxDB时序数据库(续)
数据库·时序数据库
智购科技自动贩卖机2 小时前
自动售货机嵌入式系统Go语言开发实践:从资源受限设备到RTOS协程调度的工程化之路
大数据·linux·数据库·人工智能·yolo·架构·golang
SelectDB3 小时前
2026 年 Apache Doris 和 StarRocks 怎么选?一篇更接近真实选型的对比
大数据·数据库·数据分析
祢真伟大3 小时前
DM8 归档日志挖掘导致 TEMP 表空间不释放的问题排查
数据库
qq_485015213 小时前
MyBatis-Plus 3.x FieldStrategy 作用
java·数据库·mybatis
lhldsg3 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序