三元组详解
什么是三元组
三元组(Triple)是 RDF 图数据库 中的基本数据存储单元,用于表达一个完整的事实陈述。
三元组组成
| 组成部分 |
英文 |
说明 |
| 主语 |
Subject |
被描述的实体或资源 |
| 谓语 |
Predicate |
关系或属性 |
| 宾语 |
Object |
属性值或关联的另一个实体 |
基本形式
1
| (Subject, Predicate, Object)
|
三元组示例
表示关系
1 2 3
| (张三, 认识, 李四) (北京, 是首都, 中国) (Java, 属于, 编程语言)
|
表示属性
1 2 3
| (张三, 年龄, 25) (张三, 职业, "软件工程师") (北京, 人口, 21540000)
|
核心特点
- 原子性:每个三元组表达一个独立、不可分割的事实
- 可组合:多个三元组通过共享节点形成复杂的知识图谱
- 语义明确:谓语精确定义了主语和宾语之间的关系
- 标准化:遵循 W3C RDF 标准,具有良好的互操作性
三元组 vs 属性图
图数据库分为两大流派:RDF 图数据库和属性图数据库,虽然都是图数据库,但数据模型不同。👉详解 ^model-comparison
| 特性 |
三元组模型(RDF) |
属性图模型 |
| 代表数据库 |
Apache Jena、Stardog |
Neo4j、JanusGraph |
| 边的属性 |
需要额外三元组表示(具体化) |
边可直接附加属性 |
| 查询语言 |
SPARQL |
Cypher、Gremlin |
| 标准化程度 |
W3C 标准 |
无统一标准 |
| 适用场景 |
语义网、本体建模 |
社交网络、推荐系统 |
RDF 三元组表示法
N-Triples 格式
1 2
| <http://example.org/张三> <http://example.org/认识> <http://example.org/李四> . <http://example.org/张三> <http://example.org/年龄> "25"^^<http://www.w3.org/2001/XMLSchema
|
Turtle 格式
1 2 3 4 5
| @prefix ex: <http://example.org/> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:张三 ex:认识 ex:李四 ; ex:年龄 "25"^^xsd:integer .
|
SPARQL 查询示例
1 2 3 4 5 6 7 8 9 10 11 12
| # 查询张三认识的所有人 SELECT ?person WHERE { ex:张三 ex:认识 ?person . }
# 查询所有年龄大于20的人 SELECT ?person ?age WHERE { ?person ex:年龄 ?age . FILTER (?age > 20) }
|
三元组在知识图谱中的应用
graph LR
A[张三] -->|认识| B[李四]
A -->|工作于| C[阿里巴巴]
B -->|工作于| D[腾讯]
C -->|位于| E[杭州]
D -->|位于| F[深圳]
实际应用场景
- 知识图谱:Google Knowledge Graph、百度知识图谱
- 语义网:Linked Open Data
- 本体建模:OWL 本体描述
- 智能问答:基于知识图谱的问答系统
- 推荐系统:基于知识图谱的推荐
总结
三元组是图数据库的基础数据结构,通过 (主语, 谓语, 宾语) 的形式表达事实。它是构建知识图谱的基石,广泛应用于语义网、智能问答等领域。