API e interoperabilità
datannur espone i dati del catalogo tramite API programmatiche ed esportazioni standardizzate, facilitando l'integrazione con altri sistemi o la pubblicazione su portali open data.
REST API
datannur fornisce due endpoint API in sola lettura per l'accesso programmatico ai dati del catalogo. La loro documentazione OpenAPI può essere generata per l'istanza corrente del catalogo a partire dai dati presenti in data/db e dagli schemi ufficiali forniti con l'app.
Documentazione delle API: disponibile in /api/ (RESTful) e /api/raw (Raw) nel catalogo pubblicato, dopo aver generato i file OpenAPI. Nell'app, un tab API appare nelle Opzioni solo quando la REST API è effettivamente disponibile.
Raw API
Accesso diretto ai file JSON del database senza elaborazione lato server.
Pattern dell'endpoint: /data/db/{table}.json
Esempio:
GET /data/db/dataset.jsonRestituisce la tabella completa come array JSON.
RESTful API
API basata su query con funzionalità di filtro, paginazione e ordinamento. Richiede un'implementazione lato server, tipicamente PHP su hosting condiviso o il server di sviluppo Python locale.
Pattern degli endpoint:
GET /api/{table}- restituisce tutti i record (con parametri di query facoltativi)GET /api/{table}/{id}- restituisce un singolo record per ID
Parametri di query:
_limit: limita il numero di risultati_offset: offset per la paginazione_sort: campo di ordinamento_order: direzione di ordinamento (ascodesc)- Filtri aggiuntivi per nome di campo
Esempi:
GET /api/dataset?_limit=10&_sort=name&_order=asc
GET /api/dataset/123
GET /api/dataset?folder_id=5Genera i file OpenAPI specifici del catalogo con:
python3 datannur.py openapiI file generati vengono scritti in data/api, così restano insieme ai dati del catalogo attraverso gli aggiornamenti dell'app.
Requisito server: la RESTful API richiede PHP 7.4+ per funzionare su hosting condiviso. Per l'uso locale, esegui
python3 datannur.py apiinsieme al server locale dell'app. La Raw API funziona con qualsiasi server di file statici. Quandoindex.htmlviene aperto direttamente confile://, l'app resta utilizzabile ma l'API HTTP non è attiva.
Esportazioni semantiche e geospaziali
datannur può esportare il catalogo in formati di metadati standard, in modo che possa essere raccolto da portali open data e geospaziali. I dataset geografici — quelli dotati di un rettangolo di delimitazione, un sistema di coordinate, un tipo di geometria o una risoluzione spaziale (vedi Metadati geografici) — ottengono metadati spaziali più ricchi in ogni formato.
Ogni esportazione è una fase di post-elaborazione che legge il JSON generato in /data/db/ e scrive file statici in /data/db-semantic/. Le esportazioni si basano su alcuni pacchetti Python aggiuntivi, da installare una sola volta:
- DCAT:
pip install rdflib pyshacl - STAC:
pip install pystac - ISO 19139:
pip install pygeometa
DCAT / GeoDCAT-AP
Comando: python3 datannur.py dcat
Esporta il catalogo come RDF (Turtle, JSON-LD e RDF/XML), validato con le shape SHACL correnti di DCAT-AP 3.0.1. I dataset geografici includono anche la copertura spaziale GeoDCAT-AP: rettangolo di delimitazione e centroide (WKT), sistema di riferimento delle coordinate e risoluzione spaziale.
Dopo l'esportazione, indica — senza bloccare — quanto l'output è vicino a GeoDCAT-AP 3.1 (UE) e DCAT-AP-CH (svizzero), così puoi monitorare la distanza da ciascun livello.
Profili — per impostazione predefinita l'output punta al livello più ampio (europeo):
- predefinito (
eu): conforme a DCAT-AP 3.0.1 e GeoDCAT-AP 3.1. python3 datannur.py dcat --profile ch: conforme a DCAT-AP-CH (eCH-0200) per l'harvesting da parte di opendata.swiss. Rimuove il riferimento al CRS e la dimensione intera in byte che il profilo svizzero rifiuta; il risultato è quindi valido per tutti e tre i profili.
Configurazione: modifica /data/dcat-export.config.json:
catalog_uri,base_uri: URI del catalogo e base per gli URI generati di dataset/publishercatalog_title,catalog_description,catalog_publisher: metadati del catalogodefault_license: URI della licenza per il catalogo e le distribuzionidefault_language,languages: tag di lingua per i testi non qualificati e per i campi localizzati comename:fr,description:frprofile:"eu"(predefinito) o"ch"(stesso effetto di--profile ch)
Output in /data/db-semantic/: dcat.ttl, dcat.jsonld, dcat.rdf e validation.json.
STAC
Comando: python3 datannur.py stac
Esporta ogni dataset geografico come STAC Item (geometria dell'impronta, rettangolo di delimitazione, datetime, proj:code dal CRS, gsd dalla risoluzione) all'interno di un catalogo STAC statico autonomo, validato con pystac. Utile per i browser STAC e i client di ricerca geospaziale.
Output: /data/db-semantic/stac/ — un catalog.json più un item per ogni dataset geografico.
ISO 19139
Comando: python3 datannur.py iso
Esporta ogni dataset geografico come record di metadati ISO 19139 (titolo, abstract, rettangolo di delimitazione geografico WGS84, estensione temporale, parole chiave, contatto, distribuzione), generato con pygeometa. Adatto ai cataloghi ISO/INSPIRE e ai portali GeoNetwork/CSW (come geocat.ch).
Profili — come per l'esportazione DCAT, per impostazione predefinita l'output punta al livello più ampio:
- predefinito (
eu): ISO 19139 generico. I record sono essenziali ma validi. python3 datannur.py iso --profile ch: aggiunge gli elementi che il profilo svizzero (eCH-0271, atteso da geocat.ch) rende obbligatori rispetto all'ISO generico — la categoria tematica e un blocco di lineage / qualità dei dati. Provengono dai valori predefiniti di configurazione (ch_topic_category,ch_lineage), quindi i record sono strutturalmente completi e importabili; i segnaposto richiedono comunque una revisione umana per garantire lineage e categoria tematica accurati. La conformità rigorosa a eCH-0271 (XSD + Schematron) è confermata dal validatore di geocat.ch al momento dell'importazione.
Output: /data/db-semantic/iso/ — un record XML per ogni dataset geografico.