Fuseki 的 SPARQL 插入不工作
SPARQL insert with Fuseki not working
我正在使用从 Java 应用程序嵌入的 fuseki :
Dataset ds = DatasetFactory.createTxnMem() ;
FusekiEmbeddedServer server = FusekiEmbeddedServer.create()
.setPort(3333)
.add("/ds", ds, true)
.build() ;
server.start() ;
查询端点工作正常,我可以执行 SELECT 请求。但是,当我想插入值时,它会 return 一个 204 HTTP 代码,但没有数据被添加到图表中。这是我所做的:
PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}
<Response [204]>
然后我 select 一切都看它是否有效 :
SELECT DISTINCT * WHERE {?s ?q ?o}
我得到
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="s"/>
<variable name="q"/>
<variable name="o"/>
</head>
<results>
</results>
</sparql>
在客户端,我有一个基本的 python 脚本:
port = 3333
test_add = 'PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}'
try :
print requests.post("http://localhost:"+str(port)+"/ds", data={'update': test_add})
print urllib2.urlopen("http://localhost:"+str(port)+"/ds?query=SELECT%20DISTINCT%20*%20WHERE%20{?s%20?q%20?o}").read()
except Exception as e :
print e
这个 python 脚本现在可以工作了,它是根据下面的答案改编的。
这可能不是一个好的答案,但只是想告诉你它对我有用。
Jena Fuseki 2.6.0
启动嵌入式服务器
public class FusekiTestServer {
public static void main(String[] args) {
Dataset ds = DatasetFactory.createTxnMem() ;
FusekiEmbeddedServer server = FusekiEmbeddedServer.create()
.setPort(3333)
.add("/ds", ds, true)
.build() ;
server.start() ;
}
}
插入数据
请求
curl --request POST http://localhost:3333/ds --data-urlencode 'update=PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}'
输出
<html>
<head>
</head>
<body>
<h1>Success</h1>
<p>
Update succeeded
</p>
</body>
</html>
查询数据
请求
curl --request GET http://localhost:3333/ds --data-urlencode 'query=SELECT DISTINCT * WHERE {?s ?q ?o}'
输出
<http://example/book3>
<http://purl.org/dc/elements/1.1/title>
"A new book" .
诊断
我不是 Python 专家,但不应该将查询字符串放入数据数组中,因为它是 POST 请求吗?像
requests.post("http://localhost:"+str(port)+"/ds, data={'update': 'PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}'})
我正在使用从 Java 应用程序嵌入的 fuseki :
Dataset ds = DatasetFactory.createTxnMem() ;
FusekiEmbeddedServer server = FusekiEmbeddedServer.create()
.setPort(3333)
.add("/ds", ds, true)
.build() ;
server.start() ;
查询端点工作正常,我可以执行 SELECT 请求。但是,当我想插入值时,它会 return 一个 204 HTTP 代码,但没有数据被添加到图表中。这是我所做的:
PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}
<Response [204]>
然后我 select 一切都看它是否有效 :
SELECT DISTINCT * WHERE {?s ?q ?o}
我得到
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="s"/>
<variable name="q"/>
<variable name="o"/>
</head>
<results>
</results>
</sparql>
在客户端,我有一个基本的 python 脚本:
port = 3333
test_add = 'PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}'
try :
print requests.post("http://localhost:"+str(port)+"/ds", data={'update': test_add})
print urllib2.urlopen("http://localhost:"+str(port)+"/ds?query=SELECT%20DISTINCT%20*%20WHERE%20{?s%20?q%20?o}").read()
except Exception as e :
print e
这个 python 脚本现在可以工作了,它是根据下面的答案改编的。
这可能不是一个好的答案,但只是想告诉你它对我有用。
Jena Fuseki 2.6.0
启动嵌入式服务器
public class FusekiTestServer {
public static void main(String[] args) {
Dataset ds = DatasetFactory.createTxnMem() ;
FusekiEmbeddedServer server = FusekiEmbeddedServer.create()
.setPort(3333)
.add("/ds", ds, true)
.build() ;
server.start() ;
}
}
插入数据
请求
curl --request POST http://localhost:3333/ds --data-urlencode 'update=PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}'
输出
<html>
<head>
</head>
<body>
<h1>Success</h1>
<p>
Update succeeded
</p>
</body>
</html>
查询数据
请求
curl --request GET http://localhost:3333/ds --data-urlencode 'query=SELECT DISTINCT * WHERE {?s ?q ?o}'
输出
<http://example/book3>
<http://purl.org/dc/elements/1.1/title>
"A new book" .
诊断
我不是 Python 专家,但不应该将查询字符串放入数据数组中,因为它是 POST 请求吗?像
requests.post("http://localhost:"+str(port)+"/ds, data={'update': 'PREFIX dc: <http://purl.org/dc/elements/1.1/>INSERT DATA{ <http://example/book3> dc:title "A new book"}'})