这次我们介绍利用D2RQ开启SPARQL endpoint服务和两种交互方式:在浏览器中进行查询或者编写python脚本进行交互。跳过之前实践篇练习的读者,需要做的准备有:导入数据到Mysql,下载mapping文件(项目地址)。

一、SPARQL endpoint

前一篇介绍SPARQL的文章中提到,SPARQL endpoint是SPARQL协议的一部分,用于处理客户端的请求,可以类比web server提供用户浏览网页的服务。通过endpoint,我们可以把数据发布在网上,供用户查询。

D2RQ,是以虚拟RDF的方式来访问关系数据库中的数据,即我们不需要显式地把数据转为RDF形式。通过默认,或者自己定义的mapping文件,我们可以用查询RDF数据的方式来查询关系数据库中的数据。换个说法,D2RQ把SPARQL查询,按照mapping文件,翻译成SQL语句完成最终的查询,然后把结果返回给用户。下面是D2R Server的架构图:

进入d2rq目录,使用下面的命令启动D2R Server:

d2r-server.bat kg_demo_movie_mapping.ttl

“kg_demo_movie_mapping.ttl”是我们定义的mapping文件。其他参数和配置请参考官方文档。默认端口是2020,在浏览器输入“http://localhost:2020/”,可以看到如下界面:

红色方框1是我们定义的类别,点击某个类别,我们可以看到其对应的所有实例(默认显示50个,可以在mapping文件中修改服务器配置)。选中某个实例,可以看到其包含的所有属性,如下图:

点击红色方框2中的链接,进入endpoint,如下图:

二、浏览器中查询

输入框默认的SPARQL查询是获取所有的RDF三元组,“LIMIT”关键词指定返回结果数量的上限。点击下图红框中的“Go!”,执行查询:

读者可以自行尝试上篇文章中的例子:

“周星驰出演了哪些电影?”

“英雄这部电影有哪些演员参演?”

“巩俐参演的评分大于7的电影有哪些?”

读者也可以通过命令行的方式进行查询,具体方法请参考官方的文档。

三、编写Python脚本进行交互

构建基于知识图谱的应用,我们希望将SPARQL查询集成在代码当中,对其进行包装便于后续开发。这里介绍一个Python第三方库:SPARQLWrapper。如其名,这是一个Python下的包装器,可以让我们十分方便地和endpoint进行交互。下面是通过SPARQLWrapper,向D2RQ endpoint发送查询“巩俐参演的评分大于7的电影有哪些”,得到结果的代码。

