2012-01-19 5 views
5

estoy usando AllegroGraph para almacenar declaración como esta:Definir reglas para AllegroGraph triplica y la forma de aplicarlos

<newsid1 hasAnnotation Gamma> 
<newsid1 hasAnnotation Beta> 

me gustaría definir una regla en este staments que dice: si el sujeto newsid1 hasAnnotationya seaGammaoBeta, continuación, agregue un nuevo comunicado en el triplestore que dice que el sujetohasAnnotation Theta, es decir, la declaración

<newsid1 hasAnnotation Theta> 

Mis preguntas son las siguientes:

  1. cómo puedo definir una norma de este tipo de Allegro?
  2. ¿Cómo puedo aplicar estas reglas a las declaraciones?

Respuesta

4

1) Puede definir el uso Prolog functors para definir estas reglas. En tu caso definirás.

;; 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) Ejecutar a continuación, la siguiente consulta prólogo (utilizando el AGview para exemple) para agregar estas declaraciones noticias

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

Usted puede leer los siguientes documentos para entender este código:

+0

Hola, Aymeric! Gracias por tu respuesta útil. Me gustaría preguntarte si existe una forma programática (diciendo mediante el lenguaje Java o el lenguaje de script) para ejecutar ese tipo de reglas sobre AllegroGraph. Tengo una tubería que las declaraciones pobres en el AG y después de que el proceso se termine, las reglas se deben aplicar. Gracias de nuevo. Saludos, Florin – florins

+0

Bueno, puedes almacenar todos los funtores del lado del servidor usando los scripts o el archivo de inicio. Después de eso, puede ejecutar algunas consultas para agregar las nuevas declaraciones utilizando AllegroGraph HTTP API. – Aymeric

+0

He tropezado con un problema similar. La cuestión es que quiero agregar un triple solo si no existe. Por lo que he leído, tu functor de adición (a--) debería hacer esto. Lo he copiado, pero parece que no funciona. El triple se agrega, no importa si ya existe o no. ¿Por qué está pasando esto? He publicado la pregunta [aquí] (http://stackoverflow.com/questions/9095983/allegrograph-check-existing-triple) – Dragos

Cuestiones relacionadas