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
- 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 +).
- 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).
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:operatesOnconxlink:hrefverso il dataset servito +srv:couplingType(es.Tight). Esempi verificati end-to-end: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_PortomaggioreCopertura bassa e clusterizzata. Su un campione vario di 72 servizi (geologia, uso suolo, idrografia, catasto, trasporti, ambiente, ortofoto): 9/72 (~12,5%) con
operatesOnrisolvibile. Chi produce metadati INSPIRE rigorosi (ISPRA, Emilia-Romagna) lo popola; i "servizi ombrello" regionali generici no — es.r_veneto:servizio_WMSè unSV_ServiceIdentificationvalido ma senzaoperatesOn.Dettagli tecnici per l'implementazione
hrefNON punta a RNDT ma al CSW del catalogo sorgente (es.catalogosgi.isprambiente.it,servizimoka.regione.emilia-romagna.it). L'id del dataset è nel parametroid=della query string e coincide con l'id RNDT (harvesting). Regola robusta: parsareid=dall'href, non affidarsi axlink:title(ISPRA lo omette). Normalizzare spazio→+(id ISPRA con spazio; RNDT usa+).q=operatesOn:<dataset_id>/ CSW), non una lettura del singolo record.Proposta
Flag su
get— es.openrndt get <id> --links— che estraeoperatesOn(parsing diid=) ed emette i vicini risolvibili nel grafo (concouplingTypee 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).