Вот небольшая онтология под названием wildlife.owl
, созданная Protégé, в которой у меня есть классы animal
, carnivore
, herbivore
, lion
, giraffe
и отдельные лица. Léo
(lion
), Gigi
(giraffe
) и Giginou
(также giraffe
). В онтологии я только заявляю, что lion ⊏ carnivore ⊏ animal
.
Когда я запрашиваю экземпляры animal
на вкладке DL Query в Protégé, я получаю, среди прочего, Léo
(то есть lion
, следовательно, carnivore
, следовательно, animal
).
Но когда я пишу следующий запрос SPARQ:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX me: <file:wildlife.owl#>
SELECT ?b
WHERE { ?b rdf:type me:animal }
Я не получаю никакого экземпляра. Тот же результат, когда я заменяю me:animal
на me:carnivore
. Только когда я заменяю его на me:lion
, я получаю желаемый результат Léo
.
Почему DL Query делает вывод (что позволяет мне получить Léo
как экземпляр класса animal
), а не SPARQL Query?
Что я могу сделать, чтобы получить тот же результат в SPARQL Query? Благодаря ответу @UninformedUser теперь я знаю, что должен использовать Snap SPARQL Query, а не SPARQL Query.
Мой следующий вопрос касается Python: когда я снова отправляю SPARQL Query с использованием Owlready2 и RDFlib, снова Я не получаю результата:
from owlready2 import *
from rdflib import *
onto = get_ontology("wildlife.owl").load()
sync_reasoner([onto])
graph = default_world.as_rdflib_graph()
print(list(graph.query_owlready("""
PREFIX rdf-syntax: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX me: <file:wildlife.owl#>
SELECT ?b WHERE {
?b rdf-syntax:type me:animal .
}""")))
Как мне получить этот запрос, используя OWL Reasoner?