3

私のRDFストアには次のような状況があります:

名前付きグラフ: A

  S1 P1 O1

名前付きグラフ: B

  S2 P2 O1

名前付きグラフ: C

  S3 P3 O1

ここで、O1 がトリプルにあるすべてのグラフを検索し、それら 3 つのグラフ + トリプルを A+B+C という名前の新しいグラフに格納する SPARQL クエリを定義したいと考えています。

新しい名前付きグラフ: A+B+C

Named Graph: A
   S1 P1 O1
Named Graph: B
   S2 P2 O1
Named Graph: C
   S3 P3 O1

Construct または insert Into を使用すると、トリプルからグラフを作成する方法しかわかりませんでした。グラフを含むグラフを作成する方法ではありませんか?

これは可能ですか?

タンク・ユー

4

1 に答える 1

4

あなたが説明しているように見える方法でサブグラフを相互に明示的に格納することはできないため、あなたが望むことを正確に行うことはできません。ただし、すべてのトリプルを単一のグラフに入れることができます。これで十分であることが証明されます。

PREFIX : <http://example.org/>
INSERT
{
  # Output triples in the desired graph
  GRAPH ?name { ?s ?p ?o }
}
WHERE
{
  # Use a sub-query to find all relevant graphs and concatenate their names together
  {
    SELECT (GROUP_CONCAT(STR(?g)) AS ?strName) (URI(?strName) AS ?name)
    WHERE
    {
       GRAPH ?g { ?s ?p :o1 }
    }
    GROUP BY ?g
  }
  # Join the name to all the relevant triples
  GRAPH ?g 
  {
    ?s ?p :o1 .
    ?s ?p ?o .
  }
}

したがって、これは少しハッキーですが、大まかにやりたいことを行う必要があります。サブクエリを使用して、関連するトリプルを持つすべてのグラフを検索し、それらの名前を連結して URI に変換します。これにより、非常に無効な URI が作成される可能性があり、クエリの後の手順が機能しない可能性があることに注意してください。

次に、そのグラフ名を、目的のサブジェクトを持つトリプルを含むグラフからのすべてのトリプルと一緒に結合します。

最後に、これらを新しく作成された名前でグラフに出力します。ストアによっては、不正なグラフ名を作成した可能性があるため、これが機能しない可能性があります。

これはあなたが望むものとは異なるかもしれませんが、うまくいけば正しい方向に向けることができます.

于 2015-02-08T02:03:43.317 に答える