如何用SPARQL从DBpedia获取is dct:subject of属性并解决层级主题问题
解答你的DBpedia SPARQL问题
1. 关于「is skos:broader of」属性的有效性与空格处理
首先,不存在名为is skos:broader of的标准SPARQL属性——这只是自然语言对逆关系的描述。在SKOS本体中,skos:broader表示“更上层的分类”(比如Category:Mathematics的skos:broader是Category:Science),而你想要的“被某个分类作为上层分类”(即子分类关系),在SPARQL中用逆属性语法表示:在属性前加^符号,也就是^skos:broader,完全不需要处理空格,这是SPARQL的标准语法。
2. 正确获取Science分类的最多5级相关主题
你之前针对Mathematics用skos:broader{0,4}是向上遍历父类,但Science本身是DBpedia分类体系中的顶层分类之一,它的父类是更泛的元分类(比如Main_topic_classifications),这显然不是你要的“相关主题”。你需要的是向下遍历Science的子分类,最多到5级,这时候就要用逆属性的递归路径:
SELECT DISTINCT ?value WHERE { ?value skos:broader{0,4} <http://dbpedia.org/resource/Category:Science> }
skos:broader{0,4}表示0到4步的递归:0步就是Science本身,1步是直接子分类,直到4步是第4层子分类,总共覆盖5级主题。- 加上
DISTINCT避免重复结果,因为有些分类可能有多个父类。
3. 获取「is dct:subject of」的内容
同样,「is dct:subject of」是dct:subject的逆关系:dct:subject是资源(比如维基百科页面)指向它所属的分类,而逆关系就是“哪些资源以某个分类为主题”。用SPARQL的逆属性语法^dct:subject即可实现,比如要找所有以Science分类为主题的页面:
SELECT DISTINCT ?page WHERE { ?page ^dct:subject <http://dbpedia.org/resource/Category:Science> }
如果是针对某个具体资源,比如查询哪些页面把Category:Mathematics作为主题,只需替换URI即可。
内容的提问来源于stack exchange,提问作者Adarsa Sivaprasad
相关产品推荐
相关产品推荐

