我是SPARQL的初学者。而且我在DBpedia上获取所有大学的经度和经度都有问题。
我尝试了多项没有成功的事情。
This页面显示了dbo:campus
地区的巴黎大学,因此我希望获得具有此属性的大学列表,然后获取地理位置坐标。
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name, ?univ, ?lat, ?long WHERE {
?p rdf:type dbo:Place.
?p rdfs:label ?name.
?p dbo:campus ?u.
?u geo:lat ?lat.
?u geo:long ?long.
?u rdfs:label ?univ
FILTER(LANG(?name) = "en").
FILTER(?name = "Paris")
}
我查看了这篇文章DBpedia SPARQL Query US Universities,但它不适用于其他国家/地区。
答案 0 :(得分:1)
如果您在呈现的DBpedia页面上读取“is SOME_PROPERTY
of”,则表示反方向,即它以倒置形式显示三元组。因此,您必须在SPARQL查询中反转三重模式。就你的例子而言,这意味着大学是主题而巴黎是对象:
?u dbo:campus ?p
标签在DBpedia中标记为语言;因此,FILTER(?name = "Paris")
是不够的。添加英语标签有助于:
FILTER(?name = "Paris"@en)
工作查询将是
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name, ?univ WHERE {
?p rdf:type dbo:Place.
?p rdfs:label ?name.
?u dbo:campus ?p.
?u geo:lat ?lat.
?u geo:long ?long.
?u rdfs:label ?univ
FILTER(LANG(?name) = "en").
FILTER(?name = "Paris"@en)
}
一些意见:
VALUES
子句是SPARQL 1.1的一个很酷的功能,用于支持内联数据。rdf:type
三元模式,因为您不必在给定标签的情况下过滤特定类型的资源。FILTER
最后不需要.
。LANGMATCHES
来匹配文字中的语言。“更好”的查询可能是:
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT ?name ?univ ?lat ?long
WHERE
{ VALUES ?p { dbo:Paris }
?p rdfs:label ?name .
?u dbo:campus ?p ;
geo:lat ?lat ;
geo:long ?long ;
rdfs:label ?univ
FILTER langMatches(lang(?name), "en")
}