Я догадываюсь , что ваша проблема в том, что это обновление добавляет новую тройку, но не удаляет старую.
Причина в том, что ваше предложение DELETE
содержитнесвязанная переменная: ?o
.Это недопустимо - или, по крайней мере, происходит то, что шаблоны с несвязанными переменными просто игнорируются механизмом SPARQL.Таким образом, ваш DELETE
фактически не удалит тройки.Переменная ?o
должна быть связана со значением в предложении WHERE
.
Один из способов исправить это - просто заменить ?o
на определенное значение:
DELETE {
?contactInfo vivo:freeTextValue5 "old_url"^^<http://www.w3.org/2001/XMLSchema#string> .
}
INSERT {
?contactInfo vivo:freeTextValue5 "new_url"^^<http://www.w3.org/2001/XMLSchema#string> .
}
WHERE {
?contactInfo vivo:freeTextValue5 "old_url"^^<http://www.w3.org/2001/XMLSchema#string> .
}
В более общем смысле вы можете использовать предложение VALUES
для привязки ?o
к значению, например так:
DELETE {
?contactInfo vivo:freeTextValue5 ?o.
}
INSERT {
?contactInfo vivo:freeTextValue5 "new_url"^^<http://www.w3.org/2001/XMLSchema#string> .
}
WHERE {
VALUES ?o { "old_url"^^<http://www.w3.org/2001/XMLSchema#string> }
?contactInfo vivo:freeTextValue5 ?o.
}
Это, пожалуй, лучший подход, поскольку он упрощает расширение вашего обновления на другиезначения для ?o
.