我正在尝试使用ARC2库在PHP中的SPARQL端点上执行INSERT。 这失败,错误“无法正确处理”PREFIX dc:“
SPARQL UPDATE查询来自W3C specification,在我的Jena-Fuseki控制面板上运行正常:
$query = '
PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA
{
<http://example/book007> dc:title "A new book" ;
dc:creator "A.N.Other" .
}
';
但即使没有PREFIX语句的查询变体只会导致类似的错误“无法正确处理”INSERT DATA {“在我的PHP代码中。
我的PHP代码如下:
include_once('./lib/arc2/ARC2.php');
$config = array(
//db
'db_name' => 'arc2',
'db_user' => 'root',
'db_pwd' => '-',
//store
'store_name' => 'arc_tests'
);
$store = ARC2::getStore($config);
if (!$store->isSetUp())
$store->setUp();
$res = $store->query($query);
echo var_dump($store->getErrors());
echo "<br><br>executed INSERT, returned: ";
echo var_dump($res);
此版本使用原生ARC2商店来减少潜在的错误来源。我实际上是想与远程商店进行互动:
$config = array( 'remote_store_endpoint' => 'http://localhost:3030/data/update', );
$store = ARC2::getRemoteStore($config);
然而,两者都给了我同样的错误。
最后,我想连接到Jena Fuseki服务器的远程 SPARQL端点,并以交互方式插入和检索PHP中的数据。如果您有任何其他库或干净的解决方案如何通过PHP中的SPARQL协议进行交互,我很乐意改变我的方法。
答案 0 :(得分:4)
看来,ARC2确实not support SPARQL 1.1 parsing。
相反,它仅支持UPDATE查询的简化SPARQL+。以下查询成功将新三元组插入ARC2存储区:
$query = 'INSERT DATA
{
<http://example/book1> dc:title "A new book" ;
dc:creator "A.N.Other" .
}';
不幸的是,使用这个有限的SPARQL +,似乎不可能通过我的Jena Fuseki实例上的远程存储进行UPDATE。 ARC2正在抱怨问题中给出的符合SPARQL 1.1的查询语法, 或Jena Fuseki抱怨似乎特定于ARC2的SPARQL +查询语法。
有什么建议吗?我发布了一个关于此问题的新问题:https://stackoverflow.com/questions/26858594/php-sparql-1-1-library-for-semantic-web-stack-php-sparql-jena-fuseki