我需要编写一个SPARQL查询来查找给定类的超类/子类。
例如,给定http://139.91.183.30:9090/RDF/VRP/Examples/Phenomenon.rdf RDFS词汇表文件,我想找到'AcousticWave'的超类(即'Wave')。
同样,如果用户输入'Wave',我想得到'Wave'的所有子类('AcousticWave','GravityWave','InternalWave'和Tide')。
我该如何编写这样的SPARQL查询?
答案 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类的传递闭包,那么您有两个选择: