私はそれを行うための最良の方法は、アルゴリズムを実装することだと思います!私はこのタスクがSPARQLまたはいくつかの照会メソッドを使用して完了できるとは思わない。私はJavaとJenaに以下のアルゴリズムを実装して、OWLオントロジのノードのセットを接続するすべての有向パスを見つけました。必要な2つのノードを入力として使用できます。
あるグラフG= (V, E)
考える:
向け
- 、
- 非環式、
- 非加重、
- は、2つの頂点(の間の複数のエッジを有していてもよく、したがって、ソースとデスティネーションでありますエッジを決定するのに十分ではない)。
与えられた頂点のセットについては、vSet
としましょう。頂点が含まれていますvRoot
; pSet
でいくつかのパスのソースとして表示される任意の頂点がVROOTから到達可能でなければなりません
- :私たちは次のことを尊重ALLパス
pSet
vSet
間の要素を見つける必要があります。
pSet
する必要があり、任意のパスがvSet
から、その送信元と宛先を有し、vSet
の他の頂点を含んではなりません。
以下のアルゴリズムは、それが別の頂点vSet
のv1
に達するまで、反復ごとに1つのエッジに電流経路のそれぞれを成長させる(上記1に従う)vRoot
から開始する、BFSと同様です。この到達経路を保存して、v1
から始まる新しい経路セットの成長を開始します。ここで
は擬似コードです:
output = ∅;
maxLengthPaths = ∅;
1. add all edges that vRoot is there source to maxLengthPaths
2. while size(maxlengthpaths) != ∅ do
(a) paths := ∅;
(b) extendedPaths := ∅;
(c) foreach path p in maxLengthPaths do
i. if (destination of p in vSet)
1. add p to output
2. for each edge e that destination of p is its source
A. add e to extendedPaths
ii. else
1. add p to paths
iii. for path p1 in paths
1. for each edge that destination of p1 is its source
A. extend p1 by a edge and add it to extendedPaths
(d) maxLengthPaths = extendedPaths
は、最初の検索機能を使用してください、前にここに頼まれています。 – AKSW
「私は、クエリを書くのを助けることができる任意の例はありますか?」 、代わりに。彼らは独断回答やスパムを誘致する傾向があるとして、オフトピックのスタックオーバーフローのためにある質問は書籍、ツール、ソフトウェアライブラリ、チュートリアルや他のオフサイトのリソースをお勧めしますか見つけるために私たちを尋ねる」ことに注意して問題と何を記述してください。これまでこれを解決するために行われてきた。試行を表示し、それを修正する方法を尋ねると、より生産的になるでしょう。 @AKSWが述べたように、言っ –
は、役立つかもしれないコードを持つ他の質問があります。私はあなたがhttp://stackoverflow.com/q/30916040/、http://stackoverflow.com/q/19587520/、http://stackoverflow.com/q/18024413/を見つけるかもしれないと思う、とのhttp:// stackoverflowの.com/q/28900290 /他の人に役立ちます。あなたがそれらを見ている間、右の "リンクされた"セクションにリストされた質問を見てください。もっと有益な質問と回答がそこに掲載されているかもしれません。 –