SPARQL:为每个结果提取dbo类

时间:2016-01-02 10:07:36

标签: sparql dbpedia

我有一个DBpedia请求,它给我一个标签,一个Dpedia URI和相应的维基百科链接。我想添加一列来获取每行的dbo类。有人可以帮我吗?

PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#> 
select distinct  ?Nom ?resource ?url ?p
 where {  
   ?resource rdfs:label ?Nom.
   ?resource foaf:isPrimaryTopicOf ?url.
   ?resource rdf:type ?p
   FILTER(regex(?p,"http://dbpedia.org/ontology/"))
   FILTER ( langMatches( lang(?Nom), "EN" )).
   ?Nom <bif:contains> "Apple".
                }

2 个答案:

答案 0 :(得分:0)

不确定你的意思是:

  

获取每行的dbo类。

但是如果你想获得与每一行相关的所有谓词,那么以下查询可能有所帮助。我将它们限制在英文版以便更好地查看结果。

PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbo: <http://dbpedia.org/ontology/>
select distinct  ?Nom ?resource ?url ?p
 where {  
   ?resource rdfs:label ?Nom.
?resource ?p ?dbo.
   ?resource foaf:isPrimaryTopicOf ?url.
FILTER ( langMatches( lang(?Nom), "EN" )).
?Nom <bif:contains> "Apple".
FILTER langMatches( lang(?Nom), "en" ) 

}
limit 100

答案 1 :(得分:0)

首先,如果您有解决方案,那么您应该将其作为答案发布,然后将其标记为已接受,以便其他人更容易寻找解决方案。

其次,我觉得你提出的解决方案可行,但不是正确的方法。要获取dbo:类型,应该查询owl:Class类型的类型。

我就是这样做的

PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
select distinct  ?Nom ?resource ?url ?p
 where {  
   ?resource rdfs:label ?Nom ;
      foaf:isPrimaryTopicOf ?url ;
      a ?p .
   ?p a owl:Class .
   FILTER ( langMatches( lang(?Nom), "EN" )).
   ?Nom <bif:contains> "Apple".
   } limit 100