

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

# `Query federate SPARQL in Neptune utilizzando l'estensione SERVICE`
<a name="sparql-service"></a>

Amazon Neptune supporta completamente l'estensione delle query federate SPARQL che utilizza la parola chiave `SERVICE`. Per ulteriori informazioni, consulta [Query federate SPARQL 1.1](https://www.w3.org/TR/sparql11-federated-query/).

La parola chiave `SERVICE` indica al motore di query SPARQL di eseguire una parte della query rispetto a un endpoint SPARQL remoto e di comporre il risultato della query finale. Sono possibili solo le operazioni `READ`. Le operazioni `WRITE` e `DELETE` non sono supportate. Neptune può eseguire solo query federate su endpoint SPARQL accessibili all'interno del proprio cloud privato virtuale (VPC). Tuttavia, è anche possibile utilizzare un proxy inverso nel VPC per rendere accessibile un'origine dati esterna all'interno del VPC.

**Nota**  
Quando SPARQL `SERVICE` viene utilizzato per federare una query a due o più cluster Neptune nello stesso VPC, i gruppi di sicurezza devono essere configurati per consentire a tutti i cluster Neptune di parlare tra loro.

**Importante**  
La federazione SPARQL 1.1 effettua richieste di servizio per tuo conto quando trasferisci query e parametri a endpoint SPARQL esterni. È tua responsabilità verificare che gli endpoint SPARQL esterni soddisfino i requisiti di sicurezza e gestione dei dati dell'applicazione.

## Esempio di una query federata Neptune
<a name="sparql-service-example-1"></a>

Il seguente esempio semplice mostra il funzionamento di query federate SPARQL.

Supponiamo che un cliente invii la seguente richiesta a at. *Neptune-1*`http://neptune-1:8182/sparql`

```
SELECT * WHERE {
   ?person rdf:type foaf:Person .
   SERVICE <http://neptune-2:8182/sparql> {
       ?person foaf:knows ?friend .
    }
}
```

1. *Neptune-1*valuta il primo pattern di query (*Q-1*)`?person rdf:type foaf:Person`, ovvero utilizza i risultati per risolvere `?person` in *Q-2*(`?person foaf:knows ?friend`) e inoltra il pattern risultante a at. *Neptune-2*`http://neptune-2:8182/sparql`

1. *Neptune-2*valuta *Q-2*e invia i risultati a. *Neptune-1*

1. *Neptune-1*unisce le soluzioni per entrambi i modelli e invia i risultati al cliente.

Questo flusso è mostrato nel seguente diagramma.

![Diagramma di flusso che mostra i modelli di query federate SPARQL in fase di valutazione e le risposte inviate al client.](http://docs.aws.amazon.com/it_it/neptune/latest/userguide/images/federated.png)


**Nota**  
Per impostazione predefinita, il sistema di ottimizzazione determina a che punto dell'esecuzione della query viene eseguita l'istruzione `SERVICE`. È possibile sostituire questo posizionamento utilizzando l'hint di query [joinOrder](sparql-query-hints-joinOrder.md).

## Controllo degli accessi per query federate in Neptune
<a name="sparql-service-auth"></a>

Neptune AWS Identity and Access Management utilizza (IAM) per l'autenticazione e l'autorizzazione. Il controllo degli accessi per una query federata può riguardare più istanze database Neptune. Queste istanze potrebbero avere requisiti diversi per il controllo degli accessi. In alcune circostanze, questo può limitare la possibilità di effettuare una query federata.

Considerate il semplice esempio presentato nella sezione precedente. *Neptune-1*chiamate *Neptune-2*con le stesse credenziali con cui è stata chiamata.
+ Se *Neptune-1*richiede l'autenticazione e l'autorizzazione IAM, ma *Neptune-2*non lo fa, tutto ciò che serve sono le autorizzazioni IAM appropriate per *Neptune-1*effettuare la query federata.
+ Se *Neptune-2*entrambi richiedono l'autenticazione *Neptune-1*e l'autorizzazione IAM, è necessario allegare le autorizzazioni IAM per entrambi i database per effettuare la query federata. Entrambi i cluster devono inoltre trovarsi nello stesso AWS account e nella stessa regione. Cross-region and/or Le architetture di query federate tra account non sono attualmente supportate.
+ Tuttavia, nel caso in cui non è IAM-enabled ma *Neptune-1*è, non *Neptune-2*è possibile effettuare una query federata. Il motivo è che non è *Neptune-1*possibile recuperare le credenziali IAM e passarle per *Neptune-2*autorizzare la seconda parte della query.