SPARQL endpoint以及查询方式
SPARQL endpoint
SPARQL endpoint是SPARQL协议的一部分,用于处理客户端的请求,通过endpoint,我们可以把数据发布在网上,供用户查询。
D2RQ把SPARQL查询,按照mapping文件,翻译成SQL语句完成最终的查询,然后把结果返回给用户。
下面是D2R Server的架构图:
- 创建好数据库,数据库中有数据,具体见前几个博文(含有文件和操作)
- 进入d2rq目录,使用下面的命令启动D2R Server:
d2r-server.bat kg_movie.ttl
在浏览器输入“http://localhost:2020/”,可以看到如下界面:
- 点击1中的一个actor类
- 选中第一个实例
- 点击2,进入SPARQL endpoint,如图
- 输入框默认的SPARQL查询是获取所有的RDF三元组,“LIMIT”关键词指定返回结果数量的上限。点击下图红框中的“Go!”,执行查询:
浏览器中进行查询
例如:“周星驰出演了哪些电影?”
SELECT ?n WHERE {
?s rdf:type :actor.
?s :actor_actor_chName '周星驰'.
?o :movie_movie_chName ?n
}
LIMIT 10
结果为:
编写python脚本进行查询操作
- 使用Python第三方库:SPARQLWrapper。这是一个Python下的包装器,可以让我们十分方便地和endpoint进行交互。下面是通过SPARQLWrapper,向D2RQ endpoint发送查询“周星驰出演了哪些电影?”。
- 安装SPARQLWrapper
pip install sparqlwrapper
https://github.com/RDFLib/sparqlwrapper
代码如下:
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://localhost:2020/sparql")
sparql.setQuery("""
PREFIX : <http://www.kg_movie.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?n WHERE {
?s rdf:type :actor.
?s :actor_actor_chName '周星驰'.
?o :movie_movie_chName ?n
}
LIMIT 10
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
print(result["n"]["value"])
注意:要开启D2R服务器,不然运行代码会出现错误的
结果如下:
参考:
[1] https://zhuanlan.zhihu.com/p/32880610