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

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

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

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

2 ответа

Решение

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

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

SeniorCitizen ⊑ Person
Человек A имеет некоторое целое число [>= 60] ⊑ SeniorCitizen

и данные:

Джон рдф: тип Персона
Джон имеет возраст 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 также принадлежит. Обратите внимание, что экземпляр может иметь несколько наиболее специфических классов.

Увидеть:

Другие вопросы по тегам