I've to get all the instances of a class C and subclasses (direct or indirect) of C, in SPARQL.
I can get all the direct subclasses of C in this way:
SELECT ?entity
WHERE {
?subclass rdfs:subClassOf :C .
?entity rdf:type ?subclass .
}
But I can't get the instances of an indirect subclass and neither any instance of C.
As I know (I've pre-calculated them) all the subclasses (direct and indirect of C), and I can build a dynamic query, is it possible build a query like the following one?
SELECT ?entity
WHERE {
?entity rdf:type in <list>.
}
Thanks to everyone.
EDIT:
I've just solved it, even if in a not elegant way.
SELECT ?entity
WHERE {
{ ?entity rdf:type :C }
UNION { ?entity rdf:type :SubClass1 }
UNION { ?entity rdf:type :SubClass2 }
UNION { ?entity rdf:type :SubClass3 }
}
A better solution is to use property path expressions in SPARQL 1.1
This would be rewritten as:
SELECT ?entity
WHERE {
?entity rdf:type ?type.
?type rdfs:subClassOf* :C.
}