SPARQL查询查找给定类的所有子类和超类

时间:2011-09-26 15:36:20

标签: rdf sparql rdfs

我需要编写一个SPARQL查询来查找给定类的超类/子类。

例如,给定http://139.91.183.30:9090/RDF/VRP/Examples/Phenomenon.rdf RDFS词汇表文件,我想找到'AcousticWave'的超类(即'Wave')。

同样,如果用户输入'Wave',我想得到'Wave'的所有子类('AcousticWave','GravityWave','InternalWave'和Tide')。

enter image description here

我该如何编写这样的SPARQL查询?

1 个答案:

答案 0 :(得分:10)

rdfs中用于状态子/超类关系的谓词是rdfs:subClassOf。考虑到这一点,您只需要在SPARQL查询中编写三重模式,在您的情况下绑定该谓词以及您要匹配的主题或对象--- AcousticWave

我希望以下查询不言自明。

为超级班......

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ns: <http://www.domain.com/your/namespace/>

SELECT ?superClass WHERE { ns:AcousticWave rdfs:subClassOf ?superClass . }

对于子类......

SELECT ?subClass WHERE { ?subClass rdfs:subClassOf ns:Wave . }

如果你想检索ns:Wave的每个子类的标签,你会做类似......

SELECT ?subClass ?label WHERE { 
        ?subClass rdfs:subClassOf ns:Wave . 
        ?subClass rdfs:label ?label . 
}

如果您需要sub / super类的传递闭包,那么您有两个选择:

  1. 在收集闭包之前递归迭代这些查询。
  2. 通过RDF / RDFS推理器传递您的RDF数据,以转发所有蕴涵链并在RDF数据库中声明这些蕴涵。