の2人の最も近い隣人を探す私は各点の2人の最も近い隣人にポイント
データセット見つけたい:私はこのような何かをしようと
?POINT ?NEIGHBORS
"p1" "p2; p3"
"p2" "p1; p3"
"p3" "p2; p4"
"p4" "p2; p3"
:
:p1 :has_position 1 .
:p2 :has_position 2 .
:p3 :has_position 3 .
:p4 :has_position 4 .
期待される結果を
SELECT ?POINT ?POS (group_concat(?idPointN;separator='; ')as ?NEIGHBORS)
WHERE{
?idPoint :has_position ?POS .
?idPointN :has_position ?POSN . FILTER (?idPoint != ?idPointN)
}
GROUP BY ?POINT ?POS
これはポイントのすべての近傍を返します。私はgroup_concat
の中にORDER BY(?POS-?POSN)
とlimit 2
のような何かをしたいのですが、どうすればよいかわかりません。
EDIT:
は、私はそれが最も近いことにより、各ポイントのすべてのネイバーの順序を私を与える
SELECT ?POINT ?NEIGHBOR
WHERE{
?idPoint rdfs:label ?POINT . FILTER(?idN != ?idPoint)
?idPoint :has_position ?POS .
?idN rdfs:label ?NEIGHBOR .
?idN :has_position ?POSN .
}
ORDER BY ?POINT abs(?POS-?POSN)
このクエリを記述します。
どのように私は2つの最も近いことができますか?と同じ行に?
このためには、おそらくオーダーと限度を持つ副選択が必要です。 SPARQLでは、項目ごとの上位n個を取得するのが難しくなりますが、この場合は可能です。 –
私はまた、{ \t \tこの \t 'SELECT POINTをNEIGHBOR \tを試してみましたidPointのrdfs:????POINTにラベルを付けます。 FILTER(?idNEIGHBOR!=?idPoint) \t \t?idPoint:has_position?POS。 \t \t { \t \t \t SELECT NEIGHBOR \t \t \t { \t \t \t \t idNEIGHBORのrdfs:???NEIGHBORにラベルを付けます。 \t \t \t \t?idNEIGHBOR:has_position?POSNEIGHBOR。 \t \t \t} \t \t \t ORDER BY?POINTのABS(?POS-?POSNEIGHBOR) \t \t \t LIMIT 2 \t \t} \t \t} ' しかし、結果は空の –
I'LLですその日の少し後にこのショットを撮りましたが、それまでの間、http://stackoverflow.com/questions/27061096/sparql-using-subquery-with-limitと他のものの一部を見てくださいリンク先の質問(コメントを参照) –