SPARQL 类型转换?

发布于 2024-10-07 12:14:07 字数 840 浏览 5 评论 0原文

我有以下 SPARQL 查询:

PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#> 
PREFIX dtp: <http://dtp-126.sncs.abdn.ac.uk#> 
PREFIX dbp: <http://dbpedia.org/resource/> 
SELECT ?value ?time WHERE {         
    dtp:CD7514 ssn:madeObservation ?observation .       
    ?observation ssn:observedProperty ?property .   
    ?property ssn:hasValue <http://dbpedia.org/resource/Temperature> .          
    ?observation ssn:observationResult ?observationValue .      
    ?observationValue ssn:hasValue ?value .         
    ?observationValue ssn:observationSamplingTime ?time 
    FILTER(?time > 1291908000)
}

简而言之,它是从传感器 dtp:CD7514 选择所有温度传感器观测值,并过滤掉小于给定时间戳的值。

但是,添加过滤器约束会返回 0 个结果(当存在与该时间区域匹配的观测值时!)

是否有可能 ?time 是 varchar/text/String 数据类型,因此无法进行比较?如果是这样,是否可以在 SPARQL 中进行转换?

I have the following SPARQL query:

PREFIX ssn: <http://purl.oclc.org/NET/ssnx/ssn#> 
PREFIX dtp: <http://dtp-126.sncs.abdn.ac.uk#> 
PREFIX dbp: <http://dbpedia.org/resource/> 
SELECT ?value ?time WHERE {         
    dtp:CD7514 ssn:madeObservation ?observation .       
    ?observation ssn:observedProperty ?property .   
    ?property ssn:hasValue <http://dbpedia.org/resource/Temperature> .          
    ?observation ssn:observationResult ?observationValue .      
    ?observationValue ssn:hasValue ?value .         
    ?observationValue ssn:observationSamplingTime ?time 
    FILTER(?time > 1291908000)
}

Which, in a nutshell, is selecting all temperature sensor observations from a sensor, dtp:CD7514, and filtering out values less than the given timestamp.

However, adding the filter constraint returns 0 results (when there are observations that match this time region!)

Is it possible that ?time is a varchar/text/String data type and therefore the comparison can't be done? If so, is it possible to do the conversion within SPARQL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何以畏孤独 2024-10-14 12:14:09

仅当您匹配的时间值具有相同的位数时,这才有效,因为它将进行强比较。更好的解决方法是:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
...
FILTER(xsd:integer(?time) > 1291908000)

将 ?time 中的值转换为整数,然后对其进行数字比较。

That's only going to work if the time value you're matching has the same number of digits, as it will do a strong compare. A better fix would be:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
...
FILTER(xsd:integer(?time) > 1291908000)

That will cast the value in ?time to an integer, and then do a numeric compare on it.

风蛊 2024-10-14 12:14:09

解决方案只是在时间戳周围添加引号。

The solution to this was merely to add quotes around the timestamp.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文