

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.

# Acceso a datos de gráficos en Amazon Neptune
<a name="get-started-access-graph"></a>

Puede interactuar con un clúster de base de datos de Amazon Neptune después de crear una conexión. Esto implica cargar datos, ejecutar consultas y realizar otras operaciones. La mayoría de los usuarios utilizan las herramientas de línea de comandos `curl` o `awscurl` para comunicarse con el clúster de base de datos Neptune de forma eficaz. Estas herramientas permiten enviar solicitudes, cargar datos y recuperar resultados de la base de datos de gráficos, lo que facilita la administración de datos y las capacidades de consulta sin interrupciones. 

## Configuración de `curl` para comunicarse con el punto de conexión de Neptune
<a name="get-started-access-graph-curl"></a>

Tal y como se muestra en muchos de los ejemplos de esta documentación, la herramienta de línea de comandos [curl](https://curl.haxx.se/) es una opción muy útil para comunicarse con el punto de conexión de Neptune. Para obtener más información sobre la herramienta, consulte la [página de gestión de curl](https://curl.haxx.se/docs/manpage.html) y el libro *[Everything curl](https://ec.haxx.se/)*.

Para conectarse mediante HTTPS (tal y como se recomienda y como Neptune requiere en la mayoría de las regiones), `curl` debe tener acceso a los certificados adecuados. Para saber cómo obtener dichos certificados y cómo formatearlos correctamente en un almacén de certificados de autoridad de certificación (CA) que `curl` pueda utilizar, consulte [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html) en la documentación de `curl`.

A continuación, puede especificar la ubicación de este almacén de certificados de CA mediante la variable de entorno `CURL_CA_BUNDLE`. En Windows, `curl` lo busca de forma automática en un archivo llamado `curl-ca-bundle.crt`. Primero busca en el mismo directorio que `curl.exe` y después en el resto de sitios de la ruta. Para obtener más información, consulte [Certificados SSL](https://curl.haxx.se/docs/sslcerts.html).

Siempre que `curl` pueda localizar los certificados adecuados, gestionará las conexiones HTTPS de la misma forma que las conexiones HTTP, sin parámetros adicionales. Los ejemplos de esta documentación se basan en ese escenario.

## Uso de un lenguaje de consulta para acceder a datos de gráficos en su clúster de base de datos de Neptune
<a name="get-started-access-graph-query-langs"></a>

Una vez conectado, puede usar los lenguajes de consulta Gremlin y openCypher para crear y consultar un gráfico de propiedades, o el lenguaje de consulta SPARQL para crear y consultar un gráfico que contenga datos RDF.

**Lenguajes de consulta de gráficos compatibles con Neptune**
+ [Gremlin](access-graph-gremlin.md) es un lenguaje de recorrido de gráficos para gráficos de propiedades. En Gremlin, una consulta es un recorrido compuesto por pasos discretos, cada uno de los cuales sigue un borde hasta un nodo. Consulte la documentación de Gremlin en [Apache TinkerPop](https://tinkerpop.apache.org/docs/current/reference/) para obtener más información.

  La implementación de Gremlin en Neptune tiene algunas diferencias con respecto a otras implementaciones, especialmente cuando se utiliza Gremlin-Groovy (consultas de Gremlin enviadas como texto serializado). Para obtener más información, consulte [Conformidad con los estándares de Gremlin en Amazon Neptune](access-graph-gremlin-differences.md).
+ [openCypher](access-graph-opencypher.md) es un lenguaje de consulta declarativo para gráficos de propiedades que desarrolló originalmente Neo4j, luego de código abierto en 2015, y que contribuyó al proyecto [openCypher](http://www.opencypher.org/) en virtud de una licencia de código abierto Apache 2. Su sintaxis está documentada en [Cypher Query Language Reference, versión 9](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf).
+ [SPARQL](access-graph-sparql.md) es un lenguaje de consulta declarativo para datos [RDF](https://www.w3.org/2001/sw/wiki/RDF), que se basa en la coincidencia de patrones gráficos que se ajusta al estándar World Wide Web Consortium (W3C) y se describe en [SPARQL 1.1 Overview](https://www.w3.org/TR/sparql11-overview/) y en la especificación de [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/).

**nota**  
Puede acceder a los datos de gráficos de propiedades de Neptune mediante Gremlin y openCypher, pero no con SPARQL. Del mismo modo, solo puede acceder a los datos RDF mediante SPARQL, no con Gremlin ni openCypher.

# Uso de Gremlin para acceder a datos de gráficos en Amazon Neptune
<a name="get-started-graph-gremlin"></a>

Puede usar la consola Gremlin para experimentar con TinkerPop gráficos y consultas en un entorno REPL (bucle). read-eval-print 

En el siguiente tutorial, se describe el uso de la consola de Gremlin para añadir vértices, bordes, propiedades y mucho más a un gráfico de Neptune, y se destacan algunas diferencias en la implementación de Gremlin específica de Neptune.

**nota**  
Este ejemplo asume que ha completado lo siguiente:  
Se ha conectado a una instancia de Amazon EC2 mediante SSH.
Ha creado un clúster de Neptune tal y como se detalla en [Creación de un clúster de Neptune](get-started-create-cluster.md).
Ha instalado la consola de Gremlin tal y como se describe en[Instalación de la consola de Gremlin](access-graph-gremlin-console.md).

**Uso de la consola de Gremlin**

1. Cambie los directorios en la carpeta donde se descomprimen los archivos de la consola de Gremlin.

   ```
   cd apache-tinkerpop-gremlin-console-3.7.2
   ```

1. Escriba el comando siguiente para ejecutar la consola de Gremlin.

   ```
   bin/gremlin.sh
   ```

   Debería ver los siguientes datos de salida:

   ```
            \,,,/
            (o o)
   -----oOOo-(3)-oOOo-----
   plugin activated: tinkerpop.server
   plugin activated: tinkerpop.utilities
   plugin activated: tinkerpop.tinkergraph
   gremlin>
   ```

   Ahora se encuentra en `gremlin>`. Introduzca los pasos restantes en este punto.

1. En el símbolo del sistema `gremlin>`, escriba lo siguiente para conectarse a la instancia de base de datos de Neptune.

   ```
   :remote connect tinkerpop.server conf/neptune-remote.yaml
   ```

1. En la entrada `gremlin>`, escriba lo siguiente para cambiar al modo remoto. Esto envía todas las consultas de Gremlin a la conexión remota.

   ```
   :remote console
   ```

1. **Añada un vértice con una etiqueta y una propiedad.**

   ```
   g.addV('person').property('name', 'justin')
   ```

   Al vértice se le asigna un ID `string` que contiene un GUID. Todos los vértices IDs son cadenas en Neptune.

1. **Añada un vértice con ID personalizado.**

   ```
   g.addV('person').property(id, '1').property('name', 'martin')
   ```

   La propiedad `id` no se indica entre comillas. Se trata de una palabra clave para el ID del vértice. El ID del vértice indicado es una cadena con el número `1`.

   Los nombres de propiedades normales deben incluirse entre comillas.

1. **Cambie la propiedad o añada una si no existe.**

   ```
   g.V('1').property(single, 'name', 'marko')
   ```

   En este ejemplo, se cambia la propiedad `name` para el vértice del paso anterior. Esto elimina todos los valores existentes de la propiedad `name`.

   Si no especificó `single`, en su lugar añade el valor a la propiedad `name` si aún no lo ha hecho. 

1. **Añada la propiedad, pero anéxela si ya tiene un valor.**

   ```
   g.V('1').property('age', 29)
   ```

   Neptune utiliza la cardinalidad en conjuntos como acción predeterminada.

   Este comando añade la propiedad `age` con el valor `29`, pero no reemplaza los valores existentes. 

   Si la propiedad `age` ya tenía un valor, este comando anexa `29` a la propiedad. Por ejemplo, si la propiedad `age` era `27`, el nuevo valor será `[ 27, 29 ]`.

1. **Añada varios vértices.**

   ```
   g.addV('person').property(id, '2').property('name', 'vadas').property('age', 27).iterate()
   g.addV('software').property(id, '3').property('name', 'lop').property('lang', 'java').iterate()
   g.addV('person').property(id, '4').property('name', 'josh').property('age', 32).iterate()
   g.addV('software').property(id, '5').property('name', 'ripple').property('lang', 'java').iterate()
   g.addV('person').property(id, '6').property('name', 'peter').property('age', 35)
   ```

   Puede enviar varias instrucciones a Neptune al mismo tiempo.

   Las instrucciones se pueden separar mediante una nueva línea (`'\n'`), espacios (`' '`), punto y coma (`'; '`) o nada (por ejemplo: `g.addV(‘person’).iterate()g.V()` es válido). 
**nota**  
La consola de Gremlin envía un comando independiente en cada nueva línea (`'\n'`), por lo que cada uno es una transacción independiente en ese caso. Este ejemplo tiene todos los comandos en líneas separadas para facilitar su lectura. Elimine los caracteres de nueva línea (`'\n'`) para enviarlo como un único comando a través de la consola de Gremlin.

   Todas las instrucciones a excepción de la última deben finalizar en un paso de terminación, como `.next()` o `.iterate()`, o no se ejecutarán. La consola de Gremlin no requiere estos pasos de terminación. Use `.iterate` siempre que no necesite que los resultados se serialicen.

   Todas las instrucciones que se envían juntas se incluyen en una única transacción y se realizan correctamente o producen un error de forma conjunta.

1. **Añada bordes.**

   ```
   g.V('1').addE('knows').to(__.V('2')).property('weight', 0.5).iterate()
   g.addE('knows').from(__.V('1')).to(__.V('4')).property('weight', 1.0)
   ```

   A continuación, se muestran dos formas distintas de añadir un borde.

1. **Añada el resto del gráfico moderno.**

   ```
   g.V('1').addE('created').to(__.V('3')).property('weight', 0.4).iterate()
   g.V('4').addE('created').to(__.V('5')).property('weight', 1.0).iterate()
   g.V('4').addE('knows').to(__.V('3')).property('weight', 0.4).iterate()
   g.V('6').addE('created').to(__.V('3')).property('weight', 0.2)
   ```

1. **Elimine un vértice.**

   ```
   g.V().has('name', 'justin').drop()
   ```

   Elimina el vértice con el valor de la propiedad `name` igual a `justin`.
**importante**  
*Pare aquí y tendrá el gráfico completo de Apache TinkerPop Modern. Los ejemplos de la [sección transversal](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps) de la TinkerPop documentación utilizan el gráfico moderno.*

1. **Ejecute un recorrido.**

   ```
   g.V().hasLabel('person')
   ```

   Devuelve todos los vértices `person`.

1. **Ejecute un recorrido con valores (valueMap()).**

   ```
   g.V().has('name', 'marko').out('knows').valueMap()
   ```

   Devuelve pares clave-valor para todos los vértices que `marko` "conoce".

1. **Especifique varias etiquetas.**

   ```
   g.addV("Label1::Label2::Label3") 
   ```

   Neptune admite varias etiquetas para un vértice. Al crear una etiqueta, puede especificar varias si las separa mediante `::`.

   Este ejemplo añade un vértice con tres etiquetas distintas. 

   El paso `hasLabel` busca coincidencias de este vértice con cualquiera de esas tres etiquetas: `hasLabel("Label1")` `hasLabel("Label2")` y `hasLabel("Label3")`. 

   El delimitador `::` está reservado solo para este uso. 

   No se pueden especificar varias etiquetas en el paso `hasLabel`. Por ejemplo, `hasLabel("Label1::Label2")` no tiene ninguna coincidencia. 

1. **Especifique la hora o la fecha**.

   ```
   g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))
   ```

   Neptune no admite la clase Date de Java. En su lugar, utilice la `datetime()` función. `datetime()`acepta una `datetime` cadena que ISO8061 cumpla con los requisitos.

   Admite los siguientes formatos: `YYYY-MM-DD, YYYY-MM-DDTHH:mm`, `YYYY-MM-DDTHH:mm:SS` y `YYYY-MM-DDTHH:mm:SSZ`.

1. **Elimine vértices, propiedades o bordes.**

   ```
   g.V().hasLabel('person').properties('age').drop().iterate()
   g.V('1').drop().iterate()
   g.V().outE().hasLabel('created').drop()
   ```

   Estos son algunos ejemplos.
**nota**  
 El paso `.next()` no funciona con `.drop()`. En su lugar, use `.iterate()`.

1. Cuando haya terminado, escriba lo siguiente para salir de la consola de Gremlin.

   ```
   :exit
   ```

**nota**  
Utilice punto y coma (`;`) o un carácter de nueva línea (`\n`) para separar las instrucciones.   
Cada recorrido anterior al final debe terminar en `iterate()` para ejecutarse. Solo se devuelven los datos del recorrido final.

# Uso de openCypher para acceder a datos de gráfico en Amazon Neptune
<a name="get-started-graph-opencypher"></a>

[Para empezar a utilizar OpenCypher[openCypher](access-graph-opencypher.md), consulte o utilice los cuadernos OpenCypher del repositorio de cuadernos gráficos de Neptune. GitHub ](https://github.com/aws/graph-notebook/tree/main/src/graph_notebook/notebooks)

# Uso de SPARQL para acceder a datos de gráficos en Amazon Neptune
<a name="get-started-graph-sparql"></a>

SPARQL es un lenguaje de consulta para el marco de descripción de recursos (RDF), que es un formato de datos de gráficos diseñado para la web. Amazon Neptune es compatible con SPARQL 1.1. Esto significa que puede conectarse a una instancia de base de datos de Neptune y consultar el gráfico utilizando el lenguaje de consulta descrito en la especificación de [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/).

 Una consulta en SPARQL se compone de una cláusula `SELECT` para especificar las variables que se devolverán y una cláusula `WHERE` para especificar los datos del gráfico que deben corresponderse. Si no está familiarizado con las consultas SPARQL, consulte la sección sobre [escritura de consultas sencillas](https://www.w3.org/TR/sparql11-query/#WritingSimpleQueries) en la documentación del [lenguaje de consulta SPARQL 1.1](https://www.w3.org/TR/sparql11-query/). 

El punto de conexión HTTP para las consultas de SPARQL a una instancia de base de datos de Neptune es `https://your-neptune-endpoint:port/sparql`.

**Para conectarse a SPARQL**

1. Puede obtener el punto final de SPARQL para su clúster de Neptune desde **SparqlEndpoint**el elemento de la sección Salidas de ** CloudFormation la** pila. 

1. Escriba lo siguiente para enviar un comando **`UPDATE`** de SPARQL a través de HTTP `POST` y el comando **curl**.

   ```
   curl -X POST --data-binary 'update=INSERT DATA { <https://test.com/s> <https://test.com/p> <https://test.com/o> . }' https://your-neptune-endpoint:port/sparql
   ```

   El ejemplo anterior inserta el siguiente triple en el gráfico predeterminado de SPARQL: `<https://test.com/s> <https://test.com/p> <https://test.com/o>`

1. Escriba lo siguiente para enviar un comando **`QUERY`** de SPARQL a través de HTTP `POST` y el comando **curl**.

   ```
   curl -X POST --data-binary 'query=select ?s ?p ?o where {?s ?p ?o} limit 10' https://your-neptune-endpoint:port/sparql
   ```

   El ejemplo anterior devuelve hasta 10 de los triples (subject-predicate-object) del gráfico mediante la `?s ?p ?o` consulta con un límite de 10. Para otras consultas, sustitúyalo por otra consulta SPARQL.
**nota**  
El tipo MIME predeterminado de una respuesta es `application/sparql-results+json` para las consultas `SELECT` y `ASK`.  
El tipo MIME predeterminado de una respuesta es `application/n-quads` para las consultas `CONSTRUCT` y `DESCRIBE`.  
Para ver la lista de tipos MIME disponibles, consulte [API HTTP de SPARQL](sparql-api-reference.md).