2013-01-11 52 views
3

我試圖用找到與一個RDF自我指涉的循環:如何使用SPARQL查找閉環?

SELECT ?sbj 
# query pattern 
WHERE { 
    ?sbj skos:broader+ ?sbj . 
} 

,當我在這些RDF運行這個三元組:

http://www.example.com/Concept/0001 http://www.w3.org/2004/02/skos/core#broader http://www.example.com/Concept/0002 
http://www.example.com/Concept/0002 http://www.w3.org/2004/02/skos/core#broader http://www.example.com/Concept/0003 
http://www.example.com/Concept/0003 http://www.w3.org/2004/02/skos/core#broader http://www.example.com/Concept/0001 

我得到:

http://www.example.com/Concept/0003 
http://www.example.com/Concept/0001 
http://www.example.com/Concept/0002 
http://www.example.com/Concept/0002 
http://www.example.com/Concept/0003 
http://www.example.com/Concept/0001 
http://www.example.com/Concept/0001 
http://www.example.com/Concept/0002 
http://www.example.com/Concept/0003 

和如果我在這些RDF三元組上運行相同的查詢:

http://www.example.com/Concept/0001 http://www.w3.org/2004/02/skos/core#broader http://www.example.com/Concept/0002 
http://www.example.com/Concept/0002 http://www.w3.org/2004/02/skos/core#broader http://www.example.com/Concept/0003 
http://www.example.com/Concept/0003 http://www.w3.org/2004/02/skos/core#narrower http://www.example.com/Concept/0001 

我得到:

http://www.example.com/Concept/0003 
http://www.example.com/Concept/0002 
http://www.example.com/Concept/0003 

在那裏,因爲我希望它返回空。

它看起來像skos:更寬+似乎允許skos以外的屬性:更廣泛,更像ANY *,skos:更寬,ANY *或其他....是正確的行爲嗎?

好,我用:

Jena:  VERSION: 2.6.4 
Jena:  BUILD_DATE: 2010-12-12T16:56:15+0000 
ARQ:  VERSION: 2.8.7 
ARQ:  BUILD_DATE: 2010-12-12T14:07:48+0000 
+3

這是一箇舊版本的耶拿。 +的實現和語義已經發生了很大的變化,但是當前版本的答案看起來並不正確。您可以通過https://issues.apache.org/jira/browse/JENA – AndyS

+0

提供一個有效工作示例(法律數據,完整查詢)的錯誤報告。謝謝!我在最新版本的Jena(2.10.0快照)上運行它,並且它工作正常,所以可能不需要提交錯誤...但是它會導致進一步的問題:Jena是否意識到OWL?我做了skos:更廣泛和skos:更窄,並將它們定義爲owl#TransitiveProperty和owl:inverseOf等,並創建了一個類似的閉環,Jena沒有發現它! – Sukii

回答

0

只是爲了提供這種最小工作示例,這裏有兩個數據文件相對應的那些問題。

data1.n3:

@prefix skos: <http://www.w3.org/2004/02/skos/core#> . 
@prefix : <http://www.example.com/Concept/> . 

:0001 skos:broader :0002 . 
:0002 skos:broader :0003 . 
:0003 skos:broader :0001 . 

data2.n3:

@prefix skos: <http://www.w3.org/2004/02/skos/core#> . 
@prefix : <http://www.example.com/Concept/> . 

:0001 skos:broader :0002 . 
:0002 skos:broader :0003 . 
:0003 skos:narrower :0001 . 

使用耶拿的命令行工具ARQ,似乎問題已經在耶拿/ ARQ的後續版本得到解決。

$ arq --version 
Jena:  VERSION: 2.10.0 
Jena:  BUILD_DATE: 2013-02-20T12:04:26+0000 
ARQ:  VERSION: 2.10.0 
ARQ:  BUILD_DATE: 2013-02-20T12:04:26+0000 

$ arq --query query.sparql --data data1.n3 
--------- 
| sbj | 
========= 
| :0002 | 
| :0001 | 
| :0003 | 
--------- 

$ arq --query query.sparql --data data2.n3 
------- 
| sbj | 
======= 
-------