我有本地副本DBpedia 2014加載到Virtuoso 7.1上。我運行以下查詢:Virtuoso SPARQL查詢無法比較浮點常量
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?o, datatype(?o)
WHERE {
<http://dbpedia.org/resource/Caesar_Creek_State_Park> <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?o .
}
得到以下結果:
o callret-1
-84.0653 http://www.w3.org/2001/XMLSchema#float
-84.0139 http://www.w3.org/2001/XMLSchema#float
我現在執行(貌似真)查詢:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
ASK
WHERE {
<http://dbpedia.org/resource/Caesar_Creek_State_Park> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "-84.0139"^^<http://www.w3.org/2001/XMLSchema#float> .
}
在返回值是false
!
接下來,我嘗試確保與FILTER
的float
值:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?o
WHERE {
<http://dbpedia.org/resource/Caesar_Creek_State_Park> <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?o .
FILTER (datatype(?o) = xsd:float)
}
這將返回:
o
-84.0653
-84.0139
這是很好的。接下來,我嘗試潛入前面查詢中的額外三重模式:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?o
WHERE {
<http://dbpedia.org/resource/Caesar_Creek_State_Park> <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?o .
<http://dbpedia.org/resource/Caesar_Creek_State_Park> <http://www.w3.org/2003/01/geo/wgs84_pos#long> "-84.0139"^^<http://www.w3.org/2001/XMLSchema#float> .
FILTER (datatype(?o) = <http://www.w3.org/2001/XMLSchema#float>)
}
返回空!
不幸的是,在線端點lod.openlinksw.com/sparql沒有緯度和經度加載,所以我無法複製這個問題讓你親身體驗。
任何暗示?我的主要問題是:如何才能將文字float
置於查詢的三重模式中以獲得匹配?
而不是'選擇?O,數據類型(?O)',你得到了什麼,如果你'SELECT STR(O),數據類型(?O) '?可能是客戶端正在打印從RDF文字中讀取的浮點數,這可能並不會完全是RDF文字的詞法形式。 –
請注意,http://lod.openlinksw.com/sparql和http://dbpedia.org/sparql上的數據集是在一段時間之前提取的。更加積極地更新的數據 - 包括緯度/經度值 - 可以在http://dbpedia-live.openlinksw.com/sparql和http://live.dbpedia.org/sparql – TallTed