sparql / dbpedia 关于提取 rdf:type 人

sparql / dbpedia regarding extracting rdf:type person

我想提取 rdf:type 人的所有 dpbedia 条目,使用一些我几乎不了解的称为 dbpedia 和 sparql 的东西。

我在以下方面取得了很大成功(改变偏移量)。有没有更好的办法?我想基本上从英语维基百科中获取所有人物示例。

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

虽然您应该 OFFSET LIMIT,但您的方法大致正确,这样您就可以对结果进行分页(当然,对于 OFFSET 和 LIMIT要有用,您需要继续使用 ORDER BY)。但是,您使用的前缀比您需要的多。你只使用三个,所以你只需要声明这三个。最后可以特意求Person类型的东西。其中有 1649645 个。

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

1649645

最后,您应该使用 langMatches 检查字符串的语言,而不是 =。您可以交互使用的 Web 服务定义了一些前缀,因此我通常遵循这些前缀。您可能还想 select 只有英文名称,并且可能按 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