我想执行更新以删除RDF Store中两个节点之间的链接(谓词)。链接是双向的(skos:narrower,skos:wide)。我想做一个独特的查询,以确保在一个独特的操作中删除这两个链接。
目前,我正在使用这两个查询(两个?term和?parentTerm将在执行时绑定特定的URI):
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DELETE
WHERE{
GRAPH ?graph {
?term skos:broader ?parentTerm
}
}
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DELETE
WHERE{
GRAPH ?graph {
?parentTerm skos:narrower ?term
}
}
有没有办法建立一个唯一的查询,而不是改变谓词之间可能存在的其他链接(又名:谓词)?
我厌倦了;分离查询,并将其作为单个命令发送到芝麻存储区(正如您在SQL中有时所做的那样),但它不起作用。
答案 0 :(得分:7)
不能写这个作为对上一个答案的评论,遗憾地......
你可以写
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DELETE {
GRAPH ?graph {
?term skos:broader ?parentTerm .
?parentTerm skos:narrower ?term .
}
}
WHERE {
GRAPH ?graph {
OPTIONAL { ?term skos:broader ?parentTerm }
OPTIONAL { ?parentTerm skos:narrower ?term }
}
}
由于你不能在DELETE WHERE中使用OPTIONAL,所以它更加冗长,但它的效率不会太低。
注意,您也可以将SPARQL Update操作与a分开;并在一个请求中发送它们,这应该会让你有同样的行为。
答案 1 :(得分:4)
您可以将两种三重模式合并为一个查询:
PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DELETE
WHERE{
GRAPH ?graph {
?term skos:broader ?parentTerm .
?parentTerm skos:narrower ?term .
}
}
请注意,这只会删除存在这两者的情况,但听起来就是数据中的情况。