Nicola Leone e Francesco Ricca Dipartimento di Matematica Università della Calabria {leone, Nicola Leone e Francesco Ricca Dipartimento di Matematica Università della Calabria {leone, UNIVERSITÀDELLACALABRIA Dipartimento di MATEMATICA OntoDLV: An Object-Oriented Disjunctive Logic Programming System
Sommario La Programmazione Logia Disgiuntiva Motivazioni Il Linguaggio OntoDLP Il Sistema OntoDLV Conclusioni La Programmazione Logia Disgiuntiva Motivazioni Il Linguaggio OntoDLP Il Sistema OntoDLV Conclusioni
La Programmazione Logica Disgiuntiva (PLD) Semplice e potente formalismo di KR&R Answer Set Programming (ASP) Alto potere espressivo ( ) Solide implementazioni DLV, GnT/Smodels, Cmodels… Utilizzato in diversi domini applicativi: IA (pianificazione, diagnosi, ecc) Information Integration Information Extraction Text Classification … Semplice e potente formalismo di KR&R Answer Set Programming (ASP) Alto potere espressivo ( ) Solide implementazioni DLV, GnT/Smodels, Cmodels… Utilizzato in diversi domini applicativi: IA (pianificazione, diagnosi, ecc) Information Integration Information Extraction Text Classification …
Motivazioni La DLP è uno strumento potente… I sistemi consentono di risolvere problemi complessi Ma: Le recenti applicazioni ne hanno evidenziato alcuni limiti nel linguaggio e nei sistemi La DLP necessita di costrutti di alto livello Classi, oggetti, tassonomie… I sistemi DLP non sono corredati da strumenti di sviluppo (e.s. Ambienti di sviluppo grafici) La DLP è uno strumento potente… I sistemi consentono di risolvere problemi complessi Ma: Le recenti applicazioni ne hanno evidenziato alcuni limiti nel linguaggio e nei sistemi La DLP necessita di costrutti di alto livello Classi, oggetti, tassonomie… I sistemi DLP non sono corredati da strumenti di sviluppo (e.s. Ambienti di sviluppo grafici)
OntoDLP…DLP con: Costrutti orientati agli oggetti Identità degli Oggetti, Classi, Ereditarietà (singola e multipla), Classi e Relazioni Derivate Controlli di consistenza Assiomi, Tipizzazione Forte Programmazione Modulare Moduli di ragionamento Estensioni Sintattiche Termini complessi (anche ricorsivi), notazione non-posizionale, etc. Costrutti orientati agli oggetti Identità degli Oggetti, Classi, Ereditarietà (singola e multipla), Classi e Relazioni Derivate Controlli di consistenza Assiomi, Tipizzazione Forte Programmazione Modulare Moduli di ragionamento Estensioni Sintattiche Termini complessi (anche ricorsivi), notazione non-posizionale, etc.
Esempio (1) Classi: class person(name:string, age:integer, sex:string, partner:person). class student isa {person} (pin:integer, faculty:string). class employee isa {person} (code:integer, sk:skill, sa:integer). class student_employee isa {student, employee). class skill (name:string). class project(numEmp:integer, numSk:integer, budget:integer, maxSal:integer). …. Relazioni: relation inTeam (emp:employee, pr:project). …. Classi: class person(name:string, age:integer, sex:string, partner:person). class student isa {person} (pin:integer, faculty:string). class employee isa {person} (code:integer, sk:skill, sa:integer). class student_employee isa {student, employee). class skill (name:string). class project(numEmp:integer, numSk:integer, budget:integer, maxSal:integer). …. Relazioni: relation inTeam (emp:employee, pr:project). ….
Esempio (2) Istanze & tuple: jack: employee(name:Jack Big",age:20, sex:Male, partner:joe, code:1,sk:cpp,sa:10000). …. cpp:skill(C++ programmer). …. Assiomi: ::- X : employee(code: C ), Y : employee(code: C ), Y <> X. Istanze & tuple: jack: employee(name:Jack Big",age:20, sex:Male, partner:joe, code:1,sk:cpp,sa:10000). …. cpp:skill(C++ programmer). …. Assiomi: ::- X : employee(code: C ), Y : employee(code: C ), Y <> X.
Esempio (3) Classi Derivate: derived class youngAndShy(friendsNumber: integer) { X : youngAndShy(friendsNumber : N ) : X : person(age : Age), Age < 21, #count{F : friend(pers1 : X, pers2 : F )} < 2. } Relazioni Derivate: derived relation ancestor(anc:person, disc:person) { ancestor(anc : A, disc : X ) : X : person(father : A). ancestor(anc : A, disc : X ) : X : person(mother : A). ancestor(anc : A, disc : X ) : X : person(father : Y ), ancestor(anc : A, disc : Y ). ancestor(anc : A, disc : X ) : X : person(mother : Y ), ancestor(anc : A, disc : Y ). } Classi Derivate: derived class youngAndShy(friendsNumber: integer) { X : youngAndShy(friendsNumber : N ) : X : person(age : Age), Age < 21, #count{F : friend(pers1 : X, pers2 : F )} < 2. } Relazioni Derivate: derived relation ancestor(anc:person, disc:person) { ancestor(anc : A, disc : X ) : X : person(father : A). ancestor(anc : A, disc : X ) : X : person(mother : A). ancestor(anc : A, disc : X ) : X : person(father : Y ), ancestor(anc : A, disc : Y ). ancestor(anc : A, disc : X ) : X : person(mother : Y ), ancestor(anc : A, disc : Y ). }
Esempio (4) Moduli di Ragionamento: module(partner_and_skill) { partnerWithDifferentSkill(X,Y) :- X:employee(partner:Y, sk:S), not partner(X,Y,S). partner (X,Y,Y) :- X:employee(partner:Y, sk:S). } Query partnerWithDifferentSkill(X,Y)? X:employee(sk:java,partner:employee(sk:java)) ? X:employee(sk:java,partner:Y), Y:employee(sk:java) ? Moduli di Ragionamento: module(partner_and_skill) { partnerWithDifferentSkill(X,Y) :- X:employee(partner:Y, sk:S), not partner(X,Y,S). partner (X,Y,Y) :- X:employee(partner:Y, sk:S). } Query partnerWithDifferentSkill(X,Y)? X:employee(sk:java,partner:employee(sk:java)) ? X:employee(sk:java,partner:Y), Y:employee(sk:java) ?
Esempio (5) module(team_building) { inTeam(E,P) v outTeam(E,P) :- E:employee(), P:project(). :- P:project(numEmp:N), not #count{ E: inTeam(emp:E)} = N. :- P: project(numSk:S), not #count{ Sk: E:employee(sk:Sk), inTeam(E,P)} >= S. :- P: project(budget:B), not #sum{ Sa,E: E:employee(sal:Sa), inTeam(E,P)} <= B. :- P: project(maxSal:M), not #max{ Sa: E:employee(sal:Sa), inTeam(E,P)} <= M. } > inTeam(ciccio,X)? module(team_building) { inTeam(E,P) v outTeam(E,P) :- E:employee(), P:project(). :- P:project(numEmp:N), not #count{ E: inTeam(emp:E)} = N. :- P: project(numSk:S), not #count{ Sk: E:employee(sk:Sk), inTeam(E,P)} >= S. :- P: project(budget:B), not #sum{ Sa,E: E:employee(sal:Sa), inTeam(E,P)} <= B. :- P: project(maxSal:M), not #max{ Sa: E:employee(sal:Sa), inTeam(E,P)} <= M. } > inTeam(ciccio,X)?
Il sistema OntoDLV Un ambiente di sviluppo grafico Specifica, browsing, ragionamento, interrogazione Integra DLV Interfaccia di interrogazione à la QBE Un ambiente di sviluppo grafico Specifica, browsing, ragionamento, interrogazione Integra DLV Interfaccia di interrogazione à la QBE
Applicazioni Content Categorization OLEX [Curia et al] [Cumbo et al] OntoLog Enterprise Categorizer System, un sistema sviluppato da Exeura s.r.l. per la classificazione semantica di documenti. Information Extraction Hilex [Ruffolo et al] Un nuovo approccio basato su logica per lestrazione semantica di informazione Content Categorization OLEX [Curia et al] [Cumbo et al] OntoLog Enterprise Categorizer System, un sistema sviluppato da Exeura s.r.l. per la classificazione semantica di documenti. Information Extraction Hilex [Ruffolo et al] Un nuovo approccio basato su logica per lestrazione semantica di informazione
Lavori Correlati COMPLEX [Greco et al] Flogic & Flora-2 [Kifer] RDF/RDFS [W3C] OWL [W3C] DL-Programs [Grosof et al] DL-Safe Programs [Motik] … COMPLEX [Greco et al] Flogic & Flora-2 [Kifer] RDF/RDFS [W3C] OWL [W3C] DL-Programs [Grosof et al] DL-Safe Programs [Motik] …
Conclusioni OntoDLP: Estensione della DLP con costrutti Orientati agli oggetti (classi, ereditarietà, assiomi, ecc.) Ragionamento su Ontologie OntoDLV: Implementa il linguaggio OntoDLP Sviluppato utilizzando DLV Dotato di ambiente di sviluppo grafico Interrogazioni à la QBE Utilizzato in applicazioni reali OntoDLP: Estensione della DLP con costrutti Orientati agli oggetti (classi, ereditarietà, assiomi, ecc.) Ragionamento su Ontologie OntoDLV: Implementa il linguaggio OntoDLP Sviluppato utilizzando DLV Dotato di ambiente di sviluppo grafico Interrogazioni à la QBE Utilizzato in applicazioni reali