我试图使用ARC2库在 PHP 中的 SPARQL 端点上执行 INSERT。这失败,错误“无法正确处理”PREFIX dc:“
SPARQL UPDATE 查询取自W3C 规范并在我的 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 协议进行交互,我很乐意改变我的方法。
1 回答
看来,ARC2 确实不支持 SPARQL 1.1 解析。
相反,它仅支持简化的SPARQL用于 UPDATE 查询。以下查询成功将新三元组插入 ARC2 存储中:
不幸的是,使用这个有限的 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