2011-12-20 21 views
9

私はSPARQLの初心者で、推移関係を返すのに役立つクエリがあるかどうか疑問に思っていました。たとえば、以下のn3ファイルでは、 "a is sameas c"またはそれらの行に沿ったものを返すクエリが必要です。おかげSPARQLクエリの推移

@prefix : <http://websitename.com/links/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

:a owl:sameas :b. 
:b owl:sameas :c. 

答えて

13

あなたが適切に有効SPARQL 1.1エンジンを使用している場合は、プロパティパスを使用することができますが、あなたはので、私はあなたがこの機能をサポートしているそのARQエンジンを使用していると仮定あなたの質問イエナをタグ付けしました。

だから、あなたは、次のようなクエリを記述することができます。

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * 
WHERE 
{ 
    ?x owl:sameAs+ ?y 
} 

+述語の後には、それが1 /複数のステップで構成さの関係を探す必要があることを示すために使用されます。

プロパティパスの構文はhereで、非常に正規表現のようです。これを使用するクエリの唯一の欠点は、パスの長さや中間ノードの情報が得られないことです。

+0

もう一度お手伝いします。 SPARQL構文のリンクを確実にチェックしようとしています – Sam

+3

あなたが照会しているものがOWL推論をサポートしている場合、特に推移性を含むOWLのプロファイルでTransitivePropertyとしてプロパティを定義した場合、特別なSPARQL構文を使用すると、通常はプロパティを通常使うことができ、推論者は正しいことを行います。 – Michael

4

あなたのケースではRobV's answerが正しい一方で、私はowl:sameAsの双方向性が言及する価値があると思います。シンプルなowl:sameAs+:eを見つけるには十分なので、多分全体の等価ツリーを見つけるために、(owl:sameAs|^owl:sameAs)+のようなものを使用することはありませんその場合は

:a owl:sameAs :d. 
:e owl:sameAs :d. 

はのは、これで、あなたの例を拡張してみましょう。エンドポイントによっては、ループが発生する可能性があることに注意してください。

DEFINE input:same-as "yes" 
select * where { :a ?p ?o. } 

?p?oを返す:b, :c, :d:eのために発行されています

はまた、そのようなVirtuosoのようowl:sameAs推論を処理するための実装固有の拡張機能、があるかもしれません。