簡體   English   中英

Sparql - 查詢以獲取與特定主題相關的所有三元組

[英]Sparql - query to get all triples related to a specific subject

我希望圖中的所有三元組都來自特定的主題/節點。

我可以得到所有的三倍......

SELECT $s $p $o WHERE { $s $p $o }

......真的沒有用

我可以得到所有直接連接的三元組......

SELECT $s $p $o WHERE { 
   $s _some_predicate_ _some_object_specifier .
   $s $p $o }

我想要的是從$s (selected by predicate and object)開始$s (selected by predicate and object)然后獲得類似$s $p* $o

思考?

圖形

所以我想從ID_6開始並獲取包括節點1和2在內的所有節點。我還需要謂詞,因為並非所有謂詞都是HAS

所以更具體地使用下面的圖表我想要對象“ P2 ”下面的所有三元組我需要每個1xx和2xx節點的主題,謂詞和對象...我可以遞歸查詢每個節點以獲取數據但我是希望有一個簡單的(ish)查詢來獲取單個查詢中的所有數據...

更多細節

我認為你所尋找的是物業道路

SELECT ?s ?p ?o
WHERE 
{
   ?s HAS+ ?o .
   FILTER ( ?s = <ID_6> )
}

有一種方法可以做到這一點,但它是否“簡單”有點主觀。

屬性路徑允許您查詢未知長度的路徑。 但是,您只能在特定屬性名稱上指定此類任意長度的屬性路徑(因此不能在屬性變量上指定 )。

解決這個問題的方法是使用否定,如下所示:

:P3 (:overrides|!:overrides)+ ?child 

這將返回通過長度為1或更長的路徑連接的所有“子”,其中連接屬性為:overrides或不:overrides (當然,對於每個屬性都是如此)。

然而,使用屬性的路徑,你只能滿足這些特性讓它們的回來,你不能得到實際獲得的屬性名稱本身回來。 因此,我們需要使查詢更廣泛,只需查詢與原始主題( :P3 )以及所有可能的“子”主題( ?child )相關的所有內容。

完整查詢然后變為:

CONSTRUCT {
   :P3 ?prop ?val .
   ?child ?childProp ?childPropVal . 
   ?someSubj ?incomingChildProp ?child .
}
WHERE {
     :P3 ?prop ?val ;
         (:overrides|!:overrides)+ ?child . 
     ?child ?childProp ?childPropVal.
     ?someSubj ?incomingChildProp ?child. 
}

這樣做的原因是我們匹配並返回每個孩子的傳入和傳出屬性:所以對於通過長度為2的路徑連接到:P3的子:P3 ,我們得到路徑的第一個組件,因為:P3 ?prop ?val匹配它,最后一部分因為?someSubj ?incomingChildProp ?child匹配它。 對於長度為3的路徑,路徑的中間部分將匹配,因為當路徑仍然是2時,它已經被?child ?childProp ?childPropVal檢索到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM