Glossar

Die OParl-Objekte und -Begriffe, denen Sie bei der Arbeit mit oparl begegnen. Die Referenz der Optionen finden Sie in der README, Rezepte in Usage.md.

Der Standard

OParl. Ein offener Standard für den lesenden Zugriff auf Ratsinformationssysteme (RIS) in Deutschland – die Systeme, mit denen Kommunen Sitzungen, Tagesordnungen, Anträge und Beschlüsse veröffentlichen. Gepflegt von der OKF Deutschland und Vitako; aktuelle Version 1.1 (2018), abwärtskompatibel zu 1.0 (2016). Spezifikation: https://oparl.org/spezifikation/.

Ratsinformationssystem (RIS). Die Software hinter dem öffentlichen Portal eines Rats. Verbreitete Produkte mit OParl-Unterstützung: SD.NET RIM (Sternberg), Session/SessionNet (Somacos), more! rubin, ALLRIS (CC e-gov).

Endpoint-Verzeichnis. Die öffentliche Liste der OParl-Server unter https://dev.oparl.org/api/endpoints. Sie speichert das System-Objekt jedes Servers aus dem letzten Abruf (fetched) und wird selten aktualisiert. Einige Einträge sind Duplikate oder Aggregatoren (Politik bei Uns, München Transparent).

Gepflegte Endpoint-Liste (endpoints, --source). Wird mit diesem Tool ausgeliefert: OParl-Server, die im Verzeichnis fehlen, und eine Live-Prüfung jedes Verzeichniseintrags. oparl endpoints listet beides (source: registry oder curated). checked ist der Tag der letzten Prüfung, working ihr Ergebnis, problem der Grund für einen Fehlschlag und replacedBy die neue URL eines umgezogenen Servers. Die Maintainer aktualisieren die Liste mit npm run check-endpoints; ein fehlschlagender Endpunkt wird zweimal geprüft, bevor er als nicht erreichbar gilt. --search durchsucht Titel, URL und Notiz, ohne Rücksicht auf Groß- und Kleinschreibung oder Akzente, und greift nur dann auf die Umlautschreibweisen zurück (koelnKöln), wenn buchstäblich nichts passt. Ist das Verzeichnis nicht erreichbar, listet endpoints nur die gepflegten Einträge und weist auf stderr darauf hin.

Objekttyp-URI (type). Jedes OParl-Objekt hat einen type, z. B. https://schema.oparl.org/1.1/Meeting; an der Version im Pfad erkennen Sie 1.0 oder 1.1.

Objekt-ID (id). Die eigene URL jedes Objekts. Objekte verweisen über diese URLs aufeinander – folgen Sie ihnen mit oparl get <id>.

Die Objekte

System (system). Der Einstiegspunkt eines Servers: oparlVersion, vendor, product und body, die URL der Liste der Körperschaften.

Body (bodies) – Körperschaft. Eine Organisation, die auf dem Server Ratsarbeit führt, meist eine Gemeinde oder ein Kreis (name, ags – der Amtliche Gemeindeschlüssel). Eine Körperschaft verlinkt ihre Objektlisten: organization, person, meeting, paper und, in 1.1, agendaItem, consultation, file, membership, locationList, legislativeTermList.

Organization (list organization) – Gremium. Ein Rat, ein Ausschuss, eine Bezirksvertretung, eine Fraktion oder eine Verwaltungseinheit. classification benennt die Art.

Person (list person). Ein Ratsmitglied oder eine andere Person mit einer Rolle; siehe Membership. Personenbezogene Daten – siehe DATA_LICENSE.md.

Membership (list membership) – Mitgliedschaft. Die Mitgliedschaft einer Person in einer Organisation, mit role, startDate, endDate und votingRight.

Meeting (list meeting) – Sitzung. Eine Sitzung einer oder mehrerer Organisationen: name, start, end, location, cancelled, die agendaItem-Liste und Protokolldateien.

AgendaItem (list agenda-item) – Tagesordnungspunkt (TOP). Ein Punkt der Tagesordnung einer Sitzung: number, name, public, result, die consultation, zu der er gehört.

Paper (list paper) – Drucksache / Vorlage. Ein Dokument, mit dem sich der Rat befasst – eine Beschlussvorlage der Verwaltung, ein Antrag, eine Anfrage: reference (die Drucksachennummer), name, date, paperType, mainFile, auxiliaryFile und die zugehörigen consultations.

Consultation (list consultation) – Beratung. Die Behandlung einer Drucksache in einer bestimmten Sitzung und Organisation, mit role (z. B. Entscheidung, Vorberatung) und authoritative.

File (list file) – Datei. Ein Dokument, das an einer Drucksache oder Sitzung hängt: fileName, mimeType, accessUrl, downloadUrl. Diese CLI gibt nur Dateimetadaten aus; sie lädt keine Dateien herunter.

Location (list location) – Ort. Eine Adresse oder ein Raum, oft in Sitzungen eingebettet.

