Использовать числовое значение в качестве строкового значения в SPARQL

Можно ли как-то использовать числовое значение в качестве строкового значения в запросе SPARQL? Например, рассмотрим следующие данные RDF, запрос и желаемый результат:

База знаний

@prefix gr:  <http://purl.org/goodrelations/v1#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

:o a gr:QuantitativeValueFloat;
     gr:hasMinValueFloat "1,0"^^xsd:float
     gr:hasMaxValueFloat "10,0"^^xsd:float

Запрос

PREFIX gr: <http://purl.org/goodrelations/v1#>    
SELECT ?o ?v
WHERE {
  ?o a gr:QuantitativeValueFloat;
       gr:hasMinValueFloat ?vMin;
       gr:hasMaxValueFloat ?vMax.
  CONCAT((?vMin, ?vMax) as ?v)
}

Идеальный результат

-----------------
| o  | v        | 
=================
| :o | 1,0-10,0 | 
-----------------

person ffa    schedule 15.05.2015    source источник


Ответы (1)


В RDF все литералы имеют лексическую форму, которую можно получить с помощью str. SPARQL также включает некоторые сокращения для определенных типов литералов. Например, вы можете написать 1 вместо "1"^^xsd:integer, но это одно и то же, и вы можете получить "1"< /strong>, выполнив либо str(1), либо str("1"^^xsd:integer). Это означает, что вы можете делать то, что пытаетесь сделать с помощью str и concat:

select ?xy where {
  values ?x { 1   }  #-- short for "1"^^xsd:integer
  values ?y { 2.5 }  #-- short for "2.5"^^xsd:decimal

  bind(concat(str(?x),"--",str(?y)) as ?xy)
}

------------
| xy       |
============
| "1--2.5" |
------------

This should work, even if the lexical form of the literals isn't legal for that datatype, as in you data where you have "10,0"^^xd:float, which should be "10.0"^^xsd:float, with a dot (.) rather than a comma (,). (I realize that there are different conventions for the separator, but SPARQL uses the dot.)

person Joshua Taylor    schedule 15.05.2015