对知识图谱有兴趣的读者可以关注我的知乎专栏,主要介绍知识图谱的相关概念、技术,也包含一些具体实践。

这次我们介绍利用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 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;并展示,在加入推理机后,对数据进行本体推理我们可以得到额外的信息。

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

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

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

  2. java 更改 常量池_JVM中三个常量池(两种常量池)的解析及其随jdk版本的变化

    目录 常量池 静态常量池 运行时常量池 字符串常量池 三个常量池的关系 其随jdk版本的变化 常量池 请注意常量池是线程共享数据区,常量池的内容: 常量池的好处: 常量池是为了避免频繁的创建和销毁对象 ...

  3. Javascript第三章创建数组的两种方式第一课

    跟java的区别 ,js中数值没有长度限制,大小可以自动调节, 而java 中的数组是线性的,放同样的类型,而且容量是定制,有限制 跟JAVA的区别 直接在控制台输入对象名,直接能把数组中的数全部查出 ...

  4. 用三个与非门设计或门两种方法

    硬解的灵感和思路 ,两条路,独立思考不丢人

  5. 【CAD二次开发】DrawJig绘制MLeader两种交互方式

    2022/9/9修复默认键不生效的问题 第一个版本 [CommandMethod("aaaa")]public static void DrawAMultiLine2(){Data ...

  6. python的三种取整方式_python 取整的两种方法

    问题简介: 要把一个浮点数(float)整数部分提取出来.比如把"2.1"变成"2"的这一过程:现在我们给这个过程起一个名字叫"取整".那么 ...

  7. windows下tomcat集群配置(两种方法)

    两种方法只是在配置上不同原理一样,因为apache2.X后其自身集成了mod_jk功能,相对于1.3版本,不需要再进行繁琐的worker.properties配置,配置过程大幅简化. 一.软件需求 操 ...

  8. Dagger2 知识梳理(1) Dagger2 依赖注入的两种方式

    一.资料推荐 最近这几天一直在看有关Dagger2有关的文章,感觉就是这东西真难用.真难懂,数次想要放弃,还好有网上大神的教程帮助,模模糊糊总算能把基本的几个概念跑通了. 这里首先推荐 牛晓伟 的下面 ...

  9. python3解释器执行not 1 and 1_编程语言的分类,python解释器多版本共存.执行python的两种方式,变量,用户与程序交互...

    一.编程语言的分类? 机器语言:直接使用二进制指令编程,直接操作硬件,必须考虑硬件细节. 汇编语言:用简写的英文标识符取代二进制去编写程序,直接操作硬件,必须考虑硬件细节. 高级语言:通过人类能够理解 ...

最新文章

  1. three.ar.js_我们如何通过AR.js使产品吉祥物栩栩如生
  2. Django框架(二十)—— Django rest_framework-认证组件
  3. 人人都是产品经理 2
  4. 第13章 Django框架
  5. Rabin-Karp字符串查找算法学习:poj1200
  6. 07-异常处理——动手动脑
  7. python安装numpy模块教程_Windows系统中安装Python模块pip numpy matplotlib
  8. Web---HTTP请求、重定向、转发和数据压缩
  9. 采用dlopen、dlsym、dlclose加载动态链接库【转】
  10. 经营管理者杂志经营管理者杂志社经营管理者编辑部2022年第7期目录
  11. ISP PIPLINE 概述
  12. android模拟器如何模拟蓝牙连接,如何模拟Android模拟器上的蓝牙
  13. 2022-2028全球造水机市场现状及未来发展趋势
  14. p5.js炫酷背景动态js特效代码
  15. install Wine + 迅雷 in Fedora 31
  16. fusioncharts 嵌套饼图_【Tableau 图表】你是不是真的需要一个跑道图呢?
  17. 简述c语言中break的作用,c语言break什么意思?
  18. 五种经典卷积神经网络
  19. postgresql 授权某个数据库的权限给test 账号 使该账号 只能操作指定DB 不能操作其他DB
  20. sql查询记录数大于1

热门文章

  1. 各种编码中字母和汉字分别占多少字节
  2. 求出生年份 linux_从您出生之前我就一直从事Linux
  3. 数据分析师1.3量化交易策略的技术指标选股技巧
  4. Ubuntu系统下基于Opencv完成图像编程
  5. 米忽悠前端面试题总结(1)
  6. mysql 分区键_mysql分区
  7. 前端img不显示服务器图片,【前端】img 加上crossOrigin=”anonymous”之后导致图片无法显示...
  8. 职场纵横之人际关系的55个绝招(4)
  9. mysql中alter与update,MySQL中update和alter使用区别
  10. python 函数进阶-闭包函数