如何查询美国总统的维基数据?

How to Query Wikidata for US persidents?

如何在维基数据中查询 1970 年后开始担任总统且至少有一个女儿的美国总统?

我知道如何查询美国总统,但我不知道如何过滤我的搜索。

SELECT ?presLabel ?spouseLabel ?picp ?picps ?daughterLabel ?numchild ?start WHERE {

   ?pres wdt:P31 wd:Q5 .
   ?pres p:P39 ?position_held_statement .
   ?position_held_statement ps:P39 wd:Q11696 .
   ?position_held_statement pq:P580 ?start .


   ?pres wdt:P26 ?spouse .
   ?pres wdt:P40 ?childern.
   ?pres wdt:P40 ?daughter.
   ?daughter wdt:P21 wd:Q6581072.
   ?pres wdt:P1971 ?numchild.

   OPTIONAL {
        ?pres wdt:P18 ?picp
    } 

   OPTIONAL {
        ?spouse wdt:P18 ?picps
    } 

   SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
   }

 } ORDER BY ?start

没那么难:

  1. 您已经有了 xsd:date 类型的开始时间。您现在要做的就是提取年份并使用此值进行过滤:

    FILTER(year(?start) > 1970)

  2. 你的第二个条件"at least one daughter"隐含地被连接满足,即总统只有在有这样的数据时才匹配。如果你要求"at least two daughters",它会变得更多"interesting",因为那样你就必须按每位总统分组,计算女儿数,最后过滤组:

    GROUP BY ?p 
    HAVING (count(?child) > 2)
    

您的最终查询:

SELECT ?presLabel ?spouseLabel ?picp ?picps ?daughterLabel ?numchild ?start WHERE {

   ?pres wdt:P31 wd:Q5 .
   ?pres p:P39 ?position_held_statement .
   ?position_held_statement ps:P39 wd:Q11696 .
   ?position_held_statement pq:P580 ?start .

   # the spouse
   ?pres wdt:P26 ?spouse .
   # all daughters
   ?pres wdt:P40 ?daughter.
   ?daughter wdt:P21 wd:Q6581072.
   # number of children
   ?pres wdt:P1971 ?numchild.

   OPTIONAL {
        ?pres wdt:P18 ?picp
    } 

   OPTIONAL {
        ?spouse wdt:P18 ?picps
    } 

  # filter by start date here
  FILTER(year(?start) > 1970)

   SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
   }

 } ORDER BY ?start

附加任务

可以在子查询中检索女儿的数量,子查询只需将其放入原始查询中 + 将变量 ?numDaughters 添加到所选变量:

# here we compute the number of daughters 
{ 
 select ?pres (count(distinct ?daughter) as ?numDaughters) where {
        ?pres wdt:P31 wd:Q5 .
        ?pres p:P39 ?position_held_statement .
        ?position_held_statement ps:P39 wd:Q11696 .
        # all daughters
        ?pres wdt:P40 ?daughter.
        ?daughter wdt:P21 wd:Q6581072.
 } 
 group by ?pres
}