query-dd81d41481aac42103b3b466319c95a4

rq turtle/ttl

first query - more reliable data - parties with known values, or inferred by dates on P102 select distinct ?mp ?mpLabel ?start ?end ?seatLabel ?known_partyLabel ?date_inferred_partyLabel ?historic_hansard WHERE {
?position wdt:P279 wd:Q16707842 . ?mp p:P39 ?positionStatement . ?positionStatement ps:P39 ?position ; pq:P768 ?seat ; pq:P580 ?start ; pq:P582 ?end . bind(year(?start) as ?startyear) . bind(year(?end) as ?endyear) . filter (?startyear < 2005) . optional { ?positionStatement pq:P4100 ?known_party . } # party if it is known during the electoral period optional { ?mp p:P102 ?partyStatement . ?partyStatement ps:P102 ?date_inferred_party . ?partyStatement pq:P580 ?inferredstart . filter (?inferredstart < ?end ) . ?partyStatement pq:P582 ?inferredend . filter ( ?inferredend > ?start ) . filter not exists { ?positionStatement pq:P4100 ?known_party . } . } # this looks for a P102 statement which is valid during the electoral term
optional { ?mp p:P102 ?partyStatement . ?partyStatement ps:P102 ?date_inferred_party . ?partyStatement pq:P580 ?inferredstart . filter (?inferredstart < ?end ) . filter not exists { ?partyStatement pq:P582 ?inferredend . } filter not exists { ?positionStatement pq:P4100 ?known_party . } . } # P102 has only a start date (assume indefinite after) optional { ?mp p:P102 ?partyStatement . ?partyStatement ps:P102 ?date_inferred_party . filter not exists { ?partyStatement pq:P580 ?inferredstart . } ?partyStatement pq:P582 ?inferredend . filter ( ?inferredend > ?start ) . filter not exists { ?positionStatement pq:P4100 ?known_party . } . } # P102 has only an end date (assume indefinite before) { SELECT distinct ?mp (GROUP_CONCAT(distinct ?hh; separator="; ") as ?historic_hansard) WHERE { ?position wdt:P279 wd:Q16707842 . ?mp p:P39 ?positionStatement . ?positionStatement ps:P39 ?position . optional { ?mp wdt:P2015 ?hh . } } group by ?mp } # find Historic Hansard IDs SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

Use at

PREFIX wikibase: <http://wikiba.se/ontology#>
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/>
PREFIX bd: <http://www.bigdata.com/rdf#>
# first query - more reliable data - parties with known values, *or* inferred by dates on P102 
select distinct ?mp ?mpLabel ?start ?end ?seatLabel ?known_partyLabel ?date_inferred_partyLabel ?historic_hansard
WHERE {  
  ?position wdt:P279 wd:Q16707842 . ?mp p:P39 ?positionStatement .
  ?positionStatement ps:P39 ?position ; pq:P768 ?seat ; pq:P580 ?start ; pq:P582 ?end .
  bind(year(?start) as ?startyear) . bind(year(?end) as ?endyear) . filter (?startyear < 2005) .
  optional { ?positionStatement pq:P4100 ?known_party . }
  # party if it is known during the electoral period
  optional { ?mp p:P102 ?partyStatement . ?partyStatement ps:P102 ?date_inferred_party . 
             ?partyStatement pq:P580 ?inferredstart . filter (?inferredstart < ?end ) .
             ?partyStatement pq:P582 ?inferredend . filter ( ?inferredend > ?start ) . 
             filter not exists { ?positionStatement pq:P4100 ?known_party . } . }
  # this looks for a P102 statement which is valid *during* the electoral term  
  optional { ?mp p:P102 ?partyStatement . ?partyStatement ps:P102 ?date_inferred_party . 
             ?partyStatement pq:P580 ?inferredstart . filter (?inferredstart < ?end ) .
             filter not exists { ?partyStatement pq:P582 ?inferredend . }
             filter not exists { ?positionStatement pq:P4100 ?known_party . } . }
  # P102 has only a start date (assume indefinite after)
  optional { ?mp p:P102 ?partyStatement . ?partyStatement ps:P102 ?date_inferred_party . 
             filter not exists { ?partyStatement pq:P580 ?inferredstart . }
             ?partyStatement pq:P582 ?inferredend . filter ( ?inferredend > ?start ) . 
             filter not exists { ?positionStatement pq:P4100 ?known_party . } . }
  # P102 has only an end date (assume indefinite before)
  { SELECT distinct ?mp (GROUP_CONCAT(distinct ?hh; separator="; ") as ?historic_hansard) WHERE {
             ?position wdt:P279 wd:Q16707842 . ?mp p:P39 ?positionStatement .
             ?positionStatement ps:P39 ?position .
             optional { ?mp wdt:P2015 ?hh . }  } group by ?mp }
  # find Historic Hansard IDs
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }      
}

Query found at

graph TD classDef projected fill:lightgreen; classDef literal fill:orange; classDef iri fill:yellow; v13("?date_inferred_party") v7("?end"):::projected v12("?endyear") v14("?hh") v15("?historic_hansard"):::projected v3("?inferredend") v2("?inferredstart") v6("?known_party") v10("?mp"):::projected v1("?partyStatement") v9("?position") v5("?positionStatement") v11("?seat") v4("?start"):::projected v12("?startyear") c6(["wd:Q16707842"]):::iri c16(["en"]):::literal c14(["bd:serviceParam"]):::iri f0[["?startyear < '2005^^xsd:integer'"]] f0 --> v12 v9 --"p:direct/P279"--> c6 v10 --"p:P39"--> v5 v5 --"p:statement/P39"--> v9 v5 --"p:qualifier/P768"--> v11 v5 --"p:qualifier/P580"--> v4 v5 --"p:qualifier/P582"--> v7 bind1[/"year-from-dateTime(?start)"/] v4 --o bind1 bind1 --as--o v12 bind2[/"year-from-dateTime(?end)"/] v7 --o bind2 bind2 --as--o v12 subgraph optional0["(optional)"] style optional0 fill:#bbf,stroke-dasharray: 5 5; v5 -."p:qualifier/P4100".-> v6 end subgraph optional1["(optional)"] style optional1 fill:#bbf,stroke-dasharray: 5 5; v10 -."p:P102".-> v1 v1 --"p:statement/P102"--> v13 v1 --"p:qualifier/P580"--> v2 v1 --"p:qualifier/P582"--> v3 end subgraph optional2["(optional)"] style optional2 fill:#bbf,stroke-dasharray: 5 5; v10 -."p:P102".-> v1 v1 --"p:statement/P102"--> v13 v1 --"p:qualifier/P580"--> v2 end subgraph optional3["(optional)"] style optional3 fill:#bbf,stroke-dasharray: 5 5; v10 -."p:P102".-> v1 v1 --"p:statement/P102"--> v13 v1 --"p:qualifier/P582"--> v3 end v9 --"p:direct/P279"--> c6 v10 --"p:P39"--> v5 v5 --"p:statement/P39"--> v9 subgraph optional4["(optional)"] style optional4 fill:#bbf,stroke-dasharray: 5 5; v10 -."p:direct/P2015".-> v14 end bind4[/"?hh"/] v14 --o bind4 bind4 --as--o v15 subgraph s1["http://wikiba.se/ontology#label"] style s1 stroke-width:4px; c14 --"wikibase:language"--> c16 end