Я пытаюсь запустить пример кода из библиотеки EasyRDF с Apache Jena Fuseki, но при вводе данных в базу данных возникает следующая ошибка:
Неустранимая ошибка: необработанное исключение «EasyRdf_Exception» с сообщением «HTTP
запрос
http: // localhost: 3030 / test / update? graph = http% 3A% 2F% 2Flocalhost% 3A3030% 2Ftest% 2Ftime.rdf
не удалось: должно быть приложение / sparql-update или
application / x-www-form-urlencoded (полученное приложение / n-triples) ‘в
D: \ Files \ XAMPP \ HTDOCS \ тест \ easyrdf-0.9.0 \ Lib \ EasyRdf \ GraphStore.php: 152
Трассировка стека: # 0
D: \ Files \ XAMPP \ HTDOCS \ тест \ easyrdf-0.9.0 \ Lib \ EasyRdf \ GraphStore.php (217):
EasyRdf_GraphStore-> sendGraph (‘POST’, Object (EasyRdf_Graph),
‘time.rdf’, ‘ntriples’) # 1
D: \ Files \ XAMPP \ HTDOCS \ тест \ graphstore.php (34):
EasyRdf_GraphStore-> insert (Object (EasyRdf_Graph), ‘time.rdf’) # 2
{главный} брошенный в
D: \ Files \ xampp \ htdocs \ test \ easyrdf-0.9.0 \ lib \ EasyRdf \ GraphStore.php в
линия 152
Следуйте коду:
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . '../lib/');
require_once "easyrdf-0.9.0/lib/EasyRdf.php";
?>
<html>
<head>
<title>GraphStore example</title>
</head>
<body>
<?php
// Use a local SPARQL 1.1 Graph Store (eg RedStore)
$gs = new EasyRdf_GraphStore('http://localhost:3030/test/update');
// Add the current time in a graph
$graph1 = new EasyRdf_Graph();
$graph1->add('http://example.com/test', 'rdfs:label', 'Test');
$graph1->add('http://example.com/test', 'dc:date', time());
$gs->insert($graph1, 'time.rdf');
// Get the graph back out of the graph store and display it
$graph2 = $gs->get('time.rdf');
print $graph2->dump();
?>
</body>
</html>
Благодарю.
Вы путаете Протокол SPARQL 1.1 и SPARQL 1.1 Graph Store HTTP протокол.
Разница в том, что последний не использует SPARQL-запросы для выполнения операций с RDF-графами.
Для каждого протокола Fuseki предоставляет два URI: для операций чтения и записи.
Таким образом, если вы хотите использовать SPARQL 1.1 Graph Store HTTP протокол, Вы должны написать:
$gs = new EasyRdf_GraphStore('http://localhost:3030/test/data');
вместо
$gs = new EasyRdf_GraphStore('http://localhost:3030/test/update');
Если вам нужно использовать Протокол SPARQL 1.1, напишите что-то вроде этого:
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'easyrdf-0.9.0/lib/');
require_once "EasyRdf.php";
$endpoint = new EasyRdf_Sparql_Client('http://localhost:3030/test/query',
'http://localhost:3030/test/update');
function insert_data() {
global $endpoint;
$result = $endpoint->update("PREFIX : <http://example.org/>
INSERT DATA {:alice :knows :bob. :alice :name 'alice'. :bob :name 'bob'}");
}
function insert_where() {
global $endpoint;
$result = $endpoint->update ("PREFIX : <http://example.org/>
INSERT {?s :loves ?o}
WHERE {?s :name 'bob'. ?o :name 'alice'}");
}
function select_where() {
global $endpoint;
$result = $endpoint->query("SELECT * WHERE {?s ?p ?o}");
print ($result->numRows());
}
insert_data(); select_where();
insert_where(); select_where();
?>
Источники:
Смотрите также этот ответ для некоторых деталей.
Других решений пока нет …