新瓶装旧酒:实践篇(三)D2RQ SPARQL endpoint与两种交互方式

2020 年 7 月 24 日 AINLP

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


  一、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文件。其他参数和配置请参考官方文档(http://d2rq.org/d2r-server)。默认端口是2020,在浏览器输入“http://localhost:2020/”,可以看到如下界面:








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








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








  二、浏览器中查询  


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








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


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








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









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








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


  三、编写Python脚本进行交互  


构建基于知识图谱的应用,我们希望将SPARQL查询集成在代码当中,对其进行包装便于后续开发。这里介绍一个Python第三方库:SPARQLWrapper(https://github.com/RDFLib/sparqlwrapper)。如其名,这是一个Python下的包装器,可以让我们十分方便地和endpoint进行交互。下面是通过SPARQLWrapper,向D2RQ endpoint发送查询“巩俐参演的评分大于7的电影有哪些”,得到结果的代码(在脚本中写SPARQL语句的时候需要注意格式,否则无法正常解析)。

from SPARQLWrapper import SPARQLWrapper, JSON
sparql = 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"])


运行结果:

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


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


  总结  


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


推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
1

相关内容

SPARQL(读作“sparkle”,SPARQL协议和RDF查询语言的首字母缩写)是一种RDF查询语言,也就是说,它是一种语义查询语言,用于数据库检索和操作以资源描述框架(RDF)格式存储的数据。
专知会员服务
33+阅读 · 2020年9月25日
KDD2020 | 真实世界超图的结构模式和生成模型
专知会员服务
28+阅读 · 2020年8月18日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
专知会员服务
50+阅读 · 2020年1月13日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
82+阅读 · 2019年12月14日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
知识图谱本体结构构建论文合集
专知会员服务
102+阅读 · 2019年10月9日
Cayley图数据库的可视化(Visualize)
Python开发者
5+阅读 · 2019年9月9日
知识图谱在贝壳找房的从0到1实践
ResysChina
13+阅读 · 2018年9月6日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
【知识图谱】如何构建知识图谱
产业智能官
134+阅读 · 2017年9月19日
Neo4j 图数据库基础
数据库开发
6+阅读 · 2017年8月1日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
Exploring Visual Relationship for Image Captioning
Arxiv
14+阅读 · 2018年9月19日
Arxiv
7+阅读 · 2018年4月11日
VIP会员
相关VIP内容
专知会员服务
33+阅读 · 2020年9月25日
KDD2020 | 真实世界超图的结构模式和生成模型
专知会员服务
28+阅读 · 2020年8月18日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
专知会员服务
50+阅读 · 2020年1月13日
【阿里技术论文】AliMe KBQA:阿里小蜜中的结构化知识问答
专知会员服务
82+阅读 · 2019年12月14日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
计算机视觉最佳实践、代码示例和相关文档
专知会员服务
17+阅读 · 2019年10月9日
知识图谱本体结构构建论文合集
专知会员服务
102+阅读 · 2019年10月9日
相关资讯
Cayley图数据库的可视化(Visualize)
Python开发者
5+阅读 · 2019年9月9日
知识图谱在贝壳找房的从0到1实践
ResysChina
13+阅读 · 2018年9月6日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
【知识图谱】如何构建知识图谱
产业智能官
134+阅读 · 2017年9月19日
Neo4j 图数据库基础
数据库开发
6+阅读 · 2017年8月1日
开源巨献:阿里巴巴最热门29款开源项目
算法与数据结构
5+阅读 · 2017年7月14日
Top
微信扫码咨询专知VIP会员