5

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

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

同样,如果用户输入“Wave”,我想获取“Wave”的所有子类(“AcousticWave”、“GravityWave”、“InternalWave”和“Tide”)。

在此处输入图像描述

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

4

1 回答 1

11

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 . 
}

如果您需要子/超类的传递闭包,那么您有两种选择:

  1. 递归地遍历这些查询,直到您收集到闭包。
  2. 通过 RDF/RDFS 推理器传递您的 RDF 数据以转发链所有蕴涵并在您的 RDF 数据库中断言这些。
于 2011-09-26T16:48:58.393 回答