У меня вопрос по SPARQL.У меня есть онтология животных:
Animals (is a superclass with object property <hasColor>)
------ Mammals (subclass of Animals)
------------- Dog (subclass of Mammals)
---------------- dog1 (a instance with property <hasColor>="white")
---------------- dog2 (a instance with property <hasColor>="red" )
------ Bird (subclass of Animals)
Можно ли с помощью SPARQL найти "всех животных, которые" белые "или" все экземпляры животных "?И наоборот: как я могу узнать, принадлежит ли экземпляр (dog1) Animals?
ПРИМЕЧАНИЕ : глубина и широта иерархии классов заранее неизвестна.
Также приведенный ниже запрос не будет работать
SELECT ?x WHERE {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"}
И следующий запрос (найти всех «белых» животных) работает, только если известна глубина иерархии классов.(Таким образом, если иерархия известна, могу ли я выполнить указанные шаги (сверху вниз по иерархии), чтобы достичь цели: в этом случае 2 шага.
SELECT ?z WHERE {
?x rdfs:subClassOf :Animals .
?y rdfs:subClassOf ?x .
?z rdf:type ?y .
?z :hasColor "white"
}
То же самое верно для следующего примера- "найти все экземпляры животных"
SELECT ?z WHERE {
?x rdfs:subClassOf :Animals .
?y rdfs:subClassOf ?x .
?z rdf:type ?y .
}
Что делать, если иерархия неизвестна?
Запрос будет обработан с помощью SDB (является компонентомиз Jena ).
Я хочу что-то вроде: select ?x where {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"})
UPD. Решение для "найти всех животных (экземпляров), которые'white' 'может выглядеть так:
SELECT? y WHERE {? x rdfs: subClassOf *: Animals.? y rdf: тип? x.? y: hasColor "white"}