我正在使用Jena执行下面的SPARQL查询,其中uriNode
是表示String
的{{1}},但此查询不会给我任何结果。我已经检查了数据库,那里确实存在URI
。有什么问题?
URI
答案 0 :(得分:3)
您正在测试?document
是否为字符串?uriNode
,而不是作为URI进行测试。
FILTER (?document = <" + uriNode + ">" )
答案 1 :(得分:1)
AndyS's answer是正确的,因为您目前正在检查?document
是否是某个特定的字符串。由于字符串(更一般地说,文字)不能成为RDF中三元组的主题,因此您永远不会以这种方式获得任何解决方案。您实际上需要检查它是否是特定的URI。你可以用这样的filter
来做到这一点
FILTER( ?document = <http://example.org/node> )
但这真的非常浪费,因为像下面这样的查询(基于你的查询)正在使用dc:creator
检索所有事物,然后投掷最多他们出去了。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?author WHERE {
?document dc:creator ?author.
FILTER (?document = <http://example.org/node> ).
}
字面就像向图书馆目录索取所有图书及其作者的列表一样,然后逐个浏览它们并丢弃除一本书以外的所有图书的结果。一个更有效的解决方案是询问你真正关心的事物dc:creator
,因为这只会选择你想要的数据,而且不需要做任何过滤:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?author WHERE {
<http://example.org/node> dc:creator ?author.
}
如果您需要,例如选择具有特定标题的文件,您可以执行类似的操作;使用这样的查询:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?document WHERE {
?document dc:title "Reply to Hayne" .
# or, if language tags are in use,
# ?document dc:title "Reply to Hayne"@en
}