首页 文章

带有 ARC2 PHP 库的 SPARQL INSERT

提问于
浏览
2

我试图使用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 回答

  • 4

    看来,ARC2 确实不支持 SPARQL 1.1 解析

    相反,它仅支持简化的SPARQL用于 UPDATE 查询。以下查询成功将新三元组插入 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

相关问题