2015-07-05 13 views
1

Я пытаюсь обновить репозиторий Sesame с данными из dbpedia. У меня есть следующий запрос:Репозиторий Sesame не обновляется с использованием INSERT, несмотря на отсутствие ошибки

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#> 

INSERT{?s ?p ?o} 

WHERE { 
SERVICE <http://dbpedia.org/sparql>{ 

{:Rotavirus_vaccine ?p ?o. 
} 
UNION 
{ 
?s ?p :Rotavirus_vaccine. 
} 
} 
} 

Этот запрос не показывает никаких ошибок, не обновляет репозиторий. С другой стороны, разделение UNION на два отдельных запроса и последующее обновление хранилища по одному. Почему запросы работают изолированно, но не в союзе? Код индивидуального запроса:

INSERT{:Rotavirus_vaccine ?p ?o}   
WHERE { 
SERVICE <http://dbpedia.org/sparql>{ 
{:Rotavirus_vaccine ?p ?o. 
} 
} 
} 

ответ

1

Я смог выполнить функциональный запрос, используя BIND для обоих предложений UNION. Код:

INSERT{?s ?p ?o} 
WHERE 
{ 
SERVICE <dbpedia.org/sparql> 
{ 
{:Rotavirus_vaccine ?p ?o. BIND(:Rotavirus_vaccine AS ?s)} 
UNION {?s ?p :Rotavirus_vaccine. BIND(:Rotavirus_vaccine AS ?o) } 
} 
} 
2

s р о все должны быть определены в строке для шаблона будет смысл??. Каждый раз, когда переменная не привязана, обновление не выполняется.

В одной ветви UNION,? S? P определены и в другом? P? O. Таким образом, все 3 не определены в одной строке.

Либо добавьте BIND или фильтр для например первой части:

{:Rotavirus_vaccine ?p ?o. BIND(:Rotavirus_vaccine AS ?s) } 

{?s ?p ?o. FILTER(?s = :Rotavirus_vaccine } 

или использовать этот

INSERT{:Rotavirus_vaccine ?p ?o. 
     ?s ?p :Rotavirus_vaccine. 
} 

потому, что именно один из тех, определяется для каждого конкретного случая.

+0

Спасибо, Энди. – kurious

+0

Не могли бы вы рассказать полный вопрос, Энди? Если вы используете троек, как вы упоминаете в INSERT, что входит в раздел WHERE? – kurious