query-613d083e43808b82786d2c81011270e8

rq turtle/ttl

Circonscriptions ayant rencontrées un changement de député SELECT ?depute ?deputeNom ?circonscriptionNom ?dateDebutMandat ?dateFinMandat WHERE { ?depute wdt:P39 wd:Q3044918 ; p:P39 ?mandat . ?mandat pq:P2937 wd:Q112567597 ; pq:P768 ?circonscription . OPTIONAL { ?mandat pq:P580 ?dateDebutMandat } . OPTIONAL { ?mandat pq:P582 ?dateFinMandat } .

# Ceci donne la dernière date significative, soit de fin de mandat, soit de début si le mandat n’est pas terminé BIND( IF(BOUND(?dateFinMandat), ?dateFinMandat, ?dateDebutMandat) AS ?dateEvenement) .

# Ceci élimine les mandats remplacés au lendemain par le suppléant, commenter ces 4 lignes pour inclure ces mandats dans le résultat # NB : la partie non-croisée du FILTER NOT EXISTS (i.e. avec pq:P582 ?dateFinMandat) est censée afficher les mandats terminés par le suppléant non-remplacés au lendemain, mais je ne suis pas sûr que ça fonctionne et il n’y a pas de données pour vérifier ce cas) BIND( ?dateDebutMandat + "-P1D"^^xsd:duration AS ?dateVeilleDebutMandat ) . BIND( IF(BOUND(?dateFinMandat), ?dateFinMandat + "P1D"^^xsd:duration, "1980-01-01T00:00:00Z"^^xsd:dateTime) AS ?dateLendemainFinMandat ) . FILTER NOT EXISTS { [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P580 ?dateLendemainFinMandat ; pq:P768 ?circonscription ] } . FILTER NOT EXISTS { [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P582 ?dateVeilleDebutMandat ; pq:P768 ?circonscription ] . [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P582 ?dateFinMandat ; pq:P768 ?circonscription ] } .

{ SELECT ?circonscription (MAX(?mandatDateFin) AS ?dateFinDernierMandat) WHERE { # Circonscriptions avec un mandat terminé… [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P582 ?mandatDateFin ; pq:P768 ?circonscription ] . } GROUP BY ?circonscription } OPTIONAL { ?depute rdfs:label ?deputeNom . FILTER( LANG(?deputeNom) = "fr" ) } . OPTIONAL { ?circonscription rdfs:label ?circonscriptionNom . FILTER( LANG(?circonscriptionNom) = "fr" ) } . } ORDER BY ?dateEvenement ?dateFinDernierMandat ?circonscriptionNom ?dateDebutMandat # ordre chronologique pur

ORDER BY ?dateFinDernierMandat ?circonscriptionNom ?dateDebutMandat # ordre chronologique groupé par circonscription

Use at

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX p: <http://www.wikidata.org/prop/>
# Circonscriptions ayant rencontrées un changement de député
SELECT ?depute ?deputeNom ?circonscriptionNom ?dateDebutMandat ?dateFinMandat
WHERE {
  ?depute wdt:P39 wd:Q3044918 ; p:P39 ?mandat .
  ?mandat pq:P2937 wd:Q112567597 ; pq:P768 ?circonscription .
  OPTIONAL { ?mandat pq:P580 ?dateDebutMandat } .
  OPTIONAL { ?mandat pq:P582 ?dateFinMandat } .

  # Ceci donne la dernière date significative, soit de fin de mandat, soit de début si le mandat n’est pas terminé
  BIND( IF(BOUND(?dateFinMandat), ?dateFinMandat, ?dateDebutMandat) AS ?dateEvenement) .

  # Ceci élimine les mandats remplacés au lendemain par le suppléant, commenter ces 4 lignes pour inclure ces mandats dans le résultat
  # NB : la partie non-croisée du FILTER NOT EXISTS (i.e. avec pq:P582 ?dateFinMandat) est censée afficher les mandats terminés par le suppléant non-remplacés au lendemain, mais je ne suis pas sûr que ça fonctionne et il n’y a pas de données pour vérifier ce cas)
  BIND( ?dateDebutMandat + "-P1D"^^xsd:duration AS ?dateVeilleDebutMandat ) .
  BIND( IF(BOUND(?dateFinMandat), ?dateFinMandat + "P1D"^^xsd:duration, "1980-01-01T00:00:00Z"^^xsd:dateTime) AS ?dateLendemainFinMandat ) .
  FILTER NOT EXISTS { [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P580 ?dateLendemainFinMandat ; pq:P768 ?circonscription ] } .
  FILTER NOT EXISTS { [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P582 ?dateVeilleDebutMandat ; pq:P768 ?circonscription ] .
    [] wdt:P39 wd:Q3044918 ; p:P39 [ pq:P2937 wd:Q112567597 ; pq:P582 ?dateFinMandat ; pq:P768 ?circonscription ] } .

  {
    SELECT ?circonscription (MAX(?mandatDateFin) AS ?dateFinDernierMandat)
    WHERE {
      # Circonscriptions avec un mandat terminé…
      [] wdt:P39 wd:Q3044918 ; p:P39 [
              pq:P2937 wd:Q112567597 ; pq:P582 ?mandatDateFin ; pq:P768 ?circonscription
      ] .
    }
    GROUP BY ?circonscription
  }
  OPTIONAL { ?depute rdfs:label ?deputeNom . FILTER( LANG(?deputeNom) = "fr" ) } .
  OPTIONAL { ?circonscription rdfs:label ?circonscriptionNom . FILTER( LANG(?circonscriptionNom) = "fr" ) } .
}
ORDER BY ?dateEvenement ?dateFinDernierMandat ?circonscriptionNom ?dateDebutMandat # ordre chronologique pur
#ORDER BY ?dateFinDernierMandat ?circonscriptionNom ?dateDebutMandat # ordre chronologique groupé par circonscription

Query found at

graph TD classDef projected fill:lightgreen; classDef literal fill:orange; classDef iri fill:yellow; v6("?circonscription") v3("?circonscriptionNom"):::projected v4("?dateDebutMandat"):::projected v12("?dateEvenement") v13("?dateFinDernierMandat") v7("?dateFinMandat"):::projected v12("?dateLendemainFinMandat") v12("?dateVeilleDebutMandat") v10("?depute"):::projected v9("?deputeNom"):::projected v11("?mandat") v12("?mandatDateFin") a5((" ")) a1((" ")) a3((" ")) a7((" ")) a6((" ")) a2((" ")) a4((" ")) a8((" ")) c3(["wd:Q3044918"]):::iri c5(["wd:Q112567597"]):::iri f0[["not "]] subgraph f0e0["Exists Clause"] e0a1 --"p:direct/P39"--> e0c2 e0a2 --"p:qualifier/P2937"--> e0c4 e0a2 --"p:qualifier/P582"--> e0v1 e0a2 --"p:qualifier/P768"--> e0v2 e0a1 --"p:P39"--> e0a2 e0a3 --"p:direct/P39"--> e0c2 e0a4 --"p:qualifier/P2937"--> e0c4 e0a4 --"p:qualifier/P582"--> e0v3 e0a4 --"p:qualifier/P768"--> e0v2 e0a3 --"p:P39"--> e0a4 e0v2("?circonscription"):::projected e0v3("?dateFinMandat"):::projected e0v1("?dateVeilleDebutMandat"):::projected e0a1((" ")):::projected e0a3((" ")):::projected e0a2((" ")):::projected e0a4((" ")):::projected e0c2(["wd:Q3044918"]):::iri e0c4(["wd:Q112567597"]):::iri end f0--EXISTS--> f0e0 f0 --> a1 f0 --> c2 f0 --> c3 f0 --> a2 f0 --> c4 f0 --> c5 f0 --> c6 f0 --> v12 f0 --> c7 f0 --> v6 f0 --> c8 f0 --> a3 f0 --> a4 f0 --> v7 a1 --"p:direct/P39"--> c3 a2 --"p:qualifier/P2937"--> c5 a2 --"p:qualifier/P582"--> v12 a2 --"p:qualifier/P768"--> v6 a1 --"p:P39"--> a2 a3 --"p:direct/P39"--> c3 a4 --"p:qualifier/P2937"--> c5 a4 --"p:qualifier/P582"--> v7 a4 --"p:qualifier/P768"--> v6 a3 --"p:P39"--> a4 f1[["not "]] subgraph f1e1["Exists Clause"] e1a1 --"p:direct/P39"--> e1c2 e1a2 --"p:qualifier/P2937"--> e1c4 e1a2 --"p:qualifier/P580"--> e1v1 e1a2 --"p:qualifier/P768"--> e1v2 e1a1 --"p:P39"--> e1a2 e1v2("?circonscription"):::projected e1v1("?dateLendemainFinMandat"):::projected e1a1((" ")):::projected e1a2((" ")):::projected e1c2(["wd:Q3044918"]):::iri e1c4(["wd:Q112567597"]):::iri end f1--EXISTS--> f1e1 f1 --> a5 f1 --> c2 f1 --> c3 f1 --> a6 f1 --> c4 f1 --> c5 f1 --> c9 f1 --> v12 f1 --> c7 f1 --> v6 f1 --> c8 a5 --"p:direct/P39"--> c3 a6 --"p:qualifier/P2937"--> c5 a6 --"p:qualifier/P580"--> v12 a6 --"p:qualifier/P768"--> v6 a5 --"p:P39"--> a6 v10 --"p:direct/P39"--> c3 v10 --"p:P39"--> v11 v11 --"p:qualifier/P2937"--> c5 v11 --"p:qualifier/P768"--> v6 subgraph optional0["(optional)"] style optional0 fill:#bbf,stroke-dasharray: 5 5; v11 -."p:qualifier/P580".-> v4 end subgraph optional1["(optional)"] style optional1 fill:#bbf,stroke-dasharray: 5 5; v11 -."p:qualifier/P582".-> v7 end bind2[/"if(bound(?dateFinMandat),?dateFinMandat,?dateDebutMandat)"/] v7 --o bind2 v4 --o bind2 bind2 --as--o v12 bind3[/"?dateDebutMandat + '-P1D^^xsd:duration'"/] v4 --o bind3 bind3 --as--o v12 bind4[/"if(bound(?dateFinMandat),?dateFinMandat + 'P1D^^xsd:duration','1980-01-01T00:00:00Z^^xsd:dateTime')"/] v7 --o bind4 bind4 --as--o v12 a7 --"p:direct/P39"--> c3 a8 --"p:qualifier/P2937"--> c5 a8 --"p:qualifier/P582"--> v12 a8 --"p:qualifier/P768"--> v6 a7 --"p:P39"--> a8 bind6[/"max(?mandatDateFin)"/] v12 --o bind6 bind6 --as--o v13 subgraph optional2["(optional)"] style optional2 fill:#bbf,stroke-dasharray: 5 5; v10 -."rdfs:label".-> v9 end subgraph optional3["(optional)"] style optional3 fill:#bbf,stroke-dasharray: 5 5; v6 -."rdfs:label".-> v3 end