Вы можете сделать это, но не совсем так, как задает ваш вопрос. Литературные формы для dateTimes должны иметь все поля (кроме часового пояса), поэтому «2014-08-15» ^^ xsd: dateTime на самом деле не является официальным датапребыванием. См. the definition для получения дополнительной информации о формате даты.
Тем не менее, это достаточно легко вытащить год, месяц и день от даты-времени и положить их вместе в день, что вы можете сравнить с другими датами:
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
select ?dt ?date where {
values ?dt { "2011-01-10T14:45:13.815-05:00"^^xsd:dateTime }
bind(xsd:date(concat(str(year(?dt)),"-",
str(month(?dt)),"-",
str(day(?dt))))
as ?date)
}
--------------------------------------------------------------------------
| dt | date |
==========================================================================
| "2011-01-10T14:45:13.815-05:00"^^xsd:dateTime | "2011-01-10"^^xsd:date |
--------------------------------------------------------------------------
Если вы хотите включить часовой пояс, вы тоже можете это сделать; они разрешены в xsd: датах.
Если вы хотите, чтобы отфильтровать, не создавая новую дату, вы также можете сделать что-то вроде
filter (year(?dt) = 2015 &&
month(?dt) = 01 &&
day(?dt) = 10)
Это может быть довольно чистое решение.
Примечание о вашем фильтрах, однако. Вы можете фильтровать значение переменной с константой, как и вы, но часто (но не всегда) предлагает более простой способ. Например, вместо:
select ?s where {
?s a ?o .
filter (?o = <something>)
}
вы обычно просто использовать значение в месте, или использовать значения указать значение переменной:
select ?s where {
?s a <something> .
}
select ?s where {
values ?o { <something> }
?s a ?o .
}
Остерегайтесь, что '' 2014-08-15 "^^ xsd: dateTime' не может быть юридическим датой, даже если это законная' xsd: date'. –
Используйте вместо этого '' 2014-08-15 "^^ xsd: date'. – scotthenninger