Обновление RDF в Triplestore - PullRequest
9 голосов
/ 20 июня 2011

Я экспериментирую с триплетами «Сезам» и «Виртуоз».В данный момент я использую Java API Sesame для добавления RDF-данных в оба Triplestores.

Мои RDF-данные представляют разные вещи, такие как видеоданные, пользовательские данные и т. Д. В настоящее время я могу добавить RDF-видео (название, описание, местоположение и т. д.) в Triplestore

Но как я могу обновить RDF в магазине?

Например, если я использую интерфейс REST кунжута и делаю запрос PUT с обновленным RDFвсе в магазине удаляется первым.

Когда я использую POST с обновленными данными (например, изменился заголовок видео), сохраняются оба заголовка (старый и новый).

Как вы работаете с триплетами?Может быть, я здесь упускаю что-то важное.


РЕДАКТИРОВАТЬ:

Я использую сейчас контекст в кунжуте и графики в виртуозе для каждой записи RDF.Таким образом, для обновления я могу сначала очистить контекст и добавить его снова.Поскольку я использую Sesame API для обоих Triplestores (мы до сих пор не знаем, какой из них мы будем использовать), код выглядит точно так же.

ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);

спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

Я предполагаю, что вы работаете с SPARQL. Если нет, то вам, вероятно, следует: -)

Многие тройные хранилища поддерживают Обновление SPARQL , язык для изменения триплетов RDF в хранилище SPARQL. Это как SQL INSERT, UPDATE, DELETE и так далее. Я не уверен, поддерживает ли Sesame это еще - SPARQL Update - все еще очень новая спецификация, которая еще даже не завершена.

Еще одна полезная вещь, о которой следует знать, особенно если вы хотите работать RESTful, - это Именованные графы . Это позволяет управлять тройками на разных графиках, поэтому вы можете хранить данные отдельно. Например, вы можете хранить тройки для каждого видео в отдельном именованном графике, а затем обновлять только этот именованный график по запросу PUT. Вы все еще можете использовать SPARQL для запроса всего хранилища по всем именованным графам. Опять же, я не совсем уверен, предоставляет ли REST API Sesame доступ к именованным графам. (Я почти уверен, что API Java это делает; я думаю, они называют это чем-то другим. Контексты?)

2 голосов
/ 20 июня 2011

Итак, на вашем конкретном примере заголовка предполагается, что у вас есть оригинальный RDF, например:

:something :title "Original Title" .

И вы хотите изменить его на что-то вроде:

:something :title "Updated Title" .

Использование POST Сезама только добавляет новую информацию к названному графу (контекст в терминологии кунжута), важно it не удаляет любую существующую информацию.

В терминах RDF эти две тройки представляют разные факты. Кунжут (или любое другое в этом случае триплетное хранилище) не знает, что вторая тройка должна заменить первую. Это сильно отличается от традиционной SQL / реляционной модели, которую вы можете использовать для обновления свойства, RDF не имеет правильного представления об этом, поскольку вы не можете изменить тройку как таковую. Вы можете добавить новые тройки или удалить существующие тройки.

Чтобы получить желаемое поведение при обновлении, вы должны удалить старую тройку (для этого REST API Sesame поддерживает HTTP DELETE), а затем добавить новую тройку, которая ее заменяет (используйте операцию POST Sesame, как вы делаете сейчас).

То же самое можно сказать о любом тройном магазине, который вы используете. Если, как cyrgi предлагает использовать хранилище поддержки SPARQL Update, вы можете выдать следующее (предполагается, что вы используете именованные графики) для конечной точки обновления:

DELETE DATA 
{ 
  GRAPH <http://example.org/graph> { :something :title "Original Title" . }
};
INSERT DATA 
{
   GRAPH <http://example.org/graph> { :something :title "Updated Title" . }
}
...