Blazegraph中删除含特定Subject的三元组时遇语法错误求助
修正SPARQL删除查询的方法
你的查询报错是因为混用了SPARQL Update语法:DELETE DATA用于删除明确指定的三元组,不能搭配WHERE子句;要基于条件删除,必须使用DELETE WHERE结构,同时要把目标图的范围限定在查询中。
正确的条件删除查询
prefix skos: <http://www.w3.org/2004/02/skos/core#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> DELETE { GRAPH <http://example.org/mapping> { ?s ?p ?o } } WHERE { GRAPH <http://example.org/mapping> { ?s ?p ?o } FILTER regex(str(?s), "omim") }
优化版本(执行效率更高)
如果确定要删除的Subject都是以https://www.omim.org/entry/开头的,用STRSTARTS替代正则表达式,查询速度会更快:
prefix skos: <http://www.w3.org/2004/02/skos/core#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> DELETE { GRAPH <http://example.org/mapping> { ?s ?p ?o } } WHERE { GRAPH <http://example.org/mapping> { ?s ?p ?o } FILTER STRSTARTS(str(?s), "https://www.omim.org/entry/") }
关键说明
DELETE块指定要删除的三元组模式,明确限定在目标图内WHERE块负责筛选符合条件的三元组:先匹配目标图中的所有三元组,再通过过滤器筛选Subject包含指定字符串的条目- 必须在
DELETE和WHERE中都指定目标图,确保只操作<http://example.org/mapping>图,不会影响其他图的数据
内容的提问来源于stack exchange,提问作者rshar
相关产品推荐
相关产品推荐

