我在virtuoso上工作并且遇到了比较时间变量的问题
我的数据在ttl文件中,非常简单,如下所示:
@prefix attr: <http://my.com/attr_> .
@prefix : <http://my.com/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:t99255 attr:ts "2007-01-14 20:01:55"^^xsd:dateTime .
:t99255 attr:te "2008-10-04 14:33:09"^^xsd:dateTime .
:t99257 attr:ts "2009-05-02 04:35:11"^^xsd:dateTime .
:t99257 attr:te "2099-12-31 15:59:59"^^xsd:dateTime .
然后我将其加载到名为test的图形中。我运行查询“sparql select * from where {?s?p?o};”并获得4条以上的记录。
但是,当我运行以下查询时:
sparql
PREFIX : <http://my.com/>
PREFIX attr: <http://my.com/attr_>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?triple_0 ?t_ts ?t_te
FROM <gstest>
WHERE {
?triple_0 attr:ts ?t_ts .
?triple_0 attr:te ?t_te .
FILTER ( ?t_ts < ?t_te )
};
我只得到一个结果只有一个结果“t99255”。我想问题是“2099-12-31 15:59:59”不是virtuoso的有效日期时间。所以我用“2020”代替“2099”,然后我有两个记录。
任何人都知道virtuoso中xsd:dateTime的值范围?
由于
答案 0 :(得分:1)
如果这实际上是您的数据:
@prefix attr: <http://my.com/attr_> .
@prefix : <http://my.com/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:t99255 attr:ts "2007-01-14 20:01:55"^^xsd:dateTime .
:t99255 attr:te "2008-10-04 14:33:09"^^xsd:dateTime .
:t99257 attr:ts "2009-05-02 04:35:11"^^xsd:dateTime .
:t99257 attr:te "2099-12-31 15:59:59"^^xsd:dateTime .
那么你可能无法加载它,因为它没有声明xsd:
前缀。您可能实际上并未加载任何数据。您是否从select * where { ?s ?p ?o }
?
然后我将其加载到名为test
的图形中
但是,您的代码是
SELECT ?triple_0 ?t_ts ?t_te
FROM <gstest>
那可能是个问题。你可以试试
select ?g ?s ?p ?o where {
graph ?g { ?s ?p ?o }
}
确保您在图表中获得了预期的三元组。
您不需要将已经是日期时间的值转换为日期时间。即,而不是
FILTER ( xsd:dateTime(?t_ts) < xsd:dateTime(?t_te) )
你可以这样做:
FILTER ( ?t_ts < ?t_te )
例如,这是一个将?t_ts
和?t_te
绑定到每个日期时间的查询,并仅返回有序对:
select ?t_ts ?t_te where {
values ?t_ts { "2007-01-14 20:01:55"^^xsd:dateTime
"2008-10-04 14:33:09"^^xsd:dateTime
"2009-05-02 04:35:11"^^xsd:dateTime
"2099-12-31 15:59:59"^^xsd:dateTime }
values ?t_te { "2007-01-14 20:01:55"^^xsd:dateTime
"2008-10-04 14:33:09"^^xsd:dateTime
"2009-05-02 04:35:11"^^xsd:dateTime
"2099-12-31 15:59:59"^^xsd:dateTime }
filter ( ?t_ts < ?t_te )
}
order by ?t_ts ?t_te
t_ts t_te
----------------------------------------------------
2007-01-14T20:01:55+02:00 2008-10-04T14:33:09+02:00
2007-01-14T20:01:55+02:00 2009-05-02T04:35:11+02:00
2007-01-14T20:01:55+02:00 2099-12-31T15:59:59+02:00
2008-10-04T14:33:09+02:00 2009-05-02T04:35:11+02:00
2008-10-04T14:33:09+02:00 2099-12-31T15:59:59+02:00
2009-05-02T04:35:11+02:00 2099-12-31T15:59:59+02:00
这些是我在DBpedia上运行该查询时的结果,它正在运行Virtuoso的安装。