2014-06-05 16 views
6

Sto utilizzando il motore SPARQL di Jena e sto provando a scrivere una query per filtrare su un intervallo di date in quanto ho bisogno di trovare il valore di una proprietà dopo una data fissa.Filtra per intervallo di date in SPARQL

La mia proprietà data è nel seguente formato:

Fri May 23 10:20:13 IST 2014 

Come faccio a scrivere una query SPARQL per ottenere altri oggetti con date maggiori di questo?

risposta

13

Con i dati in tale formato non è possibile filtrare su un intervallo di esso senza aggiungere un extension function personalizzato a ARQ (che è destinato agli utenti avanzati) poiché è necessario analizzare e interpretare la stringa di data e ora.

Ciò che invece dovresti fare è tradurre i tuoi dati nel formato di data ora standard xsd:dateTime che tutte le implementazioni SPARQL devono supportare. Vedere la specifica XML Schema Part 2: Datatypes per i dettagli di questo formato.

tua specifica data di esempio potrebbe tradurre come segue:

2014-05-23T10:20:13+05:30 

E si deve assicurare che si dichiara di essere un letterale tipizzato di tipo xsd:dateTime quando lo si utilizza nei dati e query. Ad esempio, nel leggibile sintassi Turtle RDF:

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix : <http://example.org> . 

:subject :date "2014-05-23T10:20:13+05:30"^^xsd:dateTime . 

È quindi possibile scrivere una query SPARQL che filtra da intervallo di date in questo modo:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX : <http://example.org> 

SELECT * 
WHERE 
{ 
    ?s :date ?date . 
    FILTER (?date > "2014-05-23T10:20:13+05:30"^^xsd:dateTime) 
} 

Questo trova tutti i record in cui ?date è dopo la data indicata

+0

e supponiamo di voler solo applicare l'intervallo nel filtro con la proprietà della stringa di tipi supponiamo che l'età sia memorizzata come stringa. poi? – cooljohny

+1

I commenti sono per chiarimenti sulla domanda specifica, se hai una domanda a parte allora dovresti chiederla come tale. Leggi anche [Espressioni e valori di prova] (http://www.w3.org/TR/sparql11-query/#expressions) nella specifica SPARQL se non hai già – RobV

+0

Quando scrivo la query sopra riportata, viene visualizzato un errore: Non risolto nome prefisso: xsd: dateTime e quando non lo si specifica nuovamente restituisce l'errore: Eccezione formato datatype: "2014-06-08T14: 26: 39 + 0530" ^^ xsd: dateTime. Cosa devo fare? – cooljohny