2015-05-06 84 views
0

鉴于图http://example.org/为:显然是不必要的SPARQL筛选

@prefix foaf:<http://xmlns.com/foaf/0.1/purl>. 
<uri:alice> foaf:name "Alice". 
<uri:bob> foaf:name "Bob". 
<uri:carl> foaf:name "Carl". 

为什么这个SPARQL查询工作:

PREFIX foaf:<http://xmlns.com/foaf/0.1/purl> 
SELECT * 
WHERE { 
    GRAPH <http://example.org/> { 
     ?model_ic foaf:name ?name. 
     FILTER (?name = "Bob") 
    } 
} 

而这一个没有(当然,从技术上它的工作原理,但返回0匹配)

PREFIX foaf:<http://xmlns.com/foaf/0.1/purl> 
SELECT * 
WHERE { 
    GRAPH <http://example.org/> { 
     ?model_ic foaf:name "Bob". 
    } 
} 
+0

也许...因为你有一个错字? 如何在第二个SPARQL上更改“bob”=>“Bob”? –

+0

非常感谢您的支持,但这不是问题所在。 – ffa

回答

1

如果有任何其他名称的附件而只有字符串,您可能会遇到问题。例如,foaf:name通常附有一种语言。试试:

PREFIX foaf:<http://xmlns.com/foaf/0.1/purl> 
SELECT * 
WHERE { 
GRAPH <http://example.org/> { 
    ?model_ic foaf:name "Bob"@en. 
} 
} 
+1

谢谢,我已经手动使用了命令INSERT {GRAPH {foob:name“Bob”}}'手动添加一个可识别的三元组,现在它按预期工作。 – ffa

+0

我试着运行一个查询,比如'SELECT?b?c WHERE {foob:name?name。 ?name?b?c}'突出显示任何可能的@标记,但似乎再次无法工作。我该怎么做? – ffa

+0

您是否尝试过他提供的查询?而当你有'namespace:bob'时,你不需要'<>'。您需要查找元素的URI,然后查找有关该元素的所有信息。 – Artemis