如何使用SPARQL查找闭环?

3
我正在使用RDF寻找自指循环,具体使用方法如下:
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:broader+似乎允许除了skos:broader之外的其他属性,更像是ANY*,skos:broader,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
那是Jena的旧版本。实现和加号的语义已经有很大变化,但当前版本的答案看起来也不正确。您可以在https://issues.apache.org/jira/browse/JENA提交一个带有工作示例(合法数据,完整查询)的错误报告。 - AndyS
谢谢!我在最新版本的Jena(2.10.0快照)上运行它,它工作得很好,所以可能不需要提交错误报告...但这引出了一个进一步的问题:Jena是否支持OWL?我使用了skos:broader和skos:narrower,并将它们定义为owl#TransitiveProperty和owl:inverseOf等,创建了类似的闭环,但Jena没有发现它! - Sukii
1个回答

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 .

使用Jena的命令行ARQ工具,似乎在Jena/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 |
=======
-------

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接