Skip to content

Instantly share code, notes, and snippets.

@aborruso
Created February 5, 2026 23:06
Show Gist options
  • Select an option

  • Save aborruso/fb042a2c2dffbcf7014febe5a1397df0 to your computer and use it in GitHub Desktop.

Select an option

Save aborruso/fb042a2c2dffbcf7014febe5a1397df0 to your computer and use it in GitHub Desktop.
note rapide

Analisi Dataset Farmacie Lombardia - Conformità Schema.gov.it

Premessa: Il Vantaggio dell'Integrazione MCP

Questa analisi è stata realizzata utilizzando due server MCP (Model Context Protocol) che integrano direttamente le funzionalità di ricerca dati aperti e validazione semantica:

Il Grande Vantaggio

L'integrazione di questi strumenti tramite MCP permette di:

  1. Ricerca Semantica Immediata: interrogare direttamente dati.gov.it senza dover navigare manualmente il portale, con ricerche avanzate usando sintassi Solr e facet

  2. Validazione Automatica: confrontare automaticamente la struttura dei dataset con gli standard nazionali (ontologie CLV, POI, CPSV) definiti su schema.gov.it

  3. Workflow Integrato: in una singola sessione di lavoro è possibile:

    • Cercare dataset rilevanti tra 74.000+ dataset
    • Scaricare e analizzare i dati
    • Validare la conformità agli standard
    • Proporre miglioramenti strutturati
  4. Riproducibilità: l'intero processo è tracciabile e automatizzabile, garantendo analisi consistenti e ripetibili

  5. Interoperabilità: i dataset conformi agli standard Schema.gov.it sono immediatamente riutilizzabili da altre PA e integrabili in applicazioni semantic web

In pratica: invece di settimane di lavoro manuale per analizzare un dataset e capire come migliorarlo, si ottiene un'analisi completa in pochi minuti, con proposte concrete di adeguamento agli standard nazionali.


Dataset Analizzato

Descrizione

Elenco completo delle farmacie aperte al pubblico (incluse succursali, dispensari e dispensari stagionali), con dati anagrafici della farmacia (Codice Identificativo Ministeriale, Denominazione, Partita IVA) e dati di localizzazione (Indirizzo comprensivo di Via, CAP, Frazione, Comune, Provincia, Regione).


📊 Statistiche Dataset

Dati Rilevati

  • Totale farmacie: 3.049
  • Province: 17 (incluse 7 fuori regione: VR, FE, TN, RE, MO - probabilmente di confine)
  • Comuni coperti: 1.237
  • Campi: 12

Distribuzione per Provincia

Provincia N. Farmacie %
Milano (MI) 927 30.4%
Brescia (BS) 388 12.7%
Bergamo (BG) 335 11.0%
Varese (VA) 249 8.2%
Monza Brianza (MB) 234 7.7%
Pavia (PV) 206 6.8%
Como (CO) 171 5.6%
Mantova (MN) 147 4.8%
Cremona (CR) 129 4.2%
Lecco (LC) 103 3.4%
Lodi (LO) 79 2.6%
Sondrio (SO) 72 2.4%
Altre (fuori regione) 9 0.3%

🗂️ Struttura Attuale

Schema CSV (12 campi)

CODICE_FARMACIA      VARCHAR  Es. "BG0113"
DESCRIZIONE_FARMACIA VARCHAR  Es. "CASTELLI"
PARTITA_IVA          VARCHAR  Es. "01410520165"
INDIRIZZO            VARCHAR  Es. "VIA GRIGNA, 9" (NON STRUTTURATO)
COMUNE               VARCHAR  Es. "MILANO"
FRAZIONE             VARCHAR  Es. "VERGHERA" (nullable)
CAP                  BIGINT   Es. 20155 (PROBLEMATICO - numero)
PROVINCIA            VARCHAR  Es. "MI"
CODICE_ISTAT         BIGINT   Es. 15146 (5 cifre, mancano zeri iniziali)
LATITUDINE           DOUBLE   Es. 45.493062
LONGITUDINE          DOUBLE   Es. 9.156760
LOCATION             VARCHAR  Es. "POINT (9.156 45.493)" (DUPLICATO)

