4

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 | 
-----------------
4

1 に答える 1

8

RDF では、すべてのリテラルに、 str関数で取得できる字句形式があります。SPARQL には、特定の種類のリテラルの短縮形もいくつか含まれています。たとえば、"1"^^xsd:integerの代わりに1と書くこともできますが、それらは同じことであり、str(1)またはstr("1"^^xsd:integerのいずれかを実行することで"1"を取得できます。 つまり、 strconcatでやろうとしていることを実行できます。

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" |
------------

"10,0"^^xd:floatを持つデータのように、リテラルの字句形式がそのデータ型に対して合法的でない場合でも、これは機能するはずです。これは"10.0"^^xsd:floatである必要があります。コンマ ( , )ではなくドット ( . ) を使用します。(セパレーターにはさまざまな規則があることを認識していますが、SPARQL はドットを使用します。)

于 2015-05-15T18:54:12.480 に答える