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
4

1 回答 1

0

只是为了提供一个最小的工作示例,这里有两个与问题中的数据文件相对应的数据文件。

数据1.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 .

数据2.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 |
=======
-------
于 2013-06-21T16:56:15.867 回答