2014-04-02 103 views
2

我在RDF知識庫多個圖形加入SPARQL查詢

for example 
<123> <hasValue> "23" <graph1> 
<234> <hasValue> "47" <graph1> 
<374> <hasValue> "23" <graph1> 
----------- 
---------- 
<456> <hasFeature> "50" <graph2> 
<244> <hasFeature> "23" <graph2> 
<123> <hasFeature> "23" <graph2> 
--------------------- 

現在我婉運行SPARQL查詢得到的結果是兩圖常見。

想如果我在一個圖形我得到以下結果下面的查詢

SELECT ?subject 
FROM Named <http://www.xyz.com/namespace/graph1> 
WHERE {GRAPH ?graph 
    {?subject prefix:hasValue "23" .}} 

<123> 
<374> 
--- 
--- 
--- 

如果運行graph2下面第二個查詢,我得到以下

SELECT ?subject 
FROM Named <http://www.xyz.com/namespace/graph2> 
WHERE {GRAPH ?graph 
    {?subject prefix:hasFeature "23" .}} 

<244> 
<123> 
----- 

不過,我想主題這在兩個查詢中都很常見。有什麼辦法可以將兩個查詢結合起來,以獲得這兩個查詢中通用的唯一主題。 在此先感謝。

回答

3

是的,加入SPARQL只是一種說明具有共同變量的多個模式的情況。因此,我們可以大多隻是削減和過去的兩個查詢一起:

SELECT ?subject 
FROM NAMED <http://www.xyz.com/namespace/graph1> 
FROM NAMED <http://www.xyz.com/namespace/graph2> 
WHERE 
{ 
    GRAPH <http://www.xyz.com/namespace/graph1> 
    { 
    ?subject prefix:hasValue "23" . 
    } 
    GRAPH <http://www.xyz.com/namespace/graph2> 
    { 
    ?subject prefix:hasFeature "23" . 
    } 
} 

注意,因爲你現在分別查詢兩張圖,我們需要明確地命名爲每個GRAPH條款的曲線圖。我們不能只使用一個GRAPH ?graph模式,因爲它會單獨匹配每個命名圖並將結果組合在一起,而這些結果不具有您所需的語義。

使用此查詢,現在將兩個圖形的結果連接在一起,因此只有在兩個圖形中模式匹配的情況下才能得到結果。

+0

很多感謝您的回覆, – user3061324