Используя следующие образцы троек:
@prefix : <http://www.me.org/me_schema#> .
@prefix dc: <http://purl.org/dc#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<http://www.me.org/content/me_schema>
rdf:type owl:Ontology ;
owl:imports <http://www.w3.org/2004/02/skos/core> ;
.
:a
rdf:type owl:ObjectProperty ;
rdfs:label "A" ;
rdfs:subPropertyOf :b ;
.
:b
rdf:type owl:ObjectProperty ;
rdfs:label "B" ;
rdfs:subPropertyOf :c ;
.
:c
rdfs:label "C"^^xsd:string ;
.
Этот запрос возвращает две строки, как и ожидалось (обе b и c в столбце ?o):
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select *
from <test>
where
{
?s rdfs:label 'A' .
?s rdfs:subPropertyOf+ ?o
}
Однако я ожидаю, что следующее вернет 1 строку, но вернет пустой результат. Протестировано в консоли запросов:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select *
from <test>
where
{
?s rdfs:label 'A' .
?s rdfs:subPropertyOf+ <http://www.me.org/me_schema#c>
}
Я ожидаю, что он вернет одну строку для «а». Это ошибка или я упускаю что-то очевидное?
Я попробовал аналогичный запрос с DBPedia, и он возвращает данные, как я и ожидал. Например, следующий запрос возвращает две строки для «звезды», хотя ни одна из них не является прямым subClassOf owl:Thing.
select *
where
{
?s rdfs:label "star"@en .
?s rdfs:subClassOf+ owl:Thing
} LIMIT 100
Я придумал следующую работу на случай, если у кого-то возникнет такая же проблема:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select *
from <test>
where
{
?s rdfs:label 'A' .
?s rdfs:subPropertyOf ?s2 .
?s2 rdfs:subPropertyOf* <http://www.me.org/me_schema#c>
}