2012-01-19 10 views
5

Używam AllegroGraph przechowywać oświadczenie takiego:Zdefiniuj zasady AllegroGraph trójek i jak je stosować

<newsid1 hasAnnotation Gamma> 
<newsid1 hasAnnotation Beta> 

chciałbym zdefiniować regułę na tej staments który mówi: jeżeli przedmiotemnewsid1 hasAnnotationalboGammalubBeta, następnie dodać nowe oświadczenie w triplestore, który mówi, że przedmiotemhasAnnotation Theta, czyli rachunku

<newsid1 hasAnnotation Theta> 

moje pytania są następujące:

  1. Jak mogę określić taką regułę dla Allegro?
  2. W jaki sposób mogę zastosować te zasady do wyciągów?

Odpowiedz

4

1) Aby zdefiniować te reguły, można zdefiniować użycie Prolog functors. W twoim przypadku zdefiniujesz.

;; 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) Run następnie następujące zapytanie prolog (używając AGview dla exemple), aby dodać te oświadczenia wiadomości

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

można przeczytać następujące dokumenty zrozumieć ten kod:

+0

Witaj, Aymeric! Dziękuję za pomocną odpowiedź. Chciałbym zapytać, czy istnieje sposób programistyczny (mówiący przy użyciu języka Java lub języka skryptowego) do wykonywania takich reguł na AllegroGraph? Mam rurociąg, który zawiera złe stwierdzenia w AG i po zakończeniu tego procesu należy zastosować zasady. Jeszcze raz dziękuję. Pozdrawiam, Florin – florins

+0

Cóż, możesz przechowywać wszystkie funktory po stronie serwera używając skryptów lub pliku initfile. Możesz potem uruchomić kilka zapytań, aby dodać nowe wyciągi za pomocą interfejsu API HTTPG AllegroGraph. – Aymeric

+0

Natknąłem się na podobny problem. Chodzi o to, że chcę dodać potrójny, tylko jeśli jeszcze nie istnieje. Z tego, co przeczytałem, twój funktor dodający (a--) powinien to zrobić. Skopiowałem to, ale to nie działa. Potrójny jest dodawany, bez względu na to, czy już istnieje, czy nie. Dlaczego to się dzieje? Wysłałem pytanie [tutaj] (http://stackoverflow.com/questions/9095983/allegrograph-check-existing-triple) – Dragos

Powiązane problemy