

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à.

# Utilizzo del protocollo HTTP Graph Store Protocol (GSP) SPARQL 1.1 in Amazon Neptune
<a name="sparql-graph-store-protocol"></a>

Nella raccomandazione [SPARQL 1.1 Graph Store HTTP Protocol](https://www.w3.org/TR/sparql11-http-rdf-update/), il W3C ha definito un protocollo HTTP per la gestione dei grafi RDF. Definisce le operazioni per la rimozione, la creazione e la sostituzione del contenuto del grafo RDF, nonché per l'aggiunta di istruzioni RDF al contenuto esistente.

Il protocollo GSP (Graph-Store Protocol) offre un modo pratico per manipolare l'intero grafo senza dover scrivere query SPARQL complesse.

Neptune supporta pienamente questo protocollo.

L'endpoint del protocollo GSP (Graph-Store Protocol) è:

```
https://your-neptune-cluster:port/sparql/gsp/
```

Per accedere al grafo predefinito con GSP, usare:

```
https://your-neptune-cluster:port/sparql/gsp/?default
```

Per accedere a un grafo nominato con GSP, usare:

```
https://your-neptune-cluster:port/sparql/gsp/?graph=named-graph-URI
```

## Dettagli speciali sull'implementazione di Neptune GSP
<a name="sparql-graph-store-protocol-special"></a>

Neptune implementa pienamente la [raccomandazione W3C](https://www.w3.org/TR/sparql11-http-rdf-update/) che definisce il protocollo GSP. Tuttavia, ci sono alcune situazioni che la specifica non copre.

Una di queste è il caso in cui una richiesta `PUT` o `POST` specifichi uno o più grafi nominati nel corpo della richiesta che differiscono dal grafo specificato dall'URL della richiesta. Ciò può accadere solo quando il formato RDF del corpo della richiesta supporta grafici nominati, come, ad esempio, con `Content-Type: application/n-quads` o `Content-Type: application/trig`.

In questa situazione, Neptune aggiunge o aggiorna tutti i grafi nominati presenti nel corpo, oltre al grafo nominato specificato nell'URL.

Ad esempio, supponiamo che partendo da un database vuoto, si invii una richiesta `PUT` per trasformare i voti in tre grafi. Uno, denominato `urn:votes`, contiene tutti i voti di tutti gli anni elettorali. Altri due, denominati `urn:votes:2005` e `urn:votes:2019`, contengono i voti di specifici anni elettorali. La richiesta e il relativo payload avranno un aspetto simile al seguente:

```
PUT "http://your-Neptune-cluster:port/sparql/gsp/?graph=urn:votes"
  Host: example.com
  Content-Type: application/n-quads

  PAYLOAD:

  <urn:JohnDoe> <urn:votedFor> <urn:Labour> <urn:votes:2005>
  <urn:JohnDoe> <urn:votedFor> <urn:Conservative> <urn:votes:2019>
  <urn:JaneSmith> <urn:votedFor> <urn:LiberalDemocrats> <urn:votes:2005>
  <urn:JaneSmith> <urn:votedFor> <urn:Conservative> <urn:votes:2019>
```

Dopo l'esecuzione della richiesta, i dati nel database avranno un aspetto simile al seguente:

```
<urn:JohnDoe>   <urn:votedFor> <urn:Labour>           <urn:votes:2005>
<urn:JohnDoe>   <urn:votedFor> <urn:Conservative>     <urn:votes:2019>
<urn:JaneSmith> <urn:votedFor> <urn:LiberalDemocrats> <urn:votes:2005>
<urn:JaneSmith> <urn:votedFor> <urn:Conservative>     <urn:votes:2019>
<urn:JohnDoe>   <urn:votedFor> <urn:Labour>           <urn:votes>
<urn:JohnDoe>   <urn:votedFor> <urn:Conservative>     <urn:votes>
<urn:JaneSmith> <urn:votedFor> <urn:LiberalDemocrats> <urn:votes>
<urn:JaneSmith> <urn:votedFor> <urn:Conservative>     <urn:votes>
```

Un'altra situazione ambigua è quella in cui più di un grafo viene specificato nell'URL della richiesta stesso, utilizzando uno qualsiasi di `PUT`, `POST`, `GET` o `DELETE`. Esempio:

```
POST "http://your-Neptune-cluster:port/sparql/gsp/?graph=urn:votes:2005&graph=urn:votes:2019"
```

O:

```
GET "http://your-Neptune-cluster:port/sparql/gsp/?default&graph=urn:votes:2019"
```

In questa situazione, Neptune restituisce un errore HTTP 400 con un messaggio che indica che è possibile specificare un solo grafo nell'URL della richiesta.