

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Sugerencias de consulta de SPARQL utilizadas con DESCRIBE
<a name="sparql-query-hints-for-describe"></a>

Una consulta `DESCRIBE` de SPARQL proporciona un mecanismo flexible para solicitar descripciones de recursos. Sin embargo, las especificaciones de SPARQL no definen la semántica precisa de `DESCRIBE`.

A partir de la [versión 1.2.0.2 del motor](engine-releases-1.2.0.2.md), Neptune admite varios modos y algoritmos `DESCRIBE`diferentes que se adaptan a diferentes situaciones.

Este conjunto de datos de muestra puede ayudar a ilustrar los 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 .
```

En los ejemplos siguientes, se supone que se solicita una descripción del recurso `:JaneDoe` mediante una consulta SPARQL como esta:

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

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

La sugerencia de consulta `hint:describeMode` de SPARQL se utiliza para seleccionar uno de los siguientes modos `DESCRIBE` de SPARQL compatibles con Neptune:

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

El modo `ForwardOneStep` se invoca con la sugerencia de consulta `describeMode` de la siguiente manera:

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

El modo `ForwardOneStep` solo devuelve los atributos y los enlaces de reenvío del recurso que se va a describir. En el caso de ejemplo, esto significa que devuelve los triples que tienen `:JaneDoe`, que es el recurso que se va a describir, como asunto:

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

Tenga en cuenta que la consulta DESCRIBE puede devolver triples nodos con nodos en blanco, por ejemplo`_:b301990159`, que son diferentes IDs cada vez en comparación con el conjunto de datos de entrada.

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

`SymmetricOneStep` es el modo de DESCRIBE predeterminado si no proporciona una sugerencia de consulta. También puede invocarlo de forma explícita con la sugerencia de consulta `describeMode` de la siguiente manera:

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

En la semántica `SymmetricOneStep`, `DESCRIBE` devuelve los atributos, los enlaces directos y los enlaces inversos del recurso que se va a describir:

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

_:b318767631 rdf:subject :JaneDoe .

:RichardRoe :knows :JaneDoe .

:ref_s2 rdf:subject :JaneDoe .
```

### El modo de DESCRIBE de descripción limitada concisa (`CBD`)
<a name="sparql-query-hints-describeMode-CBD"></a>

El modo de descripción limitada concisa (`CBD`) se invoca con la sugerencia de consulta `describeMode` de la siguiente manera:

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

En la semántica `CBD`, `DESCRIBE` devuelve la descripción limitada concisa ([tal como la define el W3C](http://www.w3.org/Submission/CBD)) del recurso que se va a describir:

```
: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 descripción limitada concisa de un recurso de RDF (es decir, un nodo de un gráfico RDF) es el subgráfico más pequeño centrado alrededor de ese nodo que puede ser independiente. En la práctica, esto significa que si piensa en este gráfico como un árbol, con el nodo designado como raíz, no hay nodos en blanco (nodos b) como hojas de ese árbol. Como los nodos b no se pueden direccionar externamente ni se pueden usar en consultas posteriores, no basta con navegar por el gráfico para encontrar los siguientes saltos individuales desde el nodo actual. También hay que ir lo suficientemente lejos como para encontrar algo que pueda usarse en consultas posteriores (es decir, algo que no sea un nodo b).

#### Cálculo del CBD
<a name="sparql-query-hints-describeMode-CBD-computing"></a>

Dado un nodo en particular (el nodo de inicio o raíz) en el gráfico RDF de origen, el CBD de ese nodo se calcula de la siguiente manera:

1. Incluya en el subgráfico todas las instrucciones del gráfico de origen en las que el *sujeto* de la instrucción sea el nodo inicial.

1. De forma recursiva, para todas las instrucciones del subgráfico que hasta ahora tengan un *objeto* de nodo en blanco, incluya en el subgráfico todas las instrucciones del gráfico de origen cuyo *sujeto* sea ese nodo en blanco y que aún no estén incluidas en el subgráfico.

1. De forma recursiva, para todas las instrucciones incluidas en el subgráfico hasta ahora, para todas las reificaciones de estas instrucciones en el gráfico de origen, incluya el CBD comenzando por el nodo `rdf:Statement` de cada reificación.

Esto da como resultado un subgráfico en el que los nodos *objeto* son referencias o literales del IRI, o nodos en blanco que no sirven de *sujeto* a ninguna instrucción del gráfico. Tenga en cuenta que el CBD no se puede calcular con una sola consulta SELECT o CONSTRUCT de SPARQL.

### El modo DESCRIBE de descripción limitada concisa simétrica (`SCBD`)
<a name="sparql-query-hints-describeMode-SCBD"></a>

El modo de descripción limitada concisa simétrica (`SCBD`) se invoca con la sugerencia de consulta `describeMode` de la siguiente manera:

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

En la semántica de `SCBD`, `DESCRIBE` devuelve la descripción limitada concisa simétrica del recurso (tal como la define el W3C en [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 .
```

La ventaja de CBD y SCBD con respecto a los modos `ForwardOneStep` y `SymmetricOneStep` es que los nodos vacíos siempre se expanden para incluir su representación. Esto puede ser una ventaja importante, ya que no se puede consultar un nodo en blanco con SPARQL. Además, los modos CBD y SCBD también consideran las reificaciones.

Tenga en cuenta que la sugerencia de consulta `describeMode` también puede formar parte de una 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>
}
```

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

La sugerencia de consulta de SPARQL `hint:describeIterationLimit` proporciona una restricción **opcional** con respecto al número máximo de expansiones iterativas que se deben realizar para los algoritmos DESCRIBE iterativos, como CBD y SCBD.

Los límites de DESCRIBE están ANDed juntos. Por lo tanto, si se especifican tanto el límite de iteración como el límite de las instrucciones, ambos límites deben cumplirse antes de que se interrumpa la consulta DESCRIBE.

El valor predeterminado de este valor es 5. Puede establecerlo en CERO (0) para no especificar ningún límite en el número de expansiones iterativas.

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

La sugerencia de consulta `hint:describeStatementLimit` de SPARQL proporciona una restricción **opcional** con respecto al número máximo de instrucciones que pueden estar presentes en una respuesta a una consulta DESCRIBE. Solo se aplica a los algoritmos DESCRIBE iterativos, como CBD y SCBD.

Los límites de DESCRIBE están ANDed juntos. Por lo tanto, si se especifican tanto el límite de iteración como el límite de las instrucciones, ambos límites deben cumplirse antes de que se interrumpa la consulta DESCRIBE.

El valor predeterminado de este valor es 5000. Puede establecerlo en CERO (0) para no especificar ningún límite en el número de instrucciones devueltas.