Skip to content

Ihre Daten verwalten ​

Datenbankstruktur ​

datannur verwendet eine clientseitige relationale Datenbank auf Basis von jsonjsdb. Ihre Metadaten müssen als relationale Datenbank mit bestimmten Anforderungen strukturiert sein:

  • Speicherort der Datenbank: Standardmässig im Ordner /data/db/ (siehe path für Anpassungsmöglichkeiten)
  • Tabellen: Jede Tabelle wird in zwei Dateien gespeichert (.json und .json.js)
  • Tabellenregister: Die Datei __table__.json listet alle verfügbaren Tabellen auf
  • Primärschlüssel: Muss eine Spalte namens id sein
  • Fremdschlüssel: Spalten, die nach der Fremdtabelle benannt sind, mit dem Suffix _id (z. B. dataset_id)
  • n:m-Beziehungen: Zwei Ansätze stehen zur Verfügung:
    • Array von IDs (empfohlen): Verwenden Sie das Suffix _ids mit kommagetrennten Werten (z. B. tag_ids: "1,3,7")
    • Verknüpfungstabellen: Verwenden Sie die Unterstrich-Notation (z. B. Tabelle dataset_tag)

Dateiformat-Spezifikationen ​

Jede Tabelle wird in zwei Formaten gespeichert:

.json-Dateien — Standard-JSON-Format:

json
[
  {
    "id": 1,
    "name": "Example item",
    "description": "Item description"
  },
  {
    "id": 2,
    "name": "Another item",
    "description": "Another description"
  }
]

.json.js-Dateien — kompaktes Format (automatisch generiert, für den Browser optimiert):

javascript
jsonjs.data['dataset'] = [
  ['id', 'name', 'description'],
  [1, 'Example item', 'Item description'],
  [2, 'Another item', 'Another description'],
]

💡 Hinweis: Die Demo-Datenbank wird mit python3 datannur.py build-db-source aus /data/db-source/ generiert. Bearbeiten Sie dort die Quelldateien und erstellen Sie anschliessend /data/db/ neu; die .json.js-Dateien werden für eine optimale Browser-Performance abgeleitet.

Tabellenregister ​

Die Datei __table__.json dient als Register aller in Ihrer Datenbank verfügbaren Tabellen:

json
[
  {
    "name": "dataset",
    "last_modif": 1753608552
  },
  {
    "name": "folder",
    "last_modif": 1757018090
  },
  {
    "name": "__table__",
    "last_modif": 1757018100
  }
]

Wichtigste Merkmale:

  • name: Tabellenname (muss mit den entsprechenden .json- und .json.js-Dateinamen übereinstimmen)
  • last_modif: Unix-Zeitstempel der letzten Änderung (in Sekunden), wird zur Cache-Optimierung verwendet
  • Spezialeintrag: Der Eintrag "__table__" hält den Zeitpunkt der letzten Metadaten-Aktualisierung insgesamt fest, der in der Katalogoberfläche angezeigt wird

Überblick über das Datenschema ​

Der Katalog unterstützt mehrere Entitäten mit flexiblen Beziehungen. Alle Tabellen sind optional — verwenden Sie nur, was Sie benötigen:

📋 Schema-Referenz: Vollständige Details zum Schema finden Sie auf der Metadaten-Seite unter index.html#/meta in Ihrem Katalog, die alle Tabellen und Variablen auf Basis der aktuellen Datenstruktur anzeigt. Die Spalte "localisation" gibt an, ob eine Tabelle/Variable nur im Schema, nur in den Daten oder in beiden (wenn leer) vorhanden ist.

🔗 Entitätsstruktur: Informationen zu den Entitäten und ihren Beziehungen finden Sie auf der "Über"-Seite unter index.html#/about?tab=aboutStructure in Ihrem Katalog.

Geografische Metadaten ​

Datasets können optionale geografische Metadaten enthalten:

  • bbox: Begrenzungsrahmen als Array aus vier Zahlen [west, south, east, north] in WGS84 (Lon/Lat)
  • crs: Koordinatenreferenzsystem, z. B. "EPSG:2056"
  • geometry_type: point, linestring, polygon, … (Vektor-Datasets)
  • spatial_resolution: räumliche Auflösung in Metern (Raster-Datasets)

Wenn vorhanden, zeigt der Katalog eine "Geo"-Spalte in den Listen sowie eine Abdeckungskarte auf der Dataset- (und Ordner-)Seite an, und diese Felder steuern die Geodaten-Exporte (DCAT/GeoDCAT-AP, STAC, ISO 19139). Die Abdeckung eines Ordners ist die Vereinigung der Begrenzungsrahmen seiner Datasets.

Für Variablen unterstützen zwei type-Werte Geodaten: geometry (die Geometriespalte eines Vektor-Datasets) und band (eine Variable pro Band eines Raster-Datasets, mit ihren Pixelstatistiken).

Konfigurationsoptionen ​

Die Datei config.json ermöglicht es Ihnen, verschiedene Anwendungseinstellungen anzupassen:

json
[
  {
    "id": "contact_email",
    "value": "contact@yourdomain.com"
  },
  {
    "id": "banner",
    "value": "![main-banner no_caption](data/img/main-banner.png)"
  }
]

Verfügbare Optionen:

  • contact_email: Kontakt-E-Mail-Adresse, die in der Katalogoberfläche angezeigt wird

Globale Filterregeln ​

Die Datei configFilter.json definiert globale Datenbankfilter, die im Kopfbereich der Anwendung angezeigt werden. Jede Regel kann auf eine beliebige Tabelle und ein beliebiges Feld abzielen:

json
[
  {
    "id": "open_data",
    "name": "Open Data",
    "entity": "dataset",
    "field": "type",
    "value": "open_data",
    "is_active_default": true
  }
]

Verwenden Sie eine Zeile pro übereinstimmendem Wert. Wenn ein Filter vom Benutzer deaktiviert wird, werden die passenden Zeilen aus der In-Memory-Datenbank entfernt und zugehörige Zeilen über die jsonjsdb-Relationen ebenfalls entfernt.

Anpassung der "Über"-Seite bzw. des "Über"-Tabs:

Der "Über"-Inhalt (sowohl der Tab auf der Startseite als auch die eigene Seite) besteht aus drei Abschnitten: banner + body + more_info. Jeder kann unabhängig mit Markdown angepasst werden.

  • banner: Eigenes Hauptbanner-Bild
    • Fügen Sie no_caption hinzu, um die Bildunterschrift auszublenden
    • Fügen Sie {darkMode} im Dateinamen hinzu (main-banner{darkMode}). Dadurch wird main-banner.png im hellen Modus und main-banner-dark.png im dunklen Modus angezeigt
  • body: Eigener Hauptinhalt
  • more_info: Eigene Zusatzinformationen

Quelldateien ins jsonjsdb-Format ​

  • Pflegen Sie bearbeitbare Quelldateien in /data/db-source/:
    • *.json-Dateien auf oberster Ebene für Metadatentabellen
    • md/*.md-Dateien für Markdown-Dokumente
    • dataset/*.csv-Dateien für Dataset-Vorschauen
  • Verwenden Sie python3 datannur.py build-db-source, um die Quelldateien in die Formate .json und .json.js in /data/db/ zu kompilieren
  • Führen Sie den Befehl aus dem Anwendungsordner aus mit:
    bash
    python3 datannur.py build-db-source
  • Führen Sie das Skript nach Änderungen an den Quelldateien erneut aus, um die generierte Datenbank zu aktualisieren.