我正在寻找解决方案,以便"删除"在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),而不是一个。我得到了本体的超类,然后没有与实例类的链接。 如何在不更改存储库的情况下获得正确的结果?
答案 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}}本身除外)的子类。请注意,实例可以包含多个最具体的类。
请参阅: