【发布时间】:2015-10-05 21:42:17
【问题描述】:
我在 Virtuoso 7.1 上加载了 DBpedia 2014 的本地副本。我运行以下查询:
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 放在查询的三重模式中以获得匹配?
【问题讨论】:
-
不是
SELECT ?o, datatype(?o),如果你SELECT str(?o), datatype(?o),你会得到什么?可能是客户端正在打印它从 RDF 文字中读取的浮点数,这可能最终不会完全是 RDF 文字的词法形式。 -
请注意,lod.openlinksw.com/sparql 和 dbpedia.org/sparql 的数据集是前段时间提取的。可以在dbpedia-live.openlinksw.com/sparql 和live.dbpedia.org/sparql 找到更积极更新的数据——其中确实包括纬度/经度值