如何从PHP在Sesame RDF存储库上执行SPARQL更新?

时间:2014-03-09 16:36:37

标签: php insert sparql sesame

您好我在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 ...

1 个答案:

答案 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,但粗略地说,您需要做的是:

  1. 打开与http://<host>:<port>/openrdf-sesame/repositories/<repositoryId>/statements的HTTP连接并创建新的POST请求。
  2. Content-Type标题设置为application/x-www-form-urlencoded
  3. 将参数update添加到请求正文,并将(表单编码的)SPARQL更新字符串作为其值。
  4. 触发POST请求。
  5. 如果更新正常执行,您将收到HTTP 204 NO CONTENT响应。