定义AllegroGraph三元组的规则以及如何应用它们

时间:2012-01-19 10:41:46

标签: semantic-web reasoning allegrograph

我正在使用AllegroGraph来存储这样的声明:

<newsid1  hasAnnotation  Gamma>
<newsid1  hasAnnotation Beta>

我想在此标准上定义一条规则:如果主题 newsid1 hasAnnotation Gamma Beta然后在triplestore中添加一个新语句,表示主题 hasAnnotation Theta,即语句

<newsid1  hasAnnotation Theta>

我的问题如下:

  1. 如何为Allegro定义这样的规则?
  2. 如何在声明中应用这些规则?

1 个答案:

答案 0 :(得分:4)

1)您可以定义使用Prolog functors来定义这些规则。在您的情况下,您将定义。

;; 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)然后运行以下prolog查询(使用AGview作为例子)添加这些新闻语句

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

您可以阅读以下文档来理解此代码: