Обновление SPARQL в Sesame не работает

Я пытаюсь добавить тройку в свой репозиторий Sesame, используя функцию обновления SPARQL. Заявление выглядит следующим образом:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX my_namespace: <http://purl.org/net/ontology_name/my_namespace/>

INSERT {my_namespace:Rota owl:sameAs ?o}
WHERE
{my_namespace:Rota owl:sameAs :Rotavirus_vaccine}

Запрос выполняется, но тройки не добавляются в репозиторий. Что мне нужно сделать по-другому?

Этот вопрос отличается от вопроса в репозиторий Sesame не обновлено с помощью INSERT, несмотря на отсутствие ошибок. В этом вопросе я не добавляю никаких внешних данных. my_namespace:Rota и :Rotavirus_vaccine (из dbpedia) уже существуют в тройном магазине. Я хочу утверждать, что my_namespace:Rota — это тот же объект, что и :Rotavirus_vaccine, так что первый может наследовать всю информацию, связанную со вторым в dbpedia.


person kurious    schedule 06.07.2015    source источник
comment
То же, что и stackoverflow.com/questions/31234300   -  person AndyS    schedule 06.07.2015
comment
Я попробовал следующий код, но он не работает: INSERT{?s ?p ?o} WHERE { my_namespace:Rota owl:sameAs :Rotavirus_vaccine. BIND(my_namespace:Rota AS ?s) } Пожалуйста, дайте мне знать, что мне нужно изменить.   -  person kurious    schedule 06.07.2015
comment
См. другой вопрос, который объясняет, что происходит.   -  person AndyS    schedule 07.07.2015
comment
Я не уверен, что понимаю, почему приведенный выше запрос не работает. Этот вопрос немного отличается от другого. Здесь my_namespace:Rota и :Rotavirus_vaccine (получено из DBpedia) уже существуют в репозитории. В другом вопросе я получал информацию из DBpedia для добавления в репозиторий. По сути, я пытаюсь утверждать, что my_namespace:Rota — это то же самое, что и :Rotavirus_vaccine, так что первый может наследовать свойства последнего. Как установить такие отношения в репозитории?   -  person kurious    schedule 07.07.2015


Ответы (1)


Понятно! При вводе полной тройки (т. е. без переменных) предполагается использовать INSERT DATA вместо INSERT. Это из документации SPARQL:

«Разница между INSERT / DELETE и INSERT DATA / DELETE DATA заключается в том, что INSERT DATA и DELETE DATA не используют шаблон и шаблон. Формы DATA требуют конкретных данных (без именованных переменных). Наличие определенных операций означает, что запрос может быть потоковым чтобы можно было делать большие обновления с чистыми данными». Код:

PREFIX my_namespace: <http://purl.org/net/ontology_name/my_namespace/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX : <http://dbpedia.org/resource/>

INSERT DATA {my_namespace:Rota owl:sameAs :Rotavirus_vaccine}
person kurious    schedule 07.07.2015