是否可以計算將兩個實例連接到SPARQL查詢的邊的數量?我想找到一條路。兩個資源之間的路徑
回答
您可以使用SPARQL的屬性路徑和聚合函數來計算唯一路徑中的邊數。例如,對於這樣的數據,它包含了我們所關心的兩個路徑(一個有兩個邊緣ç和d一起克三條邊):
@prefix : <https://stackoverflow.com/questions/19587520/sparql-path-between-two-instance/> .
:a :p :b . # a to c is a path of length 2
:b :p :c .
:d :p :e . # d to g is a path of length 3
:e :p :f .
:f :p :g .
可以使用像下面這樣的查詢。注意我已經使用了特定的屬性:p
,而不是一個變量。這是必需的,因爲來自SPARQL 1.1規範的9.1 Property Path Syntax不允許屬性路徑中的變量。
prefix : <https://stackoverflow.com/questions/19587520/sparql-path-between-two-instance/>
select ?start ?end (count(?mid) as ?length)
where {
values (?start ?end) { (:a :c) (:d :g) }
?start :p+ ?mid .
?mid :p* ?end .
}
group by ?start ?end
和得到的結果是這樣的:
$ sparql --query query.rq --data data.n3
------------------------
| start | end | length |
========================
| :d | :g | 3 |
| :a | :c | 2 |
------------------------
這裏發生了什麼的更詳細的描述中可以找到:
- Calculate length of path between nodes?(這實際上是看路在樹)
- this answer到Finding all steps in property path(請注意,接受的答案表示您不能這樣做,但鏈接的答案說明你實際上可以);
- 接受的答案爲Is it possible to get the position of an element in an RDF Collection in SPARQL?。
的基本理念,雖然是,如果你有從?start
到?end
的路徑,那麼你也有,對於一堆?mid
,從?start
到?mid
的路徑不同的值,並從路徑?mid
到?end
。您可以爲?mid
選擇不同值的號碼(如果您允許其中一個端點並禁止其他端點)恰好是路徑的長度。
該屬性是否必須指定?我不能這樣做嗎? - >?p *或?p + – user2837896
@ user2837896屬性_does_需要指定。我更新了我的回答。不幸的是[屬性路徑語法](http://www.w3.org/TR/sparql11-query/#pp-language)不允許變量。 –
我不想指定屬性..我想在不指定屬性的情況下找到資源之間的最短路徑。在java中可能嗎? – user2837896
- 1. 在兩個應用程序之間共享資源/構建路徑
- 2. 兩個路徑之間的Nodejs差異
- 3. 兩個表之間的依賴路徑
- 4. Rails資源路徑
- 5. tastypie資源路徑
- 6. svn資源路徑
- 7. 資源類路徑
- 8. 資源路徑組件和EDM標籤之間的OData關係
- 9. 軌道路由中的資源和資源之間的區別?
- 10. Spring MVC的資源路徑
- 11. 資源的路徑索引
- 12. 類路徑資源的java.nio.file.Path
- 13. CommonJS的資源路徑
- 14. Xcode的路徑資源
- 15. 嵌套資源的路徑
- 16. 資源的url路徑
- 17. javac的類路徑和源路徑選項之間的差異
- 18. 多個資源中的相同路徑
- 19. RestEasy的多個資源路徑華林
- 20. 兩點之間最長的路徑
- 21. 繪製兩點之間的路徑
- 22. Symfony2的資產資源路徑
- 23. 鏈路之間的兩個
- 24. WPF - 默認資源路徑
- 25. CMake和資源路徑
- 26. 圖標資源路徑
- 27. REST資源路徑設計
- 28. 設置資源路徑MVC
- 29. symfony翻譯資源路徑
- 30. Unity:獲取資源路徑
是和不是......你想只是一個特定屬性的路徑?圖中的個體之間只有一條路徑嗎? –
您需要更詳細地說明您的數據是什麼以及您想要的結果(路徑邊緣列表,路徑長度等)。與此同時,您可能會發現[查找屬性路徑中的所有步驟](http://stackoverflow.com/q/18024413/1281433)和[是否可以在SPARQL中獲取RDF集合中元素的位置?] (http://stackoverflow.com/q/17523804/1281433)有幫助。 –
嗯,花了我一兩分鐘才找到它,但你也應該看看[計算節點之間的路徑長度?](http://stackoverflow.com/q/5198889/1281433)。不過,我們需要澄清一下,您是否正在尋找邊數,然後找到_length_,或者如果您正在尋找實際的_path_,這是一組邊。 –