

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

# Dicas de consulta SPARQL usadas com DESCRIBE
<a name="sparql-query-hints-for-describe"></a>

Uma consulta `DESCRIBE` SPARQL oferece um mecanismo flexível para solicitar descrições de recursos. No entanto, as especificações do SPARQL não definem a semântica precisa de `DESCRIBE`.

A partir da [versão 1.2.0.2 do mecanismo](engine-releases-1.2.0.2.md), o Neptune é compatível com vários modos `DESCRIBE` e algoritmos diferentes que são adequados para situações diferentes.

Esse exemplo de conjunto de dados pode ajudar a ilustrar os diferentes modos:

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

Os exemplos abaixo pressupõem que uma descrição do recurso `:JaneDoe` está sendo solicitada usando uma consulta SPARQL como esta:

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

## A dica de consulta `describeMode` SPARQL
<a name="sparql-query-hints-describeMode"></a>

A dica de consulta `hint:describeMode` SPARQL é usada para selecionar um dos seguintes modos `DESCRIBE` SPARQL compatíveis com o Neptune:

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

Você invoca o modo `ForwardOneStep` com a dica de consulta `describeMode` desta forma:

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

O modo `ForwardOneStep` gera somente os atributos e os links diretos do recurso a ser descrito. No caso de exemplo, isso significa que ele gera os triplos que têm `:JaneDoe`, o recurso a ser descrito, como assunto:

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

Observe que a consulta DESCRIBE pode retornar triplas com nós em branco, como`_:b301990159`, que são diferentes a IDs cada vez, em comparação com o conjunto de dados de entrada.

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

`SymmetricOneStep` é o modo DESCRIBE padrão caso você não forneça uma dica de consulta. Você também pode invocá-la explicitamente com uma dica de consulta `describeMode` da seguinte forma:

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

Na semântica `SymmetricOneStep`, `DESCRIBE` retorna os atributos, links diretos e links reversos do recurso a ser descrito:

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

_:b318767631 rdf:subject :JaneDoe .

:RichardRoe :knows :JaneDoe .

:ref_s2 rdf:subject :JaneDoe .
```

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

O modo Concise Bounded Description (`CBD`) é invocado usando a dica de consulta `describeMode` da seguinte forma:

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

Na semântica `CBD`, `DESCRIBE` gera o modo Concise Bounded Description (conforme [definido pelo W3C](http://www.w3.org/Submission/CBD)) do recurso a ser descrito:

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

O modo Concise Bounded Description de um recurso do RDF (ou seja, um nó em um grafo do RDF) é o menor subgrafo centralizado em torno desse nó que pode ficar independente. Na prática, isso significa que, se você pensar nesse grafo como uma árvore, com o nó designado como raiz, não haverá nós em branco (nós) como folhas dessa árvore. Como os nós não podem ser tratados externamente nem usados em consultas subsequentes, não basta navegar no grafo apenas para encontrar os próximos saltos únicos do nó atual. Você também precisa ir longe o suficiente para encontrar algo que possa ser usado em consultas subsequentes (ou seja, algo diferente de um bnode).

#### Calcular o CBD
<a name="sparql-query-hints-describeMode-CBD-computing"></a>

Dado um nó específico (o nó inicial ou raiz) no grafo do RDF de origem, o CBD desse nó é calculado da seguinte forma:

1. Inclua no subgrafo todas as declarações no grafo de origem em que o *assunto* da declaração é o nó inicial.

1. Recursivamente, até o momento, para todas as declarações no subgrafo que têm um *objeto* de nó em branco, inclua no subgrafo todas as declarações no grafo de origem em que o *assunto* da declaração seja esse nó em branco e que ainda não tenham sido incluídas no subgrafo.

1. Recursivamente, até o momento, para todas as declarações incluídas no subgrafo, para todas as reificações dessas declarações no grafo de origem, inclua o CBD começando no nó `rdf:Statement` de cada retificação.

Isso gera um subgrafo em que os nós do *objeto* são referências ou literais do IRI, ou nós em branco que não servem como *assunto* de nenhuma declaração no grafo. Observe que o CBD não pode ser calculado usando uma única consulta SPARQL SELECT ou CONSTRUCT.

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

O modo Symmetric Concise Bounded Description (`SCBD`) é invocado usando a dica de consulta `describeMode` da seguinte forma:

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

Na semântica `SCBD`, `DESCRIBE` gera o modo Symmetric Concise Bounded Description do recurso (conforme definido pelo W3C em [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 .
```

A vantagem do CBD e do SCBD em relação aos modos `ForwardOneStep` e `SymmetricOneStep` é que os nós em branco são sempre expandidos para incluir a respectiva representação. Isso pode ser uma vantagem importante porque não é possível consultar um nó em branco usando o SPARQL. Além disso, os modos CBD e SCBD também consideram as reificações.

Observe que a dica de consulta `describeMode` também pode fazer parte de uma cláusula `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>
}
```

## A dica de consulta `describeIterationLimit` SPARQL
<a name="sparql-query-hints-describeIterationLimit"></a>

A dica de consulta `hint:describeIterationLimit` SPARQL fornece uma restrição **opcional** sobre o número máximo de expansões iterativas a serem executadas para algoritmos DESCRIBE iterativos, como CBD e SCBD.

Os limites do DESCRIBE estão ANDed juntos. Portanto, se o limite de iteração e o limite de declarações forem especificados, os dois limites deverão ser atendidos antes que a consulta DESCRIBE seja eliminada.

O padrão para esse valor é cinco. Você pode defini-lo como ZERO (0) para especificar SEM limite no número de expansões iterativas.

## A dica de consulta `describeStatementLimit` SPARQL
<a name="sparql-query-hints-describeStatementLimit"></a>

A dica de consulta `hint:describeStatementLimit` SPARQL fornece uma restrição **opcional** sobre o número máximo de declarações que podem estar presentes em uma resposta de consulta DESCRIBE. Ele é aplicado apenas para algoritmos DESCRIBE iterativos, como CBD e SCBD.

Os limites do DESCRIBE estão ANDed juntos. Portanto, se o limite de iteração e o limite de declarações forem especificados, os dois limites deverão ser atendidos antes que a consulta DESCRIBE seja eliminada.

O padrão para esse valor é cinco mil. Você pode defini-lo como ZERO (0) para especificar SEM limite no número de declarações geradas.