追加のプロパティとヘルパーを使用してJPAオブジェクトをカプセル化するAPIを作成しています。APIのコンシューマーに特定のクエリ機能を提供する必要があるため、ユーザーにデータベースへのアクセスを許可しません。
私は次のものを持っています:
Node1(w/ attributes) -- > Edge1(w/ attr.) -- > Node2(w/ attr.)
と
Node1(w/ attributes) -- > |
Node2(w/ attributes) -- > | -- > HyperEdge1(w/ attr.)
Node3(w/ attributes) -- > |
基本的に、Node
aは特定のものである可能性がありtype
、これにより、使用可能な属性の種類が決まります。したがって、さまざまなタイプと属性に応じて、これらの「パス」を照会できる必要があります。
例:ノードから開始し、パスを見つけますtypeA > typeB & attr1 > typeC
。
だから私は何か簡単なことをする必要があり、クエリを文字列として、あるいはビルダーパターンスタイルとして書くことができるようにする必要があります。
私がこれまでに持っているのは、ノード/エッジ/ハイパーエッジをトラバースするように設定されたビジターパターンです。これにより、一種のクエリが可能になりますが、新しいタイプのクエリに対して新しいビジターを作成する必要があるため、それほど単純ではありません。
これはこれまでの私の実装です:
ConditionImpl hasMass = ConditionFactory.createHasMass( 2.5 );
ConditionImpl noAttributes = ConditionFactory.createNoAttributes();
List<ConditionImpl> conditions = new ArrayList<ConditionImpl>();
conditions.add( hasMass );
conditions.add( noAttributes );
ConditionVisitor conditionVisitor = new ConditionVisitor( conditions );
node.accept( conditionVisitor );
List<Set<Node>> validPaths = conditionVisitor.getValidPaths();
上記のコードは、開始ノードに質量が2.5
あり、リンクされたノード(子)に属性がないかどうかをチェックするクエリを実行します。訪問者はaを実行condition.check( Node )
し、ブール値を返します。
より単純なグラフのクエリ言語を作成するには、どこから始めればよいですか?注:既存のグラフライブラリを使用するオプションはありません。数十万のノードとエッジがあります。