我知道这是您之前问题的延续,使用 http://pt.dbpedia.org/resource/.. 等 URI 的查询是否应该与使用 http://dbpedia.org/resource/.. 等 URI 的查询不同? https://stackoverflow.com/q/20335898/1281433。如果您收到以下查询:
SELECT distinct ?label WHERE {
?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;
rdfs:label ?label .
filter( langMatches(lang(?label),"pt") )
}
那么你的uri
一定是http://pt.dbpedia.org/resource/Brasil
,所以你会(尝试)使用检索数据
Model model = ModelFactory.createDefaultModel().read( uri );
然后您尝试对已下载的本地数据运行 SPARQL 查询。正如我在上一个(链接)问题中提到的,我提供的查询旨在跨 SPARQL 端点运行;它们不是基于下载数据并在本地查询。
尝试像这样在本地下载数据是行不通的,如以下程序及其输出所示:
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class BrasilExample {
public static void main(String[] args) {
final Model model = ModelFactory.createDefaultModel().read( "http://pt.dbpedia.org/resource/Brasil" );
model.write( System.out );
}
}
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" >
</rdf:RDF>
如果您想下载一点数据并对其进行查询,请注意
-
http://pt.dbpedia.org/resource/Brasil http://pt.dbpedia.org/resource/Brasil重定向到
- http://pt.dbpedia.org/page/Brasil http://pt.dbpedia.org/page/Brasil
后一页底部有下载数据的链接,例如,
- http://pt.dbpedia.org:8890/data/Brasil.rdf http://pt.dbpedia.org:8890/data/Brasil.rdf
如果您要下载该文件,那么您的查询可能会起作用(但当然uri
将不再相同)。
不过,您在我之前的回答中使用的查询是为主要 DBpedia 端点设计的,而不是为葡萄牙端点设计的。您可以通过以下地址从主 DBpedia 下载巴西的数据:http://dbpedia.org/resource/巴西 http://dbpedia.org/resource/Brazil并遵循与上述相同的重定向和下载链接,但更好的选择是针对主 DBpedia 端点实际运行查询,http://dbpedia.org/sparql http://dbpedia.org/sparql,如下面的代码及其结果所示。
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
public class BrasilExample {
public static void main(String[] args) {
final String QUERY =
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n" +
"PREFIX owl: <http://www.w3.org/2002/07/owl#>\n" +
"\n" +
"SELECT distinct ?label WHERE {\n" +
" ?brasil owl:sameAs <http://pt.dbpedia.org/resource/Brasil> ;\n" +
" rdfs:label ?label .\n" +
" filter( langMatches(lang(?label),\"pt\") )\n" +
"}";
final String ENDPOINT = "http://dbpedia.org/sparql";
final ResultSet rs = QueryExecutionFactory.sparqlService( ENDPOINT, QUERY ).execSelect();
ResultSetFormatter.out( rs );
}
}
---------------
| label |
===============
| "Brasil"@pt |
| "Brazil"@pt |
---------------