Skip to content

Esporre la relazione dataset↔servizio (srv:operatesOn) come grafo navigabile #10

Description

@aborruso

Contesto

Ispirato dal cross-theme knowledge graph di Overture (blog): l'idea trasferibile a openrndt è rendere navigabile la relazione dataset ↔ servizio già codificata nei metadati ISO/INSPIRE (srv:operatesOn / couplingType), trasformando la ricerca piatta in esplorazione a grafo. È l'analogo onesto di "geometry as foreign key": qui la chiave è la relazione dichiarata nei metadati, non inferita da geometrie (RNDT non ha geometrie reali, solo bounding box).

Verifica empirica (chiamate reali al portale)

L'elemento esiste ed è risolvibile. I record servizio ben formati contengono srv:operatesOn con xlink:href verso il dataset servito + srv:couplingType (es. Tight). Esempi verificati end-to-end:

Servizio operatesOn → dataset Risolve in RNDT (get)
r_emiro:2021-02-11T112952 (Geologia di sintesi WMS) r_emiro:2011-10-05T160617 "Domini paleogeografici"
ispra_rm:carg_25k_204_SVD (Carta geologica SVD) ispra_rm:CARG_Foglio 204_Portomaggiore

Copertura bassa e clusterizzata. Su un campione vario di 72 servizi (geologia, uso suolo, idrografia, catasto, trasporti, ambiente, ortofoto): 9/72 (~12,5%) con operatesOn risolvibile. Chi produce metadati INSPIRE rigorosi (ISPRA, Emilia-Romagna) lo popola; i "servizi ombrello" regionali generici no — es. r_veneto:servizio_WMS è un SV_ServiceIdentification valido ma senza operatesOn.

Dettagli tecnici per l'implementazione

  1. Estrazione edge servizio→dataset: l'href NON punta a RNDT ma al CSW del catalogo sorgente (es. catalogosgi.isprambiente.it, servizimoka.regione.emilia-romagna.it). L'id del dataset è nel parametro id= della query string e coincide con l'id RNDT (harvesting). Regola robusta: parsare id= dall'href, non affidarsi a xlink:title (ISPRA lo omette). Normalizzare spazio→+ (id ISPRA con spazio; RNDT usa +).
  2. Edge inverso dataset→servizi: NON presente nel record dataset (0 occorrenze). Richiede una query di inversione lato indice (tipo q=operatesOn:<dataset_id> / CSW), non una lettura del singolo record.

Proposta

Flag su get — es. openrndt get <id> --links — che estrae operatesOn (parsing di id=) ed emette i vicini risolvibili nel grafo (con couplingType e id del target). Coprire sia CLI che libreria Python (export + doc README), come da convenzioni del progetto.

Aperto: valutare se supportare anche la direzione inversa (dataset→servizi) tramite query di inversione, o limitarsi in prima battuta a servizio→dataset (pronta e affidabile per il ~10-15% dei servizi ben metadatati).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions