Fallstudie · open-climate-data
Datenherkunft
Eine Zahl, die ihre Quelle mitführt und sie durch die ganze Rechnung weiterträgt.
Zwei Datensätze, jedes Feld änderbar, dazu eine Schaltfläche, die ein Pflichtfeld entfernt, damit die Verweigerung zu sehen ist statt beschrieben zu werden.
Fragestellung
Ein Wert für die Netzintensität lautet 412 gCO2e pro kWh. Ein halbes Jahr später fragt jemand, woher er stammt, und die ehrliche Antwort ist meist ein Schulterzucken: die Zahl wurde aus einem Portal kopiert, das Portal hat sie seither korrigiert, und die Parameter, die sie erzeugt haben, sind verschwunden. Nichts an der Art, wie die Größe gespeichert wurde, hätte das verhindert. Sie wurde als Zahl gespeichert.
Eine Quellenangabe neben der Zahl überlebt den Kontakt mit einer Berechnung nicht. Sobald zwei belegte Größen geteilt, multipliziert oder addiert werden, ist das Ergebnis eine gewöhnliche Fließkommazahl und die Notizen liegen woanders, in einem Kommentar, einer Zelle rechts daneben oder einem Dokument, das niemand öffnet. Veröffentlichte Arbeit besteht fast nur aus abgeleiteten Größen, und damit ist der Ort, an dem die Herkunft gebraucht wird, genau der Ort, an dem sie verloren ging.
Darunter liegt ein leiseres Versagen. Ein Datensatz hat Versionen, und ein Abruf hat einen Zeitpunkt. Eine im März aus der Ausgabe 2024 gelesene Größe ist nicht dieselbe wie eine im September aus demselben Datensatz nach einer Korrektur gelesene, und als nackte Zahlen gespeichert sind beide nicht zu unterscheiden. Ebenso wenig eine Größe, deren Abfrage niemand festgehalten hat: derselbe Datensatz, dieselbe Version, derselbe Zeitpunkt, ein anderer Ländercode, und zwei völlig verschiedene Zahlen, die in einer Tabelle identisch aussehen.
Methode
Ein zitierter Wert besteht aus Betrag, Einheit und Herkunftskette, und die Herkunftskette ist das, was die Arithmetik bewahrt. Fünf Felder sind bei jedem Datensatz Pflicht: Quelle, Datensatz, Version, Abrufzeitpunkt und Lizenz. Ohne sie entsteht kein Datensatz, und nennt eine Quelle keine Lizenz, lautet der Eintrag unbekannt, damit die Lücke festgehalten und nicht verborgen wird. Die Identität ist die kanonische Form des Datensatzes, also sortierte Schlüssel in jeder Tiefe und ein auf UTC normalisierter Zeitstempel, gehasht. Zwei Datensätze gelten genau dann als derselbe Abruf, wenn sie denselben Abruf beschreiben, wie auch immer die Felder zusammengesetzt und in welchem Zeitversatz die Zeit geschrieben wurde.
Zwei Herkunftsketten zu verschmelzen ist die Vereinigung über diesen Identitäten. Das macht die Operation kommutativ, assoziativ und idempotent, mit der leeren Kette als neutralem Element, und genau diese Gesetze garantieren, dass die Reihenfolge des Kombinierens nicht ändern kann, zu welchen Quellen sich die Antwort bekennt. Die Python-Testsuite prüft sie direkt, statt sie anzunehmen, und führt die zentrale Invariante über vierhundert zufällig erzeugte arithmetische Ausdrucksbäume: bei jedem muss die entstehende Kette genau die Menge der beitragenden Blätter sein, und der entstehende Betrag muss demselben Ausdruck auf gewöhnlichen Fließkommazahlen entsprechen.
Was es leistet
Zwei Datensätze nebeneinander, jedes Feld bearbeitbar. Eine Schaltfläche erzeugt sie, eine zweite nimmt ein Pflichtfeld weg, damit die Verweigerung zu sehen und nicht nur zu beschreiben ist. Darunter kombiniert eine Auswahl der Operation beide und gibt das Ergebnis mit den Quellen aus, zu denen es sich bekennt. Ein drittes Feld prüft beide Datensätze und den abgeleiteten Wert als ein Dokument: was veraltet ist, was keine Adresse hat, was keine Abfrage festgehalten hat und ob die Lizenzen vermischt wurden.
Was es ausdrücklich nicht leistet
Es verweigert, einen Datensatz mit fehlendem Pflichtfeld zu erzeugen. Auf der Seite gibt es eine Schaltfläche, deren einzige Aufgabe es ist, das Lizenzfeld zu leeren, denn die Verweigerung ist das Merkmal, und eine beschriebene Verweigerung ist nicht dasselbe wie eine gesehene. Eine Größe, deren Lizenz niemand festgehalten hat, ist keine Größe, die Sie veröffentlichen können, und die Bibliothek bricht ab, statt die Lücke zu füllen.
Es verweigert einen Zeitstempel ohne Zeitzone. Ein Moment ohne angehängten Versatz ist kein Moment, und UTC anzunehmen würde zwei verschiedene Abrufe stillschweigend zu einem machen. Die Seite benennt die Form, die sie verlangt, statt die Form zu raten, die sie bekommen hat.
Es verweigert die Aussage, ob zwei Lizenzen in einer veröffentlichten Größe kombiniert werden dürfen. Es sagt Ihnen, dass sie vermischt wurden, und es benennt sie. Ob das Kombinieren zulässig ist, ist eine Rechtsfrage mit einer Rechtsordnung daran, und eine Bibliothek kann sie nicht aus einer Berechnung heraus beantworten. Dafür zu sorgen, dass Sie es vor dem Veröffentlichen wissen und nicht danach, kann sie, und dort hört sie auf.
Zum Schluss
Dies ist das Fundament, auf dem der Rest jenes Repositorys aufbaut, und es ist der Teil davon, der am weitesten verallgemeinert. Der Anspruch, den eine veröffentlichte Größe erhebt, betrifft nicht wirklich die Zahl. Er betrifft, ob jemand dorthin zurückfindet, woher die Zahl kam, und das ist lange vor einer Eigenschaft sorgfältigen Zitierens eine Eigenschaft der Speicherung.