Metadaten-Güte nach dem MQA-Schema (v63) - #60
Merged
Conversation
completeness() zaehlte gefuellte Pflichtfelder. Ein Datensatz mit allen Pflichtangaben stand damit auf 100 % - auch ohne Schlagwoerter, ohne Zeitraum und nur als PDF. Genau dagegen richtet sich der Leitgedanke der Metadata Quality Assurance von data.europa.eu: "filling the DCAT-AP mandatory fields alone is not sufficient". Die Zahl folgt jetzt deren Schema: fuenf FAIR-Dimensionen, 405 Punkte, 18 Einzelpruefungen. Auffindbarkeit 100 Schlagwoerter, Kategorie, Raum, Zeit Zugaenglichkeit 100 Zugriffs-URL, Info-Seite, Zugriffsrechte Interoperabilitaet 110 Format, maschinenlesbar, offen, Zyklus Nachnutzbarkeit 75 Lizenz je Verteilung, offen, Herausgeber, Kontakt Kontext 20 Beschreibung, Titel, Datum ERSATZ STATT DRITTES MASS: der Funktionsname bleibt, damit Badge, Durchschnitt, Sortierung, Dashboard, Status-Einseiter und PDF-Bericht weiter an genau EINER graduellen Zahl haengen. Ein frischer Import faellt damit von ~83 % auf ~46 % - das ist der Zweck, nicht ein Nebeneffekt. Die Bestnote bleibt erreichbar (ein rundum gepflegter Datensatz erreicht 100 %), sonst waere die 80-%-Schwelle eine Schikane; ein Test haelt das fest. SAUBER GETRENNT, WAS UEBERNOMMEN IST: die fuenf Dimensionen und ihre Gewichte stammen aus der Methodik (Quelle: Recherchebericht des Nutzers). Die Zuordnung der Einzelpruefungen und ihre Punkte innerhalb einer Dimension sind eigene Zutat - die Aufteilung im Original lag nicht vor. Ein Test pinnt die Gewichte woertlich und prueft, dass jede Dimension genau ihr Maximum ausschoepft. AUSDRUECKLICH BENANNT, WAS DER WERT NICHT IST: die MQA ruft URLs tatsaechlich ab und prueft, ob sie antworten. DatenLotse macht keine Netzaufrufe und prueft deshalb nur, ob eine Angabe da und wohlgeformt ist. Der Kasten im Qualitaets-Tab sagt das. MQA_OFFENE_FORMATE ist eine Positivliste: "nicht herstellergebunden" laesst sich nicht aus dem Fehlen von etwas ableiten, unbekannte Formate zaehlen deshalb nicht mit. renderMqaSummary() zeigt die Dimensionen ueber den ganzen Bestand gemittelt plus die drei schwaechsten Einzelpruefungen - "Auffindbarkeit 20 %" ist ein Arbeitsauftrag, ein Durchschnitt ist nur eine Zahl. Nebenbei: empty() existierte zweimal wortgleich als lokale Hilfe in validateDataset() und inventoryIssues(); jetzt einmal modulweit. 8 neue Tests (361 gesamt), drei bestehende auf die neue Semantik umgeschrieben statt gelockert. Der staerkste Test geht die 18 Pruefungen einzeln durch und misst, ob jede ihre vollen Punkte ausmacht. Ein erster Mutationsversuch war zu schwach gewaehlt und lief gruen durch - erst die schaerfere Fassung machte ihn rot. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011QxDJcLg9h8zdL9ZpTTty7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
completeness()zählte gefüllte Pflichtfelder. Ein Datensatz mit allen Pflichtangaben stand damit auf 100 % — auch ohne Schlagwörter, ohne Zeitraum und nur als PDF. Genau dagegen richtet sich der Leitgedanke der Metadata Quality Assurance von data.europa.eu: „filling the DCAT-AP mandatory fields alone is not sufficient".Das Schema
Ersatz, nicht drittes Maß
Der Funktionsname bleibt, damit Badge, Durchschnitt, Sortierung, Dashboard, Status-Einseiter und PDF-Bericht weiter an genau einer graduellen Zahl hängen.
Ein frischer Import fällt damit von ~83 % auf ~46 %. Das ist der Zweck, kein Nebeneffekt — die alte Zahl war zu freundlich. Die Bestnote bleibt erreichbar: ein rundum gepflegter Datensatz erreicht 100 %, sonst wäre die 80-%-Ampelschwelle eine Schikane. Ein Test hält das fest.
Sauber getrennt: was übernommen ist und was nicht
Ein Test pinnt die fünf Gewichte wörtlich und prüft, dass jede Dimension genau ihr Maximum ausschöpft. Wer eine Prüfung ergänzt, muss innerhalb der Dimension umverteilen statt die Summe zu verschieben.
Was der Wert ausdrücklich nicht ist
Das steht so im Kasten im Qualitäts-Tab. Ohne diesen Satz würde jemand aus „380 von 405" schließen, das Portal werde dasselbe sagen.
Zwei kleinere Entscheidungen
MQA_OFFENE_FORMATEist eine Positivliste. „Nicht herstellergebunden" lässt sich nicht aus dem Fehlen von etwas ableiten — unbekannte Formate zählen deshalb nicht mit, statt großzügig durchgewunken zu werden.renderMqaSummary()mittelt über den ganzen Bestand und nennt die drei schwächsten Einzelprüfungen. Der Einzelwert steht schon auf der Karte; hier interessiert, wo das Inventar schwach ist — „Auffindbarkeit 20 %" ist ein Arbeitsauftrag, ein Durchschnitt ist nur eine Zahl.Nebenbei:
empty()existierte zweimal wortgleich als lokale Hilfe invalidateDataset()undinventoryIssues()— jetzt einmal modulweit.Tests
8 neue Tests, 361 gesamt, alle grün. Drei bestehende wurden auf die neue Semantik umgeschrieben statt gelockert — sie prüfen jetzt, dass eine fehlende Lizenz weiterhin Punkte kostet und dass die v39-Migration die Bewertung nicht verändert.
Der stärkste Test geht die 18 Prüfungen einzeln durch: er leert jeweils genau das, was eine Prüfung braucht, und misst, ob die Differenz ihren vollen Punkten entspricht. Eine wirkungslos in der Liste hängende Prüfung fällt damit sofort auf.
Vier Mutationen geprüft. Der erste Versuch bei der Formatliste war zu schwach gewählt und lief grün durch — „Wolkenformat" enthält keinen der Tokens, eine gelockerte Wortgrenze ändert daran nichts. Erst die schärfere Fassung (Positivliste akzeptiert alles) machte den Test rot.
node tools/generate-wissen.js --check→ 9 Seiten aktuell.🤖 Generated with Claude Code
https://claude.ai/code/session_011QxDJcLg9h8zdL9ZpTTty7
Generated by Claude Code