Hilfe:Wikimedia Commons/Data
Dieses Hilfeseite erläutert die im Data:-Namensraum von Commons mögliche Hinterlegung maschinenlesbarer umfangreicher Einzeldaten.
Zweck und Vorteile:
- Informationen können für alle Wikis bereitgestellt und zentral gepflegt werden.
- Die Daten können von verschiedenster Software benutzt werden: Selbst definierte Rohdaten mittels Lua, spezielle Wiki-Software für Diagramme oder Landkarten, JavaScript-Werkzeuge, Export in externe Software (und ggf. auch Import).
- Mit Wikidata wird meist nur eine einzelne Zahl usw. pro Wikidata-Objekt verfügbar. Die Anzahl sämtlicher unterschiedlicher Objekte in der aktuell dargestellten Seite ist beschränkt (400); für sämtliche Anwendungen. Das kann leicht zum Problem werden, wenn eine Liste von Gegenständen befüllt werden soll. Generell gibt es Performance-Probleme, wenn viele Objekte abgerufen werden müssen; die Anzahl ist deshalb kaum zu steigern.
- Eine Datenseite sollte eine möglichst große Zahl zusammengehöriger Informationen enthalten, um die Menge der Zugriffe zu reduzieren und damit die Performance zu steigern, und eine gleichzeitige Bearbeitung zur Aktualisierung zu erleichtern.
Übliches Problem ist, dass die Daten der einfachen Beobachtung entzogen sind. Damit kann unbemerkt Vandalismus wie auch die gezielte inhaltliche Fälschung von Daten in alle nutzenden Wikis eingeschleust werden. Eine kontinuierliche Überwachung „letzter Änderungen“ ist ob der riesigen Flut an Bearbeitungen auf Commons kaum möglich. Daten-Seiten könnten geschützt werden, aber es gibt keinen Status als Vertrauensperson, der nicht zahlenmäßig auf übersichtliche Gruppen beschränkt werden müsste, aber gleichzeitig permanentes Einpflegen vieler Änderungen durch viele Zuständige auf vielen Wikis ermöglicht. Das Privileg zur Datei-Umbenennung wäre geeignet, ist aber keine Schutzklasse für Seiten.
Die Tabellen werden seit 2016 unterstützt.
Allgemeine technische Spezifikationen
[Bearbeiten | Quelltext bearbeiten]Jede einschlägige Seite im Namensraum Data: muss ein bestimmtes Inhaltsmodell als Untertyp *.JsonConfig erfüllen.
- Die Namen aller Daten-Seiten werden nach einem
.mit einem bestimmten Code („Erweiterung“) beendet. - Unterseiten sind möglich, aber nur vor der Erweiterung.
- Namenskonventionen oder andere Organisation des Namensraums sind nicht bekannt.
Standard-Komponenten
[Bearbeiten | Quelltext bearbeiten]Der Seiteninhalt muss genau ein Objekt mit der folgenden Struktur enthalten:
| Komponente | Status | Datentyp | Beschreibung |
|---|---|---|---|
license |
Pflicht | Zeichenkette | Eine Nutzungslizenz für die Daten.. |
mediawikiCategories |
optional | Array aus Kategorie-Objekten | Kategorisierung innerhalb von Commons. |
Datentypen
[Bearbeiten | Quelltext bearbeiten]Selbstdefinierte Objekte oder Arrays sind unzulässig.
- Funktionen bzw. deren Programmierung sind in JSON grundsätzlich nicht erlaubt.
- Es sind nur die nachstehenden vier Datentypen für eine Wertzuweisung möglich:
- Wahrheitswert (boolean)
- Nur die Werte
trueundfalsesind erlaubt.
- Nur die Werte
- Zahl (number)
- Zahlen können in verschiedensten in JavaScript möglichen Formaten angegeben werden:
42,4.6,7e-5,0x4A7Busw. - Eine Nicht-Zahl wie
NaNist nicht erlaubt.
- Zahlen können in verschiedensten in JavaScript möglichen Formaten angegeben werden:
- Zeichenkette (string)
- Eine Text-Zeichenkette mit maximal 400 Zeichen. Sonderzeichen wie neue Zeilen
\nund Tabulatoren\tsind nicht zulässig. Zeichenketten sind in"einzuschließen. - Soll im Text
"vorkommen, muss es durch\"escaped werden; ein einzelner\ist als\\anzugeben.
- Eine Text-Zeichenkette mit maximal 400 Zeichen. Sonderzeichen wie neue Zeilen
- Lokalisierte Zeichenkette (localized)
- Wahrheitswert (boolean)
Lokalisierte Zeichenkette
[Bearbeiten | Quelltext bearbeiten]Eine Zeichenkette kann mehrsprachig (lokalisiert) werden und ist dann als Objekt mit folgenden Zuweisungen anzugeben:
- Sprachcode → Text in Sprache und Schrift (Zeichenkette)
Dabei ist Sprachcode ein ISO-Code aus zwei bis drei Kleinbuchstaben. Erweiterungen gemäß BCP 47 sind zurzeit nicht möglich.
Beispiel:
{ "en": "date",
"de": "Datum"
}
JSON-Format
[Bearbeiten | Quelltext bearbeiten]- Eine Zuweisung besteht aus dem Namen der Komponente, einem Doppelpunkt
:und dem zugewiesenen Wert.- Während dies bei allgemeinen JavaScript-Objekten nicht erforderlich ist, muss in JSON der Name in Anführungszeichen
"eingeschlossen werden. - Jedes Objekt ist in geschweifte Klammern
{}einzuschließen. - Es enthält Zuweisungen Name→Wert.
- Jeder Name darf nur einmal vorkommen.
- Aufeinanderfolgende Zuweisungen (=Komponenten) werden durch Kommata getrennt.
- Während dies bei allgemeinen JavaScript-Objekten nicht erforderlich ist, muss in JSON der Name in Anführungszeichen
- Ein Array ist in eckige Klammern
[]einzuschließen.- Es enthält eine sortierte Aufzählung von Elementen, durch Kommata getrennt.
- Nach der letzten Komponente bzw. dem letzten Element darf kein Komma stehen.
- Leerzeichen und Zeilenumbrüche außerhalb von Zeichenketten sind beliebig.
Lizenzierung
[Bearbeiten | Quelltext bearbeiten]Eine Lizenzierung ist auf jeder Seite Pflichtangabe. Die empfohlene Lizenz ist Gemeinfreiheit – Creative Commons Zero („CC0“).
- Die anzugebende Zeichenkette hierfür ist:
"CC0-1.0" - Auf mw: sind weitere Lizenz-Codes benannt, sofern diese erforderlich werden, etwa wegen großflächiger Übernahme einer externen Datenquelle.
Kategorisierung
[Bearbeiten | Quelltext bearbeiten]Als mediawikiCategories kann ein Array aus Objekten angegeben werden, bei denen für jedes gilt:
| Komponente | Status | Datentyp | Beschreibung |
|---|---|---|---|
name |
Pflicht | Zeichenkette | Titel einer Kategorie innerhalb von Commons. |
sort |
optional | Zeichenkette | Sortierschlüssel. |
Die Kategorisierung erfolgt in geeignete Unterkategorien von commons:Category:Data (namespace).
Basis-Beispiel
[Bearbeiten | Quelltext bearbeiten]Das nachstehende Beispiel zeigt eine leere Hülle ohne Nutz-Informationen.
{ "license": "CC0-1.0"
}
Spezielle Anwendungen
[Bearbeiten | Quelltext bearbeiten]Es gibt verschiedene Untermodelle für bestimmte Strukturen.
Sie ergeben sich nur aus dem Inhaltsmodell und der Erweiterung des Seitennamens; eine Deklaration innerhalb des Objekts wurde leider nicht eingeplant.
Allgemeine Tabelle
[Bearbeiten | Quelltext bearbeiten]Eine ansonsten beliebige, jedoch rechteckige Tabelle kann vereinbart werden.
- Inhaltsmodell:
Tabular.JsonConfig - Namenserweiterung:
.tab
Es sind nur Spalten möglich, in denen alle Elemente den gleichen Datentyp haben. Jede Zeile muss die gleiche Abfolge von Spalten wiederholen.
Das Importieren und Exportieren im CSV- bzw. Excel-Format von tabellarischen Daten kann mit dem Helferlein MediaWiki:Gadget-TabularImportExport.js erfolgen (das Helferlein wird auf Special:Preferences#mw-prefsection-gadgets aktiviert).
| Komponente | Status | Datentyp | Beschreibung |
|---|---|---|---|
schema |
Pflicht | Objekt mit einer Komponente fields
|
Strukturdeklaration der Spalten.
|
data |
Pflicht | Array aus Arrays | Inhalte der Spalten.
|
description |
optional | lokalisierte Zeichenkette | Beschreibung der Gesamt-Tabelle. |
sources |
optional | Zeichenkette | Die Herkunft der Daten. Wikitext ist zulässig und wird ausgewertet; eine nackte URL könnte auch benutzt werden.
|
Datentypen
[Bearbeiten | Quelltext bearbeiten]Die Nutzdaten müssen einen von vier Datentypen erfüllen:
- Wahrheitswert (boolean)
- Zahl (number)
- Zeichenkette (string)
- lokalisierte Zeichenkette (localized)
- Ein Array ist nicht möglich, aber eine Zeichenkette kann aus Teil-Zeichenketten zusammengesetzt werden, die durch Leerzeichen oder Pipe-Symbole
|leicht zu zerlegen wäre. - Ähnlich könnte ein Objekt geschaffen werden aus einer durch Leerzeichen getrennten Abfolge
name=Wert und die Werte kodieren notfalls enthaltene Leerzeichen. - Ein Datum sollte zur internationalen Kompatibilität als Zeichenkette
"JJJJ-MM-TT"gemäß ISO 8601 angegeben werden.
Spalten-Objekt
[Bearbeiten | Quelltext bearbeiten]Jede Spalte ist als Objekt mit folgenden Zuweisungen zu deklarieren:
| Komponente | Status | Datentyp | Beschreibung |
|---|---|---|---|
name |
Pflicht | Zeichenkette | Name der Spalte.
|
type |
Pflicht | Zeichenkette | Datentyp der Spalte.
|
title |
optional | lokalisierte Zeichenkette | Überschrift der Spalte, Erklärung des Inhalts. |
Beispiel
[Bearbeiten | Quelltext bearbeiten]- commons:Data:ISO3166/codes.tab
- Zwei Spalten mit Zeichenketten. Erläuterung der Tabelle mehrsprachig. Zweite Spalte als Array aus Leerzeichen-getrennten Einzelwerten.
Weitere Infos
[Bearbeiten | Quelltext bearbeiten]- Tabular Data Resource. frictionlessdata.io, 2017.
- MediaWiki (deutsch).
Diagramm (Chart)
[Bearbeiten | Quelltext bearbeiten]Siehe Hilfe:Chart.
- Inhaltsmodell:
Chart.JsonConfig - Namenserweiterung:
.chart
| Komponente | Status | Datentyp | Beschreibung |
|---|---|---|---|
version |
Pflicht | Zahl | Verwendete Chart-Schema-Version. |
source |
Pflicht | Zeichenkette | Seitentitel in commons:Data: mit Datentabelle.
|
type |
Pflicht | Zeichenkette | Art des darzustellenden Diagramms.
|
title |
optional | lokalisierte Zeichenkette | Titel des Diagramms. |
Weitere Komponenten können je nach Art des Diagramms hinzukommen.
- Die Schöpfungshöhe einer Design-Definition für ein Diagramm dürfte bei Null liegen, mithin
"license":"CC0-1.0", für die Aggregation der dargestellten Daten muss dies jedoch nicht zutreffen.
Landkarte (Kartographer)
[Bearbeiten | Quelltext bearbeiten]Siehe Hilfe:Kartographer.
- Inhaltsmodell:
Map.JsonConfig - Namenserweiterung:
.map
| Komponente | Status | Datentyp | Beschreibung |
|---|---|---|---|
data |
Pflicht | Objekt | GeoJSON-Inhalte usw. |
description |
optional | lokalisierte Zeichenkette | Beschreibung der Karte. |
sources |
optional | Zeichenkette | Die Herkunft der Daten. Wikitext ist zulässig und wird ausgewertet; eine nackte URL könnte auch benutzt werden.
|
zoom |
optional | Zahl | Ganze Zahl zwischen 0 and 18. Nur verwendet für die eigene Vorschau, nicht bei Einbindung in andere Seiten. |
latitude |
optional | Zahl | Geografische Breite; -90 … 90 – nur verwendet für die Zentrierung der eigenen Vorschau, nicht bei Einbindung in andere Seiten.
|
longitude |
optional | Zahl | Geografische Länge; nur verwendet für die Zentrierung der eigenen Vorschau, nicht bei Einbindung in andere Seiten. |
Die Schöpfungshöhe einer Landkarten-Beschreibung dürfte bei Null liegen, mithin "license":"CC0-1.0", für die Aggregation der dargestellten Daten muss dies jedoch nicht zutreffen.
Seitenbearbeitung
[Bearbeiten | Quelltext bearbeiten]Zunächst kann die Datenseite nur im Ganzen als Quelltext zur Bearbeitung geöffnet werden.
- Danach kann bei einer Allgemeinen Tabelle über den Button „Als Tabelle bearbeiten“ der Block
dataauch in einfacher Form in einem Dialog bearbeitet werden. - Alternativ kann der Quelltext über externe Werkzeuge manipuliert und kopiert werden.
- Werkzeuge zum Import/Export sowie zur Konvertierung können herangezogen werden.
Eine Formatierung des Quelltextes ist sinnlos; beim Abspeichern wird eine standardisierte Formatierung hergestellt.
In der Vorschau und Seitenansicht wird die Struktur ggf. als Tabelle dargestellt, oder für eine Anwendung ausgewertet.
Debugger / Validierer
[Bearbeiten | Quelltext bearbeiten]Die syntaktische Gültigkeit des Codes kann vor dem Speichern überprüft werden; in der Seitenvorschau wird entweder eine erwartete Tabelle gezeigt, oder im Fehlerfall das Feld rot ausgefüllt.
Es eignen sich:
- json-validate.com – der Code kann auf diese Seite kopiert werden und zeigt die fehlerhaften Zeilen.
- jsonlint.com – anderes Angebot
- jsonformatting.com – hier kann das Format überprüft werden und eine Reihe von Vorgängen ausgeführt werden, z. B. die Formatierung.
Jeder andere JavaScript-Validierer kann ebenso zur ersten Fehlersuche verwendet werden.
- jshint.com – Gleiches Prinzip; Analyse mittels JSHint.
Lua
[Bearbeiten | Quelltext bearbeiten]Mit einer Lua-Funktion mw.ext.data.get() lässt sich die Seite aus jedem Wiki auslesen und die Inhalte der Struktur können verarbeitet werden.