Хранилище кунжута не обновляется с помощью INSERT, несмотря на отсутствие ошибок

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

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.
}
}
}

2 ответа

Решение

Мне удалось выполнить функциональный запрос, используя 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) } 
} 
}

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

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

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

{: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.
}

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

Другие вопросы по тегам