sparql / dbpedia关于提取rdf:type person

时间:2015-02-22 01:01:39

标签: rdf sparql semantic-web dbpedia linked-data

我想使用一些名为dbpedia和sparql的东西来提取rdf:type person的所有dpbedia条目,我几乎无法理解。

我大部分都成功了以下(改变了偏移量)。有没有更好的办法?我想基本上从英语维基百科中获取所有人的例子。

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?name ?birth ?description ?person WHERE {
     ?person dbo:birthDate ?birth .
     ?person foaf:name ?name .
     ?person rdfs:comment ?description .
     FILTER (LANG(?description) = 'en') .
}
ORDER BY ?name
OFFSET 100

1 个答案:

答案 0 :(得分:2)

你会以大致正确的方式进行它,尽管你应该OFFSET LIMIT,这样你就可以对结果进行分页(当然,对于OFFSET和LIMIT有用,你需要继续使用ORDER BY)。但是,您使用的前缀比您需要的多。你只使用三个,所以你只需要申报那三个。最后,您可以特别询问类型的内容。其中有1649645个。

select (count(*) as ?n) where {
 ?person a dbo:Person 
}

1649645

最后,您应该使用 langMatches 检查字符串的语言,而不是 = 。您可以以交互方式使用的Web服务定义了一些前缀,因此我通常会遵循这些前缀。您可能还希望仅选择英文名称,并且可能按URI排序,因为名称并不总是完美的:

select ?person ?name ?birth ?description where {
  ?person a dbo:Person ;
          foaf:name ?name ;
          dbo:birthDate ?birth ;
          dbo:abstract ?description
  filter langMatches(lang(?name),'en')
  filter langMatches(lang(?description),'en')
}
order by ?person
offset 100
limit 50

SPARQL results

当然,如果您需要大量数据,您可能只想下载并在本地存储。请参阅DBpedia 2014 Downloads