Как фильтровать по идентификатору BlankNode - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь выполнить этот запрос на игровой площадке SPARQL на GraphDB .

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

?value являются BNodes

Я пытаюсь отфильтровать все значения с идентификатором BNode: _: x1697BD364N0abcdd866d54

Я пробовал несколько разных способов фильтрации по ID:

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

но ни один не удался.

Вопросы:

  1. Как бы вы фильтровали на основе идентификатора bnode?
  2. Возможно ли STR (bnode) ?

1 Ответ

3 голосов
/ 31 марта 2019

См. информация тега. Короче говоря, нельзя полагаться на пустые метки узлов в запросах 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)
}
...