Come ho messo Costituzione e codici italiani in un knowledge graph

Risposta diretta: per Open·Parlamento ho ingerito la Costituzione italiana e sette codici (penale, civile, procedura civile, strada, consumo, assicurazioni private) in un knowledge graph, articolo per articolo — circa 6.445 articoli — ciascuno con un identificatore stabile ELI per le citazioni, e collegati da 86.672 relazioni di modifica autoritative estratte da Normattiva in formato Akoma Ntoso. Niente parafrasi: il testo è verbatim, le relazioni sono deterministiche (confidenza 1.0). Ecco come, con i numeri e i limiti onesti.
TL;DR
- Cosa: Costituzione (139 articoli) + 7 codici = ~6.445 articoli, testo integrale per-articolo.
- Come si cita: ogni articolo ha un ID ELI, es.
eli:/it/codice-penale/art/575, così una citazione risolve all'articolo esatto. - Relazioni: 86.672 archi (modifica, abroga, sostituisce, inserisce, converte, proroga) da Normattiva (Akoma Ntoso), confidenza 1.0,
created_by: normattiva. - Onestà: molte norme referenziate non sono ancora nel corpus — la chiusura del grafo sulle relazioni è ancora parziale.
Perché un grafo e non un PDF
Un codice è già un testo. Perché trasformarlo in un grafo? Perché le domande utili non sono «cosa dice l'articolo 575», ma «cosa è cambiato, chi l'ha cambiato, quale norma lo modifica». Queste risposte vivono nelle relazioni tra norme, non nel testo isolato. Un knowledge graph rende quelle relazioni di prima classe: nodi (gli articoli) e archi tipizzati (le modifiche) navigabili e citabili.
E soprattutto: un agente AI può rispondere in modo affidabile solo se ogni affermazione risolve a un articolo reale, non a una parafrasi inventata. Per questo il testo entra verbatim.
Cosa c'è dentro (i numeri)
| Fonte | Articoli | Note |
|---|---|---|
| Costituzione | 139 | testo integrale |
| Codice Penale | 734 | |
| Codice Civile | ~3.000 | il più grande |
| Codice di Procedura Civile | 831 | |
| Codice della Strada | 240 | |
| Codice del Consumo | 146 | |
| Codice delle Assicurazioni Private | 355 | |
| Totale | ~6.445 | per-articolo, con ELI |
Il metodo: per-articolo, con ELI
Ogni articolo diventa un documento autonomo nel grafo, con un'intestazione in prosa naturale che incorpora codice, numero d'articolo e identificatore ELI per il recupero delle citazioni. In pratica:
Codice Penale, Articolo 575 (identificativo ELI: eli:/it/codice-penale/art/575).
[testo verbatim dell'articolo]
L'ELI (European Legislation Identifier) è la chiave: è un ID stabile e standard che permette di citare l'articolo esatto e di collegarlo ad altre norme senza ambiguità. Una domanda sull'omicidio risolve, end-to-end, a «Articolo 575 del Codice Penale» — con il riferimento, non con una frase generica.
Le relazioni autoritative: 86.672 archi, zero invenzione
Il cuore del grafo non è indovinato da un LLM. Le relazioni tra norme sono estratte in modo deterministico da Normattiva, che pubblica i testi in Akoma Ntoso con i blocchi <activeModifications> (cosa questa norma modifica) e <passiveModifications> (chi modifica questa norma). Da lì ricaviamo archi tipizzati:
abroga— abrogazione (la maggioranza assoluta degli archi)modifica— modifica genericainserisce— inserimento di nuove disposizionisostituisce— sostituzione di testoconverte— conversione decreto→leggeproroga— proroga di termini
Ogni arco porta il testo-prova allegato, created_by: normattiva e confidenza 1.0. Sono fatti, non inferenze. Sopra questa base si possono aggiungere archi inferiti dall'AI (impatti su diritti e settori), ma sempre etichettati come tali e con confidenza visibile: onestà sulla provenienza prima di tutto.
I limiti, dichiarati
Un grafo onesto dichiara cosa non copre. Oggi:
- Le relazioni puntano spesso a norme referenziate ma non ancora presenti nel corpus: la chiusura del grafo sugli archi è ancora parziale. Stiamo ampliando il corpus per ridurre i nodi «sospesi».
- Il corpus copre Costituzione + codici principali; non tutta la legislazione vigente.
- Gli archi inferiti dall'AI sono complementari e dichiarati: la base autoritativa resta quella di Normattiva.
Dichiarare i limiti non è una debolezza: è la differenza tra uno strumento che cita la fonte e uno che finge di sapere tutto.
FAQ
Cos'è un identificatore ELI?
ELI (European Legislation Identifier) è uno standard europeo per dare a ogni norma — e a ogni articolo — un identificatore stabile e risolvibile. Permette di citare l'articolo esatto e di collegare norme tra loro senza ambiguità, anche tra ordinamenti diversi.
Le relazioni di modifica sono generate dall'AI?
No. Le relazioni autoritative (modifica, abroga, sostituisce…) sono estratte in modo deterministico dai metadati Akoma Ntoso di Normattiva, con confidenza 1.0. Eventuali relazioni inferite dall'AI sono separate, etichettate e con confidenza inferiore.
Quanti articoli ci sono nel grafo?
Circa 6.445 articoli: la Costituzione (139) più sette codici (penale, civile, procedura civile, strada, consumo, assicurazioni private), tutti ingeriti per-articolo con identificatore ELI.
Costruiamo knowledge graph che citano la fonte, non la sostituiscono. Vedi come funziona Open·Parlamento e i suoi open data, oppure parliamone.
Articoli correlati
- Ho scaricato il diritto UE e l’ho messo nel grafo della legge italianaDal bulk dump dell’Ufficio Pubblicazioni UE (56.292 atti) ho estratto e collegato migliaia di norme europee — regolamenti, direttive, decisioni — al grafo della legge italiana, con CELEX ed ELI. Ecco metodo, numeri reali e cosa manca ancora.
- Grafo del Parlamento italiano: perché Camera e Senato non parlano la stessa linguaCamera e Senato pubblicano open data ottimi ma con due ontologie diverse (OCD e OSR): cognome, legislatura, date e relazioni sono modellati in modo incompatibile. Ecco i problemi e come li abbiamo risolti costruendo un grafo unico.
- Open data in Italia: aperti sulla carta, inusabili nella praticaI dati pubblici italiani sono «aperti» per legge ma spesso tenuti malissimo: portali datati, endpoint che rispondono vuoti, certificati rotti, link spuntati, progetti civici abbandonati. Un’analisi documentata, fonte per fonte, da chi li ha dovuti integrare davvero.