Esempio Record

CODICE_FARMACIA,DESCRIZIONE_FARMACIA,PARTITA_IVA,INDIRIZZO,COMUNE,FRAZIONE,CAP,PROVINCIA,CODICE_ISTAT,LATITUDINE,LONGITUDINE,LOCATION
BG0113,CASTELLI,01410520165,CORSO MONTE ROSA,SELVINO,,24020,BG,16197,45.782058514087,9.755378845034,POINT (9.755378845034 45.782058514087)
CO0365,FARMACIA DELL'OCA,02638190138,"VIA GIUSEPPE GARIBALDI, 95",FINO MORNASCO,,22073,CO,13102,45.745327191309,9.050002214056,POINT (9.050002214056 45.745327191309)
MI0903,A.F.M. N. 14,13195220150,"VIA GRIGNA, 9",MILANO,,20155,MI,15146,45.493062415855,9.15676092224,POINT (9.15676092224 45.493062415855)

🔍 Verifica Conformità con Schema.gov.it

Nota: Tutti i nomi di proprietà citati in questa analisi sono verificati contro le ontologie ufficiali:

Le proprietà utilizzate corrispondono esattamente alle definizioni RDF/OWL degli standard nazionali.


❌ Problemi di Conformità a Schema.gov.it

1. Indirizzo Non Conforme a CLV (Core Location Vocabulary)

Problema: Campo INDIRIZZO non strutturato

Attuale:  INDIRIZZO = "VIA GRIGNA, 9"
          (campo unico testuale)

