我不明白为什么Virtuoso SPARQL
会从同一资源返回不同的浮点值(具体来说,经度和纬度)。
这是我的查询(link)
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?resource ?lon ?lat WHERE {
?subcat skos:broader* dbc:Airports_in_Libya.
?resource dcterms:subject ?subcat.
?resource geo:lat ?lat.
?resource geo:long ?lon.
}
GROUP BY ?resource
返回机场列表及其地理坐标。然而,很少有机场被列出多次。原因(可能)lon
和lat
有时会返回与同一DBpedia
页面略有不同的值。
例如,
http://dbpedia.org/resource/RAF_Gambut 23.9094 31.9095
http://dbpedia.org/resource/RAF_Gambut 23.9095 31.9095
http://dbpedia.org/resource/RAF_Gambut 21.8272 21.7061
我不明白为什么,因为page实际上只报告一对坐标......
geo:lat 31.951111 (xsd:float)
geo:long 24.503889 (xsd:float)
并不会出现在我的搜索结果中的任何位置。它与浮动圆形有关吗?
答案 0 :(得分:0)
一个简单的技巧告诉您,您看到的页面上的数字是欺骗性的。
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?resource (str(?lon) as ?long) (str(?lat) as ?latt)
WHERE {
?subcat skos:broader* dbc:Airports_in_Libya.
?resource dcterms:subject ?subcat.
?resource geo:lat ?lat.
?resource geo:long ?lon.
}
GROUP BY ?resource
通常当你看到的东西看起来完全一样,但事实并非如此,需要进一步调查。如果您尝试过滤掉http://dbpedia.org/resource/RAF_Gambut
资源的第一行,则可以看到只获得一个结果:
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT distinct ?subcat ?resource ?lon ?lat
WHERE {
#?subcat skos:broader* dbc:Airports_in_Libya.
?resource dcterms:subject ?subcat.
?resource geo:lat ?lat.
?resource geo:long ?lon.
filter(?resource=<http://dbpedia.org/resource/RAF_Gambut>)
}
GROUP BY ?resource
如您所见,您仍然只有一个?lon
和?lat
。如果仔细观察,那么没有与您正在提取的内容相匹配的?subcat,并且您要求SKOS
词汇表为您提供broader
个选项。在这一点上,如果你深入挖掘,你可以看到一些数字是科学记数法。
消除和协调输出的方法是消除科学记数法。
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT distinct ?resource ?lonf ?latf
WHERE {
?subcat skos:broader* dbc:Airports_in_Libya.
?resource dcterms:subject ?subcat.
?resource geo:lat ?lat.
?resource geo:long ?lon.
bind(xsd:float(?lat) as ?latf)
bind(xsd:float(?lon) as ?lonf)
}
GROUP BY ?resource
仍然有一些资源具有多个经度和纬度(例如http://dbpedia.org/page/Gamal_Abdul_El_Nasser_Air_Base
),但它们在dbpedia页面中也有多个。