您好我在php语言中插入数据有问题。我正在使用库sparqllib.php来连接和使用php中的sparql。我想插入一些东西。我正在尝试这个:
sparql_ns( "dc","http://purl.org/dc/elements/1.1/" );
$sparql = "INSERT DATA{ <http://example/authorsID>
dc:written '".$paper."' ;
dc:label '".$paper."'.}";
$result = sparql_query( $sparql );
if( !$result ) { print sparql_errno() . ": " . sparql_error(). "\n"; exit; }
else {
print_r ($result);
}
但它不起作用......它给了我这个输出:
400:响应错误,400:MALFORMED QUERY:在第2行第1列遇到“”插入“”INSERT“”。 期待以下之一: “基地”...... “字首” ... “选择” ... “构建”...... “描述”...... “问”......
当我在存储库中使用此SPARQL时 - SPARQL更新:
PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA
{ <http://example/authorsID> dc:written "paperID" ;
dc:label "A.N.Other" .
}
那么它有效...我不知道如何解决它...任何想法?我想在格式中插入三元组:name-have paper-paper ...
答案 0 :(得分:2)
您用于连接到Sesame的库错误地假定查询的SPARQL端点与更新的端点相同。不是这种情况。在Sesame Server中,查询端点为:
http://<host>:<port>/openrdf-sesame/repositories/<repositoryId>
但 update 端点是:
http://<host>:<port>/openrdf-sesame/repositories/<repositoryId>/statements
您需要了解是否有办法在该库中设置单独的更新终结点URL。如果没有,它也可能表示您尝试使用的PHP库根本不是最新的:它可能不支持SPARQL更新。在这种情况下,请与其开发人员联系,或切换到其他PHP库。
编辑您当然也可以“手动”完全执行SPARQL更新(因此不使用任何PHP RDF库),只需执行直接的HTTP POST操作即可。作为参考,请参阅Sesame HTTP protocol documentation,特别是section on updating statements,但粗略地说,您需要做的是:
http://<host>:<port>/openrdf-sesame/repositories/<repositoryId>/statements
的HTTP连接并创建新的POST请求。Content-Type
标题设置为application/x-www-form-urlencoded
update
添加到请求正文,并将(表单编码的)SPARQL更新字符串作为其值。如果更新正常执行,您将收到HTTP 204 NO CONTENT
响应。