簡體   English   中英

加入SPARQL查詢

[英]Join SPARQL Query

我在RDF知識庫中有多個圖形

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>
-----

但是我想要在兩個查詢中都通用的主題<123>。 無論如何,我們都可以將兩個查詢組合在一起以獲得唯一在兩個查詢中都通用的主題。 提前致謝。

是的,加入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模式,因為它會單獨匹配每個命名的圖,並將結果合並在一起,而這些語義不具有您想要的語義。

通過此查詢,兩個圖形的結果現在將結合在一起,因此您將僅獲得兩個圖形中的模式匹配的結果。

暫無
暫無

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

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