维基数据查询未给出预期结果

时间:2017-02-21 02:49:03

标签: sparql wikidata

我想让那些没有结婚的父母(父母不是彼此配偶财产)的人,所以我写下面的查询

SELECT ?human ?father ?mother ?someone ?humanLabel ?fatherLabel ?motherLabel ?someoneLabel WHERE {
  ?human wdt:P31 wd:Q5.
  ?human wdt:P22 ?father.
  ?human wdt:P25 ?mother.
  ?father wdt:P26 ?someone.
  FILTER (?mother != ?someone)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
 }limit 100

然后我发现如果一个人有几个配偶,那么结果会给我带来很多垃圾。以Q15904745为例,他的父亲(Q198042)有2个配偶记录,他的母亲(Q16603522)是配偶之一,但他的信息仍然会返回,我不想包括这个。

我想问一下如何更改查询以获得我想要的内容?以下是维基数据端点的link

2 个答案:

答案 0 :(得分:1)

如果有this

    SELECT distinct ?human ?father ?mother ?someone ?humanLabel ?fatherLabel ?motherLabel 
WHERE {
  ?human wdt:P31 wd:Q5.
  ?human wdt:P22 ?father.
  ?human wdt:P25 ?mother.
  FILTER (NOT EXISTS {?father wdt:P26 ?mother }) .
  FILTER (NOT EXISTS {?mother wdt:P26 ?father }) .  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
 }
order by ?humanLabel
limit 100

答案 1 :(得分:1)

我认为这可以做你想要的。

    SELECT ?human ?father ?mother  ?humanLabel ?fatherLabel ?motherLabel  WHERE {
  ?human wdt:P31 wd:Q5.
  ?human wdt:P22 ?father.
  ?human wdt:P25 ?mother.
  MINUS {?mother wdt:P26 ?father.}

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
 }limit 100

它将排除所有父母曾经结婚的人。但是,我不能声称已经彻底测试过它。