参考 《实践篇(四):Apache jena SPARQL endpoint及推理》(方法不完全一样),搭建了一个知识图谱,在fuseki的web页面上传从结构化数据构建而来的本体实体后,能够正常使用,但是有几个问题:
OWLFBRuleReasoner
推理机开启后查询速度太慢,慢到只能被迫关闭推理机的程度;- 知识图谱的结构化数据源定时刷新,相应的知识图谱也应该定时刷新,这需要代码化的更新fuseki的本体和实体的方法;
- 知识图谱保存在服务器的内存里,如何保存到磁盘中?
本文是针对问题2的。
查阅官方文档知,可以用SOH(SPARQL over HTTP)解决,命令如下:
s-get: 查数据,不改变知识图谱
s-put: 修改数据,删掉知识图谱指定graph内容,并重新上传
s-delete: 删除指定graph内容
s-post: 向指定graph添加新的内容
官方示例:
s-put http://localhost:3030/dataset default data.ttl
s-get http://localhost:3030/dataset default
s-put http://localhost:3030/dataset http://example/graph data.ttl
s-get http://localhost:3030/dataset http://example/graph
定时更新方法:
1.定时抽取新的本体实体文件
2.重启fuseki以删除旧知识图谱,同时更新本体
3.post 提交新的实体
第3步用python简单实现如下:
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
filepath = ""
multipart_data = MultipartEncoder(fields={'file': (filepath, open(filepath, 'rb'), 'text/plain')})
print("uploading " + filepath)
response = requests.post(
'http://localhost:3030/dataset',
data=multipart_data,
auth=('auth', 'passwd'),
headers={'Content-Type': multipart_data.content_type}
)
参考
SOH - SPARQL over HTTP
实践篇(四):Apache jena SPARQL endpoint及推理