我需要一些帮助来编写更新查询。
DELETE {
?contactInfo vivo:freeTextValue5 ?o .
}
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> .
}
能否让我知道此“更新”查询出了什么问题?
答案 0 :(得分:0)
我猜测,您的问题是此更新添加了一个新的三元组,但没有删除旧的三元组。
原因是您的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
的不同值。