【问题标题】:Sesame : how to remove the inference during queries?芝麻:如何在查询期间消除推理?
【发布时间】:2014-07-07 11:52:19
【问题描述】:

我正在寻找一种解决方案,以便在 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)而不是一个。我得到了本体的超类,然后与实例的类没有链接。 如何在不更改存储库的情况下获得正确的结果?

【问题讨论】:

    标签: sparql ontology sesame


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      SeniorCitizen &sqsubseteq;人
      个人&sqcap; hasAge 某个整数[>= 60] &sqsubseteq;老年人

      和数据:

      约翰 rdf:type Person
      约翰已经 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 的子类(除了?class 本身) :myInstance 也属于其中。请注意,一个实例可以有多个最具体的类。

      见:

      【讨论】:

      • 我没有找到适合我的问题的查询,但函数 setIncludeInferred 运行
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多