SPARQL查询以获取特定uri的信息

SPARQL查询以获取特定uri的信息,sparql,dbpedia,Sparql,Dbpedia,我想获取具有特定uri()的页面的id(或者其他信息)。我试过这些:(都不管用) select?id在哪里{ ?id} 选择?uri?id,其中{?uri?id。 筛选器(?uri=)} 有什么建议吗?DBPedia中的实际资源标识符是http://dbpedia.org/resource/Weight_gain。您正在使用的URL(使用/page/而不是/resource/)就是HTML表示的URL。它不是通过SPARQL查询时应该使用的URI 这应该可以做到: SELECT ?uri ?

我想获取具有特定uri()的页面的id(或者其他信息)。我试过这些:(都不管用)

select?id在哪里{
?id}
选择?uri?id,其中{?uri?id。
筛选器(?uri=)}

有什么建议吗?

DBPedia中的实际资源标识符是
http://dbpedia.org/resource/Weight_gain
。您正在使用的URL(使用
/page/
而不是
/resource/
)就是HTML表示的URL。它不是通过SPARQL查询时应该使用的URI

这应该可以做到:

 SELECT ?uri ?id 
 WHERE {
     ?uri <http://dbpedia.org/ontology/wikiPageID> ?id.
     FILTER (?uri = <http://dbpedia.org/resource/Weight_gain>) 
 }
SELECT?uri?id
在哪里{
?uri?id。
过滤器(?uri=)
}

但是请注意,这不是编写该查询的最佳方式。最好是
select?uri?id{values?uri{}?uri?id}
@JoshuaTaylor我不同意这是“最好的方法”,这取决于SPARQL引擎以及它如何规划/优化其查询。我故意留下了过滤器,以便与OPs最初的问题保持最接近——对我来说,关于查询优化的全面讨论似乎有点超出了范围。是的,用绝对的方式说话可能是不合适的。我的观点是,从概念上讲,使用
filter
的查询检索
上的所有三元组(其中DBpedia中有13494818个),然后检查每个三元组以过滤掉除
之外的任何内容。另一方面,带有
值的查询显示“让uri成为
并检索?id,以便
?id
”(DBpedia上只有一个值)。我知道您知道这一点,但我之所以包含讨论,是为了其他可能不理解我们前面评论意图的人。我知道在这种情况下,大多数优化器都会做同样的事情,但如果您开始执行
filter(?uri=…| |?uri=…)
filter(?.uriin(…)
,这就不那么明显了。我通常会说,更明确地说明正在为人类读者和端点提供常量的事实是一种更清晰的做法,并且会更好地处理不太复杂的端点。公平地说,我的评论不是“不关你的事”类型的东西:)。我希望会有一个现有的问题,在其中一个答案中探讨了这个主题,但我找不到任何答案。相反的呢?使用该ID以获取url@HaniGoc如果您有后续问题,请作为新问题提问。有关如何在此处提出好问题的更多信息,请参阅。
 SELECT ?uri ?id 
 WHERE {
     ?uri <http://dbpedia.org/ontology/wikiPageID> ?id.
     FILTER (?uri = <http://dbpedia.org/resource/Weight_gain>) 
 }