AndyS 的回答是正确的,只要您目前正在检查是否?document
是某个特定的string。由于字符串(以及更普遍的文字)不能成为 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
}