Sparql Sesame:如何在查询过程中删除推断?

Sparql Sesame:如何在查询过程中删除推断?,sparql,ontology,sesame,Sparql,Ontology,Sesame,我正在寻找一种解决方案,以便在Sesame上启动查询时“删除”推理。我必须使用“本机Java存储RDF模式”存储库,我有以下查询: 我有一个实例,一个NamedIndividual,我想要其实例所在的类的uri: SELECT DISTINCT ?uri WHERE { <http://www.semanticweb.org/ontotest#myInstance> rdf:type ?uri . FILTER (?uri rdf:ty

我正在寻找一种解决方案,以便在Sesame上启动查询时“删除”推理。我必须使用“本机Java存储RDF模式”存储库,我有以下查询: 我有一个实例,一个NamedIndividual,我想要其实例所在的类的uri:

    SELECT DISTINCT ?uri WHERE  {   
        <http://www.semanticweb.org/ontotest#myInstance> rdf:type ?uri .
        FILTER (?uri rdf:type owl:Class)         
    }
选择不同的uri,其中{
rdf:类型?uri。
过滤器(?urirdf:type owl:Class)
}
问题是,由于推理,我得到了几个URI(好的URI)而不是一个。我得到了本体的超类,然后没有与实例类的链接。
如何在不更改存储库的情况下获得正确的结果?

在通过API执行对象之前,在对象上设置,以避免使用推断语句

听起来您试图返回某个个体是其实例的最特定类。说明如何禁用推理,但您可能不想这样做,因为您可能需要推理来推断最具体的实例。例如,您可能有一个具有关系的类层次结构

老年人和SQ亚组;人
个人和sqcap;hasAge一些整数[>=60]&sqsubsetq;老年人

和数据:

John rdf:键入Person
约翰现年62岁

然后,如果你禁用推理,你将无法知道约翰是老年人,即使这是一个比人更具体的阶层。听起来,您实际上希望保持启用推理,但只返回最特定的类。您可以使用如下查询来完成此操作:

select ?class where {
  :myInstance rdf:type ?class .
  filter not exists { 
    ?subclass rdfs:subClassOf* ?class .
    :myInstance rdf:type ?subclass .
    filter ( ?subclass != ?class )
  }
}
这意味着找到
?类
的那些值,使得
:myInstance
?类
的一个元素,但只有在
:myInstance
也属于
?类
的子类(而不是
?类
本身)的情况下,才有
:myInstance
的子类。请注意,一个实例可以有多个最特定的类

见:

  • (你的问题几乎是这个问题的翻版)
  • (不是同一个问题,但答案使用了类似的技巧)

我没有找到针对我的问题的正确查询,但函数setIncludeInferred正在运行