Определите правила для троек AllegroGraph и как их применять - PullRequest
5 голосов
/ 19 января 2012

Я использую AllegroGraph для хранения выписки следующим образом:

<newsid1  hasAnnotation  Gamma>
<newsid1  hasAnnotation Beta>

Я бы хотел определить правило для этих постов, которое гласит: если субъект newsid1 hasAnnotation либо Gamma или Beta, затем добавьте новое утверждение в триплетное хранилище, которое говорит, что субъект hasAnnotation Theta, то есть утверждение

<newsid1  hasAnnotation Theta>

У меня следующие вопросы:

  1. Как я могу определить такое правило для Allegro?
  2. Как я могу применить эти правила к утверждениям?

1 Ответ

4 голосов
/ 19 января 2012

1) Вы можете определить использование функторов Пролога для определения этих правил. В вашем случае вы определите.

;; 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) Запустите следующий пролог (используя AGview для примера), чтобы добавить эти операторы новостей

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

Вы можете прочитать следующие документы, чтобы понять этот код:

...