SPARQL - 返回主题列表的相互对象

标签 sparql rdf wikidata

我如何在不知道这些主题的谓词/宾语的情况下获得所有谓词 + 宾语,它们由一个主题列表共享?
让我们看看维基数据中的这个示例查询:

SELECT ?chancellor WHERE{
    ?chancellor wdt:P39 wd:Q4970706. #P39 = position held, Q4970706 = Chancellor of Germany
}

Link to this query.

此查询返回德国所有前任总理。
现在我想返回每个谓词 + 对象,每个 chancellor 都有共同点 例如每个主题都是人类的实例,出生在德国等等。
我想这很容易。但是我不知道。

最佳答案

这是一个很好的。这是一个近乎成功的结果:

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix wd: <http://www.wikidata.org/entity/>

select ?p ?o (count(distinct ?chancellor) as ?cs) where {
    ?chancellor wdt:P39 wd:Q4970706.  
    ?chancellor ?p ?o .
}
group by ?p ?o
order by desc(?cs)

Link to query

这需要所有总理,以及他们的属性和值。它计算每个 prop/val 的大臣数量。

通过排序,您可以在顶部看到最常见的 prop/vals。

现在你要的只是所有议长的结果。我们可以很容易地在一个查询中获得总理的数量,并将两者结合在一起:

prefix wdt: <http://www.wikidata.org/prop/direct/>
prefix wd: <http://www.wikidata.org/entity/>

select ?p ?o where {
   {
       # Find number of chancellors 
       select (count(?chancellor) as ?num_chancellors) where { 
           ?chancellor wdt:P39 wd:Q4970706
       }
   }
   {
       # Find number of chancellors per predicate / value
       select ?p ?o (count(distinct ?chancellor) as ?chancellor_count) where {
           ?chancellor wdt:P39 wd:Q4970706.  
           ?chancellor ?p ?o .
       }
       group by ?p ?o 
   }
   # Choose results all chancellors share 
   filter (?num_chancellors = ?chancellor_count)
}

Link to query .

我认为这可以满足您的需求。不是很漂亮,我承认。

关于SPARQL - 返回主题列表的相互对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42475942/

相关文章:

sparql - 如何使用 SPARQL 在 Wikidata 上按属性过滤对象?

sparql - 通过 SPARQL 获取 Wikidata 实体描述,无需 Wikidata 标签服务

sparql - 查询内存不足的大型 RDF 数据集

xml - 大写和小写的 XML/RDF 标签名称之间有什么区别吗?

python - 从python中的嵌套字典创建层次树

rdf - 有没有像三节点结构那样不表示三元组的网络语义框架?

rdf - 具有COUNT和ORDER的SPARQL查询返回奇数结果

java - Sparql 删除语句 Jena OWL

sparql - 为什么此维基数据查询不选择荷兰省份

python - 如何查找具有维基数据代码 Q89 =>(apple) 的项目名称