Запрос обновления SPARQL по локальным файлам

Я пытаюсь обновить локальные файлы rdf с помощью запросов SPARQL Update, используя jena arq. Ниже приведен код

GraphStore graphstore = GraphStoreFactory.create();
UpdateRequest req = UpdateFactory.create();
req.add("  PREFIX : myprefixuri  INSERT DATA { GRAPH file:///path-to-file/file.n3 { :person :name 'xyz'. } } ");
UpdateAction.execute(req, graphstore); 

После выполнения кода он сообщает, что запрос выполнен успешно, но локальный файл не обновляется.


person user1876683    schedule 04.12.2012    source источник


Ответы (2)


Я думаю, что ваша путаница возникает из-за использования имени файла в качестве имени графика:

INSERT DATA { GRAPH file:///path-to-file/file.n3

При этом данные не вставляются в файл с именем file.n3, они вставляются в граф с именем file:///path-to-file/file.n3. Этот график будет там, где его создаст хранилище графов, которое, как вы его настроили, будет объектом в памяти. Чтобы обновления сохранялись, вам нужно либо использовать хранилище графов, которое управляет постоянными графами, например, используя TDB, или вам нужно записать график на диск после обновления. Я предполагаю, что вам нужно последнее.

В настоящее время при написании RDF используются методы API на Model, который является фасадом для нижележащего объекта Jena Graph, но с дополнительными вспомогательными функциями, включая ввод-вывод. Итак, вам нужно получить ссылку на свой график из хранилища графиков, обернуть его как модель, а затем записать. Предупреждение - непроверенный код:

Node graphName = Node.createURI( "file:///path-to-file/file.n3" );
Graph g = graphstore.getGraph( graphName );
Model m = ModelFactory.createModelForGraph( g );
g.write( new FileWriter("/path-to-file/file.n3"), "Turtle" );
person Ian Dickinson    schedule 05.12.2012
comment
Бесконечно благодарен. Вы правы, мне не хватало части записи обновленного графика обратно в файл. - person user1876683; 06.12.2012
comment
@ user1876683 Если это решило вашу проблему, не забудьте принять ответ (щелкните галочку под подсчетом голосов) - person RobV; 07.12.2012

Вы создали магазин и загрузили в него свой файл, а затем выполнили обновление в своем магазине. Итак, ваш магазин успешно обновлен, но вы еще не экспортировали его содержимое обратно в файл.

person Jeen Broekstra    schedule 04.12.2012
comment
Спасибо за ответ, но не могли бы вы подсказать мне или какие-либо указатели на полный код, который выполняет запросы обновлений sparql, а также записывает обратно в файл? - person user1876683; 05.12.2012
comment
Я не эксперт по Йене, но полагаю, что ответ на этот вопрос можно найти в документации по Йене. См. jena.apache.org/documentation. - person Jeen Broekstra; 05.12.2012