【发布时间】:2019-02-06 08:38:23
【问题描述】:
我使用 jena fuseki 2 docker 镜像来创建一个 fuseki 服务器。
我想知道是否有办法将我的数据集上传到 fuseki,而不是通过网络界面,而是以编程方式,通过 SPARQL 或 Python 或其他方式。
还有,有没有办法直接从 fuseki 使用来自 webprotégé 的本体? 谢谢你的回答
【问题讨论】:
标签: sparql jena owl protege fuseki
我使用 jena fuseki 2 docker 镜像来创建一个 fuseki 服务器。
我想知道是否有办法将我的数据集上传到 fuseki,而不是通过网络界面,而是以编程方式,通过 SPARQL 或 Python 或其他方式。
还有,有没有办法直接从 fuseki 使用来自 webprotégé 的本体? 谢谢你的回答
【问题讨论】:
标签: sparql jena owl protege fuseki
Fuseki 带有一个可用于上传数据的 HTTP API。您可以使用 CURL 或 Python HTTP 库与此 API 进行通信。 Fuseki 还包括可用于调用 HTTP API 的命令行帮助程序脚本。详情请见https://jena.apache.org/documentation/fuseki2/soh.html#soh-sparql-http。
【讨论】:
with open('pizza.owl', 'rb') as f: response=requests.put(http://localhost:3030/mydataset/update, data=f, stream=True)
http://localhost:3030/mydataset/data 或 http://localhost:3030/mydataset/data?default。这将使用 SPARQL 图形存储协议 (w3.org/2012/01/http-rdf-update),它(使用 PUT 调用)替换整个数据集。如果你想使用 /update 端点,它只添加/更新给定的三元组,你可能需要使用 POST 作为 HTTP 方法。
http://localhost:3030/mydataset/data 作为 url 并得到 response[400],当我查看容器日志时,我发现:PUT http://localhost:3030/mydataset/data、PUT /mydataset :: 'data' :: [multipart/form-data] ?、400 Only files accepted in multipart file upload (got fileName=pizza.owl)。
如果你的 RDF 数据是海龟格式,你可以使用下面的代码:
data = open('test.ttl').read()
headers = {'Content-Type': 'text/turtle;charset=utf-8'}
r = requests.post('http://localhost:3030/mydataset/data?default', data=data, headers=headers)
如果你的 RDF 数据是其他格式,你应该改变你的标题,这里有一个列表:
n3: text/n3; charset=utf-8
nt: text/plain
rdf: application/rdf+xml
owl: application/rdf+xml
nq: application/n-quads
trig: application/trig
jsonld: application/ld+json
【讨论】:
我尝试使用 CURL、WGET、./s-post、./s-put 将文件上传到 fuseki,但没有任何效果。我在邮递员的帮助下生成了请求。如果有人像我一样正在寻找正确的 CURL 请求,就是这样:
curl --location --request POST 'http://{FUSEKIADDRESS}/{YOURDATASET}/data' --header 'Content-Type: multipart/form-data' --form 'file.ttl=@{}PATHtoFILE/file.ttl'
【讨论】: