2016-09-16 12 views
1

GraqlでModernデータセット(http://www.tinkerpop.com/docs/3.0.0.M7/images/tinkerpop-modern.png)をモデル化しようとしています。 MarkoはVadasとVadasがMarkoを知っていることを知っています - この例では、私は彼らが友人であると仮定しています。Graqlで対称関係を定義する方法

私はこれを行うことができますか?

私がこれまで見たすべての例では、関係(例:教師/学生)に2つの異なる役割があります。

答えて

1

ロールは別個である必要があります。したがって、1つのリレーションで2つのロールを持つことはできません。friend

説明している関係が対称である場合は、代わりにfriend1friend2の2つの役割を導入する必要があります。必要に応じて、これらは両方ともako friendになります。あなたが使用しているデータセットを考えると

、対称関係としてこれを記述しない方が良いかもしれませんし、1つの役割が knowerであり、他の役割は known-aboutある場合代わりに、 knows関係を使用しています。

0

Felix Chapmanは、ロールタイプは一意であるため、真の対称関係は不可能であると指摘しています。

周りにはいくつかの方法があります。第二の可能性は​​を使用している

friend isa role-type is abstract; 
friend1 ako friend; 
friend2 ako friend; 

person isa entity-type plays-role friend; 

SymmetricFriendship isa inference-rule, 
    lhs {match (friend1 $x, friend2 $y) isa friendship; 
     select $x, $y}, 
    rhs {match (friend1 $y, friend2 $x} isa friendship;}; 

第二の方法が作るあなたが最初の可能性がakoと抽象的役割を使用することです

insert 
friendship isa relation-type 
    has-role friend1 
    has-role friend2; 

としてあなたの関係を定義していると言います友情関係は数学的な観点から真の対称関係になりますが、Graqlのマッチ構文が与えられ、パフォーマンス上の理由から、私は明示的に関係を対称にする必要はほとんどないので、私は個人的に最初の方法を好む。

関連する問題