1

次のサンプル トリプルを使用します。

@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>
}
4

1 に答える 1