5

私は AllegroGraph を使用して、次のようなステートメントを保存しています。

<newsid1  hasAnnotation  Gamma>
<newsid1  hasAnnotation Beta>

このステートメントについて次のよう なルールを定義したいと思いますnewsid1 hasAnnotation Gamma Beta hasAnnotation Theta

<newsid1  hasAnnotation Theta>

私の質問は次のとおりです。

  1. Allegro でそのようなルールを定義するにはどうすればよいですか?
  2. これらのルールをステートメントに適用するにはどうすればよいですか?
4

1 に答える 1

4

1) Prolog ファンクターを使用してこれらのルールを定義できます。あなたの場合、定義します。

;; 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))

このコードを理解するには、次のドキュメントを参照してください。

于 2012-01-19T17:32:25.353 に答える