У меня вопрос о SPARQL. У меня есть онтология животных: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) принадлежит животным?
ПРИМЕЧАНИЕ: Глубина и ширина иерархии классов неизвестны заранее.
Также ниже запрос не будет работать
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 .
}
Что делать, если hierarchie неизвестно?
запрос будет обработан с SDB (является составной частью Jena).
Я хочу что-то вроде: select ?x where {?x rdfs:subClassOf :Animals . ?x :hasСolor "white"})
UPD. решения для "найти все животное (экземпляры), которые являются« белыми" может выглядеть следующим образом:?
ВЫБРАТЬ у WHERE {х RDFS: subClassOf *: Животные. ? y rdf: type? x. ? У : hasColor "белый"}
Спасибо! Я протестировал запрос с помощью Protege. SELECT? X WHERE {? X rdfs: subClassOf *: Animals} отлично работает. Но SELECT? X WHERE {? X rdfs: subClassOf *: Животные. ? x: hasСolor "white"} найти совпадения – ERG
его странный запрос SELECT? x? y WHERE {? x rdfs: subClassOf *: Животные. «y rdf: type? x.»} тоже отлично работает и возвращает все экземпляры, но если добавление (? x: hasСolor «white») не находит совпадений – ERG
@ERG: а как насчет 'SELECT? x WHERE {? x rdfs : subClassOf *: Animals.? y rdf: type? x.? y: hasColor "white"} '? –