SPARQL: obtenir toutes les entités des sous-classes d'une certaine classe
je dois obtenir toutes les instances d'une Classe C et des sous-classes (directes ou indirectes) de C, dans SPARQL.
je peux obtenir tous les sous-classes directes de C de cette façon:
SELECT ?entity
WHERE {
?subclass rdfs:subClassOf :C .
?entity rdf:type ?subclass .
}
Mais je ne peux pas obtenir le cas d'un sous-sous-classe, et aucune instance de C.
Que je sais (j'ai pré-calculé) toutes les sous-classes (directs et indirects de C), et je peux construire une requête dynamique, est-il possible de créer une requête comme suit un?
SELECT ?entity
WHERE {
?entity rdf:type in <list>.
}
Merci à tous.
EDIT:
je viens de le résoudre, même si ce n'est pas d'une manière élégante.
SELECT ?entity
WHERE {
{ ?entity rdf:type :C }
UNION { ?entity rdf:type :SubClass1 }
UNION { ?entity rdf:type :SubClass2 }
UNION { ?entity rdf:type :SubClass3 }
}
2 réponses
une meilleure solution est d'utiliser des expressions de chemin de propriété dans SPARQL 1.1
ceci serait réécrit comme:
SELECT ?entity
WHERE {
?entity rdf:type ?type.
?type rdfs:subClassOf* :C.
}
basé sur le SPARQL 1.1 spécification la bonne façon de le faire serait:
SELECT ?entity
WHERE {
?entity rdf:type/rdfs:subClassOf* :C
}
sans le support des chemins de propriétés, il n'y a aucun moyen d'exprimer des hiérarchies de classes de longueur arbitraire.