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à.
SPARQLconformità agli standard in Amazon Neptune
Dopo aver elencato SPARQL gli standard applicabili, le sezioni seguenti forniscono dettagli specifici su come l'SPARQLimplementazione di Neptune si estende o diverge da tali standard.
Argomenti
- Standard applicabili per SPARQL
- Prefissi dei namespace predefiniti in Neptune SPARQL
- SPARQLGrafico predefinito e grafici con nome
- SPARQLXPathFunzioni di costruzione supportate da Neptune
- Base predefinita IRI per interrogazioni e aggiornamenti
- xsd: dateTime Valori in Neptune
- Gestione di Neptune dei valori speciali a virgola mobile
- Limitazione di Neptune dei valori di lunghezza arbitraria
- Neptune estende il confronto tra pari in SPARQL
- Gestione dei Out-of-Range valori letterali in Nettuno SPARQL
Amazon Neptune è conforme ai seguenti standard nell'implementazione SPARQL del linguaggio Graph Query.
Standard applicabili per SPARQL
SPARQLè definito dalla raccomandazione del W3C SPARQL1.1 Query Language
del 21 marzo 2013. Per i formati numerici, SPARQL segue la specifica W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes
, che è coerente con la specifica IEEE 754 (754-2019 - Standard for Floating-Point Arithmetic). IEEE IEEE Per ulteriori informazioni, consulta anche la pagina 754 di Wikipedia). IEEE Tuttavia, le funzionalità introdotte dopo la versione IEEE 754-1985
non sono incluse nella specifica.
Prefissi dei namespace predefiniti in Neptune SPARQL
Per impostazione predefinita, Neptune definisce i seguenti prefissi da utilizzare nelle query. SPARQL Per ulteriori informazioni, vedere Nomi con prefisso
rdf
–http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs
–http://www.w3.org/2000/01/rdf-schema#
owl
–http://www.w3.org/2002/07/owl#
xsd
–http://www.w3.org/2001/XMLSchema#
SPARQLGrafico predefinito e grafici con nome
Amazon Neptune associa ogni tripla a un grafo denominato. Il grafo predefinito è definito come l'unione di grafi denominati.
Grafico predefinito per query
Se invii una SPARQL query senza specificare esplicitamente un grafico tramite la GRAPH
parola chiave o costrutti come, FROM NAMED
Neptune considera sempre tutte le triple nell'istanza DB. Ad esempio, la seguente query restituisce tutte le triple da un endpoint di NeptuneSPARQL:
SELECT * WHERE { ?s ?p ?o }
Le triple che appaiono in più grafici vengono restituite una sola volta.
Per informazioni sulla specifica grafica predefinita, vedere la sezione RDFDataset
Specifica del grafo denominato per caricamento, inserimenti o aggiornamenti
Se non specificate un grafico con nome durante il caricamento, l'inserimento o l'aggiornamento delle triple, Neptune utilizza il grafico di riserva denominato definito da. URI http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph
Quando invii una richiesta Load
Neptune utilizzando un formato basato sulla tripla, puoi specificare il grafo nominato da utilizzare per tutte le triple utilizzando il parametro parserConfiguration:
namedGraphUri
. Per ulteriori informazioni sulla sintassi del comando Load
, consulta Comando dello strumento di caricamento Neptune.
Importante
Se non utilizzate questo parametro e non specificate un grafico denominato, viene utilizzato il fallback:. URI http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph
Questo grafo di fallback denominato viene anche utilizzato se carichi triple tramite SPARQL
UPDATE
senza fornire in maniera esplicita una destinazione del grafo denominato.
Puoi utilizzare il formato basato su quadruple N-Quads per specificare un grafo denominato per ogni tripla nel database.
Nota
Utilizzare N-Quads consente di lasciare il grafo denominato vuoto. In questo caso, viene utilizzato http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph
.
Puoi sostituire il grafo denominato predefinito per N-Quads utilizzando l'opzione di configurazione parser namedGraphUri
.
SPARQLXPathFunzioni di costruzione supportate da Neptune
Lo SPARQL standard consente ai SPARQL motori di supportare un set estensibile di funzioni di costruzione. XPath Neptune attualmente supporta le seguenti funzioni costruttore, dove il prefisso xsd
è definito come http://www.w3.org/2001/XMLSchema#
:
xsd:boolean
xsd:integer
xsd:double
xsd:float
xsd:decimal
xsd:long
xsd:unsignedLong
Base predefinita IRI per interrogazioni e aggiornamenti
Poiché un cluster Neptune ha diversi endpoint, l'utilizzo della URL richiesta di una query o di un aggiornamento come IRI base potrebbe portare a risultati imprevisti durante la risoluzione relativa. IRIs
A partire dalla versione 1.2.1.0 del motore, Neptune utilizza http://aws.amazon.com/neptune/default/
come base IRI se una base IRI esplicita non fa parte della richiesta.
Nella richiesta seguente, la base IRI fa parte della richiesta:
BASE <http://example.org/default/> INSERT DATA { <node1> <id> "n1" } BASE <http://example.org/default/> SELECT * { <node1> ?p ?o }
E il risultato sarà:
?p ?o http://example.org/default/id n1
In questa richiesta, tuttavia, non IRI è inclusa alcuna base:
INSERT DATA { <node1> <id> "n1" } SELECT * { <node1> ?p ?o }
In tal caso, il risultato sarà:
?p ?o http://aws.amazon.com/neptune/default/id n1
xsd: dateTime Valori in Neptune
Per motivi di prestazioni, Neptune memorizza sempre i valori di data/ora come Coordinated Universal Time (). UTC Questo rende i confronti diretti molto efficienti.
Ciò significa anche che se si inserisce un dateTime
valore che specifica un particolare fuso orario, Neptune traduce il valore UTC in e scarta tali informazioni sul fuso orario. Quindi, quando recuperate il dateTime
valore in un secondo momento, esso viene espresso inUTC, non nell'ora del fuso orario originale, e non è più possibile determinare quale fosse quel fuso orario originale.
Gestione di Neptune dei valori speciali a virgola mobile
Neptune gestisce i valori speciali in virgola mobile come segue. SPARQL
SPARQLGestione del NaN in Neptune
In NeptuneSPARQL, può accettare un valore NaN
di in una query. Non viene fatta alcuna distinzione tra valori NaN
di segnalazione e silenziosi. Neptune considera tutti i valori NaN
come silenziosi.
Dal punto di vista semantico, non è possibile un confronto di un valore NaN
poiché non esistono elementi maggiori di, minori di o uguali a un valore NaN
. Ciò significa che un valore NaN
su un lato di un confronto in teoria non corrisponde mai a qualcosa sull'altro lato.
Tuttavia, la XSDspecifica consideraxsd:double
o più xsd:float
NaN
valori come uguali. Neptune segue questo principio per il filtro IN
, per l'operatore equal nelle espressioni di filtro e per la semantica di corrispondenza esatta (avendo un valore NaN
nella posizione dell'oggetto di un modello di tripla).
SPARQLGestione dei valori infiniti in Neptune
In NeptuneSPARQL, può accettare un valore INF
di -INF
o in una query. INF
viene confrontato come maggiore di qualsiasi altro valore numerico e viene -INF
confrontato come minore di qualsiasi altro valore numerico.
Due INF valori con segni corrispondenti vengono confrontati come uguali indipendentemente dal tipo (ad esempio, un float è uguale a un -INF
doppio). -INF
Non è possibile un confronto con un valore NaN
ovviamente poiché non esistono elementi maggiori di, minori di o uguali a un valore NaN
.
SPARQLGestione dello zero negativo in Neptune
Neptune normalizza un valore zero negativo a uno zero senza segno. È possibile utilizzare i valori zero negativo in una query, ma non vengono registrati come tali nel database e vengono confrontati come uguali a zero senza segno.
Limitazione di Neptune dei valori di lunghezza arbitraria
Neptune limita la dimensione XSD di archiviazione dei valori interi, in virgola mobile e decimali a 64 bit. SPARQL L'utilizzo di valori più grandi genera un errore InvalidNumericDataException
.
Neptune estende il confronto tra pari in SPARQL
Lo SPARQL standard definisce una logica ternaria per le espressioni di valore, in cui un'espressione di valore può restituire o. true
false
error
La semantica predefinita per l'uguaglianza dei termini (come definita nella specifica SPARQL 1.1=
e i !=
confronti nelle FILTER
condizioni, produce un errore error
quando si confrontano tipi di dati che non sono esplicitamente confrontabili nella tabella degli operatori della specifica.
Questo comportamento può portare a risultati non intuitivi, come nell'esempio seguente.
Dati:
<http://example.com/Server/1> <http://example.com/ip> "127.0.0.1"^^<http://example.com/datatype/IPAddress>
Query 1:
SELECT * WHERE { <http://example.com/Server/1> <http://example.com/ip> ?o . FILTER(?o = "127.0.0.2"^^<http://example.com/datatype/IPAddress>) }
Query 2:
SELECT * WHERE { <http://example.com/Server/1> <http://example.com/ip> ?o . FILTER(?o != "127.0.0.2"^^<http://example.com/datatype/IPAddress>) }
Con la SPARQL semantica predefinita utilizzata da Neptune prima della versione 1.0.2.1, entrambe le query restituirebbero il risultato vuoto. Il motivo è che ?o =
"127.0.0.2"^^<http://example.com/IPAddress>
quando viene valutato per ?o :=
"127.0.0.1"^^<http://example.com/IPAddress>
, produce un error
anziché false
perché non esistono regole di confronto esplicite specificate per il tipo di dati personalizzato <http://example.com/IPAddress>
. Di conseguenza, anche la versione negata nella seconda query produce un error
. In entrambe le query, l'error
causa il filtraggio della soluzione candidata.
A partire dalla versione 1.0.2.1, Neptune ha esteso l'operatore di SPARQL disuguaglianza in conformità con le specifiche. Vedi la sezione SPARQL 1.1 sull'estensibilità degli operatori
Utilizzando questa opzione, Neptune ora tratta un confronto di due tipi di dati che non è esplicitamente definito nella tabella di mappatura dell'operatore come se restituisse true
, se i valori letterali e i tipi di dati sono sintatticamente uguali, altrimenti, false. In ogni caso, non viene prodotto un error
.
Usando queste nuove semantiche, la seconda query restituirebbe "127.0.0.1"^^<http://example.com/IPAddress>
invece di un risultato vuoto.
Gestione dei Out-of-Range valori letterali in Nettuno SPARQL
XSDla semantica definisce ogni tipo numerico con il relativo spazio di valori, ad eccezione di e. integer
decimal
Queste definizioni limitano ogni tipo a un intervallo di valori. Ad esempio, l'intervallo di un intervallo xsd:byte
è compreso tra -128 e +127, inclusi. Qualsiasi valore al di fuori di questo intervallo è considerato non valido.
Se si tenta di assegnare un valore letterale al di fuori dello spazio dei valori di un tipo (ad esempio, se si tenta di impostare an su un xsd:byte
valore letterale di 999), Neptune accetta il valore così com'è, senza arrotondarlo o out-of-range troncarlo. Ma non lo mantiene come valore numerico perché il tipo fornito non può rappresentarlo.
Cioè, Neptune accetta "999"^^xsd:byte
anche se è un valore al di fuori dell'intervallo di valori xsd:byte
definito. Tuttavia, dopo che il valore viene mantenuto nel database, può essere utilizzato solo nella semantica di corrispondenza esatta, in una posizione oggetto di un modello triplo. Nessun filtro di intervallo può essere eseguito su di esso perché i valori letterali non vengono trattati come valori numerici. out-of-range
La specifica SPARQL 1.1 definisce gli operatori di intervallonumeric
-operator-numeric
, -operator-, string
-operator- string
e literal
così via. literal
Neptune non può eseguire un operatore di confronto di intervalli simile a invalid-literal
-operator-numeric-value
.