0

Apache Jena ベースのオントロジーがあり、その中に 2 つの名前付きグラフがあります。

m_p

p1    pred1    mp1
p2    pred1    mp1
p3    pred1    mp2
p4    pred1    mp2
p5    pred1    mp3
p6    pred1    mp3

m_p_s

mp1   pred2    w:frnd
mp1   pred2    w:fdlfkdl
mp2   pred2    w:kdsjflk
mp2   pred2    w:jflksdlkj
mp3   pred2    w:frnd
mp3   pred2    w:fjksldjfls

そして、 m_pのすべてのトリプルを取得したいのですが、どのオブジェクトが m_p_s の述語であり、 m_p_sのその述語のオブジェクトはw:frndです

つまり、 m_pからp1p2p5、およびp6を返す (結果を返す) クエリを作成し、 p3およびp4を返さないクエリを作成したいと考えています。

ネストされたクエリでこれを実行しようとしていますが、機能しません:例

SELECT $subj $pred $pr
FROM NAMED named_graph:m_p
WHERE
{
    SELECT $pr
    WHERE
    {
       GRAPH named_graph:m_p_s { $pr $pred0 w:frnd }
    }
}

空の結果を返します。さまざまなことを試しましたが、エラーまたは空の結果、またはm_pのすべてが表示されます。

パフォーマンス上の理由から、UNIONまたはFILTERを使用したくありません。

どうすればそれができるか考えていますか?

よろしく、ステファン

4

2 に答える 2

2

内側の SELECT は必要ありません: ?p の 2 番目の使用を隠しますが、別の名前を使用して行うことができます。

SELECT ?s ?p ?o
FROM named_graph:m_p
FROM NAMED named_graph:m_p_s
{
   ?s ?p ?o
   GRAPH named_graph:m_p_s { ?o ?px w:frnd }
}
于 2017-10-13T10:47:33.493 に答える