我想使用一些名为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
答案 0 :(得分:2)
你会以大致正确的方式进行它,尽管你应该OFFSET 和 LIMIT,这样你就可以对结果进行分页(当然,对于OFFSET和LIMIT有用,你需要继续使用ORDER BY)。但是,您使用的前缀比您需要的多。你只使用三个,所以你只需要申报那三个。最后,您可以特别询问人类型的内容。其中有1649645个。
select (count(*) as ?n) where {
?person a dbo:Person
}
最后,您应该使用 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
当然,如果您需要大量数据,您可能只想下载并在本地存储。请参阅DBpedia 2014 Downloads。