使用像http://pt.dbpedia.org/resource/ ..这样的URI的查询是否应该与URI类似http://dbpedia.org/resource/ ..的查询不同?

时间:2013-12-02 19:06:41

标签: rdf sparql jena semantic-web dbpedia

我正在进行SPARQL查询:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?label WHERE { 
<http://pt.dbpedia.org/resource/Brasil> rdfs:label ?label.}

我没有得到?text的任何结果。我在浏览器上检查了该URI,并在那里找到了rdfs:label属性。这个问题是由URI格式http://pt.dbpedia.org/引起的吗? 我已经使用与http://dbpedia.org/resource/开头的IRI相同的查询,例如http://dbpedia.org/resource/Google,这些都有效。我正在使用Jena,并且可以提供显示我如何取消引用IRI的代码。

1 个答案:

答案 0 :(得分:4)

如果我针对Portuguese DBpedia SPARQL endpointhttp://pt.dbpedia.org/sparql)运行您的查询,我会得到您想要的结果(“Brasil”):

SELECT ?label WHERE { 
  <http://pt.dbpedia.org/resource/Brasil> rdfs:label ?label.
}

SPARQL results(一)

main (English) DBpedia SPARQL endpointhttp://dbpedia.org/sparql)运行相同的查询,但是没有结果。

SELECT ?label WHERE { 
  <http://pt.dbpedia.org/resource/Brasil> rdfs:label ?label.
}

SPARQL results(无)

看起来您需要确保查询正确的端点。但是,在主SPARQL端点上,您可以询问葡萄牙语DBpedia中owl:sameAs Brasil资源的内容。例如,

SELECT ?label WHERE { 
  ?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;
          rdfs:label ?label .
}

SPARQL results(很多)

但是,这会给你很多结果,因为你得到了很多不同语言的名字。你可以用葡萄牙语询问标签(你可能想在这里添加distinct),你可以得到“巴西”和“巴西”:

SELECT distinct ?label WHERE { 
  ?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;
          rdfs:label ?label .
  filter( langMatches(lang(?label),"pt") )
}

SPARQL results(两个)