如何按BlankNode ID进行过滤

时间:2019-03-31 12:05:37

标签: filter sparql graphdb blank-nodes

我正在尝试在 GraphDB 上的SPARQL游乐场中运行此查询。

select * where { 
    ?s content:value ?value .
    FILTER REGEX(str(?value), "_:x1697BD364N0abcdd866d54")
} 

?value是BNodes

我正在尝试过滤BNode ID为以下所有值: _:x1697BD364N0abcdd866d54

我尝试了几种不同的方式来过滤ID:

  1. FILTER REGEX(str(?value), "#bnode-id")
  2. FILTER (?value), "#bnode-id")

但没有一个成功。

问题:

  1. 您如何根据bnode ID进行过滤?
  2. 是否可以 STR(bnode)

1 个答案:

答案 0 :(得分:3)

See 标签信息。简而言之,不能依赖SPARQL查询中的空白节点标签:

  

结果集中的标签_:a与具有相同标签的数据图中的空白节点之间不必存在任何关系。

     

应用程序编写者不应期望查询中的空白节点标签引用数据中的特定空白节点。

如果很难通过SPARQL中的空白节点的属性等来区分空白节点,则可以使用GraphDB的内部资源标识符。

PREFIX ent: <http://www.ontotext.com/owlim/entity#>
SELECT * {
    ?s content:value ?value .
    ?s ent:id ?id .
    FILTER (?id = 424242)
}

PREFIX ent: <http://www.ontotext.com/owlim/entity#>
SELECT * {
    ?s content:value ?value 
    BIND (ent:id(?s) AS ?id)
    FILTER (?id = 424242)
}