Сезам: как убрать вывод во время запросов?

Я ищу решение, чтобы «убрать» вывод во время запроса, запущенного на Sesame. Я должен использовать репозиторий RDF-схемы Native Java Store, и у меня есть этот запрос: у меня есть экземпляр, NamedIndividual, и мне нужен uri класса, экземпляром которого он является:

    SELECT DISTINCT ?uri WHERE  {   
        <http://www.semanticweb.org/ontotest#myInstance> rdf:type ?uri .
        FILTER (?uri rdf:type owl:Class)         
    }

Проблема в том, что я получаю несколько URI (хороший URI) вместо одного из-за логического вывода. Я получаю суперклассы онтологии, тогда нет связи с классом экземпляра. Как получить нужный результат без изменения репозитория?


person user3661334    schedule 07.07.2014    source источник


Ответы (2)


Установите setIncludeInferred(false) в вашем объекте Query перед выполнением это через API, чтобы избежать использования выведенных операторов.

person ThomasFrancart    schedule 07.07.2014

Похоже, вы пытаетесь вернуть наиболее конкретный класс (классы), экземпляром которого является какой-либо человек. ThomasFrancart answer объясняет, как отключить вывод, но вы можете не захотеть этого делать, потому что вам может понадобиться вывод, чтобы сделать вывод конкретный экземпляр. Например, у вас может быть иерархия классов с отношением

SeniorCitizen Person
Person hasAge некоторое целое число[>= 60] SeniorCitizen

и данные:

Джон rdf:type Person
Джон hasAge 62

Затем, если вы отключите вывод, вы не сможете узнать, что Джон является SeniorCitizen, даже если это более конкретный класс, чем Person. Похоже, вы на самом деле хотите оставить вывод включенным, но возвращать только самые конкретные классы. Вы можете сделать это с помощью такого запроса:

select ?class where {
  :myInstance rdf:type ?class .
  filter not exists { 
    ?subclass rdfs:subClassOf* ?class .
    :myInstance rdf:type ?subclass .
    filter ( ?subclass != ?class )
  }
}

Это говорит о том, что нужно найти такие значения ?class, что :myInstance является элементом ?class, но только там, где нет ?subclass, являющегося подклассом ?class (кроме самого ?class), к которому также принадлежит :myInstance. Обратите внимание, что экземпляр может иметь несколько наиболее специфических классов.

Видеть:

person Joshua Taylor    schedule 07.07.2014
comment
Я не нашел правильный запрос для своей проблемы, но функция setIncludeInferred запускается - person user3661334; 10.07.2014