【问题标题】:SPARQL query filtering float valuesSPARQL 查询过滤浮点值
【发布时间】:2013-11-21 11:59:24
【问题描述】:

我想知道如何查询具有浮点值的注释。我已经设法用一个字符串值来做到这一点,但我不知道如何用一个浮点值来做到这一点。我要检索的信息是curfew:NumberInLine 注释的值。下面的例子就是50.0

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

我使用以下 SPARQL 查询来检索字符串。该代码将为我提供所有存在curfew:Label 的个人,其中包含字符串"Open"。我希望能够用数字和浮点值来做同样的事情。

SELECT ?x
WHERE
{
  ?x curfew:Label ?label .
  FILTER(CONTAINS(?label, "Open"))
}

我尝试用curfew:NumberInLine 替换curfew:Label,但没有成功。我也有 curfew: 的前缀。我没有得到任何错误,只是没有答案。如何修改此查询?

【问题讨论】:

  • 为什么换成beer:curfew:NumberInLine?你不应该用curfew:NumberInLine替换它吗?
  • 你想过滤这个是什么意思?现在您正在执行字符串包含(即子字符串检查)。您可以检查一个数字(的字符串表示形式)是否包含某个字符串,但是检查它是否在某个范围内或类似的东西不是更有用吗?跨度>
  • 没关系,一个错误,我编辑了那个。我的意思是我知道如何从注释中检索字符串,但不知道浮点值。所以不是字符串中的数字。这就是为什么我做不到。您将如何编写查询来查找 NumberInLine 注释中的浮点值?谢谢
  • 我添加了一个答案。查询模式完全相同:?x curfew:NumberInLine ?number。当然,您可能希望基于数字属性而不是字符串属性进行过滤。

标签: rdf sparql


【解决方案1】:

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

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

【讨论】:

  • 我爱你!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多