2016-12-07 56 views
2

我想編寫一個查詢來獲取關於與電影相關的實體的三元組。這是查詢條件:在SPARQL中使用OPTIONAL和UNION

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX : <http://dbpedia.org/resource/> 

SELECT DISTINCT ?s1 WHERE { 

SERVICE <http://dbpedia.org/sparql/> { 

?film ?p ?o 
FILTER (?film = :Braveheart) . 

OPTIONAL { 
{ 
{ 
{?o ?p2 ?o2 .} 
OPTIONAL { 
    {?o2 ?p21 ?o21} 
    UNION 
    {?s21 ?p22 ?o2} 
} 
} 

UNION 

{?s1 ?p3 ?o} 
} 
} 
} 
} 

此查詢不提取結果。但是,評論部分

OPTIONAL { 
    {?o2 ?p21 ?o21} 
    UNION 
    {?s21 ?p22 ?o2} 
} 

生成結果。我想了解爲什麼OPTIONAL子句阻止生成結果以及我如何解決問題。

+2

在使用Virtu的Web界面中有超時oso隨時隨地的功能。 – AKSW

回答

1

我不知道你在哪裏提出了這個查詢(我認爲是Sparql端點),它是什麼意思,並沒有取得任何結果,但我已經寫了一個更簡單的查詢,並在端點上執行:

SELECT DISTINCT ?s1 WHERE { 
dbr:Braveheart ?p ?o 
    OPTIONAL { 
    { 
     { 
      {?o ?p2 ?o2 .} 
      OPTIONAL { 
       {?o2 ?p21 ?o21} 
       UNION 
       {?s21 ?p22 ?o2} 
      } 
     } 
     UNION 
     {?s1 ?p3 ?o} 
    } 
    } 
    } 

由於超時而沒有返回結果。否則,可選條款沒有問題。例如,如果你把「dbo:narrator」而不是「?p」,你會看到結果。