4

使用時にそれを返さずに、一種のプレースホルダー変数をSPARQLで使用する方法はありSELECT *ますか?

例えば:

SELECT * WHERE { 
   ?s dcterms:title ?title; 
      foaf:person ?name. 
   ?s2 :inProject ?s. 
}

変数を返したくない場合は、 、、および変数?sだけを返し、 .?title?name?s2SELECT *

を使用して選択結果を制限できることは理解していますSELECT ?title ?name ...が、プレースホルダー変数の何らかの表記法またはこれを管理する方法があるかどうかに興味があります。


編集:

場合によっては、空白ノードを使用してこれを実現できることを理解しています。たとえば、次のようになります。

SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   ?s2 :inProject _:s. 
}

しかし、空白のノードは基本的なグラフ パターン間で使用できないため、問題が発生することはありませんか? たとえば、これは次の場合に壊れます。

SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   OPTIONAL { ?s2 :inProject _:s. }
}

ありがとう!

4

1 に答える 1

2

はい、単一のパターンにスコープされた変数の場合、質問で示したように、空のノード変数構文を使用します

一般的なケースではいいえ、変数を使用すると、それSELECT *が返されます。

考えられる回避策の 1 つは、変数をリストし、不要な変数を除外するサブクエリを使用することです。

SELECT * WHERE
{ 
  {
    SELECT ?title ?name ?s2 WHERE 
    {
      ?s dcterms:title ?title; 
      foaf:person ?name. 
      OPTIONAL{ ?s2 :inProject ?s. }
    }
  }
}

しかし、とにかく変数をリストすることになるので、これはまさにあなたが避けようとしているものだと思います。

于 2013-02-21T22:59:00.590 に答える