如何使用 SPARQL 为所有实体获取 dct:subjects

How to get dct:subjects for all entities using SPARQL

我正在使用以下查询

PREFIX  dct:  <http://purl.org/dc/terms/> 
SELECT ?subject WHERE { 
?concept rdfs:label 'Exoskeleton'@en ; 
         ^dct:subject ?subject . 
}  
ORDER BY ?subject

这没有给我任何结果。但是,rdfs:label 存在。 (参见 http://dbpedia.org/page/Exoskeleton。)

在使用不同的标签进行查询时,它有效:

PREFIX  dct:  <http://purl.org/dc/terms/> 
SELECT ?subject WHERE { 
?concept rdfs:label 'Machine learning'@en ; 
         ^dct:subject ?subject . 
}  
ORDER BY ?subject

上面的查询有效并给了我结果。 (参见 http://dbpedia.org/page/Machine_learning。)

我要更改什么以使第一个查询也有效?

dct:subject 谓词用于页面和它所属的类别之间。因此,您的第二个查询为您提供 Category:Machine learning. But since there is no Category:Exoskeleton 中的结果,您的第一个查询没有给您任何结果。这也意味着您喜欢的两个页面与您的查询无关。

我不知道如何更改第一个查询以使其有效,因为我不明白 "working" 需要什么。

细节决定成败:

PREFIX  dct:  <http://purl.org/dc/terms/> 
SELECT ?concept WHERE { 
  ?concept rdfs:label 'Machine learning'@en. 
}  
ORDER BY ?concept

Returns两个结果:

而Exoskeleton没有对应的概念:

因此,您的反向 属性 路径会在 http://dbpedia.org/resource/Category:Machine_learning 概念下找到资源,但不会在 http://dbpedia.org/resource/Machine_learninghttp://dbpedia.org/resource/Exoskeleton 页面下找到资源。

如果删除逆修饰符,

PREFIX  dct:  <http://purl.org/dc/terms/> 
SELECT ?subject WHERE { 
?concept rdfs:label 'Exoskeleton'@en ; 
         dct:subject ?subject . 
}  
ORDER BY ?subject

Will return 给定标签下概念的类别 (subject)。