Standard CLV richiede (proprietà verificate dall'ontologia):

clv:toponymQualifier      = "Via"          (DUG - Denominazione Urbanistica Generica)
clv:officialStreetName    = "Grigna"       (nome strada/DUF)
clv:streetNumber          = "9"            (valore civico)
clv:exponent              = null           (esponente: "bis", "ter", ecc.)

Proprietà CLV opzionali disponibili (per indirizzi complessi):

clv:building              = "Palazzo Rossi"        (edificio/palazzo)
clv:flatNumber            = "12"                   (interno/numero appartamento)
clv:floor                 = "3"                    (piano)
clv:staircase             = "A"                    (scala)
clv:yard                  = "Cortile Principale"   (cortile)

Riferimento: Ontologia CLV

2. CAP come Numero Intero

Problema: Perde zeri iniziali

Attuale:  CAP = 20155 (tipo BIGINT)
Corretto: CAP = "20155" (tipo VARCHAR/TEXT)

Rischio: I CAP che iniziano con 0 (es. 09123) diventano 9123

Standard CLV: campo postCode di tipo stringa

3. Codice ISTAT Incompleto

Problema: Mancano zeri iniziali

Attuale:  CODICE_ISTAT = 15146 (5 cifre)
Corretto: CODICE_ISTAT = "015146" (6 cifre con zero iniziale)

Il codice ISTAT ufficiale è sempre di 6 cifre

Standard: vocabolario controllato cities

4. Mancanza di Classificazione ATECO

Problema: Nessuna classificazione economica

Dovrebbe includere:

codice_ateco = "47.73"
descrizione_ateco = "Commercio al dettaglio di medicinali in esercizi specializzati"

Riferimento: ATECO-2007

5. Coordinate senza Sistema di Riferimento

Problema: Non specificato il CRS

Attuale:  LATITUDINE, LONGITUDINE (senza metadati)
Corretto: + coordinateSystem = "EPSG:4326" o "WGS84"

Standard CLV: campo coordinateSystem obbligatorio

6. Campo LOCATION Ridondante

Problema: Duplicazione dati

LOCATION = "POINT (9.156 45.493)"
Duplica le informazioni già presenti in LATITUDINE + LONGITUDINE

7. Mancanza di Campi POI Standard

Problema: Non conforme a ontologia POI (Points of Interest)

Campi mancanti POI (proprietà verificate dall'ontologia):

poi:POIID                (identificativo univoco punto di interesse)
poi:POIofficialName      (nome ufficiale del punto di interesse)
poi:POIalternativeName   (nome alternativo del punto di interesse)
poi:POIdescription       (descrizione del punto di interesse)
poi:POIstate             (valore dello stato: es. "Attiva", "Sospesa", "Cessata")
poi:hasPOICategory       (relazione a categoria POI)
  ↳ poi:POIcategoryName       (nome categoria: es. "Farmacia")
  ↳ poi:POIcategoryIdentifier (codice categoria: es. "47.73" ATECO)
poi:hasPOIState          (relazione a stato del POI)

Riferimento: Ontologia POI

8. Mancanza di Informazioni Essenziali

Campi critici assenti:

Contatti:

  • Telefono
  • Email
  • PEC (Posta Elettronica Certificata)

Servizi:

  • Convenzionato SSN (boolean)
  • Turno notturno (boolean)
  • Turno festivo (boolean)
  • Calendario turni (URL)
  • Servizi offerti (array)
  • Orari apertura (strutturato)

Stato amministrativo:

  • Tipo esercizio (Farmacia/Parafarmacia/Dispensario)
  • Stato (Attiva/Sospesa/Cessata)
  • Data apertura
  • Data cessazione
  • Numero autorizzazione
  • Ente autorizzante

✅ Schema Migliorato (Conforme Schema.gov.it)

Nota: I nomi tra parentesi indicano le proprietà corrispondenti nelle ontologie CLV/POI verificate da Schema.gov.it.

Struttura Proposta (30 campi)

Identificativi (5 campi)

id_farmacia                VARCHAR   "BG0113" (primary key)
codice_ministeriale        VARCHAR   "BG0113"
codice_istat_farmacia      VARCHAR   (se esiste registro nazionale)
partita_iva                VARCHAR   "01410520165"
codice_fiscale             VARCHAR   (se disponibile)

Anagrafica (4 campi)

denominazione_ufficiale    VARCHAR   "FARMACIA CASTELLI"
denominazione_commerciale  VARCHAR   "CASTELLI"
tipo_esercizio             VARCHAR   "Farmacia" | "Parafarmacia" | "Dispensario" | "Succursale"
codice_ateco               VARCHAR   "47.73"

Indirizzo CLV-compliant (9 campi)

indirizzo_completo         VARCHAR   "Corso Monte Rosa, 24020 Selvino (BG)"
dug                        VARCHAR   "Corso" (toponymQualifier)
via                        VARCHAR   "Monte Rosa" (officialStreetName)
numero_civico              VARCHAR   "1" (streetNumber)
esponente                  VARCHAR   "bis" | "ter" | null (exponent)
interno                    VARCHAR   "A" (flatNumber - se appartamento)
frazione                   VARCHAR   "VERGHERA"
cap                        VARCHAR   "24020" (postCode)
localita                   VARCHAR   (hasAddressArea)

Unità Amministrative (4 campi)

comune                     VARCHAR   "Selvino"
codice_istat_comune        VARCHAR   "016197" (6 cifre con zero iniziale)
provincia                  VARCHAR   "BG" (acronym)
regione                    VARCHAR   "Lombardia"

Coordinate (3 campi)

latitudine                 DOUBLE    45.782058
longitudine                DOUBLE    9.755378
sistema_coordinate         VARCHAR   "EPSG:4326"

Contatti (3 campi)

telefono                   VARCHAR   "+39 035 123456"
email                      VARCHAR   "info@farmacia.it"
pec                        VARCHAR   "farmacia@pec.it"

Servizi e Caratteristiche (7 campi)

convenzionato_ssn          BOOLEAN   true
turno_notturno             BOOLEAN   true
turno_festivo              BOOLEAN   false
calendario_turni_url       VARCHAR   "https://..."
orari_apertura             JSON      {"lun":"8:30-12:30,15:00-19:30",...}
servizi_offerti            JSON      ["Autoanalisi","ECG","Telemedicina"]
note                       TEXT      (informazioni aggiuntive)

Stato Amministrativo (5 campi)

stato                      VARCHAR   "Attiva" | "Sospesa" | "Cessata"
data_apertura              DATE      "2010-01-15"
data_cessazione            DATE      null
data_aggiornamento         DATE      "2026-02-05"
url_info                   VARCHAR   "https://..."

Esempio Record Migliorato

id_farmacia,denominazione_ufficiale,partita_iva,codice_ateco,tipo_esercizio,dug,via,numero_civico,cap,comune,codice_istat_comune,provincia,regione,latitudine,longitudine,sistema_coordinate,telefono,email,convenzionato_ssn,stato,data_aggiornamento
"BG0113","FARMACIA CASTELLI","01410520165","47.73","Farmacia","Corso","Monte Rosa","1","24020","Selvino","016197","BG","Lombardia",45.782058,9.755378,"EPSG:4326","+39 035 123456","info@farmaciacastelli.it",true,"Attiva","2026-02-05"

Mappatura Nomi CSV → Proprietà Ontologiche

Importante: I nomi dei campi CSV sono "pratici" per uso tabulare/SQL, ma mappano esattamente alle proprietà delle ontologie Schema.gov.it.

Campo CSV Tipo Proprietà Ontologica Ontologia Note
Identificativi e Anagrafica
id_farmacia VARCHAR poi:POIID POI Identificativo univoco
codice_ministeriale VARCHAR Custom - Codice assegnato dal Ministero
denominazione_ufficiale VARCHAR poi:POIofficialName POI Nome ufficiale
denominazione_commerciale VARCHAR poi:POIalternativeName POI Nome commerciale/alternativo
tipo_esercizio VARCHAR poi:POIcategoryName POI Categoria (Farmacia, Parafarmacia, ecc.)
codice_ateco VARCHAR poi:POIcategoryIdentifier POI Codice ATECO 47.73
partita_iva VARCHAR cov:taxID COV Partita IVA
Indirizzo
indirizzo_completo VARCHAR clv:fullAddress CLV Indirizzo in forma testuale
dug VARCHAR clv:toponymQualifier CLV Denominazione Urbanistica Generica
via VARCHAR clv:officialStreetName CLV Nome ufficiale della strada
numero_civico VARCHAR clv:streetNumber CLV Numero civico
esponente VARCHAR clv:exponent CLV Esponente (bis, ter, A, B, ecc.)
interno VARCHAR clv:flatNumber CLV Numero interno/appartamento
edificio VARCHAR clv:building CLV Nome edificio/palazzo (opzionale)
piano VARCHAR clv:floor CLV Piano (opzionale)
scala VARCHAR clv:staircase CLV Scala (opzionale)
frazione VARCHAR clv:hasAddressArea CLV Frazione/località
cap VARCHAR clv:postCode CLV Codice Avviamento Postale
Unità Amministrative
comune VARCHAR rdfs:label of clv:City CLV Nome comune
codice_istat_comune VARCHAR clv:identifierType="ISTAT" CLV Codice ISTAT 6 cifre
provincia VARCHAR clv:acronym CLV Sigla provincia (2 caratteri)
regione VARCHAR rdfs:label of clv:Region CLV Nome regione
Coordinate
latitudine DOUBLE clv:lat CLV Latitudine decimale
longitudine DOUBLE clv:long CLV Longitudine decimale
sistema_coordinate VARCHAR clv:coordinateSystem CLV Sistema di riferimento (es. EPSG:4326)
Contatti
telefono VARCHAR schema:telephone Schema.org Numero telefono
email VARCHAR schema:email Schema.org Email
pec VARCHAR Custom + schema:email - Posta Elettronica Certificata
Servizi
convenzionato_ssn BOOLEAN Custom - Convenzionato SSN (true/false)
turno_notturno BOOLEAN Custom - Servizio notturno
turno_festivo BOOLEAN Custom - Servizio festivo
orari_apertura JSON schema:openingHours Schema.org Orari strutturati
servizi_offerti JSON Custom - Lista servizi
calendario_turni_url VARCHAR schema:url Schema.org URL calendario turni
Stato Amministrativo
stato VARCHAR poi:POIstate POI Stato (Attiva/Sospesa/Cessata)
data_apertura DATE schema:foundingDate Schema.org Data apertura
data_cessazione DATE schema:dissolutionDate Schema.org Data cessazione
data_aggiornamento DATE dcterms:modified Dublin Core Ultimo aggiornamento
note TEXT poi:POIdescription POI Descrizione/note

Legenda Ontologie:


🔄 Mappatura JSON-LD (Linked Data)

Conforme a CLV + POI + CPSV

Nota: Questa mappatura usa le proprietà esatte verificate dalle ontologie Schema.gov.it:

  • Tutti i prefissi clv:, poi:, cov: corrispondono alle proprietà RDF/OWL ufficiali
  • I nomi delle classi (Address, StreetToponym, CivicNumbering, PointOfInterest, ecc.) sono conformi agli standard
  • Le relazioni (hasAddress, hasStreetToponym, hasNumber, hasPOICategory) seguono le definizioni ontologiche
{
  "@context": {
    "clv": "https://w3id.org/italia/onto/CLV/",
    "poi": "https://w3id.org/italia/onto/POI/",
    "cpsv": "https://w3id.org/italia/onto/CPSV/",
    "cov": "https://w3id.org/italia/onto/COV/"
  },
  "@type": "poi:PointOfInterest",
  "@id": "https://dati.lombardia.it/farmacia/BG0113",

  "poi:POIID": "BG0113",
  "poi:POIofficialName": "FARMACIA CASTELLI",
  "poi:POIalternativeName": "CASTELLI",
  "poi:POIdescription": "Farmacia convenzionata SSN con servizi di autoanalisi",
  "poi:POIstate": "Attiva",

  "poi:hasPOICategory": {
    "@type": "poi:PointOfInterestCategory",
    "poi:POIcategoryName": "Farmacia",
    "poi:POIcategoryIdentifier": "47.73"
  },

  "clv:hasAddress": {
    "@type": "clv:Address",
    "clv:fullAddress": "Corso Monte Rosa 1, 24020 Selvino (BG)",

    "clv:hasStreetToponym": {
      "@type": "clv:StreetToponym",
      "clv:toponymQualifier": "Corso",
      "clv:officialStreetName": "Monte Rosa"
    },

    "clv:hasNumber": {
      "@type": "clv:CivicNumbering",
      "clv:streetNumber": "1"
    },

    "clv:postCode": "24020",

    "clv:hasCity": {
      "@type": "clv:City",
      "rdfs:label": "Selvino",
      "clv:hasIdentifier": {
        "@type": "clv:Identifier",
        "clv:identifierType": "ISTAT",
        "rdfs:label": "016197"
      }
    },

    "clv:hasProvince": {
      "@type": "clv:Province",
      "rdfs:label": "Bergamo",
      "clv:acronym": "BG"
    },

    "clv:hasRegion": {
      "@type": "clv:Region",
      "rdfs:label": "Lombardia"
    },

    "clv:hasGeometry": {
      "@type": "clv:Geometry",
      "clv:lat": "45.782058",
      "clv:long": "9.755378",
      "clv:coordinateSystem": "EPSG:4326"
    }
  },

  "cov:taxID": "01410520165",

  "schema:telephone": "+39 035 123456",
  "schema:email": "info@farmaciacastelli.it",

  "cpsv:hasPublicService": {
    "@type": "cpsv:PublicService",
    "rdfs:label": "Servizio farmaceutico territoriale",
    "cpsv:serviceStatus": "Attivo",
    "schema:serviceType": "Farmacia convenzionata SSN"
  }
}

📋 Piano di Adeguamento

Priorità 1 - CRITICHE (Conformità Base)

  1. Strutturare campo INDIRIZZO

    • Separare in: DUG, via, numero_civico, esponente
    • Script di parsing necessario (regex o NLP)
  2. Correggere tipo CAP

    • Da BIGINT a VARCHAR
    • Preservare zeri iniziali
  3. Normalizzare CODICE_ISTAT

    • Aggiungere zero iniziale (6 cifre)
    • Formato: "015146" non 15146
  4. Aggiungere CODICE_ATECO

    • Valore fisso: "47.73"
    • Descrizione: "Commercio al dettaglio di medicinali in esercizi specializzati"
  5. Aggiungere SISTEMA_COORDINATE

    • Valore: "EPSG:4326" o "WGS84"
  6. Rimuovere campo LOCATION

    • Ridondante rispetto a lat/long

Priorità 2 - IMPORTANTI (Usabilità)

  1. Aggiungere TIPO_ESERCIZIO

    • Valori: "Farmacia" | "Parafarmacia" | "Dispensario" | "Succursale"
  2. Aggiungere CONTATTI BASE

    • Telefono (obbligatorio)
    • Email (raccomandato)
    • PEC (raccomandato per PA)
  3. Aggiungere STATO

    • Valori: "Attiva" | "Sospesa" | "Cessata"
    • Data apertura
    • Data cessazione (se applicabile)

Priorità 3 - RACCOMANDATE (Valore Aggiunto)

  1. Aggiungere SERVIZI

    • Convenzionato SSN (boolean)
    • Turno notturno (boolean)
    • Turno festivo (boolean)
    • Servizi offerti (array JSON)
  2. Aggiungere ORARI

    • Struttura JSON per giorni/orari
    • Calendario turni (URL o file)
  3. Aggiungere METADATI AMMINISTRATIVI

    • Numero autorizzazione
    • Ente autorizzante (ATS/ASL)
    • Codice fiscale (se diverso da P.IVA)

🛠️ Script di Trasformazione (Esempio)

SQL/DuckDB per Ristrutturazione Base

-- Trasformazione da schema attuale a schema migliorato (base)
SELECT
  CODICE_FARMACIA as id_farmacia,
  CODICE_FARMACIA as codice_ministeriale,
  DESCRIZIONE_FARMACIA as denominazione_commerciale,
  'FARMACIA ' || DESCRIZIONE_FARMACIA as denominazione_ufficiale,
  PARTITA_IVA as partita_iva,
  '47.73' as codice_ateco,
  'Farmacia' as tipo_esercizio,

  -- Indirizzo (parsing semplificato - da migliorare)
  INDIRIZZO as indirizzo_completo,
  REGEXP_EXTRACT(INDIRIZZO, '^([A-Z]+)', 1) as dug,
  REGEXP_REPLACE(INDIRIZZO, '^[A-Z]+\s+', '') as via_numero,

  FRAZIONE as frazione,
  LPAD(CAP::VARCHAR, 5, '0') as cap,  -- Corregge CAP
  COMUNE as comune,
  LPAD(CODICE_ISTAT::VARCHAR, 6, '0') as codice_istat_comune,  -- Corregge ISTAT
  PROVINCIA as provincia,
  'Lombardia' as regione,

  LATITUDINE as latitudine,
  LONGITUDINE as longitudine,
  'EPSG:4326' as sistema_coordinate,

  'Attiva' as stato,
  CURRENT_DATE as data_aggiornamento

FROM read_csv('/tmp/farmacie_lombardia.csv')
WHERE PROVINCIA IN ('MI','BG','BS','CO','CR','LC','LO','MB','MN','PV','SO','VA');

Python per Parsing Indirizzi Avanzato

import re
import pandas as pd

def parse_indirizzo(indirizzo):
    """
    Parsing indirizzo italiano con regex
    """
    # Pattern comune: "VIA NOME, NUMERO"
    pattern = r'^(VIA|VIALE|CORSO|PIAZZA|LARGO|VICOLO|STRADA)\s+([^,]+)(?:,\s*(\d+))?'

    match = re.match(pattern, indirizzo.upper())
    if match:
        return {
            'dug': match.group(1).title(),
            'via': match.group(2).strip().title(),
            'numero_civico': match.group(3) or '',
            'esponente': None
        }
    else:
        # Fallback: tutto nel campo via
        return {
            'dug': '',
            'via': indirizzo,
            'numero_civico': '',
            'esponente': None
        }

# Applicazione al dataframe
df = pd.read_csv('/tmp/farmacie_lombardia.csv')

# Parse indirizzi
parsed = df['INDIRIZZO'].apply(parse_indirizzo)
df_parsed = pd.DataFrame(parsed.tolist())

# Merge con dataset originale
df_final = pd.concat([df, df_parsed], axis=1)

# Salva risultato
df_final.to_csv('/tmp/farmacie_lombardia_parsed.csv', index=False)

📊 Metadati DCAT-AP_IT Raccomandati

Per la Pubblicazione del Dataset Migliorato

dcat:Dataset:
  dcterms:title: "Elenco Farmacie Regione Lombardia - Conforme Schema.gov.it"
  dcterms:description: |
    Dataset completo delle farmacie aperte al pubblico in Regione Lombardia,
    strutturato secondo gli standard nazionali Schema.gov.it (ontologie CLV, POI).
    Include dati anagrafici, localizzazione strutturata, contatti e servizi offerti.

  dcterms:publisher:
    foaf:name: "Regione Lombardia"
    dcterms:identifier: "https://www.regione.lombardia.it"

  dcterms:issued: "2025-12-03"
  dcterms:modified: "2026-02-05"

  dcat:theme:
    - "http://publications.europa.eu/resource/authority/data-theme/HEAL"

  dcterms:subject:
    - "Farmacie"
    - "Sanità"
    - "Servizi sanitari"
    - "Salute pubblica"

  dcterms:spatial:
    dcterms:identifier: "https://www.geonames.org/3174618"
    rdfs:label: "Lombardia"

  dcterms:temporal:
    schema:startDate: "2026-02-05"

  dcterms:accrualPeriodicity:
    - "http://publications.europa.eu/resource/authority/frequency/MONTHLY"

  dcterms:license:
    - "https://creativecommons.org/licenses/by/4.0/"

  dcterms:conformsTo:
    - "https://w3id.org/italia/onto/CLV/"    # Core Location Vocabulary
    - "https://w3id.org/italia/onto/POI/"    # Points of Interest
    - "https://w3id.org/italia/controlled-vocabulary/classifications-for-organizations/ateco-2007"
    - "https://w3id.org/italia/controlled-vocabulary/territorial-classifications/cities"

  dcat:keyword:
    - "farmacie"
    - "sanità"
    - "servizi sanitari"
    - "salute"
    - "turni"
    - "masterdata"
    - "open data"

  dcat:distribution:
    - dcat:Distribution:
        dcterms:title: "Dataset Farmacie - CSV"
        dcterms:format: "text/csv"
        dcat:accessURL: "https://..."
        dcat:downloadURL: "https://.../farmacie.csv"

    - dcat:Distribution:
        dcterms:title: "Dataset Farmacie - JSON-LD"
        dcterms:format: "application/ld+json"
        dcat:accessURL: "https://..."
        dcat:downloadURL: "https://.../farmacie.jsonld"

🎯 Raccomandazioni Finali

Immediate (da fare subito)

  1. Correggere CAP e CODICE_ISTAT → Convertire in stringhe con zeri iniziali
  2. Aggiungere CODICE_ATECO → Valore fisso "47.73"
  3. Specificare SISTEMA_COORDINATE → "EPSG:4326"
  4. Rimuovere LOCATION → Campo ridondante

A Breve Termine (entro 3 mesi)

  1. Strutturare INDIRIZZO → Separare DUG, via, numero civico
  2. Aggiungere CONTATTI → Telefono (minimo), email, PEC
  3. Aggiungere TIPO_ESERCIZIO → Distinguere farmacie, parafarmacie, dispensari
  4. Aggiungere STATO → Attiva/Sospesa/Cessata + date

A Medio Termine (entro 6 mesi)

  1. Integrare SERVIZI → Convenzione SSN, turni, servizi offerti
  2. Pubblicare JSON-LD → Formato linked data conforme
  3. Aggiornare METADATI → DCAT-AP_IT completo con conformsTo
  4. Creare API REST → Accesso programmatico con filtri

Benefici Attesi

  • Interoperabilità: Dataset riutilizzabile da altre PA senza trasformazioni
  • Ricercabilità: Indicizzabile da motori semantic web
  • Qualità: Conformità agli standard nazionali verificabile
  • Riuso: Integrabile in applicazioni terze (mappe, servizi, app)
  • Manutenibilità: Struttura chiara e validabile automaticamente

📋 Riferimento Rapido Proprietà Schema.gov.it

Proprietà CLV (Core Location Vocabulary) - Verificate

Classi:

  • clv:Address - Indirizzo
  • clv:StreetToponym - Toponimo stradale
  • clv:CivicNumbering - Numerazione civica
  • clv:City - Comune
  • clv:Province - Provincia
  • clv:Region - Regione
  • clv:Geometry - Geometria
  • clv:Identifier - Identificativo

Proprietà Datatype:

  • clv:fullAddress - indirizzo completo
  • clv:toponymQualifier - DUG (Via, Corso, Piazza, ecc.)
  • clv:officialStreetName - nome ufficiale della strada
  • clv:streetNumber - numero civico
  • clv:exponent - esponente (bis, ter, ecc.)
  • clv:flatNumber - interno/numero appartamento
  • clv:floor - piano
  • clv:building - edificio/palazzo
  • clv:staircase - scala
  • clv:yard - cortile
  • clv:postCode - CAP
  • clv:acronym - sigla provincia
  • clv:lat - latitudine
  • clv:long - longitudine
  • clv:coordinateSystem - sistema di coordinate
  • clv:identifierType - tipo identificativo

Proprietà Object:

  • clv:hasAddress - ha indirizzo
  • clv:hasStreetToponym - ha toponimo stradale
  • clv:hasNumber - ha numero civico
  • clv:hasAddressArea - ha località/frazione
  • clv:hasCity - ha comune
  • clv:hasProvince - ha provincia
  • clv:hasRegion - ha regione
  • clv:hasGeometry - ha geometria
  • clv:hasIdentifier - ha identificativo

Proprietà POI (Points of Interest) - Verificate

Classi:

  • poi:PointOfInterest - Punto di Interesse
  • poi:PointOfInterestCategory - Categoria POI
  • poi:POIState - Stato del POI

Proprietà Datatype:

  • poi:POIID - identificativo punto di interesse
  • poi:POIofficialName - nome ufficiale
  • poi:POIalternativeName - nome alternativo
  • poi:POIdescription - descrizione
  • poi:POIstate - valore dello stato
  • poi:POIcategoryName - nome categoria
  • poi:POIcategoryIdentifier - identificativo categoria

Proprietà Object:

  • poi:hasPOICategory - ha categoria POI
  • poi:hasPOIState - ha stato POI

Proprietà COV (Organization) - Verificate

  • cov:taxID - Partita IVA

URI di riferimento:


📚 Riferimenti

Standard e Ontologie

Strumenti Utilizzati

Dataset


Documento generato il: 2026-02-05 Versione: 1.0 Analisi eseguita con: CKAN MCP Server + Schema.gov.it MCP Server Licenza: CC0 1.0 Universal (Public Domain Dedication)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment