SPARQL查询过滤浮点值

时间:2013-11-21 11:59:24

标签: rdf sparql

我想知道如何查询具有浮点值的注释。我已经设法用字符串值来做这个,但我无法弄清楚如何用浮点值来做。我想要检索的信息是curfew:NumberInLine注释的值。在下面的情况中,它是50.0

<curfew:NumberInLine rdf:datatype="&xsd;float">50.0</curfew:NumberInLine>

我使用以下SPARQL查询来检索字符串。该代码将为我提供包含字符串curfew:Label的{​​{1}}的所有个体。我希望能够使用数字和浮点值来做同样的事情。

"Open"

我尝试将SELECT ?x WHERE { ?x curfew:Label ?label . FILTER(CONTAINS(?label, "Open")) } 替换为curfew:Label,但没有运气。我也有curfew:NumberInLine的前缀。我没有任何错误,只是没有答案。如何修改此查询?

1 个答案:

答案 0 :(得分:0)

这很难回答,因为您没有显示数据。但是,如果我们假设你有这样的数据:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns="http://example.org/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:curfew="http://example.org/curfew/">
  <rdf:Description rdf:about="http://example.org/c">
    <curfew:NumberInLine rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
    >45.0</curfew:NumberInLine>
  </rdf:Description>
  <rdf:Description rdf:about="http://example.org/a">
    <curfew:NumberInLine rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
    >50.0</curfew:NumberInLine>
  </rdf:Description>
  <rdf:Description rdf:about="http://example.org/d">
    <curfew:NumberInLine rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
    >47.0</curfew:NumberInLine>
  </rdf:Description>
  <rdf:Description rdf:about="http://example.org/b">
    <curfew:NumberInLine rdf:datatype="http://www.w3.org/2001/XMLSchema#float"
    >60.0</curfew:NumberInLine>
  </rdf:Description>
</rdf:RDF>

然后你可以用同样的方式(使用contains)过滤这样的查询:

prefix curfew: <http://example.org/curfew/>
prefix : <http://example.org/>

select ?c ?number where {
  ?c curfew:NumberInLine ?number .
  filter( contains( str(?number), "5" ))
}
---------------------------------------------------------
| c  | number                                           |
=========================================================
| :c | "45.0"^^<http://www.w3.org/2001/XMLSchema#float> |
| :a | "50.0"^^<http://www.w3.org/2001/XMLSchema#float> |
---------------------------------------------------------

如果您正在使用数字类型,那么基于数字属性进行过滤会更常见。例如,

prefix curfew: <http://example.org/curfew/>
prefix : <http://example.org/>

select ?c ?number where {
  ?c curfew:NumberInLine ?number .
  filter( ?number < 50.0 )
}
---------------------------------------------------------
| c  | number                                           |
=========================================================
| :d | "47.0"^^<http://www.w3.org/2001/XMLSchema#float> |
| :c | "45.0"^^<http://www.w3.org/2001/XMLSchema#float> |
---------------------------------------------------------