在SPARQL中使用数值作为字符串值

时间:2015-05-15 16:15:08

标签: sparql linked-data

可以在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 | 
-----------------

1 个答案:

答案 0 :(得分:8)

在RDF中,所有文字都有一个词法形式,可以使用str函数获得。 SPARQL还包含某些文字的简写。例如,你可以写 1 而不是&#34; 1&#34; ^^ xsd:integer ,但它们是相同的,你可以得到通过 str(1) str(&#34; 1&#34; ^^ xsd:整数)<&#34; 1&#34; < / strong>即可。这意味着您可以使用 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" |
------------

这应该有效,即使文字的词汇形式对于该数据类型是不合法的,就像你拥有&#34; 10,0&#34; ^^ xd:float的数据一样,应该是&#34; 10.0&#34; ^^ xsd:float ,带点()而不是逗号()。 (我意识到分隔符有不同的约定,但SPARQL使用点。)