Двойные значения усекаются (округляются) в результатах Virtuoso SRARQL.

Я использую Virtuoso Opensource 7.2.4 и имею набор данных, который состоит из некоторых данных, например:

@prefix xsd: <http://www.w3.org/2001/XMLSchema#>
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix ap: <http://vocab.linkeddata.es/datosabiertos/def/urbanismo-infraestructuras/alumbrado-publico#> .


<http://linkeddata.es/resource/farolas/lapalma/0> a ap:PuntoDeAlumbrado ;
    geo:long "-17.774237421604201614"^^xsd:double ;
    geo:lat "28.60580329136699973"^^xsd:double . 

и если я сделаю следующий простой запрос SPARQL

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX ap: <http://vocab.linkeddata.es/datosabiertos/def/urbanismo-infraestructuras/alumbrado-publico#> 
select ?farola ?lat ?long where {
 ?farola a ap:PuntoDeAlumbrado; geo:lat ?lat; geo:long ?long .
}

Я получаю следующие результаты. Обратите внимание, что значения широты и долготы округлены до менее точного значения.

+-------------------------------------------------+----------+----------+
|                     farola                      |   lat    |   long   |
+-------------------------------------------------+----------+----------+
| http://linkeddata.es/resource/farolas/lapalma/0 |  28.6058 | -17.7742 |
+-------------------------------------------------+----------+----------+

Это происходит, когда я устанавливаю формат результата в HTML, XML, JSON и т. д. Если я запрашиваю результаты в Черепахе, я могу получить результаты с правильной точностью.

@prefix res: <http://www.w3.org/2005/sparql-results#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
_:_ a res:ResultSet .
_:_ res:resultVariable "farola" , "lat" , "long" .
@prefix xsd:    <http://www.w3.org/2001/XMLSchema#> .
_:_ res:solution [
      res:binding [ res:variable "farola" ; res:value <http://linkeddata.es/resource/farolas/lapalma/0> ] ;
      res:binding [ res:variable "lat" ; res:value 28.60580329136699973 ] ;
      res:binding [ res:variable "long" ; res:value -17.774237421604201614 ] ] .

Проблема в том, что когда я запрашиваю с помощью Apache Jena [v3.1.0], я получаю округленные результаты. Я думаю, он запрашивает application/sparql-results+json в качестве первого предпочтения. Как лучше всего заставить Virtuoso возвращать неусеченные значения в результате (настроив либо Virtuoso, либо Jena)?

Это поведение в конечной точке DBpedia SPARQL такое же, как и в HTML-результат по сравнению с Turtle Result для запроса

prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
select ?lat ?long where {
 <http://dbpedia.org/resource/Liberty_Tower_(Manhattan)>  geo:long ?long; geo:lat ?lat .
}

person Nandana    schedule 22.05.2016    source источник
comment
Спасибо! По-видимому, стандартными форматами результатов, определенными в SPARQL 1.1, являются только application/sparql-results+xml, application/sparql-results+json, text/tab-separated-values, text/csv. Невозможно отправить другие типы, так как Jena проверяет допустимые форматы (и даже если это не так, она не будет знать, как их анализировать). Интересно, можно ли это исправить на стороне сервера в Virtuoso.   -  person Nandana    schedule 23.05.2016
comment
TSV должен работать - он без потерь как формат результата SPARQL. Это термины Черепахи, написанные как одна строка на строку результата, что, по сути, приводит к результатам Черепахи.   -  person AndyS    schedule 23.05.2016
comment
Хорошо, я пропустил это. В таком случае WebContent.contentTypeTextTSV.   -  person UninformedUser    schedule 23.05.2016
comment
Спасибо @AndyS AKSW. Я попытался, но Jena не смогла разобрать ответ от Virtuoso с ResultSetException: TSV Results повреждён, а не переменная: farola. Фрагмент кода: pastebin.com/raw/JgM0f53e Исключение: pastebin.com/raw/eKut5Gwp TSV: pastebin.com/raw/cgqQ5xxi   -  person Nandana    schedule 23.05.2016
comment
В любом случае, кажется, что Virtuoso по-прежнему округляет значения в TSV, хотя это формат результата без потерь :(   -  person Nandana    schedule 23.05.2016
comment
Действительно ли значения округлены, или они просто напечатаны таким образом в таблице результатов?   -  person Joshua Taylor    schedule 23.05.2016
comment
@JoshuaTaylor так их отправляет сервер (а не только представление HTML). Я получаю те же результаты, используя Jena в качестве клиента.   -  person Nandana    schedule 23.05.2016
comment
О боже, вывод TSV не подходит для результатов SPARQL.   -  person AndyS    schedule 25.05.2016
comment
Вопросы, относящиеся к Virtuoso, особенно когда они могут предвещать ошибку (как это представляется здесь возможным), часто лучше всего поднимать в областях, специфичных для Virtuoso, таких как Страница проблем проекта с открытым исходным кодом, список рассылки пользователей Virtuoso или форумы поддержки OpenLink. (Отказ от ответственности: я работаю на OpenLink Software, производителя Виртуоз.)   -  person TallTed    schedule 06.06.2016
comment
Спасибо, @TallTed. На самом деле я отправил сообщение в список пользователей, но не получил ответа sourceforge. net/p/virtuoso/mailman/message/35107930 . Я сообщу об этом как об ошибке.   -  person Nandana    schedule 06.06.2016


Ответы (1)


В качестве обходного пути вы можете преобразовать значения в строки в запросе:

prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
select (str(?lat) as ?lat) (str(?long) as ?long) where {
  <http://dbpedia.org/resource/Liberty_Tower_(Manhattan)>  geo:long ?long; geo:lat ?lat .
}
person marat    schedule 23.05.2016