知识查询语言介绍
学习目标
- 了解知识查询的主流语言.
- 掌握Cypher语言的语法
知识查询主流语言
- 查询与检索是知识图谱的重要使用方式, 也是知识图谱数据管理系统的核心能力之一.
1 SQL
- SQL: 计算机工程师最熟悉的查询语言莫过于SQL. 在SQL应用中, 数据以表的形式存在, 有比较强的schema定义, 表和表之间的数据关联以join的方式实现.
- 但是SQL有一个重大的缺陷: 属性值并不总是单一值. 针对每一个多值属性需要进行额外的拆表操作, 这对于表数据的管理带来巨大挑战. 尤其是需要高速高频的进行多表连接操作的场景, 对于数据库性能也是极大的挑战! 对于知识图谱中最主流的三元组形式, 多跳关联查询的形式, 显然SQL不具备优势.
2 SPARQL
- SPARQL: 国际标准化组织W3C提出了针对于RDF知识图谱的标准化查询语言SPARQL. 作为一种图数据, SPARQL查询的执行可以通过图匹配的方式实现.
- SPARQL是一种针对RDF数据的查询语言, 2008年正式成为W3C推荐的针对RDF数据的标准查询语言. 和SQL一样, SPARQL也是一种声明式的结构化查询语言, 即用户只需要按照SPARQL定义的语法规则描述其想查询的信息即可, 不需要明确指定计算机实现查询的步骤.
- SPARQL语言借鉴了SQL的部分语法, 更加关注目标数据图的匹配, 总体来说语言规则不算复杂, 比较容易学:
# 比如利用SPARQL查询从三元组<org:book, dc:title, "Knowledge graph">中查询book这本书的名字
Q: 查询图书名称
SELECT ?title
WHERE { org:book dc:title ?title .}
- 考虑到项目后续使用的图数据库neo4j实际用的是Cypher语言, 在此仅作介绍, 后面课程中将详细为同学们讲授Cypher查询语言.
3 Gremlin
- Gremlin: 是Apache旗下的Java项目, 也是一款著名的图数据库查询语言. 数据以属性图的形式存在, 可以认为是SQL和SPARQL的混合体. 实体的属性仍然在表中, 但是连接关系是直接以指针的形式存在的. Gremlin的查询本质是图遍历, 擅长解决求图的直径, 点到点之间的路径等, 比如刘德华连接奥巴马需要几度关系.
# 查询很直观: 通过has选择gremlin, out表示关系朋友, 因为两层关系所以有两个, values表示返回的结果属性
g.V().has("name", "gremlin").out("knows").out("knows").values("name")
4 Cypher
- Cypher: Cypher是一种声明式图形查询语言, 可用于图结构高效的查询更新和管理. 从语法规则上看, Cypher既受到SQL的启发, 又在模式匹配上借鉴了SPARQL的表达方法, 某些列表语义则是从Haskell和Python等语言中借用的. 综合来看Cypher是一种简介, 强大, 专为图数据库而生的新兴查询语言, 是AI新时代的杰出语言.
- Cypher是专门为图形数据而遍历设计和优化的, 被neo4j采用为官方查询语言, 在后续的课程中会详细讲解!
小节总结
- 首先学习了知识查询的4个主流语言:
- SQL
- SPARQL
- Gremlin
- Cypher
- 主要针对Cypher语言,实现对Neo4j数据库的增删改查