我正在此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
如何更正我的查询,以便结果包括以下记录:
答案 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