知识图谱中的知识是通过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的更多相关文章

  1. 图数据库Neo4j简介

    图数据库Neo4j简介 转自: 图形数据库Neo4J简介 - loveis715 - 博客园https://www.cnblogs.com/loveis715/p/5277051.html 最近我在用 ...

  2. 图数据库Neo4j

    官网下载:https://neo4j.com/download/ 图数据库Neo4j入门:https://blog.csdn.net/gobitan/article/details/68929118 ...

  3. 主流图数据库Neo4J、ArangoDB、OrientDB综合对比:架构分析

    主流图数据库Neo4J.ArangoDB.OrientDB综合对比:架构分析 YOTOY 关注 0.4 2017.06.15 15:11* 字数 3733 阅读 16430评论 2喜欢 18 1: 本 ...

  4. Hello World 之Spring Boot 调用图数据库Neo4j

    明日歌 [清]钱鹤滩 明日复明日,明日何其多! 我生待明日,万事成蹉跎 1. 图数据库Neo4j之爱的初体验 ----与君初相识,犹似故人归 在如今大数据(big data)横行的时代,传统的关系型数 ...

  5. [知识图谱]利用py2neo从Neo4j数据库获取数据

    # -*- coding: utf-8 -*- from py2neo import Graph import json import re class Neo4jToJson(object): &q ...

  6. 开源软件:NoSql数据库 - 图数据库 Neo4j

    转载自原文地址:http://www.cnblogs.com/loveis715/p/5277051.html 最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有 ...

  7. (三)图数据库neo4j的安装配置

    (一)neo4j安装 neo4j有社区版本和企业版,社区版本是免费的,企业版本是收费的.在linux上安装如下步骤: 1.将下载的neo4j-enterprise-3.4.0-unix.tar.gz包 ...

  8. 图数据库Neo4j的基本使用及与SpringBoot集成

    Neo4j 官网地址:https://neo4j.com/ 下载地址:https://neo4j.com/download-center/#community 官方入门文档:https://neo4j ...

  9. 图数据库neo4j和关系数据库的区别

    相信您和我一样,在使用关系型数据库时常常会遇到一系列非常复杂的设计问题.例如一部电影中的各个演员常常有主角配角之分,还要有导演,特效等人员的参与.通常情况下这些人员常常都被抽象为Person类型,对应 ...

随机推荐

  1. Caffe学习使用__运行caffe自带的两个简单例子

    为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...

  2. Ubuntu16.04下caffe CPU版的详细安装步骤

    一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...

  3. Java基本的程序结构设计 控制流程

    控制流程 java的控制流程和C和C++基本一致,只是不能使用goto语句,不过break语句可以带标签,实现从内层循环跳出的目的.标签可以放在for或者while前面.如下: package com ...

  4. WPF 样式Style

    一:样式基础 如果我们的程序有三个这样的按键,一般我们会这样写 <StackPanel> <!--按键的背景色为Azure蔚蓝色背景色为Coral珊瑚色字体为Arial加粗字体大小为 ...

  5. vuex 管理状态

    来分析下vuex的管理状态吧,如果你用过react中的redux的管理树,那我觉得vuex对你来说很容易掌握 如果你还是不太熟悉vuex是什么,那先看下官网https://vuex.vuejs.org ...

  6. c# linq 分组groupby

    转载: https://www.cnblogs.com/cncc/p/9846390.html 一.先准备要使用的类: 1.Person类: class Person { public string ...

  7. SQL 使用分区方法

  8. guava缓存第一篇

    guava缓存主要有2个接口,Cache和LoadingCache. Cache,全类名是com.google.common.cache.Cache,支持泛型.Cache<K, V>. L ...

  9. 能给个安全点的fifo吗

      调试一个基于altera  FPGA的项目,发现开机200次,就会有1到2次的开机不正常现象,但只要是成功开机了,无论运行多久都是正常的.   遇到这类问题,按照经验来说 一般首先想到的可能是电源 ...

  10. mysql AUTO INCREMENT字段 语法

    mysql AUTO INCREMENT字段 语法 作用:在新记录插入表中时生成一个唯一的数字 说明:我们通常希望在每次插入新记录时,自动地创建主键字段的值.我们可以在表中创建一个 auto-incr ...