是否可以将这两个SPARQL更新查询合并为一个?

bla*_*box 3 rdf sesame sparql

我想执行更新以删除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中所做的那样),但它不起作用.

Ste*_*ris 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 }
  }
}
Run Code Online (Sandbox Code Playgroud)

它更加冗长,因为你不能在DELETE WHERE中使用OPTIONAL,但它的效率不应该低得多.

注意,您也可以将SPARQL Update操作与a分开; 并在一个请求中发送它们,这应该会得到相同的行为.