2011-12-20 239 views
9

我是SPARQL的初學者,想知道是否有可以幫助我返回傳遞關係的查詢。例如,下面的n3文件我想要一個將返回「a是相同的c」或沿着這些線的東西的查詢。由於SPARQL查詢傳遞

@prefix : <http://websitename.com/links/> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 

:a owl:sameas :b. 
:b owl:sameas :c. 

回答

13

你可以,如果你使用的是能夠適當SPARQL 1.1引擎使用屬性路徑,您標記您的問題耶拿所以我假設你正在使用一個支持此功能的ARQ引擎。

所以你可以編寫類似下面的查詢:

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
SELECT * 
WHERE 
{ 
    ?x owl:sameAs+ ?y 
} 

注意+謂語之後,用來指示它應該尋找的一個/多個步驟組成的關係。

屬性路徑的語法可以找到here和非常正則表達式。使用它的查詢唯一的缺點是你沒有得到任何有關路徑或中間節點的信息。

+0

再次感謝您的幫助。一定要查看SPARQL語法的鏈接 – Sam 2011-12-20 09:37:24

+3

如果您查詢的內容支持OWL推理,特別是包含傳遞性的OWL配置文件,並且您已將該屬性定義爲TransitiveProperty,則不需要任何特殊的SPARQL語法,你可以正常使用這個屬性,推理者會做正確的事情。 – Michael 2012-05-29 15:39:06

4

雖然RobV's answer在你的情況下是正確的,我認爲owl:sameAs的雙向性質值得一提。

讓我們通過這個擴展您的例子:

:a owl:sameAs :d. 
:e owl:sameAs :d. 

在這種情況下,一個簡單的owl:sameAs+將不足以找到:e,所以也許使用類似(owl:sameAs|^owl:sameAs)+發現整等價樹。請注意,根據端點,這可能會導致循環。

也有可能是實現特定的擴展來處理owl:sameAs推理,如在Virtuoso

DEFINE input:same-as "yes" 
select * where { :a ?p ?o. } 

也返回?p和針對:b, :c, :d:e發出?o