我有一个 OWL 文件,其中包含一个分类层次结构,我想编写一个查询,其中答案包括每个个体及其直接的分类父级。这是一个示例(完整的查询相当混乱)。
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http:://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <urn:ex:> .
:fido rdf:type :Dog .
:Dog rdfs:subClassOf :Mammal .
:Mammal rdfs:subClassOf :Vertebrate .
:Vertebrate rdfs:subClassOf :Animal .
:fido :hasToy :bone
:kitty rdf:type :Cat .
:Cat rdfs:subClassOf :Mammal .
:kitty :hasToy :catnipMouse .
这个查询做了我想要的。
prefix rdf: <http:://www.w3.org/1999/02/22-rdf-syntax-ns#> .
prefix : <urn:ex:> .
SELECT ?individual ?type
WHERE {
?individual :hasToy :bone .
?individual rdf:type ?type .
}
问题是我宁愿使用 OWL 文件的推理版本,不出所料,其中包含附加语句:
:fido rdf:type :Mammal .
:fido rdf:type :Vertebrate .
:fido rdf:type :Animal .
:kitty rdf:type :Mammal .
:kitty rdf:type :Vertebrate .
:kitty rdf:type :Animal .
现在查询导致关于 Fido 是哺乳动物等的附加答案。我可以放弃使用文件的合理版本,或者,由于 SPARQL 查询是从 java 调用的,我可以做一堆额外的查询找到出现的包含最少的类型。我的问题是是否有一个合理的纯 SPARQL 解决方案只返回 Dog 解决方案。