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

时间:2011-11-30 08:01:33

标签: rdf sparql sesame

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

2 个答案:

答案 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 .
  }
}

请注意,这只会删除存在这两者的情况,但听起来就是数据中的情况。

相关问题