2012-01-19 5 views
5

sto usando AllegroGraph per memorizzare dichiarazione come questa:definire le regole per AllegroGraph triplica e come applicarli

<newsid1 hasAnnotation Gamma> 
<newsid1 hasAnnotation Beta> 

vorrei definire una regola su questo staments che dice: se il soggettonewsid1 hasAnnotationsiaGammaoBeta, quindi aggiungere una nuova dichiarazione in triplestore che dice che il soggettohasAnnotation Theta, vale a dire la dichiarazione

<newsid1 hasAnnotation Theta> 

Le mie domande sono le seguenti:

  1. Come posso definire una regola per Allegro?
  2. Come posso applicare queste regole alle dichiarazioni?

risposta

4

1) È possibile definire l'uso di Prolog functors per definire queste regole. Nel tuo caso definirai.

;; Functors to add triples. 
(<-- (a-- ?s ?p ?o) 
;; Fails unless all parts ground. 
(lispp (not (get-triple :s ?s :p ?p :o ?o))) 
(lisp (add-triple ?s ?p ?o))) 

;; Functors to seek news that should have theta annotation 
(<-- (shouldHaveAnnotationTheta ?news) 
(q- ?news !namespace:hasAnnotation !"Gamma")) 

(<- (shouldHaveAnnotationTheta ?news) 
(q- ?news !namespace:hasAnnotation !"Beta")) 

2) Eseguire quindi la seguente query prologo (utilizzando l'AGview per exemple) per aggiungere queste dichiarazioni notizie

(select (?news) 
(shouldHaveAnnotationTheta ?news) 
(a-- ?news !namespace:hasAnnotation !"Theta") 
(fail)) 

È possibile leggere le seguenti documenti per capire questo codice:

+0

Ciao, Aymeric! Grazie per la tua risposta utile. Vorrei chiederti se esiste un modo programmatico (dicendo usando il linguaggio Java o il linguaggio di script) per eseguire questo tipo di regole su AllegroGraph? Ho una pipeline che ha delle dichiarazioni scadenti nell'AG e dopo che il processo è finito, le regole dovrebbero essere applicate. Grazie ancora. Cordiali saluti, Florin – florins

+0

Bene, è possibile memorizzare tutti i functor lato server utilizzando gli script o il file init. È quindi possibile eseguire alcune query per aggiungere le nuove istruzioni utilizzando l'API HTTP di AllegroGraph. – Aymeric

+0

Mi sono imbattuto in un problema simile. Il fatto è che voglio aggiungere una tripla solo se non esiste già. Da quello che ho letto, il tuo addizionale functor (a--) dovrebbe farlo. L'ho copiato, ma non sembra funzionare. La tripla viene aggiunta, non importa se esiste già o meno. Perché sta succedendo? Ho postato la domanda [qui] (http://stackoverflow.com/questions/9095983/allegrograph-check-existing-triple) – Dragos