I Datalog

Datalog è un linguaggio di interrogazione per basi di dati che ha riscosso un notevole interesse dalla comunità scientifica dalla metà degli anni ottanta.

Datalog si presenta come un linguaggio di programmazione logica sintatticamente derivato da Prolog rappresentandone un sottoinsieme relativo ai database relazionali; infatti è basato anch’esso su regole di deduzione ma non permette l’utilizzo di simboli di funzione né un modello di valutazione non procedurale (SLD resolution). Viene spesso utilizzato come linguaggio di query per database deduttivi. Negli ultimi anni, Datalog ha trovato nuove applicazioni per l’integrazione dei dati, l’estrazione delle informazioni, il networking, l’analisi dei programmi, la sicurezza e il cloud computing.

David Maier è accreditato come inventore del termine Datalog.

Approfondimenti

In Datalog è possibile descrivere un dominio attraverso predicati estensionali. Questi corrispondono alle relazioni nelle basi di dati e all’ABox delle basi di conoscenza, e predicati intensionali che vengono specificati attraverso regole logiche. Anche come la TBox delle basi di conoscenza, ne arricchiscono il modello concettuale.

La risposta ad interrogazioni complesse è tipicamente affidata ad un motore d’inferenza di tipo backward chaining il quale realizza una procedura chiamata goal-driven; per verificare la richiesta dell’utente (goal) cerca di scomporla riducendo i predicati intensionali fino a renderli una serie di predicati estensionali da verificare singolarmente. È tuttavia ininfluente dal punto di vista dei risultati ottenuti la scelta di utilizzare un motore d’inferenza di tipo forward; questo tipo di decisione è lasciata al progettista della specifica implementazione. Le più semplici implementazioni del linguaggio, per portare a terminazione il processo deduttivo, ricorrono alla tecnica del punto fisso che consiste nell’interrompere il processo di valutazione delle regole relative al predicato intensionale ricorsivo quando l’ultima iterazione non genera nuovi risultati.

Ogni regola è composta da una testa (head o conseguente) e da un corpo (body o antecedente) a loro volta formati da uno o più predicati atomici con argomenti che possono essere variabili, costanti oppure il simbolo di don’t care. Nella definizione di regole si possono anche usare predicati speciali come operatori di confronto e funzioni aritmetiche predefinite. Se tutti gli atomi del corpo sono verificati ne consegue logicamente che anche il predicato atomico della testa lo sia.

Conclusione

La veridicità di un atomo è affidata al processo di unificazione che sostituisce valori costanti alle variabili e ne controlla la presenza nella base di dati. L’interpretazione in logica del prim’ordine di una regola è dunque quella di un’implicazione tra disgiunzione di predicati. Vi è inoltre da segnalare che Datalog costituisce anche un linguaggio per la definizione di viste e di vincoli d’integrità dato che il corpo di una regola può verificare delle eventuali inconsistenze e la testa segnalarle all’applicazione che gestisce il DB.

Andrea Netti – Innovation Manager

Articoli correlati