

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

# Hint di query SPARQL utilizzati con DESCRIBE
<a name="sparql-query-hints-for-describe"></a>

Una query SPARQL `DESCRIBE` fornisce un meccanismo flessibile per richiedere descrizioni di risorse. Tuttavia, le specifiche SPARQL non definiscono la semantica precisa di `DESCRIBE`.

A partire dal [rilascio 1.2.0.2 del motore](engine-releases-1.2.0.2.md), Neptune supporta diverse modalità e algoritmi `DESCRIBE` adatti a diverse situazioni.

Questo set di dati di esempio può aiutare a illustrare le diverse modalità:

```
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <https://example.com/> .

:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JohnDoe :firstName "John" .
:JaneDoe :knows _:b1 .
_:b1 :knows :RichardRoe .

:RichardRoe :knows :JaneDoe .
:RichardRoe :firstName "Richard" .

_:s1 rdf:type rdf:Statement .
_:s1 rdf:subject :JaneDoe .
_:s1 rdf:predicate :knows .
_:s1 rdf:object :JohnDoe .
_:s1 :knowsFrom "Berlin" .

:ref_s2 rdf:type rdf:Statement .
:ref_s2 rdf:subject :JaneDoe .
:ref_s2 rdf:predicate :knows .
:ref_s2 rdf:object :JohnDoe .
:ref_s2 :knowsSince 1988 .
```

Gli esempi seguenti presuppongono che venga richiesta una descrizione della risorsa `:JaneDoe` utilizzando una query SPARQL in questo modo:

```
DESCRIBE <https://example.com/JaneDoe>
```

## Hint di query SPARQL `describeMode`
<a name="sparql-query-hints-describeMode"></a>

L'hint di query SPARQL `hint:describeMode` viene utilizzato per selezionare una delle seguenti modalità SPARQL `DESCRIBE` supportate da Neptune:

### Modalità DESCRIBE `ForwardOneStep`
<a name="sparql-query-hints-describeMode-ForwardOneStep"></a>

È possibile richiamare la modalità `ForwardOneStep` con l'hint di query `describeMode` in questo modo:

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "ForwardOneStep"
}
```

La modalità `ForwardOneStep` restituisce solo gli attributi e i collegamenti diretti della risorsa da descrivere. Nel caso di esempio, ciò significa che restituisce le triple che hanno `:JaneDoe`, la risorsa da descrivere, come oggetto:

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b301990159 .
```

Nota che la query DESCRIBE può restituire triple con nodi vuoti, ad esempio`_:b301990159`, che sono IDs ogni volta diverse rispetto al set di dati di input.

### Modalità DESCRIBE `SymmetricOneStep`
<a name="sparql-query-hints-describeMode-SymmetricOneStep"></a>

`SymmetricOneStep` è la modalità DESCRIBE predefinita se non si fornisce un hint di query. Puoi anche richiamarlo esplicitamente con l'hint di query `describeMode` in questo modo:

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "SymmetricOneStep"
}
```

Nella semantica `SymmetricOneStep`, `DESCRIBE` restituisce gli attributi, i collegamenti diretti e i collegamenti inversi della risorsa da descrivere:

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b318767375 .

_:b318767631 rdf:subject :JaneDoe .

:RichardRoe :knows :JaneDoe .

:ref_s2 rdf:subject :JaneDoe .
```

### Modalità DESCRIBE Concise Bounded Description (`CBD`)
<a name="sparql-query-hints-describeMode-CBD"></a>

La modalità Concise Bounded Description (`CBD`) viene richiamata utilizzando l'hint di query `describeMode` in questo modo:

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "CBD"
}
```

Nella semantica `CBD`, `DESCRIBE` restituisce la modalità Concise Bounded Description (come [definito da W3C](http://www.w3.org/Submission/CBD)) della risorsa da descrivere:

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b285212943 .
_:b285212943 :knows :RichardRoe .

_:b285213199 rdf:subject :JaneDoe .
_:b285213199 rdf:type rdf:Statement .
_:b285213199 rdf:predicate :knows .
_:b285213199 rdf:object :JohnDoe .
_:b285213199 :knowsFrom "Berlin" .

:ref_s2 rdf:subject :JaneDoe .
```

La Concise Bounded Description di una risorsa RDF (ovvero un nodo in un grafo RDF) è il sottografo più piccolo incentrato su quel nodo che può essere autonomo. In pratica ciò significa che se si pensa a questo grafo come a un albero, con il nodo designato come radice, non ci sono nodi vuoti (bnodi) come foglie di quell'albero. Poiché i bnodi non possono essere indirizzati esternamente o utilizzati nelle query successive, per l'esplorazione del grafo non è sufficiente trovare i singoli hop successivi dal nodo corrente. Devi anche andare abbastanza lontano per trovare qualcosa che possa essere usato nelle query successive (cioè qualcosa di diverso da un bnodo).

