Vous pouvez le faire, mais pas exactement comme votre question le demande. Les formes littérales pour dateTimes doivent avoir tous les champs (sauf le fuseau horaire), donc "2014-08-15" ^^ xsd: dateTime n'est pas réellement un dateTime légal. Voir the definition pour plus d'informations sur le format d'heure.
Cela dit, il est assez facile de sortir l'année, le mois et le jour d'un datetime et les remettre ensemble en une date que vous pouvez comparer avec d'autres dates:
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 |
--------------------------------------------------------------------------
Si vous voulez inclure le fuseau horaire, vous pouvez le faire aussi; ils sont autorisés dans xsd: dates.
Si vous voulez filtrer sans créer la nouvelle date, vous pouvez aussi faire quelque chose comme
filter (year(?dt) = 2015 &&
month(?dt) = 01 &&
day(?dt) = 10)
Cela pourrait être une solution assez propre. Une note sur votre filtre , cependant. Vous pouvez filtrer la valeur d'une variable par rapport à une constante comme vous l'avez fait, mais cela suggère souvent (mais pas toujours) un moyen plus simple. Par exemple, au lieu de:
select ?s where {
?s a ?o .
filter (?o = <something>)
}
vous auriez habituellement juste utiliser la valeur en place, ou utilisez valeurs pour spécifier la valeur d'une variable:
select ?s where {
?s a <something> .
}
select ?s where {
values ?o { <something> }
?s a ?o .
}
Prenez garde que '" 2014-08-15 "^^ xsd: dateTime' ne soit pas une date légale, même s'il s'agit d'une date légale" xsd: date' ". –
Suggérer l'utilisation de '" 2014-08-15 "^^ xsd: date' à la place. – scotthenninger