from SPARQLWrapper import SPARQLWrapper, JSONsparql = SPARQLWrapper("http://localhost:2020/sparql")
sparql.setQuery("""PREFIX : <http://www.kgdemo.com#>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>SELECT ?n WHERE {?s rdf:type :Person.?s :personName '巩俐'.?s :hasActedIn ?o.?o :movieTitle ?n.?o :movieRating ?r.FILTER (?r >= 7)}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()for result in results["results"]["bindings"]:print(result["n"]["value"])

运行结果:

2046
Memoirs of a Geisha
荆轲刺秦王
大红灯笼高高挂
霸王别姬
活着
唐伯虎点秋香
秋菊打官司
菊豆
Hong gao liang
画魂
风月
Piao Liang Ma Ma
The Hand

初始化Wrapper需要的参数是endpoint对外提供服务的链接,D2RQ默认的链接是“http://localhost:2020/sparql”。

总结

这篇文章简单地介绍了如何利用D2RQ开启SPARQL endpoint服务和两种进行交互的方式。D2RQ是以虚拟RDF图的方式来访问关系数据库,在访问频率不高,数据变动频繁的场景下,这种方式比较合适。对于访问频率比较高的场景(比如KBQA),将数据转为RDF再提供服务更为合适。接下来的实践篇我们将介绍如何利用Apache Jena,创建基于显式RDF数据的SPARQL endpoint;并展示,在加入推理机后,对数据进行本体推理我们可以得到额外的信息。

https://zhuanlan.zhihu.com/p/32880610

知识图谱实践篇(三):D2RQ SPARQL endpoint与两种交互方式相关推荐

  1. 实践篇(三):D2RQ SPARQL endpoint与两种交互方式

    对知识图谱有兴趣的读者可以关注我的知乎专栏,主要介绍知识图谱的相关概念.技术,也包含一些具体实践. 这次我们介绍利用D2RQ开启SPARQL endpoint服务和两种交互方式:在浏览器中进行查询或者 ...

  2. 知识图谱实践篇(四):Apache jena SPARQL endpoint及推理

    在上一篇我们学习了如何利用D2RQ来开启endpoint服务,但它有两个缺点: 1. 不支持直接将RDF数据通过endpoint发布到网络上. 2. 不支持推理. 这次我们介绍的Apache Jena ...

  3. 知识图谱实践篇(五):KBQA Demo

    作为实践篇的最后一篇,我们将介绍如何用Python完成一个简易的问答程序.下图是demo的展示效果: 查询结果为空,回答"I don't know.":不能理解问句,回答" ...

  4. 知识图谱实践篇(二):关系数据库到RDF

    上一篇文章介绍了我们所使用的数据.其实,知识图谱数据的来源主要有三个:结构化数据.半结构化数据和非结构化的数据.我们所使用的电影数据就是结构化的数据.半结构化的数据指的是数据有一定的组织形式,但较结构 ...

  5. 知识图谱实践篇(一):数据准备和本体建模

    对知识图谱有兴趣的读者可以关注我的知乎专栏,主要介绍知识图谱的相关概念.技术,也包含一些具体实践. 通过前面几篇文章的介绍,读者应该对知识图谱,其相关概念,以及语义网技术栈中的RDF,RDFS/OWL ...

  6. 深度融合 | 当推荐系统遇见知识图谱(三)

    NewBeeNLP原创出品 公众号专栏作者@上杉翔二 悠闲会 · 信息检索 本篇文章继续整理『推荐系统+知识图谱』这个lineup的后续,主要是2020年SIGIR,CIKM,RecSys的相关文章. ...

  7. 知识图谱入门 (三) 知识抽取

    欢迎大家关注我的博客 http://pelhans.com/ ,所有文章都会第一时间发布在那里哦~ 本节介绍了针对结构化数据.非结构化数据.半结构化数据的知识抽取方法. 知识抽取的概念 知识抽取,即从 ...

  8. 知识图谱(三)——知识体系构建和知识融合

    知识图谱不仅包含具体的实例知识数据,还包括对知识数据的描述和定义.该部分对数据进行描述和定义的"元"数据被称为知识体系(Schema)或本体(Ontology). 知识融合主要方法 ...

  9. 知识图谱(三):Neo4j数据导入与多库切换

    一.Neo4j数据导入 1.import导入csv import语法 neo4j-admin import [--mode=csv] [--database=<name>][--addit ...

最新文章

  1. hive的Specified key was too long; max key length is 767 bytes问题解决
  2. USBASP的ISP上位机软件AVR_fighter
  3. Github标星3.7k:微软出的数据科学入门课程(附下载)
  4. 《linux内核设计与实现》第一章
  5. windows环境下设置Redis自启动
  6. oracle 时间间隔,ORACLE JOB间隔时间参考
  7. oracle服务开机自启动
  8. Spring4 事务管理
  9. 数据科学 IPython 笔记本 8.15 Matplotlib 中的三维绘图
  10. Sublime text3 更改侧边栏颜色
  11. 《信息存储与管理(第二版):数字信息的存储、管理和保护》—— 2.6 磁盘驱动部件...
  12. Spinnaker:云原生多云环境持续部署的未来
  13. c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
  14. Android获取用户通讯录上传,Android获取通讯录并上传(包含通讯录加密)(示例代码)...
  15. ThinkPHP5.0 查询条件where()使用
  16. .NET之盛派微信SDK简单操作
  17. 使用FFmpeg进行屏幕录像和录音
  18. 软件构造复习小结(2)——设计规约(Specification)
  19. Unity3D: 做自己的卡牌游戏 (一)
  20. Docker 与虚拟机有何不同?

热门文章

  1. (mysql) EXPLAIN语法
  2. ACM题目————次小生成树
  3. HTML5 新增结构元素分为主体结构元素和非主体结构元素
  4. android翻页实现原理
  5. PowerDesigner的逆向工程.
  6. 第一个DNN 模块PictureGallery已经完成
  7. Git学习笔记:Git简介
  8. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解(即c++参数初始)
  9. 链表反转相关的题(C++模板)
  10. DW Question Answer Pro 1.3.4 DWQA问答系统插件