Sparql 如何在“DOID”本体中查询同级类?

Sparql 如何在“DOID”本体中查询同级类?,sparql,semantic-web,ontology,Sparql,Semantic Web,Ontology,我正在使用执行一个查询,以获取人类疾病本体DOID中原发性高血压的所有兄弟姐妹,该查询返回5个三元组 prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix owl: <http://www.w3.org/2002/07/owl#> SELECT ?xChild Str(?xChildLa) from <http://purl.obolibrary.org/obo/merged/DOID&

我正在使用执行一个查询,以获取人类疾病本体DOID中原发性高血压的所有兄弟姐妹,该查询返回5个三元组

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix owl: <http://www.w3.org/2002/07/owl#> 
SELECT ?xChild Str(?xChildLa)
from <http://purl.obolibrary.org/obo/merged/DOID>
WHERE { 
         <http://purl.obolibrary.org/obo/DOID_10825> rdfs:subClassOf ?x.
         ?xChild  rdfs:subClassOf|(owl:equivalentClass)* ?x ;
                 rdfs:label ?xChildLa.

}
但在类层次结构中显示,还有一个查询未返回的同级

上述查询有什么问题? 为什么肾性高血压没有复发?

如果单击,您将看到

肾性高血压相当于高血压,位于某些肾脏

这意味着它使用了OWL类等价公理OWL:equivalentClass。这是rdfs的语法糖:在两个方向上的Subassof关系,实际上您的SPARQL查询在语法和语义上都不处理这个公理

不确定他们是否使用OWL推理器来获取所有用于可视化的子类


通过SPARQL执行此操作可以在中找到。

我仍然不清楚,为什么即使在where子句中使用equivalentClass作为属性,查询结果中也没有。当您查看OWL类表达式和OWL公理的RDF映射时,就会清楚了:。这要详细得多。超类是通过RDF列表编码的交集:x:RDF:type owl:Class.\ux:x owl:TSEQ CE1的交叉点。。。岑。其中每个CE_i本身可以是一个OWL类表达式。这就是为什么我说使用SPARQL要复杂得多,比如rdfs:subassof | owl:equivalentClass/owl:intersectionOf/rdf:rest*/rdf:first可以工作,但它没有经过测试,因为我没有在本地运行它的示例数据。