Я пытаюсь разобраться в выводе данных RDF. Скажем, у меня есть эти тройки (RDF Turtle), которые я создал с помощью Protege:
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:hasSpouse rdf:type owl:ObjectProperty ,
owl:SymmetricProperty ;
rdfs:domain :People ;
rdfs:range :People .
:People rdf:type owl:Class .
:Jane_Doe rdf:type owl:NamedIndividual ,
:People .
:John_Doe rdf:type owl:NamedIndividual ,
:People ;
:hasSpouse :Jane_Doe .
Мыслитель в Протеже будет любезно выделить ожидаемый вывод, то есть :Jane_Doe :hasSpouse :John_Doe
.
![Protege screenshot](https://i.stack.imgur.com/hlpZe.png)
Как я могу увидеть этот вывод с помощью SPARQL? Если я выполню этот запрос в Protege (вкладка SPARQL):
SELECT ?subject
WHERE {?subject hasSpouse ?object .}
Показывает утвержденную тройку, а не предполагаемую. Я понимаю, как это сделать вручную, например :
CONSTRUCT {?object ?prop ?subject }
WHERE { ?prop rdf:type owl:SymmetricProperty .
?subject ?prop ?object .}
Теперь я вижу ожидаемые данные, которые я ожидаю, но 1) которые потеряют точку imho (т.е. заново изобретать колесо) 2) У меня не может быть 2 запросов на этой вкладке (построить, затем выбрать). Должен быть способ сделать это автоматически, точно так же, как это сделал разум.
Я прочитал в Stack Overflow сообщение о том, что в Protege используется плагин Snap SPARQL. Я пытался, но простые запросы не работают (как первый выше). Это как будто это другой язык. Как это работает?
Итак, как я могу получить преимущества этих свойств совы с SPARQL? Как я могу иметь OWL-ориентированный SPARQL в Protege? Я правильно понял? Какой правильный путь?
спасибо за вашу помощь.
Николя