Statistik & Open Data
Schnittstelle und Felder
Schnittstellen-Version 3 · Stand: 25. September 2026
Alle Zahlen der Statistik-Seite gibt es auch maschinenlesbar – als JSON und als CSV, ohne Anmeldung und ohne Schlüssel. Diese Seite beschreibt, was wo steht, in welchen Einheiten und unter welcher Lizenz.
1. Endpunkte
Alle Adressen beginnen mit https://bus.roringen.de/. Abrufe von anderen Websites sind erlaubt (CORS: Access-Control-Allow-Origin: *). Bitte nicht öfter als nötig abrufen – die Auswertung ändert sich höchstens alle 15 Minuten, die Abfahrten je Haltestelle einmal am Tag.
statistik.php- Die gesamte Auswertung als JSON (Felder) Neu berechnet: alle 15 min
statistik.php?halt=000009034027- Eine Haltestelle: Pünktlichkeit, „Wie früh da sein?“, Stunden, alle Plan-Abfahrten als JSON (Felder) Neu berechnet: täglich ab 4 Uhr
statistik.php?export=zuverlaessigkeit- Kommt der Bus? Je Tag und eigener Haltestelle: geplante Fahrten nach Status, größte Lücke, Glättestunden, Fahrgastmeldungen (CSV, Status) Neu berechnet: täglich ab 4 Uhr
statistik.php?export=ereignisse- Ereignisse: mindestens zwei ausgefallene Fahrten hintereinander an einer der drei Haltestellen (CSV) Neu berechnet: täglich ab 4 Uhr
statistik.php?export=ereignisse-feed- Die neuesten 50 Ereignisse als Atom-Feed (für Feedreader) Neu berechnet: täglich ab 4 Uhr
statistik.php?export=fahrtstatus&tag=2026-09-24- Jede geplante Fahrt eines Betriebstags mit Status, an den eigenen Haltestellen zusätzlich je Halt (CSV), die letzten 90 Tage Neu berechnet: täglich ab 4 Uhr
statistik.php?export=linien- Pünktlichkeit je Linie, 7 und 30 Tage (CSV) Neu berechnet: alle 15 min
statistik.php?export=halte- Verspätung je Haltestelle entlang jeder Linie und Richtung, 30 Tage (CSV) Neu berechnet: alle 15 min
statistik.php?export=abschnitte- Zuwachs der Verspätung zwischen zwei Haltestellen, 30 Tage (CSV) Neu berechnet: alle 15 min
statistik.php?export=stunden- Wochentag × Stunde je Linie, 30 Tage (CSV) Neu berechnet: alle 15 min
statistik.php?export=abfahrten- Jede Plan-Abfahrt an jeder Haltestelle, 30 abgeschlossene Tage (CSV) Neu berechnet: täglich
statistik.php?export=halt&halt=ID- Dasselbe für eine Haltestelle (CSV) Neu berechnet: täglich
statistik.php?export=tage- Je Betriebstag und Linie seit Beginn der Sammlung (CSV) Neu berechnet: täglich
statistik.php?export=kalender- Je Kalendertag: Tagesart, Pünktlichkeit, Ausfälle, Datenlage, Wetter (CSV) Neu berechnet: alle 15 min
statistik.php?export=monate- Je Monat und Linie (CSV) Neu berechnet: täglich
statistik.php?export=wetter- Wetter je Stunde für Roringen (CSV, Open-Meteo) Neu berechnet: täglich
statistik.php?export=fahrgaeste- „Wie voll?“-Angaben, zusammengefasst (CSV) Neu berechnet: alle 15 min
statistik.php?export=json- Die Auswertung als Datei zum Speichern Neu berechnet: alle 15 min
statistik.php?rohdaten=2026-09-24- Alle Einzelwerte eines Betriebstags (CSV, Spalten), die letzten 90 Tage Neu berechnet: laufend
Fehler kommen als JSON ({"error": "…"}) mit HTTP-Status: 400 ungültiger Parameter, 404 unbekannter Export, keine Rohdaten für den Tag oder (beim CSV export=halt) keine Abfahrten für die Haltestelle, 405 andere Methode als GET. ?halt= ohne Abfahrten antwortet dagegen normal, mit "window": null und leeren Listen.
2. Einheiten und Begriffe
- Verspätungen in Sekunden, negativ = zu früh. Gezählt wird die Abfahrt (fehlt sie, die Ankunft). Die Endhaltestelle geht nur in den Verlauf entlang der Linie ein, dort mit der Ankunft – Pünktlichkeit, Stunden, Wetter und Abfahrten zählen nur Abfahrten.
- Pünktlich heißt: höchstens 60 s zu früh und höchstens 180 s zu spät (−60 bis +180 s). Zu früh: mehr als 60 s früh, zu spät: mehr als 180 s spät. Anteile in Prozent (0–100, eine Nachkommastelle).
- Median und 90-%-Wert nach dem Rang-Verfahren (kleinster Wert, den mindestens die Hälfte bzw. 90 % der Werte nicht überschreiten). Für Linien, Haltestellen entlang der Linien und Zeiträume aus Klassen von 30 s: Median = Mitte der Klasse, 90-%-Wert = Obergrenze. Für einzelne Abfahrten und Haltestellen (
?halt=) genau. - Betriebstag: der Tag, zu dem eine Fahrt laut Fahrplan gehört (GTFS
start_date) – eine Fahrt um 0:30 Uhr kann noch zum Vortag zählen. Wochentag und Stunde richten sich nach der Planzeit an der Haltestelle (Ortszeit Europe/Berlin). - Datum als
JJJJ-MM-TT, Zeitpunkte in ISO 8601 mit Zeitzone, Uhrzeiten als Ortszeit. - Haltestellen mit der 12-stelligen ID aus Fahrplan und Datenstrom von VBN/connect (z. B.
000009034027= Göttingen Roringen). Inkey,from_key,to_keyund in der Netzkarte stehen sie ohne führende Nullen (9034027); wird ein Halt auf einer Fahrt zweimal angefahren, heißt der zweite Besuch dort9034027#2. - Richtung:
direction_idaus dem Datenstrom (0 oder 1). Fehlt sie, steht im JSONnull, in Kennungen wie „91|x“ einxund im CSV nichts. Wohin eine Richtung fährt, sagen die Felder mit Start und Ziel. - Tagesart:
schule(Mo–Fr mit Unterricht),ferien(Mo–Fr in den Schulferien Niedersachsens),werktag(Mo–Fr nach dem 21. August 2030 – so weit reicht die hinterlegte Ferienliste),sa,so(Sonntage und gesetzliche Feiertage in Niedersachsen). Tagesgruppe der Abfahrten: im JSONwd(Mo–Fr),sa,so; im CSV „Mo-Fr“, „Sa“, „So/Feiertag“. - Linien: 91, E91, 92, E92, 160, 170, 21, E21, 22, E22, 23, N4.
Wie die Werte entstehen und wo ihre Grenzen liegen, steht auf der Statistik-Seite unter So entstehen die Zahlen.
3. Die Auswertung (JSON)
statistik.php liefert ein Objekt mit diesen Feldern. Werte, die es (noch) nicht gibt, sind null; Listen können leer sein.
api_version- Version der Schnittstelle (3; seit 25.09.2026 mit
reliabilityund den Exporten zur Zuverlässigkeit – alle Felder der Version 2 bleiben unverändert). Neue Felder kommen ohne neue Version dazu; ändert sich die Bedeutung eines Felds, steigt die Version. generated,today,since,source- Zeitpunkt der Berechnung, heutiges Datum, Beginn der Sammlung, Datenquelle
license- Lizenzen und Namensnennungen für Verspätungen, Fahrgastangaben und Wetter
definition- Grenzen „pünktlich“ in s, Klassenbreite, Linien, Mindestzahl für Vergleiche
windows["7"],windows["30"]- Zeitfenster (heute eingeschlossen) mit
days,from,to,days_with_data,all(alle Linien) undlines[]. Je Eintrag:trips(Fahrten im Datenstrom),trips_rt(mit Echtzeit),canceled,added,no_schedule,skipped_stops,n(Abfahrten),mean,p50,p90(s),on,early,late(%) profiles[]- Verlauf je Linie und Richtung (30 Tage):
id(„91|0“),line,dir,from,to,trips,variant_trips(Fahrten der gezeigten Haltefolge) undstops[]mitkey,id,name,n,mean,p50,p90,onundseg(Abschnitt vom vorigen Halt:n,meanZuwachs s,grew% mit mehr als 60 s Zuwachs,planPlanzeit s) segments[]- Die zehn Abschnitte mit dem größten mittleren Zuwachs (ab 5 Fahrten, 30 Tage):
line,dir,profile(Kennung wie beiprofiles),towards(Ziel der Richtung),from,to,from_key,to_key,n,mean,grew,planwie beiseg network- Netzkarte (30 Tage, Abschnitte ab 3 Fahrten, alle Linien zusammen):
stops(ID ohne Nullen → [Name, Breite, Länge]) undsegs[]als [von, nach, Fahrten, mittlerer Zuwachs s, Planzeit s, % mit mehr als 60 s Zuwachs, „Linien,kommagetrennt“] heatmap- 30 Tage,
allund je Linie: „Wochentag:Stunde“ (1 = Montag, 7 = Sonntag; Plan-Uhrzeit am Halt, nach Mitternacht zählt der neue Kalendertag) → [Abfahrten, Mittel s, pünktlich %] rush- Berufsverkehr (30 Tage, nach Wochentag, Feiertage zählen hier nicht gesondert):
morgens(Mo–Fr 6–9 Uhr),nachmittags(Mo–Fr 15–18 Uhr),sonst_werktags,wochenendemitn,mean,on trend- Je Tag (60 Tage):
dates[],all[]undlines{}parallel dazu als [Abfahrten, pünktlich %, Mittel s] odernull weeks- Je ISO-Woche:
weeks[](„2026-W39“),days[](Tage mit Daten),all[],lines{}wie beitrend daytypes- Je Tagesart (
schule,ferien,werktag,sa,so) über alle Tage seit Beginn:days,n,mean,on,early,lines{}als [Abfahrten, pünktlich %, Mittel s]. Die Seite vergleicht erst abdefinition.min_type_departuresAbfahrten. school_holidaysnext(from,toder laufenden oder nächsten Schulferien),known_until(so weit reicht die Liste),sourceweather- Alle abgeschlossenen Tage mit Wetter:
days,source,classesundtempsmithours(Stunden mit diesem Wetter),n,mean,on,lines{}wie beidaytypes. Jede Abfahrt zählt zum Wetter ihrer Plan-Stunde in Roringen.schnee: Wettercode 71–77, 85, 86;regen: mindestens 0,1 mm Niederschlag oder Code 51–67, 80–82, ab 95; sonsttrocken.frostunter 0 °C,kalt0 bis unter 10,mild10 bis unter 20,warmab 20 °C. headway[]- Takt je Linie (30 Tage), aus aufeinanderfolgenden Bussen derselben Linie und Richtung am selben Halt, nur bei Planabständen von 2 bis 30 Minuten:
line,pairs(Paare),headway_mean(Planabstand s),dev_mean(mittlere Abweichung des tatsächlichen vom geplanten Abstand, s),bunched(% der Paare mit weniger als dem halben Planabstand),gaps(% mit mehr als dem anderthalbfachen) records- Rekorde, jeweils
nullohne genug Daten (abmin_nAbfahrten, der laufende Tag zählt nicht):line_best_7,line_worst_7(line,on,mean,n),day_best,day_worst(date,on,mean,n),streaks[](längste Folge von Tagen je Linie mit mindestensstreak_on% pünktlich:line,days,from,to,current),canceled_max(date,count) calendar[]- Je Tag der letzten 120 Tage mit Daten: [Datum, Tagesart, Abfahrten, pünktlich %, Ausfälle, Datenstrom erreichbar %, Regenstunden, Höchsttemperatur °C, Name des Feiertags oder
null] quality- Datenlage:
days[]als [Datum, % der Minuten, in denen der Server den Datenstrom abrufen konnte],share_30(dasselbe über 30 Tage),today(minuteserreichbar vonofbisher,share),trips,trips_rtundrt_share_30(% der Fahrten mit Echtzeit, 30 Tage) stops[]- Haltestellen mit Abfahrten:
id,name,lines[]– für?halt= passengers- „Wie voll?“:
total,first,last,stops[]bzw.lines[]mitn,median(Personen),by_daytypeundby_hour(„wd:7“ → [Angaben, Median]) reliability- Kommt der Bus? (Status):
codes,stop_names(roringen,menzelberg,nikolausberg),since,windows["7"|"30"|"90"](abgeschlossene Tage bis gestern) mitfrom,to,days,events,reports,stops{}(die drei Halte undalle) undlines[](ganze Fahrten je Linie). Je Eintrag:planned, die Zähler je Status,fail(ausgefallen + ausgelassen + vorher geendet + nicht erschienen),known(mit Aussage),arrived_pct,fail_pct, bei Haltengap_max_s,gap_max_date,fail_days. Dazuseason(Wintersaison 1.11.–31.3., wie ein Fenster, mitlabel,running),ice(Tage mit und ohne Glätte:ice,dry,comparable),daily[](120 Tage:date,s{}je Halt als [angekommen, Ausfälle, ohne Aussage, größte Lücke s],ice_h,ev,rep),events[](neueste 60:date,stop,stop_name,from,to,trips,kinds{},lines[],reports) unddefinition raw_days[],months[]- Tage mit Rohdaten (für
?rohdaten=) und Monate mit Monatswerten (JJJJ-MM), jeweils neueste zuerst
3a. Kommt der Bus? Status je Fahrt
Beim Tagesabschluss (ab 4 Uhr für den Vortag) bekommt jede Fahrt, die laut Fahrplan (GTFS von VBN/connect, mit Verkehrstagen) an dem Tag fährt, genau einen Status – für die ganze Fahrt und an jeder der drei eigenen Haltestellen Roringen (000009034027), Am Menzelberg (000009033832) und Auf der Lieth/Nikolausberg (000009033847):
ok· angekommen- Der Datenstrom führte die Fahrt mit echten Echtzeitwerten bis über den Halt hinaus (bis höchstens 5 Minuten vor der verspäteten Planzeit; am Endhalt genügt der Halt davor – der Datenstrom nimmt Fahrten oft kurz vor dem Ende heraus).
canc· ausgefallen- Fahrt im Datenstrom als ausgefallen gemeldet (
schedule_relationship = CANCELED). skip· halt_ausgelassen- Fahrt fand statt, der Halt ist als ausgelassen gemeldet (
SKIPPED). Nur an den Halten. early· vorher_geendet- Echtzeit brach vor dem Halt ab, danach kam nichts mehr (nur, wenn der Server in der Zeit lief). Auch eine ausgefallene Ortung sieht so aus. Nur an den Halten.
miss· nicht_erschienen- Im Fahrplan, nie im Datenstrom – nur, wenn der Server in jeder Stunde der Fahrt mindestens 50 Minuten abrufen konnte, der Datenstrom um die Abfahrt andere Fahrten führte und die Linie an dem Tag mit mindestens 30 % ihrer Fahrten darin vorkam.
norl· ohne_echtzeit- Im Datenstrom, aber nur mit Platzhaltern – fuhr vermutlich, ist aber nicht belegt.
nd· keine_daten- Sonst keine Aussage (Server oder Datenstrom nicht erreichbar, Linie nicht im Datenstrom – etwa die 170).
Die größte Lücke je Tag und Halt ist die längste Zeit zwischen zwei angekommenen Bussen, in der geplante Fahrten ausfielen (bzw. vom letzten angekommenen Bus bis zur letzten ausgefallenen Fahrt). Ein Ereignis sind mindestens zwei ausgefallene Fahrten hintereinander (canc, skip, early oder miss; norl und nd werden übersprungen). Fahrgastmeldungen: Zahl der „Bus fehlt?“-Meldungen des Tags; einem Ereignis zugeordnet, wenn sie bis 30 Minuten davor oder danach eingingen und die Linie passt. Glättestunden: Stunden mit Schneefall, gefrierendem Regen oder Sprühregen (Wettercode 56, 57, 66, 67), Niederschlag bei höchstens 0,5 °C oder mindestens 1 cm Schnee bei höchstens 1 °C.
zuverlaessigkeit(CSV)- datum, halt, halt_name, geplant, angekommen, ohne_echtzeit, ausgefallen, halt_ausgelassen, vorher_geendet, nicht_erschienen, keine_daten, angekommen_prozent (von den Fahrten mit Aussage), groesste_luecke_min, glaette_stunden, fahrgastmeldungen, ereignisse
ereignisse(CSV)- datum, halt, halt_name, von, bis (ISO 8601, Planzeiten der ersten und letzten ausgefallenen Fahrt), fahrten, ausgefallen, halt_ausgelassen, vorher_geendet, nicht_erschienen, linien (leerzeichengetrennt), fahrgastmeldungen
fahrtstatus(CSV)- datum, fahrt_id (GTFS
trip_id), linie, abfahrt_plan, status_fahrt, halt (roringen/menzelberg/nikolausberg, leer bei Fahrten ohne diese Halte), halt_plan, status_halt – eine Zeile je Fahrt und eigenem Halt
4. Eine Haltestelle (JSON)
statistik.php?halt=ID (ID mit oder ohne führende Nullen) umfasst die letzten 30 abgeschlossenen Betriebstage; ein Betriebstag gilt ab 4 Uhr am Folgetag als abgeschlossen. Mittel, Median und 90-%-Wert sind hier aus den Einzelwerten gerechnet.
api_version,id,name,license,window- Haltestelle, Lizenz und Zeitraum (
from,to,daysmit Daten); ohne Daten istwindownull groups[]- Je Linie und Richtung:
line,dir,to(häufigstes Ziel),n,mean,p50,p90,on,early,hours(Stunde → [Abfahrten, Mittel s, pünktlich %]) undcatch: [x Minuten vor Plan da, % der Abfahrten, bei denen man den Bus erwischt hätte, mittlere Wartezeit s] für x = 0, 1, 2, 3, 5. „Erwischt“ heißt: der Bus fuhr höchstens x Minuten zu früh; die Wartezeit ist dann x Minuten plus seine Verspätung. departures[]- Je Plan-Abfahrt:
line,dir,dt(Tagesgruppe),min(Plan-Minute ab Mitternacht des Betriebstags, nach Mitternacht über 1440),time(Uhrzeit),to(Ziel der Fahrt),n(Tage mit Wert),mean,p50,p90,on,early; sortiert nach Tagesgruppe und Uhrzeit
5. CSV-Dateien
UTF-8 ohne Byte-Order-Mark, Komma als Trennzeichen, Punkt als Dezimalzeichen, erste Zeile mit Spaltennamen, Texte bei Bedarf in Anführungszeichen. Die Spalten:
linien- zeitraum_tage, von, bis, linie, fahrten_im_datenstrom, fahrten_mit_echtzeit, ausgefallen, zusaetzlich, ohne_fahrplanbezug, abfahrten, puenktlich_prozent, zu_frueh_prozent, zu_spaet_prozent, mittel_s, median_s, p90_s, ausgelassene_halte
halte- von, bis, linie, richtung_id, richtung_start, richtung_ziel, position, halt_id, halt_name, werte, mittel_s, median_s, p90_s, puenktlich_prozent
abschnitte- von, bis, linie, richtung_id, richtung_ziel, position, von_halt_id, von_halt, nach_halt_id, nach_halt, fahrten, plan_s, zuwachs_mittel_s, zuwachs_ueber_1min_prozent
stunden- von, bis, linie (oder „alle“), wochentag (1 = Montag), wochentag_name, stunde, abfahrten, mittel_s, puenktlich_prozent
abfahrten,halt- von, bis, halt_id, halt_name, tagesgruppe (Mo-Fr, Sa, So/Feiertag), plan_abfahrt, linie, richtung_id, ziel, werte (Tage), mittel_s, median_s, p90_s, puenktlich_prozent, zu_frueh_prozent
tage,monate- betriebstag (bzw. monat), tagesart (nur bei Tagen), linie, fahrten_im_datenstrom, fahrten_mit_echtzeit, ausgefallen, abfahrten, puenktlich_prozent, zu_frueh_prozent, zu_spaet_prozent, mittel_s, median_s, p90_s, ausgelassene_halte
kalender- datum, tagesart, feiertag, abfahrten, puenktlich_prozent, ausgefallen, datenstrom_erreichbar_prozent, regenstunden, hoechsttemperatur_c
wetter- datum, stunde, temperatur_c, niederschlag_mm, wmo_wettercode, klasse (trocken/regen/schnee), schneefall_cm, schneehoehe_m (beide ab 25.09.2026), glaette (1 = Glättegefahr), quelle
fahrgaeste- art (wartend_an_haltestelle / im_bus), halt_id, halt_name, linie, tagesart (wd/sa/so), stunde, angaben, median_personen
6. Rohdaten je Betriebstag
statistik.php?rohdaten=JJJJ-MM-TT enthält jede verfolgte Fahrt mit jedem Halt, den der Datenstrom für sie meldete – eine Zeile je Fahrt und Halt. Der laufende Tag enthält nur Fahrten, die schon zu Ende sind.
betriebstag,linie,richtung_id- wie oben
fahrt_id,route_id,fahrt_beginn- Fahrt- und Linien-Kennung aus dem Datenstrom, Planbeginn der Fahrt
fahrt_statusplanmaessig,zusaetzlich,ungeplant,ausgefallen(GTFS-Realtimeschedule_relationship)echtzeit- 1, wenn für die Fahrt echte Echtzeitwerte kamen (nicht nur Platzhalter)
halt_folge,halt_id,halt_id_fahrplan,halt_name- Position im Fahrtverlauf (
stop_sequence), Halt-ID im Datenstrom und im Fahrplan, Name plan_ankunft,plan_abfahrt- Planzeiten als
HH:MM:SSab Mitternacht des Betriebstags (nach Mitternacht über 24:00) verspaetung_ankunft_s,verspaetung_abfahrt_s- zuletzt gemeldete Verspätung
zeit_ankunft,zeit_abfahrt- vom Datenstrom gemeldete Zeitpunkte (ISO 8601), falls er statt einer Verspätung eine Uhrzeit lieferte – meist leer
halt_statusplanmaessig,ausgelassen,keine_datengewertet- 1, wenn der Wert in die Statistik einging (Fahrt mit Echtzeit, Fahrplan bekannt, Wert nach dem Passieren noch gemeldet)
zuletzt_gemeldet- wann der Datenstrom den Wert zuletzt enthielt (ISO 8601)
7. Beispiele
Pünktlichkeit aller Linien der letzten 30 Tage auf der Kommandozeile:
curl -s https://bus.roringen.de/statistik.php | jq '.windows["30"].lines[] | {line, on, mean, n}'
Wie viele Busse kamen in den letzten 30 Tagen in Roringen an?
curl -s https://bus.roringen.de/statistik.php | jq '.reliability.windows["30"].stops.roringen | {arrived_pct, ok, fail, gap_max_s}'
Die Abfahrten in Roringen als Tabelle speichern:
curl -o roringen.csv "https://bus.roringen.de/statistik.php?export=halt&halt=000009034027"
In einer eigenen Webseite (JavaScript):
const res = await fetch('https://bus.roringen.de/statistik.php?halt=000009034027');
const halt = await res.json();
for (const g of halt.groups) {
console.log(g.line, '→', g.to, g.on + ' % pünktlich');
}
In Python mit pandas:
import pandas as pd
tage = pd.read_csv('https://bus.roringen.de/statistik.php?export=tage')
print(tage.groupby('linie')['puenktlich_prozent'].mean())
8. Lizenz und Namensnennung
Bitte bei jeder Weitergabe nennen
Status je Fahrt, Ereignisse, Verspätungen, Pünktlichkeit, Ausfälle, Abfahrten und Rohdaten sind aus dem Echtzeit-Datenstrom und dem Fahrplan von VBN/connect abgeleitet, die unter CC BY-SA 4.0 stehen. Sie stehen deshalb ebenfalls unter CC BY-SA 4.0: Weitergabe und Bearbeitung sind erlaubt, mit Namensnennung und unter den gleichen Bedingungen.
Datenquelle: VBN/connect (CC BY-SA 4.0), Auswertung: bus.roringen.de
Fahrgastangaben („Wie voll?“) sind Beiträge der Besucherinnen und Besucher und stehen unter CC BY 4.0. Veröffentlicht werden nur Zusammenfassungen, keine einzelnen Angaben.
Fahrgastangaben: Besucherinnen und Besucher von bus.roringen.de (CC BY 4.0)
Wetter: stündliche Werte für Roringen von Open-Meteo, CC BY 4.0.
Wetterdaten: Open-Meteo.com (CC BY 4.0)
Die Daten sind nach bestem Wissen aufbereitet, aber ohne Gewähr – maßgeblich für Fahrgäste bleiben die Angaben der Verkehrsunternehmen. Die HTTP-Antworten der Downloads tragen zusätzlich einen Verweis auf die Lizenz (Link: <…>; rel="license").