

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar o protocolo HTTP do SPARQL 1.1 Graph Store (GSP) no Amazon Neptune
<a name="sparql-graph-store-protocol"></a>

Na recomendação [SPARQL 1.1 Graph Store HTTP Protocol](https://www.w3.org/TR/sparql11-http-rdf-update/), o W3C definiu um protocolo HTTP para gerenciar grafos do RDF. Ele define operações para remover, criar e substituir o conteúdo do grafo do RDF, bem como para adicionar declarações do RDF ao conteúdo existente.

O protocolo de armazenamento de grafos (GSP) oferece uma maneira conveniente de manipular todo o grafo sem precisar escrever consultas do SPARQL complexas.

O Neptune suporta totalmente esse protocolo.

O endpoint do protocolo de armazenamento de grafos (GSP) é:

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

Para acessar o grafo padrão com o GSP, use:

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

Para acessar um grafo nomeado com o GSP, use:

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

## Detalhes especiais da implementação do GSP no Neptune
<a name="sparql-graph-store-protocol-special"></a>

O Neptune implementa totalmente a [recomendação do W3C](https://www.w3.org/TR/sparql11-http-rdf-update/) que define o GSP. No entanto, há algumas situações que a especificação não abrange.

Uma delas é o caso em que uma solicitação `PUT` ou `POST` especifica um ou mais grafos nomeados no corpo da solicitação que diferem do grafo especificado pelo URL da solicitação. Isso só pode acontecer quando o formato RDF do corpo da solicitação é compatível com grafos nomeados, por exemplo, usando `Content-Type: application/n-quads` ou `Content-Type: application/trig`.

Nessa situação, o Neptune adiciona ou atualiza todos os grafos nomeados presentes no corpo, bem como o grafo nomeado especificado no URL.

Por exemplo, suponha que, começando com um banco de dados vazio, você envie uma solicitação `PUT` para inverter os votos em três grafos. Um, denominado `urn:votes`, contém todos os votos de todos os anos eleitorais. Outros dois, denominados `urn:votes:2005` e `urn:votes:2019`, contêm votos de anos eleitorais específicos. A solicitação e sua carga útil têm a seguinte aparência:

```
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>
```

Depois que a solicitação é executada, os dados no banco de dados ficam desta forma:

```
<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>
```

Outra situação ambígua é quando mais de um grafo é especificado no próprio URL da solicitação, usando qualquer um de `PUT`, `POST`, `GET` ou `DELETE`. Por exemplo:

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

Ou:

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

Nessa situação, o Neptune gera um HTTP 400 com uma mensagem indicando que somente um grafo pode ser especificado no URL da solicitação.