SPARQL类型转换?
问题描述:
我有以下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中进行转换?
答
对此的解决方案仅仅是在时间戳周围添加引号。
+2
是的,这使得它们成为字符串而不是'xsd:integer's。字符串文字具有明确的字典排序顺序。 – laalto 2010-12-14 15:03:33
答
如果您匹配的时间值具有相同的数字位数,那么这只会起作用,因为它会进行强有力的比较。一个更好的解决将是:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
...
FILTER(xsd:integer(?time) > 1291908000)
这将在时间值转换为整数,然后执行它的数值进行比较?
什么是你的数据图 - 什么是''时间'文字的数据类型? SSN本体没有规定时间表示的特定格式。 – laalto 2010-12-14 13:51:36