dbpedia sparql给我的查询提供了空结果,怎么了?

时间:2019-05-23 17:57:42

标签: sparql dbpedia

我正在此site中进行sparql查询。 它给我一个空结果,我的查询出了什么问题?

prefix foaf:    <http://xmlns.com/foaf/0.1/>
select * where {
?s rdf:type foaf:Person.

} LIMIT 100

此查询可以,但是当我添加第二个模式时,结果为空。

?s foaf:name 'Abraham_Robinson'.

prefix foaf:    <http://xmlns.com/foaf/0.1/>
select * where {
?s rdf:type foaf:Person.
?s foaf:name 'Abraham_Robinson'.
} LIMIT 100

如何更正我的查询,以便结果包括以下记录:

http://dbpedia.org/resource/Abraham_Robinson

2 个答案:

答案 0 :(得分:0)

以下查询应该起作用。目前,由于需要刷新与此实例相关联的文本索引(当前正在进行中),它​​无法正常工作:

PREFIX foaf:    <http://xmlns.com/foaf/0.1/>
SELECT * where {
?s rdf:type foaf:Person.
?s foaf:name "'Abraham_Robinson'".
} 
LIMIT 100

请注意如何将该短语放在双引号内的单引号中。

SPARQL Results Page Link应该在索引更新完成后产生解决方案。

答案 1 :(得分:0)

我想Kingsley会将其误读为自由文本搜索,而不是简单的字符串比较。

The query Kingsley posted并链接到较早的delivers no solution,其原因与原始查询失败的原因相同,正如AKSW在注释中指出的,即-

  • foaf:name值通常不会像原始值那样用下划线替换空格;即'Abraham_Robinson'应该是'Abraham Robinson'
  • foaf:name字符串通常带有标记,在这种情况下,因此实际上需要为'Abraham Robinson'@en

结合了AKSW的修订with this line ?s foaf:name 'Abraham Robinson'@en.query works

所有这些-您可能更喜欢替代查询,无论foaf:name值是否被标记且空格是否由下划线代替,该查询都将提供结果。 This one是特定于Virtuoso的,而produces results faster是因为bif:contains函数使用其自由文本索引,因此将是-

PREFIX  foaf:  <http://xmlns.com/foaf/0.1/>
SELECT * 
WHERE
  {
    ?s     rdf:type      foaf:Person ;
           foaf:name     ?name .
    ?name  bif:contains  "'Abraham Robinson'" . 
  } 
LIMIT 100

Generic SPARQL using a REGEX FILTER对Virtuoso和其他RDF存储都有效,但是produces results more slowly因为REGEX不利用自由文本索引,如-

PREFIX  foaf:  <http://xmlns.com/foaf/0.1/>
SELECT * 
WHERE
  {
    ?s     rdf:type      foaf:Person ;
           foaf:name     ?name .
    FILTER ( REGEX ( ?name, 'Abraham Robinson' ) ) . 
  } 
LIMIT 100