#### Calcolo della CBD
<a name="sparql-query-hints-describeMode-CBD-computing"></a>

Dato un particolare nodo (il nodo iniziale o radice) nel grafo RDF di origine, la CBD di quel nodo viene calcolata come segue:

1. Includere nel sottografo tutte le istruzioni del grafo di origine in cui il *soggetto* dell'istruzione è il nodo iniziale.

1. Ricorsivamente, per tutte le istruzioni del sottografo che finora hanno un *oggetto* nodo vuoto, includere nel sottografo tutte le istruzioni del grafo di origine in cui il *soggetto* dell'istruzione è quel nodo vuoto e che non sono già incluse nel sottografo.

1. Ricorsivamente, per tutte le istruzioni incluse nel sottografo finora, per tutte le reificazioni di queste istruzioni del grafo di origine, includere la CBD a partire dal nodo `rdf:Statement` di ogni reificazione.

Si ottiene così un sottografo in cui i nodi *oggetto* sono riferimenti o valori letterali IRI oppure nodi vuoti che non fungono da *soggetto* di alcuna istruzione del grafo. Notare che la CBD non può essere calcolata utilizzando una singola query SPARQL SELECT o CONSTRUCT.

### Modalità DESCRIBE Symmetric Concise Bounded Description (`SCBD`)
<a name="sparql-query-hints-describeMode-SCBD"></a>

La modalità Symmetric Concise Bounded Description (`SCBD`) viene richiamata utilizzando l'hint di query `describeMode` in questo modo:

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE <https://example.com/JaneDoe>
{
  hint:Query hint:describeMode "SCBD"
}
```

Nella semantica `SCBD`, `DESCRIBE` restituisce la Symmetric Concise Bounded Description della risorsa (come definito da W3C in [Describing Linked Datasets with the VOID Vocabulary)](http://www.w3.org/TR/void/):

```
:JaneDoe :firstName "Jane" .
:JaneDoe :knows :JohnDoe .
:JaneDoe :knows _:b335544591 .
_:b335544591 :knows :RichardRoe .

:RichardRoe :knows :JaneDoe .

_:b335544847 rdf:subject :JaneDoe .
_:b335544847 rdf:type rdf:Statement .
_:b335544847 rdf:predicate :knows .
_:b335544847 rdf:object :JohnDoe .
_:b335544847 :knowsFrom "Berlin" .

:ref_s2 rdf:subject :JaneDoe .
```

Il vantaggio di CBD e SCBD rispetto alle modalità `ForwardOneStep` e `SymmetricOneStep` è che i nodi vuoti vengono sempre espansi per includere la relativa rappresentazione. Questo può essere un vantaggio importante perché non è possibile eseguire query su un nodo vuoto utilizzando SPARQL. Inoltre, le modalità CBD e SCBD considerano anche le reificazioni.

Notare che l'hint di query `describeMode` può anche far parte di una clausola `WHERE`:

```
PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#>
DESCRIBE ?s
WHERE {
  hint:Query hint:describeMode "CBD" .
  ?s rdf:type <https://example.com/Person>
}
```

## Hint di query SPARQL `describeIterationLimit`
<a name="sparql-query-hints-describeIterationLimit"></a>

L'hint di query SPARQL `hint:describeIterationLimit` fornisce un vincolo **opzionale** sul numero massimo di espansioni iterative da eseguire per gli algoritmi DESCRIBE iterativi come CBD e SCBD.

I limiti di DESCRIBE coincidono ANDed . Pertanto, se vengono specificati sia il limite di iterazione che il limite di istruzioni, entrambi i limiti devono essere soddisfatti prima che la query DESCRIBE venga interrotta.

Il valore predefinito per questo valore è 5. È possibile impostarlo su ZERO (0) per specificare NESSUN limite al numero di espansioni iterative.

## Hint di query SPARQL `describeStatementLimit`
<a name="sparql-query-hints-describeStatementLimit"></a>

L'hint di query SPARQL `hint:describeStatementLimit` fornisce un vincolo **opzionale** sul numero massimo di istruzioni che possono essere presenti in una risposta alla query DESCRIBE. Viene applicato solo per algoritmi DESCRIBE iterativi come CBD e SCBD.

DESCRIVI i limiti ANDed coincidono. Pertanto, se vengono specificati sia il limite di iterazione che il limite di istruzioni, entrambi i limiti devono essere soddisfatti prima che la query DESCRIBE venga interrotta.

Il valore predefinito per questo valore è 5000. È possibile impostarlo su ZERO (0) per specificare NESSUN limite al numero di istruzioni restituite.