我有一个介于5到100个属性之间的列表,并希望查询具有这些属性的任何实体(对值不感兴趣),大多数匹配。如何通过SPARQL查询实现这一目标?例如,假设我有以下属性:
dbpedia-owl:country
dbpedia-owl:elevation
dbpedia-owl:leader
dbpprop:area
dbpprop:flag
dbpprop:name
…
查询应返回具有所有这些属性值的所有资源,以及仅与某些属性匹配的资源。结果将涉及许多城市和国家,但它也应包括,例如,具有领导者和名称但不是旗帜,区域或海拔的组织。
答案 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
这样可以找到包含您枚举的任何属性的三元组,并为每个?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