Welche Endpunkte, Properties und Queries PoliSPARQL nutzt
Stand: 2026-07-23 · Quelle im Code: web/app.js, web/person-search.html.
Alle Browser-Requests gehen direkt an öffentliche Wikidata-APIs (kein eigenes SPARQL-Backend).
| Zweck | URL | Methode |
|---|---|---|
| SPARQL-Abfragen | https://query.wikidata.org/sparql?query=…&format=json |
GET + Header Accept: application/sparql-results+json |
| Personendetail | https://www.wikidata.org/wiki/Special:EntityData/{QID}.json |
GET (JSON) |
| Portrait | https://commons.wikimedia.org/wiki/Special:FilePath/{Datei}?width=280 |
Bild-URL aus Claim P18 |
encodeURIComponent in die URL gesetzt.
Labels kommen über den Wikibase-Label-Service (SERVICE wikibase:label, Sprachen de,en).
qidOf(uri) – letzter Pfadteil der Entity-URI → Q…dateOf – XSD-Datum → YYYY-MM-DD (erste 10 Zeichen)isActive(end) – aktiv, wenn kein Ende oder end >= heute (UTC-Datum)| ID | Bedeutung | Wo |
|---|---|---|
| P31 | ist ein(e) | Länder, Parlaments-Typen |
| P194 | Vertretungskörperschaft / Legislative | Land → Parlament (auch: Gliederungseinheit → Landesparlament) |
| P150 | enthält Verwaltungseinheit | Land → Bundesland/Kanton/US-Bundesstaat (für untergeordnete Parlamente) |
| P527 | hat Teil | Kammern eines Parlaments |
| P1001 | gilt für Jurisdiktion | Parlament ↔ Land |
| P361 | ist Teil von | Amts-Position ↔ Parlament |
| P279 | Unterklasse von | Position → „Mitglied eines Parlaments“ |
| P39 | Position innegehabt / Amt | Person → Mandat (p:/ps:/pq:) |
| P580 / P582 | Beginn / Ende (Qualifikator) | am P39-Statement |
| P4100 | Fraktion (Qualifikator) | am P39-Statement |
| P768 | Wahlkreis (Qualifikator) | am P39-Statement |
| P102 | Partei | Fallback wenn keine Fraktion |
| P18 / P569 / P570 / P19 / P106 | Bild, Geburt, Tod, Geburtsort, Beruf | Detailseite (EntityData) |
| Q3624078 | souveräner Staat | Länderliste |
| Q486839 | Mitglied eines Parlaments | Filter für Abgeordneten-Ämter |
| Q35749 / Q10553309 / Q110315425 / Q2145275 / Q257000 | Parlament / Oberhaus / Unterhaus / Legislativkammer / Volksvertretung | Parlaments-Typen |
| Q5 | Mensch | Namenssuche |
Wird beim App-Start geladen. Nur Staaten mit gesetzter Legislative (P194).
SELECT DISTINCT ?country ?countryLabel WHERE {
?country wdt:P31 wd:Q3624078 .
?country wdt:P194 ?legislature .
SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en". }
}
ORDER BY ?countryLabel
Ergebnis-Mapping: { qid, label } aus ?country / ?countryLabel.
Parameter: countryQid (z. B. Q183 für Deutschland), per
BIND(wd:${countryQid} AS ?country) eingesetzt.
Vier UNION-Zweige:
P194 am Land (z. B. Bundestag, Bundesrat)P150 (enthält Verwaltungseinheit) vom Land zur Gliederungseinheit (Bundesland/Kanton/US-Bundesstaat …), dort wieder P194 — findet Landtage, State Legislatures, Kantonsparlamente etc., ohne Land-für-Land SonderfälleP527) der Legislative, gefiltert auf Parlaments-/Kammer-TypenP1001 = Land und Parlaments-TypSELECT DISTINCT ?parliament ?parliamentLabel WHERE {
BIND(wd:Q183 AS ?country) # Beispiel: Deutschland
{
?country wdt:P194 ?parliament .
} UNION {
?country wdt:P150 ?subdivision .
?subdivision wdt:P194 ?parliament .
} UNION {
?country wdt:P194 ?body .
?body wdt:P527 ?parliament .
?parliament wdt:P31/wdt:P279* ?t .
VALUES ?t { wd:Q35749 wd:Q10553309 wd:Q110315425 wd:Q2145275 wd:Q257000 }
} UNION {
?parliament wdt:P1001 ?country .
?parliament wdt:P31/wdt:P279* ?t .
VALUES ?t { wd:Q35749 wd:Q10553309 wd:Q110315425 wd:Q2145275 }
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en". }
}
ORDER BY ?parliamentLabel
Nachbearbeitung: Deduplizierung nach QID im Client.
P31/P279* gegen die generische Oberklasse „Legislative“ (Q11204) wurde verworfen,
weil sie auch einzelne Wahlperioden/Sitzungen (z. B. „1. Deutscher Bundestag“) statt der Institution selbst
zurückgab.
Parameter: parliamentQid (z. B. Q154797 Deutscher Bundestag).
Findet Ämter, die Teil des Parlaments (oder einer Kammer) sind und Unterklasse von
„Mitglied eines Parlaments“ (Q486839).
SELECT DISTINCT ?person ?personLabel ?position ?positionLabel
?start ?end ?partyLabel ?districtLabel WHERE {
BIND(wd:Q154797 AS ?parliament) # Beispiel: Bundestag
{
?position wdt:P361 ?parliament .
?position wdt:P279* wd:Q486839 .
} UNION {
?parliament wdt:P527 ?chamber .
?position wdt:P361 ?chamber .
?position wdt:P279* wd:Q486839 .
}
?person p:P39 ?stmt .
?stmt ps:P39 ?position .
OPTIONAL { ?stmt pq:P580 ?start }
OPTIONAL { ?stmt pq:P582 ?end }
OPTIONAL { ?stmt pq:P4100 ?group }
OPTIONAL { ?person wdt:P102 ?partyEntity }
BIND(COALESCE(?group, ?partyEntity) AS ?party)
OPTIONAL { ?stmt pq:P768 ?district }
SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en". }
}
ORDER BY ?personLabel DESC(?start)
P4100 am Statement), sonst Partei der Person (P102) —
zusammengeführt über COALESCE → Label ?partyLabel.
Nachbearbeitung:
qid|Amt|start|endactive = isActive(end) (kein Ende oder Ende ≥ heute)Für die Detailseite: QIDs aus EntityData (Ämter, Fraktionen, Wahlkreise, Parteien, Berufe, Geburtsort) in Chunks à max. 50 auflösen.
SELECT ?item ?itemLabel WHERE {
VALUES ?item { wd:Q1939555 wd:Q1023134 /* … */ }
SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en". }
}
GET https://www.wikidata.org/wiki/Special:EntityData/{QID}.json
| Feld in der UI | Quelle |
|---|---|
| Name / Beschreibung | labels.de|en, descriptions.de|en |
| Bild | claims.P18 → Commons FilePath |
| Geburt / Tod | P569 / P570 (time → YYYY-MM-DD) |
| Geburtsort | P19 → Label via Q4 |
| Parteien | P102 → Labels via Q4 |
| Berufe | P106 → Labels via Q4 |
| Ämter-Tabelle | bis zu 40× claims.P39 inkl. Qualifikatoren P580/P582/P768/P4100 |
Darstellung ist lokal in PoliSPARQL — kein Pflicht-Deep-Link nach wikidata.org.
person-search.html)
Separater Einstieg. Sucht Personen per MediaWiki EntitySearch, behält nur Menschen (Q5)
mit mindestens einem P39-Amt. Limit 100.
SELECT ?person ?personLabel ?positionLabel ?start ?end
?partyLabel ?districtLabel WHERE {
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:api "EntitySearch" .
bd:serviceParam wikibase:endpoint "www.wikidata.org" .
bd:serviceParam mwapi:search "Olaf Scholz" . # User-Input, escaped
bd:serviceParam mwapi:language "de" .
?person wikibase:apiOutputItem mwapi:item .
}
?person wdt:P31 wd:Q5 .
?person p:P39 ?stmt .
?stmt ps:P39 ?position .
OPTIONAL { ?stmt pq:P580 ?start }
OPTIONAL { ?stmt pq:P582 ?end }
OPTIONAL { ?stmt pq:P768 ?district }
OPTIONAL { ?person wdt:P102 ?party }
SERVICE wikibase:label { bd:serviceParam wikibase:language "de,en". }
}
ORDER BY DESC(?start)
LIMIT 100
Sonderzeichen im Suchbegriff: \ und " werden vor dem Einbetten escaped.
Nach Q3 filtert die UI lokal:
active === trueactive === falseLänderliste: ebenfalls lokale Substring-Filterung auf dem Label.
#/land/QID/parlament/QID/person/QID — bookmarkbar, teilbar, Browser-Zurück/Vor funktioniert.COUNT(DISTINCT ?person) aktiv/gesamt, getrennt von den Mandatszeilen (eine Person kann mehrere Perioden haben).P18 zusätzlich in der Mitglieder-Query, kleines Icon wenn vorhanden.GET/POST /api/recent (server.mjs), geteilt über alle Besucher*innen — bewusst nur Land/Parlament, keine Namenssuche.Details & verworfene Alternativen: docs/SPARQL_QUERIES.md.
P279-Klassifizierung in Wikidata). Automatischer Fallback auf lockeren Filter (nur P361), wenn der strikte Filter nichts findet.no-store) — verhindert veraltete Personen-Detail-Links.P361/P279 → leere Abgeordnetenliste).P582 kann historisch ungenaue Mandate als laufend zählen.Canonical repo path: docs/SPARQL_QUERIES.md (gleiche Inhalte).