Sparql Sesame:如何在查询过程中删除推断?
我正在寻找一种解决方案,以便在Sesame上启动查询时“删除”推理。我必须使用“本机Java存储RDF模式”存储库,我有以下查询: 我有一个实例,一个NamedIndividual,我想要其实例所在的类的uri: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
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
的子类。请注意,一个实例可以有多个最特定的类
见:
- (你的问题几乎是这个问题的翻版)
- (不是同一个问题,但答案使用了类似的技巧)