次のサンプル トリプルを使用します。
@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 ;
.
このクエリは、予想どおり 2 つの行を返します (列 ?o の b と c の両方)。
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>
}
「a」に対して1行が返されると思います。これはバグですか、それとも明らかな何かが欠けていますか?
DBPediaで同様のクエリを試したところ、期待どおりのデータが返されたようです。たとえば、次のクエリは「star」に対して 2 つの行を返しますが、どちらも直接の 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>
}