Virtuoso从同一资源

时间:2015-12-24 10:23:20

标签: sparql dbpedia virtuoso

我不明白为什么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

返回机场列表及其地理坐标。然而,很少有机场被列出多次。原因(可能)lonlat有时会返回与同一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)

并不会出现在我的搜索结果中的任何位置。它与浮动圆形有关吗?

1 个答案:

答案 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

enter image description here

通常当你看到的东西看起来完全一样,但事实并非如此,需要进一步调查。如果您尝试过滤掉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

enter image description here

如您所见,您仍然只有一个?lon?lat。如果仔细观察,那么没有与您正在提取的内容相匹配的?subcat,并且您要求SKOS词汇表为您提供broader个选项。在这一点上,如果你深入挖掘,你可以看到一些数字是科学记数法。

enter image description here

消除和协调输出的方法是消除科学记数法。

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页面中也有多个。