Jurnal de date | |
---|---|
Clasa de limba | Boolean , declarativ |
Aparut in | 1986 |
Tip sistem | Slab |
Dialectele | Datomic , pyDatalog , Dyna etc. |
Datalog este un limbaj de programare logic declarativ. Deși din punct de vedere sintactic arată ca un subset al lui Prolog , Datalog utilizează în general un model de rezoluție a expresiei de jos în sus și nu de sus în jos. Această diferență duce la o diferență semnificativă de comportament și proprietăți față de Prolog. Este adesea folosit ca limbaj de interogare pentru bazele de date deductive. În ultimii ani, Datalog a găsit noi utilizări în integrarea datelor, extragerea informațiilor, rețele, analiza programelor, securitate, cloud computing și învățarea automată [1] [2] .
Originile sale datează de la începutul programării logice, dar a început să iasă în evidență ca un subiect aparte în jurul anului 1977, când Herve Galler și Jack Minker au organizat un seminar despre logică și baze de date [3] . David Mayer este creditat cu inventarea termenului Datalog [4] .
Spre deosebire de Prolog, instrucțiunile programului Datalog pot fi specificate în orice ordine. Mai mult, interogările Datalog față de seturi finite sunt garantate să se completeze, motiv pentru care Datalog nu are o declarație de tăiere în Prolog. Acest lucru face Datalog un limbaj complet declarativ.
Spre deosebire de Prolog, Datalog:
Procedura de rezolvare a unei interogări cu Datalog se bazează pe logica de ordinul întâi și, din acest motiv, este corectă și completă. Cu toate acestea, Datalog nu este complet Turing și, prin urmare, este folosit ca un limbaj specific domeniului care poate profita de algoritmi eficienți proiectați pentru a rezolva interogările. Într-adevăr, au fost propuse diverse metode pentru a executa eficient interogări, precum algoritmul Magic Sets [6] , programarea logică tabelară [7] sau rezoluția SLG [8] .
Unele sisteme de baze de date utilizate pe scară largă includ idei și algoritmi dezvoltați pentru Datalog. De exemplu, standardul SQL:1999 include interogări recursive, iar algoritmul Magic Sets (conceput inițial pentru a evalua mai rapid interogările Datalog) este implementat în IBM DB2 . În plus, motoarele Datalog sunt în spatele sistemelor de baze de date specializate, cum ar fi baza de date Intellidimension pentru Web-ul Semantic [9] . Au fost făcute mai multe extensii la Datalog, cum ar fi pentru a suporta funcții agregate, pentru a permite programarea orientată pe obiecte sau pentru a permite disjuncții ca antete de propoziție. Aceste extensii au un impact semnificativ asupra definirii semanticii Datalog și asupra implementărilor unor versiuni specifice ale interpretului Datalog.
Programele Datalog pot folosi sau nu negația în corpurile de reguli: Programele Datalog cu negație trebuie adesea să o folosească ca negație stratificată pentru a se asigura că semantica este bine definită. Programele Datalog pot folosi sau nu inegalități între variabilele din corpurile de reguli.
Sunt definite unele fragmente de sintaxă Datalog, cum ar fi următoarele (cel mai restricționat la cel mai puțin restricționat):
O altă limitare se referă la utilizarea recursiunii: un Datalog nerecursiv este definit prin interzicerea recursiunii în definirea programelor Datalog. Acest fragment de Datalog este la fel de expresiv ca interogările concatenate, dar scrierea interogărilor ca un Datalog nerecursiv poate fi mai concis.
Problema constrângerii pentru Datalog se rezumă la dacă programul Datalog este mărginit, adică dacă adâncimea maximă de recursivitate atinsă la evaluarea programului în baza de date de intrare poate fi delimitată de o constantă. Cu alte cuvinte, problema se rezumă la dacă programul Datalog poate fi rescris ca program Datalog nerecursiv. Soluția la limitarea programelor arbitrare Datalog este indecidabilă, dar poate fi decidabilă limitându-ne la unele fragmente din Datalog [10] .
Aceste două rânduri definesc două fapte, adică lucruri care sunt valabile întotdeauna:
părinte ( xerces , brooke ). părinte ( brooke , damocles ).Iată ce înseamnă: xerces este părintele lui Brooke și Brooke este părintele lui Damocles. Numele sunt scrise cu litere mici, deoarece șirurile care încep cu o literă mare reprezintă variabile.