Werkzeuge rund um die Frage: Welches Wissen fehlt in Wikidata noch als strukturierte Aussage? Alle erzeugen ausschließlich Vorschlagslisten, Auswertungen und Graphen zur manuellen Prüfung — es wird nie automatisch nach Wikidata geschrieben.
| Anwendung | Verzeichnis | Was sie macht |
|---|---|---|
| Wikidata Knowledge Graph | wikikg/ | Vergleicht die ausgehenden Links eines Wikipedia-Artikels mit den Statements des zugehörigen Wikidata-Items und zeigt fehlende Beziehungen. Enthält zusätzlich den browserbasierten Wortfeld-Explorer. |
| Materials Wiki | materialswiki/ | Holt Strukturdaten aus der Crystallography Open Database, kuratierte Materialdaten aus dem Materials Project und, für alles Fehlende, aus den Wikipedia-Infoboxen; schlägt daraus Wikidata-Statements für bereits existierende Items vor (Markdown-Tabelle + QuickStatements-Entwurf). Braucht einen API-Schlüssel (nur für das Materials Project, COD ist frei zugänglich). |
| Benchmark | benchmark/ | Misst, wie gut metallische Werkstoffe in Wikidata belegt sind — je Property aus dem WikiProject Materials. Zeigt, wo Vorschläge sich überhaupt lohnen. |
| Material class structure | Material%20class%20structure/ | Zwei Werkzeuge zur Klassenhierarchie der Werkstoffe. ClassCheck prüft auf zwölf Arten, wie P279 („Unterklasse von") verwendet wird — fehlende, doppelte, verkehrte und mit P31 verwechselte Kanten, dazu die fehlende chemische Metaklasse der Legierungen — und schreibt eine gestaffelte Empfehlung: vier Stufen nach Beweiskraft, ausführbar ist nur die erste. visualisierung zeichnet, wie Werkstoffe unter material (Q214609) hängen und welche über einen parallelen Zweig laufen. |
| Anwendungen | Anwendung/ | Leitet ab, wozu ein Werkstoff gebraucht wird: aggregiert die P186-Rückverweise der Objekte (21495 Items der Klasse „Münze" nennen Bronze) zu P366-Vorschlägen am Werkstoff und entwirft, wo es ohne Quantorensprung geht, die Rückkante P186 am Anwendungsitem. Filtert dabei Verbundgegenstände (Wolkenkratzer, Fahrzeuge) und zu eng gefasste Klassen heraus. Für P2079, das in Wikidata fast leer ist, liest sie die Herstellungsabschnitte der deutschen und englischen Wikipedia aus und schlägt die dort verlinkten Verfahren mit Beleg auf die Artikelversion vor. |
Details, Nutzung und Grenzen stehen jeweils im README der Anwendung: wikikg/README.md · materialswiki/README.md · benchmark/README.md · Material%20class%20structure/README.md · Anwendung/README.md ·
wikikg/ Wikipedia ↔ Wikidata Abgleich
cli.py Kommandozeile (python -m wikikg)
compare.py reine Vergleichslogik, netzwerkfrei und offline testbar
wikipedia_client.py MediaWiki-API: Titel → QID, ausgehende Links
wikidata_client.py Wikidata-API: ausgehende Item-Statements, Property-Labels
web/ Wortfeld-Explorer (statisches HTML, D3 + SPARQL)
materialswiki/ Materials Project → Wikidata Vorschläge
cli.py Kommandozeile (python -m materialswiki) inkl. Abgleichlogik
Werkstoff wikidata vorschläge.py
Multi-Source-Variante (Materials Project + PubChem)
benchmark/ Abdeckungsmessung der Werkstoff-Properties in Wikidata
benchmark.py Kommandozeile (python -m benchmark.benchmark)
properties_snapshot.json Momentaufnahme der Property-Liste (für --offline)
Material class structure/ Klassenhierarchie der Werkstoffe: prüfen und zeichnen
ClassCheck.py zwölf Strukturprüfungen -> gestaffelte Empfehlung
visualisierung.py Anbindung an die Wurzel als Graph (PNG)
wikidata_graph.py gemeinsame Wikidata-Zugriffsschicht beider Skripte
Anwendung/ Anwendungen der Werkstoffe (P366/P186/P2079) entwerfen
Anwendung.py Kommandozeile (python "Anwendung/Anwendung.py")
lauf.py Dialog vor Benchmark + materialswiki + ClassCheck + Anwendung
tests/ Offline-Tests (pytest)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtrequirements.txt enthält alles: requests für alle
Anwendungen, networkx + matplotlib zusätzlich für die
Kategorie-Hierarchie-Graphen und pytest für die Tests.
Gestartet wird aus dem Repo-Wurzelverzeichnis heraus:
python -m wikikg --title Holz --lang de
python -m materialswiki --elements Ti O --max 50
python -m benchmark.benchmark --offline
python "Anwendung/Anwendung.py"
python "Material class structure/visualisierung.py"python -m lauf ist ein Dialog vor die vier Werkzeuge geschaltet
(Benchmark, materialswiki, ClassCheck.py, Anwendung.py). Er nimmt keine
Argumente mehr, sondern fragt der Reihe nach:
- Grundgesamtheit — welche Population? Danach die Ausgabe, wie viele Items das betrifft.
- Batchgröße — nur bei mehr als 200 Items (mind. 100, Vorgabe 500). Der Vorschlagslauf arbeitet dann in Chargen und lässt sich fortsetzen.
- Umfang — Mehrfachauswahl aus den Schritten
benchmark,vorschlaege,struktur(die jede Population hat) undanwendungen(nurlegierungen).
Alle gewählten Schritte laufen nacheinander, tragen denselben Zeitstempel und
landen zusammen in proposals/ — je Lauf ein Protokoll
(<stempel>_lauf_<population>.log) für alle Schritte. Der Zeitstempel steht
vorn im Dateinamen, damit sich die Läufe chronologisch sortieren. Die
Vorschlags-Stufe schreibt dabei keine Markdown-Tabelle; ihr
QuickStatements-Entwurf (<stempel>_qs_<population>.txt) trägt ohnehin jede
Zeile (Abschnitt 1
einspielbar, 2 zur Klärung, 3 vorhanden). Bricht ein Schritt ab, startet der
nächste nicht mehr. Gibt es einen unterbrochenen Chargenlauf, bietet der
Dialog vor der ersten Frage an, ihn fortzusetzen.
Die vier Werkzeuge behalten daneben ihre eigenen Schalter
(python -m materialswiki …, python -m benchmark.benchmark …,
python "Material class structure/ClassCheck.py" …,
python "Anwendung/Anwendung.py" …) — mit --out-dir / --md / --out
landen auch ihre Einzelläufe in proposals/.
Vorschlagsdateien (Markdown-Tabellen, QuickStatements, die gestaffelte
Empfehlung) landen in proposals/ (CLAUDE.md, „Arbeitsweise" Punkt 2) —
--out / --qs-out / --md / --out-dir verlegen sie. Graphen und
--output bleiben im aktuellen Arbeitsverzeichnis. Alle diese Dateien sind
Momentaufnahmen eines Laufs und stehen in .gitignore — sie
gehören nicht ins Repo:
| Datei | Erzeugt von |
|---|---|
proposals/<Zeitstempel>_vorschlaege.md, proposals/<Zeitstempel>_qs.txt |
materialswiki/cli.py |
werkstoffe_vorschlaege.md, werkstoffe_qs_entwurf.txt |
materialswiki/Werkstoff wikidata vorschläge.py |
abdeckung.md (nur mit --md) |
benchmark/benchmark.py |
proposals/<Zeitstempel>_qs_class_<Population>.txt (und <Zeitstempel>_qs_class_befunde_*.md nur mit --md) |
Material class structure/ClassCheck.py |
die gewählten Schritte (<stempel>_abdeckung_*, <stempel>_qs_*, <stempel>_qs_class_* + _qs_class_befunde_*, <stempel>_qs_anwendungen_* + _anwendungen_befunde_*) mit gemeinsamem, vorangestelltem Zeitstempel in proposals/, dazu ein Protokoll <stempel>_lauf_<population>.log; die Vorschlags-Stufe läuft mit --no-tabelle (keine *_vorschlaege.md) |
lauf.py (Dialog) |
proposals/<Zeitstempel>_anwendungen_befunde.md, proposals/<Zeitstempel>_qs_anwendungen.txt |
Anwendung/Anwendung.py |
trace_*.png, szenario_* (nur --szenario), subclass_tree_material.png (nur --tree) |
Material class structure/visualisierung.py |
output/… (--output) |
wikikg/cli.py |
Einzige bewusst versionierte Ergebnisdatei ist
benchmark/properties_snapshot.json:
Sie hält die Property-Liste der Projektseite fest und macht --offline-Läufe
reproduzierbar.
Alle Skripte drosseln sich auf eine Anfrage pro Sekunde
(REQUEST_DELAY_SEC = 1.0). Vor produktiver Nutzung ist der USER_AGENT im
jeweiligen Skript mit echtem Namen und Kontaktadresse zu füllen — so verlangt
es die
Wikimedia-User-Agent-Richtlinie.
API-Schlüssel und Kontaktadresse liest konfig.py
ausschließlich aus der Prozessumgebung (os.environ) — keine zweite
Quelle, keine Suche in Arbeitsverzeichnissen.
Damit man die Werte nicht bei jedem Aufruf exportieren muss, spiegelt
konfig.py beim Import einmalig die Datei .env.api-keys im
Repo-Wurzelverzeichnis in die Umgebung — aber nur Namen, die dort noch nicht
gesetzt sind. Die Datei ist über .gitignore (.env.*) vom
Repo ausgeschlossen und wird nie committet.
Einrichten (die Datei liegt schon da, mit leeren Platzhaltern):
chmod 600 .env.api-keys
# dann .env.api-keys ausfüllen — oder die Werte stattdessen exportieren| Eintrag | Wofür |
|---|---|
MP_API_KEY |
Materials Project, Pflicht für materialswiki (kostenlos unter https://next-gen.materialsproject.org/api) |
CONTACT_EMAIL |
landet im User-Agent aller Anwendungen — so verlangt es die Wikimedia-Richtlinie |
CONTACT_NAME |
Klarname für den User-Agent (optional) |
MP_ACCOUNT_EMAIL, WIKIDATA_USERNAME |
nur zur Dokumentation, werden nicht abgefragt |
Eine echte Umgebungsvariable gewinnt immer gegen den Dateiwert — ein einzelner Lauf lässt sich so umstellen, ohne die Datei zu ändern:
MP_API_KEY=zweitschluessel python -m materialswiki --periodic-tablekonfig.py sind 20 Zeilen ohne zusätzliche Abhängigkeit; python-dotenv
wäre dafür zu viel.
pytestGetestet wird die netzwerkfreie Logik:
| Datei | Deckt ab |
|---|---|
| tests/test_compare.py | Wikipedia-↔-Wikidata-Vergleich |
| tests/test_formula.py | Formel-Normalisierung und Infobox-Parser |
| tests/test_mp.py | Materials-Project-Feldabbildung und Einheitenumrechnung |
| tests/test_quickstatements.py | Aufbau des QuickStatements-Entwurfs |
Alle Tests laufen offline und brauchen keinen API-Schlüssel.
Die Vorschlagslisten (vorschlaege*.md, qs_*.txt)
enthalten abgeleitete Daten aus fremden Datenbanken. Wer sie weitergibt, gibt
diese Daten mit weiter — deshalb hier die Herkunft und die jeweiligen
Bedingungen:
| Quelle | Lizenz | Was daraus stammt | Pflichten |
|---|---|---|---|
| Wikidata selbst (P274) | CC0 (Public Domain) | „besteht aus" (P527) und „enthält Elemente von" (P2670), aus der Summenformel abgeleitet — Stufe abgeschaltet, nur mit --formel |
keine |
| Materials Project | CC BY 4.0 | Dichte, elastische Moduln, Poissonzahl; Kristallsystem nur als Rückfall | Namensnennung + Zitierung, siehe unten |
| Crystallography Open Database | CC0 (Public Domain) | Raumgruppe, Kristallsystem, COD-ID | keine; Nennung der Originalautoren erbeten |
| Wikipedia (de/en) | CC BY-SA 4.0 | Infobox-Werte als Rückfall | Namensnennung, Weitergabe unter gleichen Bedingungen |
Die Nutzungsbedingungen stellen die Daten unter CC BY 4.0 und verlangen die Zitierung der Hauptpublikation:
A. Jain, S.P. Ong, G. Hautier, W. Chen, W.D. Richards, S. Dacek, S. Cholia, D. Gunter, D. Skinner, G. Ceder, K.A. Persson: The Materials Project: A materials genome approach to accelerating materials innovation. APL Materials 1(1), 011002 (2013). doi:10.1063/1.4812323
Für einzelne Datensätze kommt eine eigene Zitierung hinzu. Betroffen sind hier Kompressionsmodul, Schubmodul und Poissonzahl:
M. de Jong et al.: Charting the complete elastic properties of inorganic crystalline compounds. Scientific Data 2:150009 (2015). doi:10.1038/sdata.2015.9
Beide DOIs schreibt materialswiki automatisch in den Referenzblock jeder
betroffenen Aussage (MP_DATASET_DOI in materialswiki/cli.py).
Weiter gilt laut Nutzungsbedingungen: Die Website darf nicht gescrapt werden — der Zugriff läuft ausschließlich über die offizielle API. Größere Abrufe sollen vorab beim MP-Support angekündigt werden. Und: die Daten sind berechnet (DFT bei 0 K), nicht gemessen; jede erzeugte Aussage trägt deshalb den Qualifikator P459 „berechnet (Dichtefunktionaltheorie)".
Wikidata veröffentlicht alle Inhalte unter CC0 — eine Lizenz, die eine Attributionspflicht nicht weiterträgt. Der Import von CC-BY-Daten (Materials Project) und CC-BY-SA-Daten (Wikipedia) stützt sich darauf, dass einzelne Faktenaussagen nicht urheberrechtlich schutzfähig sind und die Attribution über die mitgeschriebene Referenz faktisch geleistet wird. Bei einem systematischen Massenimport kann zusätzlich das Datenbankherstellerrecht berührt sein. Das ist der Grund, warum die Werkzeuge hier ausschließlich Vorschlagslisten erzeugen und nie automatisch nach Wikidata schreiben — und warum COD (CC0) für Strukturangaben die bevorzugte Quelle ist, wo es etwas liefert.
Die Stufe „Formel" war von alledem nicht betroffen: sie leitet P527 und P2670
aus der Summenformel ab, die am Wikidata-Item bereits steht. Es wird nichts von
außen geholt und nichts weitergegeben — deshalb tragen diese Aussagen auch
keinen Beleg, sondern nur die Herkunftsnotiz in der Tabellenspalte ref_note.
Seit dem 27.08.2026 ist diese Stufe abgeschaltet: P527 und P2670 sollen
nicht mehr vorgeschlagen werden, und sie ist die einzige Stufe, die beide
erzeugt — samt der Umstellung bestehender Aussagen „Stoff P527 Element" auf
P2670, der einzigen Stufe mit Löschzeilen. Der Code bleibt erhalten; --formel
schaltet ihn für einen einzelnen Lauf wieder ein.
Der Code steht unter der Lizenz in LICENSE. Für die Daten in den erzeugten Ausgabedateien gelten die Lizenzen der jeweiligen Quelle (siehe oben).