

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 che utilizzano 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 query a *Neptune-1* all'indirizzo `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 modello di query (*Q-1*) che è `?person rdf:type foaf:Person`, utilizza i risultati per risolvere `?person` in *Q-2* (`?person foaf:knows ?friend`) e inoltra il modello risultante a *Neptune-2* all'indirizzo `http://neptune-2:8182/sparql`.

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

1. *Neptune-1* unisce le soluzioni per entrambi i modelli e restituisce 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.

Consideriamo il semplice esempio presentato nella sezione precedente. *Neptune-1* chiama *Neptune-2* con le stesse credenziali con cui è stato chiamato.
+ Se *Neptune-1* richiede l'autenticazione e l'autorizzazione IAM, ma *Neptune-2* non le richiede, per effettuare la query federata occorrono solo le autorizzazioni IAM appropriate per *Neptune-1*.
+ Se *Neptune-1* e *Neptune-2* richiedono entrambi l'autenticazione e l'autorizzazione IAM, è necessario collegare 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. Le architetture di query federate and/or tra più account non sono attualmente supportate.
+ Tuttavia, nel caso in cui *Neptune-1* non sia abilitato per IAM ma *Neptune-2* lo sia, non è possibile effettuare una query federata. Il motivo è che *Neptune-1* non può recuperare le credenziali IAM e passarle a *Neptune-2* per autorizzare la seconda parte della query.