この SPARQL 更新を実行すると、次のようになります。
INSERT {
GRAPH <n4> {
?s foaf:firstName ?o
}
}
WHERE {
GRAPH <n1> {
?s foaf:familyName ?o .
?o foaf:familyName ?x
}
}
構文的には問題ありませんが、結果が得られません。INSERT句から同時に?s
バインドできないからですか? ?s
?o
あなたのクエリは SPARQL に対して構文的には問題ありませんが、おそらく一致するパターンは、ほとんどの場合、正当な RDF ではありません。特に、次のパターンはありそうにありません。
?s foaf:familyName ?o .
?o foaf:familyName ?x
あなたのデータと一致します。の値?o
は、RDF リテラルである文字列である可能性が非常に高く、リテラルは RDF のトリプルの主語になることはできないため、?o foaf:familyName ?x
一致する可能性はほとんどありません。これは、クエリの WHERE 部分に一致するトリプルがないことを意味するため、挿入するものはありません。最初に実行することをお勧めします
SELECT ?s ?o WHERE {
GRAPH <n1> {
?s foaf:familyName ?o .
?o foaf:familyName ?x
}
}
INSERT で使用できる と の?s
値を確認します。?o
結果が表示されないことが予想されるため、 にトリプルを挿入していませんn4
。
あなたが尋ねた特定の質問に関しては、
INSERT句から同時に
?s
バインドできないからですか??s
?o
同時バインディングについては問題ありません。クエリの WHERE 部分は、(場合によっては空の) 結果のセットを生成し、それぞれが?s
、?o
、およびをバインドし?x
ます。次に、解ごとに、 と の値を?s
使用?o
してトリプルを構築しvalue-of-s foaf:firstName value-of-o
、これらのトリプルのすべてを に挿入しn4
ます。n4
結果のセットが空であるため (上記の理由により)、何も挿入されていません。
Jena Fuseki の 0.2.7 版を使用しました。問題は、グラフを明示的に作成し、その後 INSERT Update を実行する必要があったことだと思います。これは 1 つのグラフで機能しますが、groupgraphpattern をより大きなデータセット (n1、n2、n3 など) に評価する場合、結果は得られません。