7

SPARQL クエリの計算上の制限を理解しようとしています。2 つのオブジェクト間に有向パスがあるかどうかを判断するクエリの書き方を知りたいです。

特定の長さのパスに対してそれを行う方法を知っています:

SELECT ?a ?b ?c ?d
WHERE { ?a  <http://graphtheory/hasNeighbor>  ?b . 
        ?b  <http://graphtheory/hasNeighbor>  ?c .
        ?c  <http://graphtheory/hasNeighbor>  ?d .
        FILTER (?a != ?c && ?b != ?d
                && ?a = <http://graphtheory/node/1>
                && ?d = <http://graphtheory/node/2>)
      }
LIMIT 10

単一のクエリで任意の長さのパスを検索する方法はありますか? これは SPARQL では不可能ですか?

4

2 に答える 2

8

AndyS はこの質問に答えるためにすべての要素を提供しましたが、それらを適用するのを難しくする可能性のあるタイプミスがいくつかあります。彼が言うように:

SPARQL 1.1 には、任意の数の * 演算子を含むプロパティ パスがあります。

パスが何であるか、または最短パスの長さはわかりません。そのようなパスがあるかどうかだけです。

これを行う方法 (AndyS に基づいていますが、2 つの小さな修正があります) は次のとおりです。

PREFIX : <http://graphtheory/>
PREFIX node: <http://graphtheory/node/>

ASK { node:1 :hasNeighbor* node:2 }

私が知る限り、プロパティ パスを使用せずにこれを行う方法はありません。

于 2013-01-22T12:48:08.413 に答える
6

SPARQL 1.1 には、「任意の数」の演算子を含むプロパティ パスがあります。*

パスが何であるか、または最短パスの長さはわかりません。そのようなパスがあるかどうかだけです。

PREFIX : <http://graphtheory/node/>
PREFIX node: <http://graphtheory/node/>

ASK { node:1 :hasNeighbor* node:2 }

?a =( andは必要ありません?d =。値をクエリに書き込むことができます。)

言語にデータ型を追加することpathは、将来の作業の場所です。いくつかの実験的なシステムで問題が確認されています。

于 2013-01-18T09:01:25.947 に答える