我想执行更新以删除RDF存储中两个节点之间的链接(谓词).链接是双向的(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
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法建立一个唯一的查询,而不是改变谓词之间可能存在的其他链接(又名:谓词)?
我厌倦了; 分离查询,并将其作为单个命令发送到芝麻存储(正如您有时在SQL中所做的那样),但它不起作用.
不能写这个作为对前一个答案的评论悲伤地...
你可以写
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 }
}
}
Run Code Online (Sandbox Code Playgroud)
它更加冗长,因为你不能在DELETE WHERE中使用OPTIONAL,但它的效率不应该低得多.
注意,您也可以将SPARQL Update操作与a分开; 并在一个请求中发送它们,这应该会得到相同的行为.