query-8145d0a2ec538c5b1645cedbecfc7891

rq turtle/ttl

This gives us a little more flexibility. It means that each of the last three qualifiers are flexible - returned if known, blank if not. The use of three distinct OPTIONAL elements means the three are independent of each other; if they are in the same clause then they would only show up if all three exist. NB: start dates and seats are complete back to 1832, parties back to about 1923 - so for older data you may need to make party OPTIONAL. Election data also requires careful handling - while it seems intuitive that all terms begin at an election, in practice some will reflect mid-term party changes and so do not have this value, so again OPTIONAL is useful. If you want to explicitly only look for sitting MPs, you can forbid a variable:

Use at

PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX p: <http://www.wikidata.org/prop/>
SELECT DISTINCT ?person WHERE
{
  ?person wdt:P31 wd:Q5 . ?person p:P39 ?ps . 
  ?ps ps:P39 ?term . ?term wdt:P279 wd:Q16707842 .
  ?ps pq:P580 ?start . ?ps pq:P4100 ?party . ?ps pq:P768 ?seat . 
  FILTER NOT EXISTS { ?ps pq:P582 ?end } .
}

Query found at

graph TD classDef projected fill:lightgreen; classDef literal fill:orange; classDef iri fill:yellow; v2("?end") v6("?party") v3("?person"):::projected v1("?ps") v7("?seat") v5("?start") v4("?term") c3(["wd:Q5"]):::iri c7(["wd:Q16707842"]):::iri f0[["not "]] subgraph f0e0["Exists Clause"] e0v1 --"p:qualifier/P582"--> e0v2 e0v2("?end"):::projected e0v1("?ps"):::projected end f0--EXISTS--> f0e0 f0 --> v1 f0 --> c1 f0 --> v2 v1 --"p:qualifier/P582"--> v2 v3 --"p:direct/P31"--> c3 v3 --"p:P39"--> v1 v1 --"p:statement/P39"--> v4 v4 --"p:direct/P279"--> c7 v1 --"p:qualifier/P580"--> v5 v1 --"p:qualifier/P4100"--> v6 v1 --"p:qualifier/P768"--> v7