我正在使用 AllegroGraph 来存储这样的语句:
<newsid1 hasAnnotation Gamma>
<newsid1 hasAnnotation Beta>
我想在这句话上定义一个规则:如果主题
newsid1 hasAnnotation
要么 Gamma
或 Beta
,然后在三元组中添加一个新语句,说明主题 hasAnnotation Theta
,即声明<newsid1 hasAnnotation Theta>
我的问题如下:
最佳答案
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))
您可以阅读以下文档以了解此代码:
关于semantic-web - 定义 AllegroGraph 三元组的规则以及如何应用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8924654/