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