说我需要从维基百科中获取有关所有山脉的内容。我的目标是显示初始段落和相应文章中的图像(例如Monte Rosa和Vincent Pyramid。
我开始了解dbpedia,并且通过一些研究发现它直接向wiki数据库提供实时查询。
我有两个问题:
1 - 我发现如何制定查询很困难。我不能玩iSPARQL。我尝试了以下查询,但它抛出错误说无效的xml。
SELECT DISTINCT ?Mountain FROM <http://dbpedia.org> WHERE {
[] rdf:type ?Mountain
}
2 - 我的要求是仅显示至少有1张图像的山脉(我也需要显示此图像)。现在我上面列出的那些有图像,但我怎么能确定?另外,看看这两个例子,我看到许多字段在维基文章中有所不同 - 因此对于将来的扩展,可能很难获取它们。
我只想拒绝那些没有足够数据或描述的人。
如何根据存在的图片过滤掉山脉?
更新
我更正的查询,解决了我的第一个问题:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?name ?description
WHERE {
?name rdf:type <http://dbpedia.org/ontology/Mountain>;
dbpedia-owl:abstract ?description .
}
答案 0 :(得分:3)
您还可以使用SPARQL endpoint查询dbpedia(比iSPARQL更不像花哨)。要了解有关要编写的查询的更多信息,请查看DBpedia's datasets page。这里的例子展示了如何根据维基百科类别选择页面。要选择Wikipedia Mountains category中的资源,您可以使用以下查询:
select ?mountain where {
?mountain a dbpedia-owl:Mountain .
}
掌握了这些链接之后,您可以在Web浏览器中查看它们并查看与它们相关的数据。例如,Mount Everest的页面显示了许多属性。要将结果限制为具有图像的页面,您可能会对dbpedia-owl:thumbnail
属性感兴趣,或者可能更好foaf:depiction
。对于介绍性段落,您可能需要类似dbpedia-owl:abstract
的内容。使用这些,我们可以从以前增强查询。以下查询使用抽象和描述在Stratovolcanoes类别中查找事物。由于StackOverflow是一个英语网站,我将这些摘要限制为英文版。
select * where {
?mountain a dbpedia-owl:Mountain ;
dbpedia-owl:abstract ?abstract ;
foaf:depiction ?depiction .
FILTER(langMatches(lang(?abstract),"EN"))
}
LIMIT 10