我想查询所有带有人员条目的文章及其German DBpedia的地理坐标。由于没有多少文章在信息框中有一个单独的列lat/long
,但是有地理标记(参见WikiProject Geographical coordinates),我想得到地理标记,它位于一个右上角维基百科文章(如果存在)。获取此信息的任何想法(如果可能在R中)?
R
中的示例代码library(SPARQL)
query <- "prefix dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?name
?staff
?lat
?long
?geometry
WHERE {
?place rdfs:label ?name .
?place dbpedia-owl:staff ?staff .
Optional { ?place geo:lat ?lat . }
Optional { ?place geo:long ?long . }
Optional { ?place geo:geometry ?geometry . }
}
LIMIT 100"
endpoint <- "http://de.dbpedia.org/sparql"
resultList <- SPARQL(endpoint, query)
head(resultList[[1]])
name staff lat long geometry
1 "Hochschule für Angewandte Psychologie der Fachhochschule Nordwestschweiz"@de 80 47.4796 8.2129 NA
2 "Hochschule Luzern"@de 1431 47.0140 8.3060 NA
3 "AKAD"@de 450 NA NA NA
4 "AKAD"@de 2011 NA NA NA
5 "AKAD"@de 2750 NA NA NA
6 "Dar ul-Ulum Deoband"@de 400 NA NA NA
问题是,大多数文章都没有关于信息框中lat/long
的信息,但仍然按照我提到的右上角维基百科中的地理标记进行了地理标记。就像'Fachschule Fulda'一样,它是查询结果的第10行,但没有lat / long。当你转到the Wikipedia article时,你可以看到右上角的坐标。
答案 0 :(得分:0)
由于我不确定你想从dbpedia中检索什么,这是一个相当普遍的例子。在R中,您可以使用包SPARQL将SPARQL查询发送到您感兴趣的端点(此处为dbpedia.org的端点)。以下是获取所有资源的标签,主题,纬度和经度的代码:
library(SPARQL)
query <-
"PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT DISTINCT ?label ?subject ?lat ?long WHERE {
?subject geo:lat ?lat.
?subject geo:long ?long.
?subject rdfs:label ?label.
}"
endpoint <- "http://dbpedia.org/sparql"
resultList <- SPARQL(endpoint, query)
head(results[[1]])
label subject lat long
1 "大袋駅"@ja <http://dbpedia.org/resource/Ōbukuro_Station> 35.9244 139.7780
2 "Stazione di Ōbukuro"@it <http://dbpedia.org/resource/Ōbukuro_Station> 35.9244 139.7780
3 "大袋站"@zh <http://dbpedia.org/resource/Ōbukuro_Station> 35.9244 139.7780
4 "Ōbukuro Station"@en <http://dbpedia.org/resource/Ōbukuro_Station> 35.9244 139.7780
5 "111 Murray Street"@en <http://dbpedia.org/resource/111_Murray_Street> 40.7156 -74.0128
6 "11th Ward, Chicago"@en <http://dbpedia.org/resource/11th_Ward,_Chicago> 41.8380 -87.6460
dim(results[[1]])
[1] 10000 4
请注意,一个查询的结果数限制为10000。因此,如果您想要检索更多内容,则必须使用LIMIT
和OFFSET
,如下所示:
query <-
"PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT DISTINCT ?label ?subject ?lat ?long WHERE {
?subject geo:lat ?lat.
?subject geo:long ?long.
?subject rdfs:label ?label.
} LIMIT 10000 OFFSET 10000"
此查询会将结果返回10001到20000!
有关SPARQL查询如何工作的详细信息,我可以向您推荐这个优秀的教程:SPARQL by Example
答案 1 :(得分:0)
请注意,DBpedia数据来自维基百科数据,但DBpedia并不总是最新的,所以只是在维基百科上看到的东西并不意味着它将出现在DBpedia上。
我首先在DBpdia数据集中查看您关心的一些资源 - 查看它们具有哪些属性,尤其是查看哪些属性可能是您想要的。
我认为您可能比lat
和long
感兴趣的更多,例如您可能会看到a query like this -
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX georss: <http://www.georss.org/georss/>
SELECT DISTINCT ?label ?subject ?staff
?lat ?long
?geometry
?georss
WHERE
{ ?subject dbpedia-owl:staff ?staff ;
rdfs:label ?label .
OPTIONAL { ?subject geo:lat ?lat . }
OPTIONAL { ?subject geo:long ?long . }
OPTIONAL { ?subject georss:point ?georss . }
OPTIONAL { ?subject geo:geometry ?geometry . }
}
ORDER BY
ASC ( ?lat )
ASC ( ?long )
ASC ( ?geometry )
ASC ( ?georss )
ASC ( ?label )
ASC ( ?subject )
LIMIT 1000
OFFSET 10000
答案 2 :(得分:0)