query-8145d0a2ec538c5b1645cedbecfc7891
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
- https://query.wikidata.org/sparql
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