0

次のように関連する多くの RDF トリプルがあるとします。

1: <S,P1,O>        

2: <O,P2,O3>       
3: <O,P3,O4>  

4: <O3,P4,O5> 

トリプル N° 2 と 3 はトリプル N°1 と "O" を共有し、トリプル N° 4 はトリプル N°2 と "O3" を共有するため、トリプル番号 1 を知るだけでトリプル N° 2、3、4 を取得したいと思います。 "O" をトリプル N°1 と共有 P2、P3、P4 を知らなくても、sparql クエリでそれを定式化することは可能ですか?

前もって感謝します

4

2 に答える 2

1

もちろん。このクエリはまさにそれを行います:

  CONSTRUCT {
     ?s ?p ?o . 
     ?o ?q ?z. 
     ?w ?r ?o .
  }
  WHERE {
        ?s ?p ?o . 
        FILTER (?s = :O || ?o = :O) 
        OPTIONAL { ?o ?q ?z . }
        OPTIONAL { ?w ?r ?o . }
   }

ただし、非常に効率的である可能性は低いです。ただし、実際のデータや、この特定の結果が必要な理由について詳しく知らなければ、より良いソリューションを考え出すことは困難です。

于 2013-12-25T23:02:33.733 に答える
0

ご存じのように聞こえますが:O、それを主語とするトリプルと、それらのトリプルの目的語を主語とするトリプルを求めているようです。では、こんなことを求めているのでしょうか。

select * where {
  :O ?p2 ?o2 .
  optional { ?o2 ?p3 ?o3 }
}
于 2013-12-26T04:44:02.413 に答える