Как написать вложенный запрос DL
Я хочу написать вложенный запрос DL в Protege. Я могу выполнить простой запрос, как:
Персона и имеет значение отца
Он извлекает имя всех людей, чьим отцом является PersonA. Но я хочу, чтобы значение PersonA также было получено из некоторого запроса, например
Значение Person и hasFather (Значение Person и hasSon PersonB)
Это показывает синтаксическую ошибку в Protege. Пожалуйста, помогите мне с правильным форматом.
1 ответ
Причина того, что
Person and hasFather value (Person and hasSon value PersonB)
синтаксическая ошибка не в том, что она "вложенная", а в том, что value
требует человека, но (Person and hasSon value PersonB)
это класс. Если вы используете
Person and hasFather some (Person and hasSon value PersonB)
вместо этого вы должны быть все готово. Этот запрос запрашивает людей, которые являются людьми, у которых есть отец, который является человеком, и имеет человека B как сына. То есть он просит братьев и сестер человека Б, то есть других детей отца человека Б.
Например, вот запрос о семье Симпсонов, где Барт и Лиза имеют Гомера в качестве отца, а Гомер каждого из них в детстве:
Данные:
@prefix : <http://www.example.org/families#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix families: <http://www.example.org/families#> .
<http://www.example.org/families>
a owl:Ontology .
families:Person a owl:Class .
families:hasFather a owl:ObjectProperty .
families:hasChild a owl:ObjectProperty .
families:Bart a owl:NamedIndividual , families:Person ;
families:hasFather families:Homer .
families:Lisa a owl:NamedIndividual , families:Person ;
families:hasFather families:Homer .
families:Homer a owl:NamedIndividual , families:Person ;
families:hasChild families:Bart , families:Lisa .
families:Milhouse a owl:NamedIndividual , families:Person .