2016-01-02 48 views
1

我有一个DBpedia请求给了我一个标签,一个Dpedia URI和相应的维基百科链接。我想添加一列来获取每行的dbo类。任何人都可以帮助我吗?SPARQL:为每个结果提取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". 
       } 

回答

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 
+0

没有。我想要得到的仅仅是rdf:键入dbo分类,意思是当rdf:type = dbo时:...例如,对于资源http://dbpedia.org/page/Apple_Inc。 ,我需要得到dbo:company,对于资源http://dbpedia.org/page/Apple我需要dbo:Plant。 – Adem

+0

@Adem: 所以你可以写: ?资源rdf:type?p。 然后?p是资源类型 – Eni

+0

非常感谢。我找到了一个解决方案,它在上面被解雇了。 – Adem

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