Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Scelta tra FILTER, FILTER...IN e VALUES nelle query
Sono disponibili tre tecniche di base per inserire valori in query SPARQL: FILTER, FILTER...IN e VALUES.
Ad esempio, potresti voler cercare gli amici di più persone con una singola query. Utilizzando FILTER, è possibile strutturare la query come segue:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}
Questo restituisce nel grafo tutte le triple che hanno ?s associato a ex:person1 o ex:person2 e hanno un arco in uscita etichettato come foaf:knows.
Puoi anche creare una query utilizzando FILTER...IN che restituisce risultati equivalenti:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}
Puoi anche creare una query utilizzando VALUES, che in questo caso restituisce risultati equivalenti:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}
Anche se in molti casi queste query sono semanticamente equivalenti, vi sono alcuni casi in cui le due varianti FILTER differiscono dalla variante VALUES:
-
Il primo caso corrisponde a quando inserisci valori duplicati, come ad esempio inserire la stessa persona due volte. In questo caso, la query
VALUESinclude il duplicato nel risultato. Puoi eliminare esplicitamente questi duplicati aggiungendoDISTINCTalla clausolaSELECT. In alcuni casi, potresti volere i duplicati nei risultati della query per inserire valori ridondanti.Tuttavia, quando lo stesso valore appare più volte, le versioni
FILTEReFILTER...INlo estraggono una sola volta. -
Il secondo caso è correlato al fatto che
VALUESesegue sempre una corrispondenza esatta, mentre in alcuni casiFILTERpotrebbe applicare la promozione di tipo ed eseguire corrispondenze parziali.Ad esempio, quando includi un valore letterale come
"2.0"^^xsd:floatnella clausola dei valori, una queryVALUESesegue la corrispondenza esatta con questo valore letterale, inclusi il valore letterale e il tipo di dati.Al contrario,
FILTERproduce una corrispondenza parziale per questi valori letterali numerici. Le corrispondenze possono includere valori letterali con lo stesso valore ma con diversi tipi di dati numerici, comexsd:double.Nota
Non c'è differenza tra il
VALUEScomportamentoFILTERe quando si enumerano stringhe letterali o. URIs
Le differenze tra FILTER e VALUES possono influenzare l'ottimizzazione e la strategia di valutazione query risultante. A meno che il caso d’uso richieda le corrispondenze parziali, consigliamo di utilizzare VALUES poiché evita di controllare i casi speciali relativi al casting del tipo. Di conseguenza, VALUES spesso produce una query più efficiente, più veloce e meno costosa.