クラス A、ドメイン A のプロパティ P、およびクラス B が与えられた場合、プロパティ P の値が「B」の場合、クラス A は A と同等であると定義されます。
@prefix : <http://sample.org/ont#> .
@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#> .
@base <http://sample.org/ont#> .
<http://sample.org/ont#> rdf:type owl:Ontology .
:P rdf:type owl:DatatypeProperty ;
rdfs:domain :A .
:A rdf:type owl:Class .
:B rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:intersectionOf ( :A
[ rdf:type owl:Restriction ;
owl:onProperty :P ;
owl:hasValue "B"
]
)
] .
:b rdf:type :A , owl:NamedIndividual ;
:P "B" .
Protége は、クラス :B の定義に従って、予想される個体 :b の推定型として型 :B を表示します。
SPARQL クエリ
SELECT * WHERE { :ba ?タイプ }
ただし、Protége の SPARQL クエリ ビューでは、クラス :A のみが返されます。
推論されたクラス :B も返さないのはなぜですか?
ありがとう。
PS: モデルは Pellet reasoner によってサポートされています
PPS: Java アプリケーションで Jena の推論 OntModelSpec.OWL_MEM_MICRO_RULE_INF を使用する上記の SPARQL クエリは、期待されるクラス :B を個々の :b の型として返します。議論されている問題は、Protége の SPARQL クエリ ビューの問題のようです。