2016-10-21 22 views
1

我想弄清楚Jena TDB如何處理物理查詢計劃級別上的多個FROM子句的SPARQL查詢。 我想知道Jena TDB如何處理通過不同圖表執行查詢。Jena TDB物理查詢計劃與多個FROM子句

我做了一些小實驗,看了看查詢代數,但是,我不清楚FROM子句是如何影響代數的。 看起來像FROM子句在代數中被丟棄。我期望代數是通過圖的聯合來評估的,但我想確定。

我有以下的四邊形:

<http://example.com/book2/> <http://example.com/price> "5"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.com/A> . 
<http://example.com/book2/> <http://example.com/title> "Lord of the Rings" <http://example.com/B> . 

和下面的查詢:

SELECT (AVG(?price) as ?total) 
FROM <http://example.com/A> 
FROM <http://example.com/B> 
WHERE { 
    ?book <http://example.com/price> ?price . 
    ?book <http://example.com/title> ?title . 
} 

./tdbquery --loc test --query test.sparql --explain 

查詢代數如下所示:

INFO exec     :: ALGEBRA 
    (project (?total) 
    (extend ((?total ?.0)) 
     (group() ((?.0 (avg ?price))) 
     (bgp (triple ?book <http://example.com/price> ?price))))) 

當我執行查詢過數據我收到預期的結果。

回答

0

FROM(和FROM NAMED)實際上並不是查詢的一部分,但是指示要查詢的數據集應該是什麼。這些子句不會改變查詢的功能,只會影響查詢的操作,所以在代數中看不到它們。

與信息做什麼特定的處理器變化:

  • 一些處理器將建立請求的數據集(甚至下載數據)
  • 但也常見到的API明確提供的數據集(例如query(query_string, dataset) ),在這種情況下,處理器將會忽略它,因爲已經提供了一個數據集。
  • 數據集也可能在SPARQL protocol request中提供,在這種情況下,與API調用一樣,處理器將忽略NAMED子句。

現在TDB數據庫是一個數據集,但TDB有一個名爲'dynamic datasets'一個特殊的功能,使用FROMFROM NAMED形成實際上是一個子集,限制查詢,以在FROM條款提到的那些圖表。

+0

在我上面介紹的情況下,數據集需要在某個時間點合併,以便查詢得到回答。如果查詢在圖A和圖B上執行,則查詢不會生成答案。我想知道具體如何工作。 –

+1

啊哈! TDB有一個特殊功能:[動態數據集](https://jena.apache.org/documentation/tdb/dynamic_datasets.html),這就是您的查詢工作的原因。 – user205512

+0

我明白了,你碰巧知道動態數據集何時構建?在查詢被回答之前或查詢計劃中的每個「葉子」是否完成一次?我上面的例子是爲了簡單地展示這個問題,如果我的意思不清楚,那麼我會發佈一個新問題來解釋一個例子的問題。 –