2016-05-22 17 views
2

Ich bin mit Virtuoso Opensource 7.2.4 und habe einen Datensatz, der von einigen Daten, zum Beispiel besteht:Doppelwerte werden abgeschnitten (gerundet) in Virtuoso SRARQL Ergebnisse

@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 . 

und wenn ich die folgenden einfachen SPARQL Abfrage

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 . 
} 

Ich bekomme folgende Ergebnisse. Beachten Sie, dass die Werte für Breite und Länge auf einen weniger präzisen Wert gerundet werden.

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

Dies geschieht, wenn ich das Ergebnis Format auf HTML gesetzt, XML, JSON, etc. Wenn ich für die Ergebnisse in Turtle fragen, kann ich die Ergebnisse mit der richtigen Präzision.

@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 ] ] . 

Das Problem ist, wenn ich Apache Jena [v3.1.0] Abfrage verwenden, erhalte ich die abgerundeten Ergebnisse. Ich denke, es fragt nach Anwendung/Sparql-Ergebnisse + Json als erste Präferenz. Was ist der beste Weg, um Virtuoso die nicht abgeschnittenen Werte im Ergebnis zurückgeben zu lassen (entweder Virtuoso oder Jena)?

Dieses Verhalten ist das gleiche in dem DBpedia SPARQL-Endpunkt, wie es in den HTML Result vs die Turtle Result für die Abfrage zu sehen ist

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 . 
} 
+1

'org.apache.jena.sparql.engine.http.QueryEngineHttp :: setSelectContentType ("Schildkröte")' – AKSW

+0

Dank! Anscheinend sind nur "application/sparql-results + xml", "application/sparql-result + json", "text/tab-separated-values", "text/csv" die in SPARQL 1.1 definierten Standard-Ergebnisformate. Es ist nicht möglich, andere Typen zu senden, da Jena eine Überprüfung auf gültige Formate durchführt (und selbst wenn dies nicht der Fall ist, wird es nicht wissen, wie man sie analysiert). Ich frage mich, ob dies auf der Serverseite in Virtuoso behoben werden kann. – Nandana

+1

TSV sollte funktionieren - es ist verlustfrei wie ein SPARQL-Ergebnisformat. Es sind Turtle-Begriffe, die als eine Zeile pro Ergebniszeile geschrieben werden, was in der Tat "Turtle results" ergibt. – AndyS

Antwort

2

Als Abhilfe können Sie Werte in Zeichenfolge in der Abfrage konvertieren:

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 . 
}