LegislativeTerm (list legislative-term) – Wahlperiode. Eine Wahlperiode des Rats mit startDate und endDate. Körperschaften in OParl 1.0 betten diese als Array ein statt als Listen-URL; list legislative-term gibt dann die eingebetteten Wahlperioden mit pages: 0 aus und wendet die Datumsfilter lokal an. Eine Wahlperiode ohne created/modified lässt sich nicht filtern, wird also ausgegeben, und das note im Ergebnis weist darauf hin.

Listen und Paginierung

Objektliste / Seite. Eine Liste wird seitenweise ausgeliefert: data (die Objekte), pagination (optionale Zählwerte) und links (first, self, last sowie next auf jeder Seite außer der letzten). oparl list folgt next; das next im Ergebnis zeigt, wo es aufgehört hat. Eine Seite, deren data etwas anderes als Objekte enthält, wird abgelehnt; ein Server, der auf eine Listen-URL ein bloßes JSON-Array statt einer Seite antwortet (ein SD.NET-Build in Essen), wird als einzelne Seite gelesen.

Filter. OParl definiert für Listen created_since, created_until, modified_since, modified_until, limit und omit_internal (--modified-since …). Server sollen die Datumsfilter unterstützen, manche ignorieren sie jedoch oder scheitern daran. SD.NET-RIM-Server antworten auf ein Datumsfenster ohne Objekte mit HTTP 404 – die CLI endet dann mit 4 („nicht gefunden”), obwohl die Liste existiert; wiederholen Sie den Aufruf ohne Filter, um beides zu unterscheiden. Jeder Filter geht genau einmal mit dem von Ihnen angegebenen Wert hinaus: Er ersetzt die Kopie des Servers in einer Listen-URL oder einem next-Link und wird auch auf dem Ziel einer Weiterleitung erneut gesetzt, sodass jede Seite gleich gefiltert ist.

Gelöschte Objekte (deleted: true). Server dürfen gelöschte Objekte, markiert als deleted, in Listen behalten, damit synchronisierende Clients sie entfernen können. Manche Server zeigen sie nur mit modified_since, und da oparl list bei einer wiederholten id die letzte Kopie behält, gewinnt ein Grabstein-Eintrag auf einer späteren Seite gegenüber der lebenden Kopie auf einer früheren.

Seitenschleife (looped). Ein Server, dessen next-Link auf eine bereits abgerufene Seite zurückführt oder der immer weitere Seiten liefert, die nichts hinzufügen – dieselbe Seite oder eine leere unter immer neuen ?page=n-Links. Das Durchlaufen endet nach drei solchen Seiten in Folge, listet jedes Objekt einmal, setzt looped: true und behält das next des Servers, damit die Liste von Hand weitergeführt werden kann. Warum drei: Eine Seite, die Objekte wiederholt, sieht genauso aus wie ein Eintrag, der während des Durchlaufens in die Liste eingefügt wurde.

Durchlauf-Hinweis (note). Ein Satz im Ergebnis von list/bodies, ebenfalls auf stderr ausgegeben: Er nennt den Grund, aus dem das Durchlaufen vor dem Ende der Liste endete (eine Seitenschleife oder ein next-Link, dem die CLI nicht folgt), oder welcher Filter nicht angewendet werden konnte.

Dieses Tool

Same-Host-Regel. Links (next, Listen-URLs) und Weiterleitungen werden nur auf dem Host verfolgt, von dem sie stammen; ein http:-Link auf einem https:-Server wird hochgestuft. Alles andere bricht mit „Refusing to follow …“ ab. Dieselbe Hochstufung gilt für die Ausgabe: In einer über https abgerufenen Antwort werden http://-URLs auf diesem Host als https:// angezeigt, sodass IDs, die Sie an list oder get zurückgeben, verschlüsselt bleiben. Ein relativer Link ("body": "bodies") wird gegen die URL aufgelöst, von der die Antwort tatsächlich kam – nach einer Weiterleitung also gegen ihr Ziel und nicht gegen die URL, mit der die Anfrage begann.

Servertext in Meldungen. Alles, was ein Server sendet und in einer Fehlermeldung landet – der type eines Objekts, eine Fehlermeldung, ein Link, ein Content-Type –, wird zuvor von Steuerzeichen befreit, auf eine Zeile gefaltet und auf 200 Zeichen gekürzt. Ein bösartiger oder manipulierter Endpoint könnte sonst Terminal-Escape-Sequenzen (Fenstertitel, Farben, Bildschirm löschen) ausführen lassen oder eine Error:-Zeile der CLI vortäuschen. In der JSON-Ausgabe werden dieselben Zeichen stattdessen escaped, sodass nichts verloren geht.

pages / next (Ausgabe von list). Wie viele Seiten abgerufen wurden, und der Link zum Weitermachen – vorhanden, wann immer die letzte abgerufene Seite einen anbot, null am Ende der Liste und dann, wenn der Link in eine Schleife zurückführt.

Quelle auf GitHub ansehen →