2010-12-14 120 views
4

我有以下SPARQL查询: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结果(当有符合此时间区域是观察!)

是否有可能?时间是一个varchar /文本/字符串数据类型,因此比较可以”不行吗?如果是这样,是否可以在SPARQL中进行转换?

+0

什么是你的数据图 - 什么是''时间'文字的数据类型? SSN本体没有规定时间表示的特定格式。 – laalto 2010-12-14 13:51:36

回答

1

对此的解决方案仅仅是在时间戳周围添加引号。

+2

是的,这使得它们成为字符串而不是'xsd:integer's。字符串文字具有明确的字典排序顺序。 – laalto 2010-12-14 15:03:33

14

如果您匹配的时间值具有相同的数字位数,那么这只会起作用,因为它会进行强有力的比较。一个更好的解决将是:

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

这将在时间值转换为整数,然后执行它的数值进行比较?