3

基本的に、arq 2.8.8 で動作する以下の SPARQL クエリを取得しましたが、+ 記号を認識しないため、arq2.8.4 では動作しません。私が投稿したものと同様のarq 2.8.4バージョンで機能するクエリが本当に必要です。私が投稿したクエリは、基本的に、互いに同じであるすべてのアイテムを検索します。たとえば、a が b と同じで、b が c と同じである場合、クエリは a に対して b と c の両方を返します。

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

1 に答える 1

3

使用している機能はSPARQL1.1であるため、以前のバージョンのARQではサポートされていませんでした。自分の仕事に近いクエリを作成する唯一の方法は、次のいずれかを実行することです。

さまざまな長さのユニオンパス

PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT *
WHERE
{
  { ?x owl:sameAs ?y }
  UNION
  { ?s owl:sameAs [ owl:sameAs ?y ] . }
  UNION
  { ?s owl:sameAs [ owl:sameAs [ owl:sameAs ?y ] ] . }
  # Repeat the above pattern up to whatever limit you want
}

クライアント側のコードを使用する

次のように初期クエリを発行します。

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

値のリストを作成し、?y値ごとに次の形式のクエリを発行します。

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

<constant>毎回リストの値の1つを置き換えてから、の新しい値を?yリストに追加します。

このアプローチで注意する必要があるのは、2番目のクエリを既に発行した値を追跡して、繰り返しクエリを保存することだけです。

于 2012-01-21T20:39:59.173 に答える