Scelta traFILTER,FILTER... IN e nelle tue interrogazioni VALUES - Amazon Neptune

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 traFILTER,FILTER... IN e nelle tue interrogazioni VALUES

Esistono tre modi fondamentali per inserire valori nelle SPARQL query: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 VALUES include il duplicato nel risultato. Puoi eliminare esplicitamente questi duplicati aggiungendo DISTINCT alla clausola SELECT. 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 FILTER e FILTER...IN lo estraggono una sola volta.

  • Il secondo caso è correlato al fatto che VALUES esegue sempre una corrispondenza esatta, mentre in alcuni casi FILTER potrebbe applicare la promozione di tipo ed eseguire corrispondenze parziali.

    Ad esempio, quando includi un valore letterale come "2.0"^^xsd:float nella clausola dei valori, una query VALUES esegue la corrispondenza esatta con questo valore letterale, inclusi il valore letterale e il tipo di dati.

    Al contrario, FILTER produce 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, come xsd:double.

    Nota

    Non c'è differenza tra il VALUES comportamento FILTER e 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.