芝麻:如何在查询过程中删除推理?

时间:2014-07-07 11:52:20

标签: sparql ontology sesame

我正在寻找解决方案,以便"删除"在Sesame上启动的查询期间的推断。我必须使用" 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 个答案:

答案 0 :(得分:2)

在通过API执行setIncludeInferred(false)对象之前设置Query以避免使用推断语句。

答案 1 :(得分:0)

听起来你正在尝试返回某些个体是实例的最具体的类。 ThomasFrancart's answer解释了如何禁用推理,但您可能不想这样做,因为您可能需要推断来推断最具体的实例。例如,您可能具有关系

的类层次结构
  

SeniorCitizen⊑人
  人⊓hasAge一些整数[&gt; = 60]⊑SeniorCitizen

和数据:

  

John rdf:输入人格   John hasAge 62

然后,如果您禁用推理,您将无法知道John是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的{​​{1}}。 ?class所属的:myInstance({{1}}本身除外)的子类。请注意,实例可以包含多个最具体的类。

请参阅: