

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Accès aux données graphiques dans Amazon Neptune
<a name="get-started-access-graph"></a>

Vous pouvez interagir avec un cluster de base de données Amazon Neptune après avoir créé une connexion. Cela implique de charger des données, d'exécuter des requêtes et d'effectuer d'autres opérations. La plupart des utilisateurs utilisent les outils de `awscurl` ligne de commande `curl` or pour communiquer efficacement avec le cluster de base de données Neptune. Ces outils vous permettent d'envoyer des demandes, de charger des données et de récupérer des résultats à partir de la base de données de graphes, ce qui facilite la gestion fluide des données et les fonctionnalités de requête. 

## Configuration de `curl` pour communiquer avec votre point de terminaison Neptune
<a name="get-started-access-graph-curl"></a>

Comme illustré dans de nombreux exemples de cette documentation, l'outil de ligne de commande [curl](https://curl.haxx.se/) est une option pratique pour communiquer avec votre point de terminaison Neptune. Pour plus d’informations sur l’outil, consultez la [page principale de curl](https://curl.haxx.se/docs/manpage.html) et le livre *[Everything curl (Tout sur curl)](https://ec.haxx.se/)*.

Pour vous connecter à l'aide de HTTPS (comme nous le recommandons et comme Neptune l'exige dans la plupart des régions), `curl` a besoin d'un accès aux certificats appropriés. Pour savoir comment obtenir ces certificats et comment les formater correctement dans un magasin de certificats CA pour être utilisé par `curl`, consultez [SSL Certificate Verification (Vérification des certificats SSL)](https://curl.haxx.se/docs/sslcerts.html) dans la documentation `curl`.

Vous pouvez ensuite spécifier l'emplacement de ce magasin de certificats CA à l'aide de la variable d'environnement `CURL_CA_BUNDLE`. Sous Windows, `curl` le recherche automatiquement dans un fichier nommé `curl-ca-bundle.crt`. Il examine d'abord dans le même répertoire que `curl.exe`, puis ailleurs sur le chemin. Pour plus d’informations, consultez [SSL Certificate Verification (Vérification des certificats SSL)](https://curl.haxx.se/docs/sslcerts.html).

Dans la mesure où `curl` peut localiser les certificats appropriés, il gère les connexions HTTPS comme des connexions HTTP, sans paramètres supplémentaires. Les exemples de cette documentation sont basés sur ce scénario.

## Utilisation d'un langage de requête pour accéder aux données de graphe dans le cluster de bases de données Neptune
<a name="get-started-access-graph-query-langs"></a>

Une fois connecté, vous pouvez utiliser les langages de requête Gremlin et openCypher pour créer et interroger un graphe de propriétés, ou le langage de requête SPARQL pour créer et interroger un graphe contenant des données RDF.

**Langages de requête orientés graphe pris en charge par Neptune**
+ [Gremlin](access-graph-gremlin.md) est un langage de parcours de graphe pour les graphes de propriétés. Dans Gremlin, une requête est une traversée composée d'étapes distinctes, chacune suivant une arête jusqu'à un nœud. Pour plus d'informations, consultez la documentation de Gremlin sur [Apache TinkerPop](https://tinkerpop.apache.org/docs/current/reference/).

  L'implémentation Neptune de Gremlin présente quelques différences par rapport aux autres implémentations, surtout lorsque vous utilisez Gremlin-Groovy (requêtes Gremlin envoyées sous la forme d'un texte sérialisé). Pour de plus amples informations, veuillez consulter [Conformité d'Amazon Neptune avec les normes Gremlin](access-graph-gremlin-differences.md).
+ [openCypher](access-graph-opencypher.md) est un langage de requête déclaratif pour les graphes de propriétés initialement développé par Neo4j, puis rendu open source en 2015. Il a contribué au projet [openCypher](http://www.opencypher.org/) sous une licence open source Apache 2. Sa syntaxe est documentée dans [Cypher Query Language Reference, Version 9](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf) (Référence du langage de requête Cypher, version 9).
+ [SPARQL](access-graph-sparql.md) est un langage de requête déclaratif pour les données [RDF](https://www.w3.org/2001/sw/wiki/RDF). Il repose sur la mise en correspondance de modèles de graphe, qui est normalisée par le World Wide Web Consortium (W3C) et décrite dans la [présentation de SPARQL 1.1](https://www.w3.org/TR/sparql11-overview/) ainsi que dans la spécification [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/).

**Note**  
Vous pouvez accéder aux données du graphe de propriétés dans Neptune à la fois à l'aide de Gremlin et d'openCypher, mais pas avec SPARQL. De même, vous ne pouvez accéder aux données RDF qu'à l'aide de SPARQL, et non de Gremlin ou d'openCypher.

# Utilisation de Gkremlin pour accéder aux données graphiques dans Amazon Neptune
<a name="get-started-graph-gremlin"></a>

Vous pouvez utiliser la console G705 pour expérimenter avec TinkerPop des graphes et des requêtes dans un environnement REPL (read-eval-print boucle). 

Le didacticiel suivant vous explique comment utiliser la console Gremlin pour ajouter des sommets, des arêtes, des propriétés et autres dans un graphe Neptune. Il met en évidence certaines des différences de l'implémentation Gremlin spécifique à Neptune.

**Note**  
Cet exemple suppose que vous respectez les prérequis suivants :  
Vous vous êtes connecté via SSH à une instance Amazon EC2.
Vous avez créé un cluster Neptune comme décrit dans [Créer un cluster Neptune](get-started-create-cluster.md).
Vous avez installé la console Gremlin, comme décrit dans [Installation de la console Gremlin](access-graph-gremlin-console.md).

**Utilisation de la console Gremlin**

1. Modifiez les répertoires dans le dossier où les fichiers de la console Gremlin sont décompressés.

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

1. Saisissez la commande suivante pour exécuter la console Gremlin.

   ```
   bin/gremlin.sh
   ```

   Vous devriez voir la sortie suivante :

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

   Vous êtes maintenant à l'invite `gremlin>`. Vous entrez les étapes restantes à cette invite.

1. À l'invite de commande `gremlin>`, saisissez le texte suivant pour vous connecter à l'instance de base de données Neptune.

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

1. À l'invite `gremlin>`, entrez ce qui suit pour passer en mode distant. Toutes les requêtes Gremlin sont alors envoyées à la connexion distante.

   ```
   :remote console
   ```

1. **Ajoutez un sommet avec une étiquette et une propriété.**

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

   Un ID `string` contenant un GUID est affecté au sommet. Tous les sommets IDs sont des chaînes dans Neptune.

1. **Ajoutez un sommet avec ID personnalisé.**

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

   La propriété `id` n'est pas indiquée entre guillemets. Il s'agit d'un mot-clé pour l'ID du sommet. Ici, l'ID du sommet est une chaîne contenant le nombre `1`.

   Les noms de propriété normaux doivent être indiqués entre guillemets.

1. **Modifiez une propriété ou ajoutez une propriété si elle n'existe pas.**

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

   Ici, vous modifiez la propriété `name` du sommet de l'étape précédente. Cela supprime toutes les valeurs existantes de la propriété `name`.

   Si vous n'aviez pas spécifié `single`, la commande ajouterait plutôt la valeur à la propriété `name` si elle ne la possédait pas déjà. 

1. **Ajouter une propriété, mais ajouter la valeur de cette propriété si elle possède déjà une valeur **

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

   Neptune utilise la cardinalité définie comme action par défaut.

   Cette commande ajoute la propriété `age` avec la valeur `29`, mais ne remplace aucune des valeurs existantes. 

   Si la propriété `age` avait déjà une valeur, cette commande ajouterait `29` à la propriété. Par exemple, si la propriété `age` était `27`, la nouvelle valeur serait `[ 27, 29 ]`.

1. **Ajoutez plusieurs sommets.**

   ```
   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)
   ```

   Vous pouvez envoyer plusieurs instructions simultanément à Neptune.

   Les instructions peuvent être séparés par un caractère de saut de ligne (`'\n'`), un espace (`' '`), un point-virgule (`'; '`) ou rien (par exemple, `g.addV(‘person’).iterate()g.V()` est valide). 
**Note**  
La console Gremlin envoie une commande distincte à chaque caractère de saut de ligne (`'\n'`). Par conséquent, il s'agira d'opérations distinctes dans ce cas. Dans cet exemple, toutes les commandes sont sur des lignes distinctes pour faciliter la lecture. Supprimez les caractères de saut de ligne (`'\n'`) pour l'envoyer comme une commande unique via la console Gremlin.

   Toutes les instructions autres que la dernière doivent se terminer par une étape de fin, comme `.next()` ou `.iterate()`, sinon, elles ne s'exécuteront pas. La console Gremlin ne nécessite pas ces étapes de fin. Utilisez `.iterate` chaque fois que vous n'avez pas besoin de sérialiser les résultats.

   Toutes les instructions qui sont envoyées ensemble sont incluses dans une unique transaction, et aboutissent ou échouent ensemble.

1. **Ajoutez des arêtes.**

   ```
   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)
   ```

   Il existe deux manières différentes d'ajouter un arc.

1. **Ajoutez le reste du graphe Modern.**

   ```
   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. **Supprimez un sommet.**

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

   Supprime le sommet dont la propriété `name` a la valeur `justin`.
**Important**  
*Arrêtez-vous ici, et vous avez le graphe complet d'Apache TinkerPop Modern. Les exemples présentés dans la [section Traversal](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps) de la TinkerPop documentation utilisent le graphe moderne.*

1. **Exécutez un parcours.**

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

   Renvoie tous les sommets `person`.

1. **Exécutez un parcours avec des valeurs (valueMap()).**

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

   Renvoie les paires clé-valeur de tous les sommets que `marko` « connaît ».

1. **Spécifiez plusieurs étiquettes.**

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

   Neptune prend en charge plusieurs étiquettes pour un sommet. Lorsque vous créez une étiquette, vous pouvez spécifier plusieurs étiquettes en les séparant par `::`.

   Cet exemple ajoute un sommet avec trois étiquettes différentes. 

   L'étape `hasLabel` associe ce sommet à l'une de ces trois étiquettes : `hasLabel("Label1")` `hasLabel("Label2")` et `hasLabel("Label3")`. 

   Le délimiteur `::` est réservé à cet usage uniquement. 

   Vous ne pouvez pas spécifier plusieurs étiquettes dans l'étape `hasLabel`. Par exemple, `hasLabel("Label1::Label2")` ne correspond à rien. 

1. **Specify Time/date (Spécifier l’heure/la date)**.

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

   Neptune ne prend pas en charge la date Java. Utilisez plutôt la `datetime()` fonction. `datetime()`accepte une `datetime` chaîne ISO8061 conforme.

   Elle prend en charge les formats suivants : `YYYY-MM-DD, YYYY-MM-DDTHH:mm`, `YYYY-MM-DDTHH:mm:SS` et `YYYY-MM-DDTHH:mm:SSZ`.

1. **Supprimez des sommets, des propriétés ou des arêtes.**

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

   Voici quelques exemples de suppression.
**Note**  
 L'étape `.next()` ne fonctionne pas avec `.drop()`. Utilisez `.iterate()` à la place.

1. Lorsque vous avez terminé, saisissez la commande suivante pour quitter la console Gremlin.

   ```
   :exit
   ```

**Note**  
Utilisez un point-virgule (`;`) ou un caractère de saut de ligne (`\n`) pour séparer chaque instruction.   
Chaque traversée précédant la traversée finale doit se terminer par l'exécution de `iterate()`. Seules les données de la traversée finale sont renvoyées.

# Utilisation d'OpenCypher pour accéder aux données graphiques dans Amazon Neptune
<a name="get-started-graph-opencypher"></a>

[Pour commencer à utiliser OpenCypher[openCypher](access-graph-opencypher.md), consultez ou utilisez les blocs-notes OpenCypher du référentiel Neptune graph-notebook. GitHub ](https://github.com/aws/graph-notebook/tree/main/src/graph_notebook/notebooks)

# Utilisation de SPARQL pour accéder aux données graphiques dans Amazon Neptune
<a name="get-started-graph-sparql"></a>

SPARQL est un langage de requête pour RDF (Resource Description Framework), qui est un format de données de graphe conçu pour le web. Amazon Neptune est compatible avec SPARQL 1.1. En d'autres termes, vous pouvez vous connecter à une instance de base de données Neptune et interroger le graphe à l'aide du langage de requête décrit dans la spécification [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/).

 Une requête dans SPARQL se compose d'une clause `SELECT` pour spécifier les variables à renvoyer et une clause `WHERE` clause pour spécifier les données de correspondance du graphe. Si vous ne connaissez pas les requêtes SPARQL, consultez [Writing Simple Queries](https://www.w3.org/TR/sparql11-query/#WritingSimpleQueries) dans la section [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/). 

Le point de terminaison HTTP pour les requêtes SPARQL dans une instance de base de données Neptune est `https://your-neptune-endpoint:port/sparql`.

**Pour vous connecter à SPARQL**

1. Vous pouvez obtenir le point de terminaison SPARQL de votre cluster Neptune à partir de **SparqlEndpoint**l'élément de la section Sorties de ** CloudFormation la** pile. 

1. Saisissez ce qui suit pour envoyer une requête SPARQL **`UPDATE`** à l'aide du protocole HTTP `POST` et de la commande **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
   ```

   L'exemple précédent insère le triplet suivant dans le graphe SPARQL par défaut : `<https://test.com/s> <https://test.com/p> <https://test.com/o>`

1. Saisissez ce qui suit pour envoyer une requête SPARQL **`QUERY`** à l'aide du protocole HTTP `POST` et de la commande **curl**.

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

   L'exemple précédent renvoie jusqu'à 10 des triples (subject-predicate-object) du graphe en utilisant la `?s ?p ?o` requête avec une limite de 10. Pour interroger autre chose, remplacez la requête par une autre requête SPARQL.
**Note**  
Le type MIME par défaut d'une réponse est `application/sparql-results+json` pour les requêtes `SELECT` et `ASK`.  
Le type MIME par défaut d'une réponse est `application/n-quads` pour les requêtes `CONSTRUCT` et `DESCRIBE`.  
Pour obtenir la liste des types MIME disponibles, consultez [API HTTP SPARQL](sparql-api-reference.md).