知识图谱之图数据库Neo4j
知识图谱中的知识是通过RDF结构来进行表示的,其基本单元是事实。每个事实是一个三元组(S, P, O),在实际系统中,按照存储方式的不同,知识图谱的存储可以分为基于表结构的存储和基于图结构的存储。
基于表结构的存储可以用关系型数据库,常见的关系型数据库存储系统有MySQL、Oracle、DB2、Microsoft SQL Server等;基于图结构的存储,常见的存储系统有Neo4j、OritentDB、InfoGrid、HyperGraphDB、infiniteGraph等。下面讲述Neo4j数据库的一些理论和操作。
图数据库的理论基础是图论,通过节点、边和属性对数据进行表示和存储。具体来说,图数据库基于有向图,其中,节点、边、属性是图数据库的核心概念。
(1)节点
节点用于表示实体、事件等对象,可以类比于关系数据库中的记录或者数据表中的行数据。例如人物、地点、电影都可以作为图中的节点。
(2)边
边是指图中连接节点的有向线条,用于表示不同节点之间的关系。例如人物之间的同事关系都可以作为图中的边。
(3)属性
属性用于描述节点或者边的特性。例如人物(节点)的姓名、性别、爱好等都是属性。
图数据库的标准查询语言是SPARQL。SPARQL是由W3C为RDF数据开发的一种查询语言和数据获取协议,是被图数据库广泛支持的查询语言,用于对数据的获取与管理,主要包括数据的插入、删除和查询操作,没有更新操作。
下面来介绍SPARQL语言的使用方法。
1. 数据插入
数据插入指新的三元组插入到已有的RDF图中,通过INSERT DATA语句完成该功能。
语法:INSERT DATA 三元组数据
例子:
INSERT DATA {
ns: 费米 ns: 老师 ns:玻恩.
ns: 玻恩 ns: 类型 ns: 数学家.
ns: 玻恩 ns: 类型 ns: 物理学家.
}
2. 数据删除
数据删除是从RDF图中删除一些三元组。通过DELETE DATA语句完成该功能。
语法:DELETE DATA三元组数据
例子:
DELETE DATA {
ns: 奥本海默 ns: 类型 ns: 物理学家.
}
可以用WHERE来作限制。
例子:
DELETE DATA {
ns: 奥本海默 ?p ?o.
?s ?p ns: 奥本海默.
}
3. 数据更新
数据更新是指更新RDF图中指定三元组的值。和SQL不同,SPARQL没有定义UPDATE操作,也就是说SPARQL语言没有更新已有数据的方法。但是可以通过组合INSERT DATA语句和DELETE DATA语句来实现该功能。
例子:
DELETE DATA {
ns: 费米 ns: 出生日期 "1902/09/29".
}
INSERT DATA {
ns: 费米 ns: 出生日期 "1901/09/29"
}
4. 数据查询
包括四种方式:SELECT、ASK、DESCRIBE、CONSTRUCT。以下一一介绍着四种方式的用法和区别。
(1)SELECT
SELECT功能与SQL中的SELECT语句类似,从知识图谱中获取满足条件的查询语句。
语法:SELECT 变量1 变量2 ... WHERE 图模式[修饰符]
例子:查询类型既是"数学家"又是"物理学家"。
SELECT ?s
WHERE {
?s ns: 类型 ns: 数学家.
?s ns: 类型 ns: 物理学家.
}
(2)ASK
ASK用于测试知识图谱中是否存在满足给定条件的数据,如果存在,返回"yse",否则返回"no",该查询不会返回具体的匹配数据。
语法:ASK 图模式
例子:是否存在是"费米"老师的节点
ASK {
ns: 费米 ns: 老师 ?o.
}
(3)DESCRIBE
DESCRIBE用于查询和指定资源相关的RDF数据,这些数据形成了对给定资源的详细描述。
语法:DESCRIBE 资源或变量 [WHERE 图模式]
例子:获取老师是"玻恩"的节点的所有信息
DESCRIBE ?s WHERE {
?s ns: 老师 ns: 玻恩.
}
(4)CONSTRUCT
CONSTRUCT是根据查询图的结果返回RDF。
语法:CONSTRUCT 图模板 WHERE 图模式
例子:
CONSTRUCT {
?s ns: 搭档 ns: 奥本海默.
ns: 奥本海默 ns: 搭档 ?s.
}
WHERE {
?s ns: 老师 ns: 玻恩.
}
知识图谱之图数据库Neo4j的更多相关文章
- 图数据库Neo4j简介
图数据库Neo4j简介 转自: 图形数据库Neo4J简介 - loveis715 - 博客园https://www.cnblogs.com/loveis715/p/5277051.html 最近我在用 ...
- 图数据库Neo4j
官网下载:https://neo4j.com/download/ 图数据库Neo4j入门:https://blog.csdn.net/gobitan/article/details/68929118 ...
- 主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析
主流图数据库Neo4J.ArangoDB.OrientDB综合对比:架构分析 YOTOY 关注 0.4 2017.06.15 15:11* 字数 3733 阅读 16430评论 2喜欢 18 1: 本 ...
- Hello World 之Spring Boot 调用图数据库Neo4j
明日歌 [清]钱鹤滩 明日复明日,明日何其多! 我生待明日,万事成蹉跎 1. 图数据库Neo4j之爱的初体验 ----与君初相识,犹似故人归 在如今大数据(big data)横行的时代,传统的关系型数 ...
- [知识图谱]利用py2neo从Neo4j数据库获取数据
# -*- coding: utf-8 -*- from py2neo import Graph import json import re class Neo4jToJson(object): &q ...
- 开源软件:NoSql数据库 - 图数据库 Neo4j
转载自原文地址:http://www.cnblogs.com/loveis715/p/5277051.html 最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有 ...
- (三)图数据库neo4j的安装配置
(一)neo4j安装 neo4j有社区版本和企业版,社区版本是免费的,企业版本是收费的.在linux上安装如下步骤: 1.将下载的neo4j-enterprise-3.4.0-unix.tar.gz包 ...
- 图数据库Neo4j的基本使用及与SpringBoot集成
Neo4j 官网地址:https://neo4j.com/ 下载地址:https://neo4j.com/download-center/#community 官方入门文档:https://neo4j ...
- 图数据库neo4j和关系数据库的区别
相信您和我一样,在使用关系型数据库时常常会遇到一系列非常复杂的设计问题.例如一部电影中的各个演员常常有主角配角之分,还要有导演,特效等人员的参与.通常情况下这些人员常常都被抽象为Person类型,对应 ...
随机推荐
- Java学习03-进制学习
计算机中是以二进制来进行数据传递的,二进制分为二进制.八进制.十进制.十六进制 而他们之间如何进行转换呢,二进制作为元,其他进制都是经二进制进行换算的,所以无论什么进制之间的转换都是先转换为二进制,再 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(8)|Operators操作符]
[易学易懂系列|rustlang语言|零基础|快速入门|(8)] 有意思的基础知识 Operators 我们今天再来看看操作符. 算术运算 操作符: + - * / % 代码如下 : let a = ...
- 移动端h5模拟长按事件
为啥写这篇文章 最近接了个需求,要求长按某个标签显示删除一个悬浮的删除按钮.这个需求其实在app上很常见,但是在移动端h5中,我们没有长按的事件,所以就需要自己模拟这个事件了. 大概效果如下: ps: ...
- iOS 自定义NavigationBar右侧按钮rightBarButtonItem
自定义右侧的一个按钮 UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithTitle:@"主页" style: ...
- 《Spring源码深度解析》一
Spring整体架构 1.1 Spring整体架构 1.1.1 Core Container: 模块:Core.Beans.Context和Expression Language Core:框架的基础 ...
- fabric报错:Fatal error: run() received nonzero return code 1 while executing!
今天在使用fabric远程安装rpm时,一直报:Fatal error: run() received nonzero return code 1 while executing! 这看起来也是没笔病 ...
- IDC机房跳线
服务网卡口与配线架 这里有一根网线 记录方式 签 A:23FM-23U-T07 (配线架网线) B:23FM-23U-NIC1(服务器网线) 在配线架的机柜旁边一定写明了 跳线的对面的 交换和配线 ...
- Python爬虫十六式 - 第三式:Requests的用法
Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽 Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...
- yarn与npm对比
https://www.jianshu.com/p/254794d5e741(copy)
- (52)LINUX应用编程和网络编程之七Linux线程
3.7.1.再论进程 3.7.1.1.多进程实现同时读取键盘和鼠标 3.7.1.2.使用进程技术的优势 (1)CPU时分复用,单核心CPU可以实现宏观上的并行.微观上的串行 (2)实现多任务系统需求( ...