查询具有给定属性集的实体的DBPedia

时间:2014-02-12 13:19:07

标签: java rdf sparql semantic-web dbpedia

我有一个介于5到100个属性之间的列表,并希望查询具有这些属性的任何实体(对值不感兴趣),大多数匹配。如何通过SPARQL查询实现这一目标?例如,假设我有以下属性:

dbpedia-owl:country
dbpedia-owl:elevation
dbpedia-owl:leader
dbpprop:area
dbpprop:flag
dbpprop:name
…

查询应返回具有所有这些属性值的所有资源,以及仅与某些属性匹配的资源。结果将涉及许多城市和国家,但它也应包括,例如,具有领导者和名称但不是旗帜,区域或海拔的组织。

1 个答案:

答案 0 :(得分:3)

这是一种昂贵的编写查询,但它非常简单。你需要这样的东西:

select ?subject (count(?property) as ?numProperties) where {
  values ?property {
    dbpedia-owl:country dbpedia-owl:elevation
    dbpedia-owl:leader dbpprop:area dbpprop:flag
    dbpprop:name
  }
  ?subject ?property ?object 
}
group by ?subject 
order by desc(?numProperties)
limit 10

SPARQL results

query results

这样可以找到包含您枚举的任何属性的三元组,并为每个?subject计算有值的属性数,并将其称为?numProperties,并显示结果由?numProperties排序(首先是最大数量的属性)。

这些数字看起来相当高,但这是因为这些列表页面具有为某些属性定义的 lot 值。例如,List of Advanced Dungeons & Dragons 2nd edition monsters确实有一大堆dbpprop:name值:

select (count(distinct ?name) as ?numNames) where { 
  <http://dbpedia.org/resource/List_of_Advanced_Dungeons_&_Dragons_2nd_edition_monsters> 
    dbpprop:name ?name
}
  

1971

SPARQL results