3

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

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

?value是 BNode

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

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

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

但没有一个是成功的。

问题:

  1. 您将如何根据 bnode id 进行过滤?
  2. 可以STR(bnode)吗?
4

1 回答 1

4
  1. 您将如何根据 bnode id标签进行过滤?

查看标签信息。简而言之,不能依赖 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)
}

  1. 有可能STR(bnode)吗?

不,从17.4.2.5 str 开始

simple literal  STR (literal ltrl)
simple literal  STR (IRI rsrc)

ltrl返回(a literal)的词法形式;返回rsrc(一个 IRI)的代码点表示。

于 2019-03-31T20:48:06.500 回答