

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Neptune でのグラフデータへのアクセス
<a name="get-started-access-graph"></a>

接続の作成後に Amazon Neptune DB クラスターとやり取りできます。これには、データのロード、クエリの実行、およびその他のオペレーションの実行が含まれます。ほとんどのユーザーは、`curl` または `awscurl` のコマンドラインツールを使用して Neptune DB クラスターと効率的に通信します。これらのツールを使用すると、グラフデータベースからリクエストの送信、データのロード、結果の取得が可能になり、シームレスなデータ管理を行いクエリ機能を利用することが容易になります。

## Neptune エンドポイントと通信するために `curl` をセットアップする
<a name="get-started-access-graph-curl"></a>

このドキュメントの多くの例に示されるように、[curl](https://curl.haxx.se/) コマンドラインツールは Neptune エンドポイントとの通信に役立つオプションです。このツールの詳細については、「[curl man page](https://curl.haxx.se/docs/manpage.html)」およびブック「*[Everything curl](https://ec.haxx.se/)*」を参照してください。

HTTPS を使用して接続するには、`curl` にアクセスするための適切な証明書が必要となります (これは推奨事項ですが、ほとんどのリージョンでは Neptune での必須事項です)。これらの証明書を取得する方法と、`curl` が使える証明書を認証局 (CA) 証明書ストアに適切にフォーマットする方法については、`curl` ドキュメント内の[SSL 証明書の検証](https://curl.haxx.se/docs/sslcerts.html) を参照してください。

次に、`CURL_CA_BUNDLE` 環境変数を使用してこの CA 証明書ストアの場所を指定できます。Windows では、`curl` は自動的に `curl-ca-bundle.crt` という名前のファイルを検索します。まず `curl.exe` と同じディレクトリで curl.exe を検索し、次にこのパスの他の場所を検索します。詳細については、「[SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html)」を参照してください。

`curl` が適切な証明書を見つけられる限り、これによって、別のパラメータを必要とすることなく、HTTP 接続のように HTTPS 接続が処理されます。このドキュメントの例はこのシナリオに基づいています。

## クエリ言語を使用して Neptune DB クラスター内のグラフデータにアクセスする
<a name="get-started-access-graph-query-langs"></a>

接続したら、Gremlin および openCypher クエリ言語を使用して、プロパティグラフを作成してクエリしたり、SPARQL クエリ言語を使用して RDF データを含むグラフを作成してクエリしたりできます。

**Neptune がサポートするグラフクエリ言語**
+ [Gremlin](access-graph-gremlin.md) は、プロパティグラフのグラフトラバーサル言語です。Gremlin のクエリは個別のステップで構成されたトラバーサルで、各ステップはエッジからノードに従います。詳細については、[Apache TinkerPop](https://tinkerpop.apache.org/docs/current/reference/) の Gremlin ドキュメントを参照してください。

  Gremlin の Neptune 実装は、特に Gremlin-Groovy (シリアル化されたテキストとして送信される Gremlin クエリ) を使用している場合、他の実装とはいくつかの相違点があります。詳細については、「[Amazon Neptune の Gremlin 標準への準拠](access-graph-gremlin-differences.md)」を参照してください。
+ [openCypher](access-graph-opencypher.md) は、プロパティグラフの宣言型クエリ言語です。当初は Neo4j が 開発し、その後 2015 年にオープンソース化され、Apache 2 オープンソースライセンスの下で [openCypher](http://www.opencypher.org/) プロジェクトで活用されました。構文は [Cypher クエリ言語リファレンス、バージョン 9](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf) で説明されています。
+ [SPARQL](access-graph-sparql.md) は、[RDF](https://www.w3.org/2001/sw/wiki/RDF) データ用の宣言型クエリ言語です。World Wide Web Consortium (W3C) によって標準化され、「[SPARQL 1.1 概要](https://www.w3.org/TR/sparql11-overview/)」と [SPARQL 1.1 クエリ言語](https://www.w3.org/TR/sparql11-query/)」仕様で記述されているグラフパターンマッチングに基づいています。

**注記**  
Neptune のプロパティグラフデータには Gremlin と openCypher の両方を使用してアクセスできますが、SPARQL は使用できません。同様に、RDF データには SPARQL を使用してのみアクセスでき、Gremlin や openCypher ではアクセスできません。

# Gremlin を使用して Amazon Neptune のグラフデータにアクセスする
<a name="get-started-graph-gremlin"></a>

Gremlin コンソールを使用して、REPL (read-eval-print loop) 環境で TinkerPop グラフおよびクエリを試してみることができます。

以下のチュートリアルでは、Gremlin コンソールを使用して頂点、エッジ、プロパティなどを Neptune グラフに追加する方法を取り上げ、Neptune 固有の Gremlin 実装のいくつかの違いに着目します。

**注記**  
この例では、次の操作が完了していることを前提としています。  
SSH を使用して Amazon EC2 インスタンスに接続する。
[Neptune クラスターを作成する](get-started-create-cluster.md) で説明されているように Neptune クラスターを作成する。
「[Gremlin コンソールのインストール](access-graph-gremlin-console.md)」で説明されているように Gremlin コンソールをインストールする。

**Gremlin コンソールの使用**

1. ディレクトリを Gremlin コンソールファイルが解凍されたフォルダに変更します。

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

1. 以下のコマンドを入力して、Gremlin コンソールを実行します。

   ```
   bin/gremlin.sh
   ```

   以下の出力が表示されます。

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

   `gremlin>` プロンプトが表示されます。このプロンプトで残りのステップを入力します。

1. `gremlin>` プロンプトで、次のように入力して Neptune DB インスタンスに接続します。

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

1. `gremlin>` プロンプトで、次のように入力してリモートモードに切り替えます。これにより、すべての Gremlin クエリがリモート接続に送信されます。

   ```
   :remote console
   ```

1. **頂点を追加して、ラベルとプロパティを割り当てます。**

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

   頂点には、GUID を含む `string` ID が割り当てられます。Neptune ではすべての頂点 ID は文字列です。

1. **頂点を追加して、カスタム ID を割り当てます。**

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

   `id` プロパティは引用符で囲みません。これは、頂点 ID のキーワードです。ここでの頂点 ID は、数字 `1` を含む文字列です。

   通常のプロパティ名は引用符で囲む必要があります。

1. **プロパティを変更するか、プロパティを追加します (まだ追加してない場合)。**

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

   ここでは、前のステップからの頂点の `name` プロパティを変更します。これにより、`name` プロパティの既存の値はすべて削除されます。

   `single` を指定しなかった場合は、代わりに `name` プロパティに値が付加されます (まだ付加されていない場合)。

1. **プロパティを追加しますが、プロパティに既に値がある場合は値を付加します。**

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

   Neptuneはデフォルトのアクションとしてカーディナリティ (cardinality) を使用します。

   このコマンドは `age` プロパティを追加して値 `29` を指定しますが、既存の値は置き換えません。

   `age` プロパティに既に値がある場合、このコマンドはプロパティに `29` を付加します。たとえば、`age` プロパティの値が `27` である場合、新しい値は `[ 27, 29 ]` となります。

1. **複数の頂点を追加します。**

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

   Neptune に複数のステートメントを同時に送信できます。

   ステートメントは改行 (`'\n'`)、スペース (`' '`)、またはセミコロン (`'; '`) で区切ることができます。区切り記号はなしでもかまいません (たとえば `g.addV(‘person’).iterate()g.V()` は有効です)。
**注記**  
Gremlin コンソールは改行 (`'\n'`) ごとに個別のコマンドを送信するため、その場合は各コマンドが個別のトランザクションになります。この例では、すべてのコマンドが読みやすくなるように個別の行にあります。Gremlin コンソールから 1 つのコマンドとして送信するには、改行 (`'\n'`) 文字を削除してください。

   最後のステートメント以外のステートメントは `.next()` や `.iterate()` などの終了ステップで終わる必要があります。そうしないとステートメントは実行されません。Gremlin コンソールでは、これらの終了ステップは不要です。結果をシリアル化する必要がないときはいつでも `.iterate` を使用します。

   一緒に送信されたすべてのステートメントは、1 つのトランザクションに含まれ、まとめて成功または失敗となります。

1. **エッジを追加します。**

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

   ここでは、2 つの異なる方法でエッジを追加しています。

1. **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. **頂点を削除します。**

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

   `name` プロパティが `justin` である頂点を削除します。
**重要**  
*ここで停止すると、完全な Apache TinkerPop Modern グラフが得られます。TinkerPop ドキュメントの[Traversal セクション](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps)の例では、Modern グラフが使用されています。*

1. **トラバーサルを実行します。**

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

   すべての `person` 頂点を返します。

1. **値付きのトラバーサルを実行します (valueMap())。**

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

   `marko` "knows" に該当するすべての頂点のキーと値のペアを返します。

1. **複数のラベルを指定します。**

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

   Neptune は、頂点の複数のラベルをサポートしています。ラベルを作成する際、`::` で区切ることで複数のラベルを指定できます。

   この例では、1 つの頂点に 3 つの異なるラベルを追加します。

   `hasLabel` ステップでは、この頂点を `hasLabel("Label1")`、`hasLabel("Label2")`、および `hasLabel("Label3")` の 3 つのラベルのいずれかと一致させます。

   `::` 区切り記号は、この使用のみに予約されます。

   `hasLabel` ステップで複数のラベルを指定することはできません。たとえば、`hasLabel("Label1::Label2")` はいずれにも一致しません。

1. **日付 / 時刻を指定します**。

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

   Neptune は Java Date をサポートしていません。代わりに、 `datetime()` 関数を使用します。`datetime()` は ISO8061 準拠 `datetime` 文字列を受け入れます。

   サポートされている形式は、`YYYY-MM-DD, YYYY-MM-DDTHH:mm`、`YYYY-MM-DDTHH:mm:SS`、`YYYY-MM-DDTHH:mm:SSZ` です。

1. **頂点、プロパティ、またはエッジを削除します。**

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

   ここでは、いくつかの削除例を示しています。
**注記**  
 `.next()` ステップは `.drop()` では機能しません。代わりに `.iterate()` を使用します。

1. 完了したら、次のように入力して Gremlin コンソールを終了します。

   ```
   :exit
   ```

**注記**  
各ステートメントを区切るには、セミコロン (`;`) または改行文字 (`\n`) を使用します。  
最終的なトラバーサルに先行する各トラバーサルは、`iterate()` を実行して終わる必要があります。最終的なトラバーサルからのデータのみが返されます。

# openCypher を使用して Amazon Neptune のグラフデータにアクセスする
<a name="get-started-graph-opencypher"></a>

openCypher の使用を開始するには、「[openCypher](access-graph-opencypher.md)」を参照するか、GitHub [Neptune グラフノートブックリポジトリ](https://github.com/aws/graph-notebook/tree/main/src/graph_notebook/notebooks)の openCypher ノートブックを使用してください。

# SPARQL を使用した Amazon Neptune のグラフデータへのアクセス
<a name="get-started-graph-sparql"></a>

SPARQL は、ウェブ用に設計されたグラフデータ形式であるリソース記述フレームワーク (RDF) のためのクエリ言語です。Amazon Neptune は、SPARQL 1.1 と互換性があります。つまり、Neptune DB インスタンス に接続して、[SPARQL 1.1 クエリ言語](https://www.w3.org/TR/sparql11-query/)仕様で記述されたクエリ言語を使用してグラフにクエリを実行できるということです。

 SPARQL のクエリは、返す変数を指定する `SELECT` 句と、グラフで一致するデータを指定する `WHERE` 句で構成されます。SPARQL クエリに慣れていない場合は、[SPARQL 1.1 クエリ言語](https://www.w3.org/TR/sparql11-query/#WritingSimpleQueries)にある「[シンプルなクエリの書き込み](https://www.w3.org/TR/sparql11-query/)」を参照してください。

Neptune DB インスタンスへの SPARQL クエリ用の HTTP エンドポイントは `https://your-neptune-endpoint:port/sparql` です。

**SPARQL に接続するには**

1. Neptune クラスターの SPARQL エンドポイントは、 CloudFormation スタックの**出力**セクションの **SparqlEndpoint** 項目から取得できます。

1. 以下のように入力して、HTTP `POST` と **curl** コマンドを使用して SPARQL **`UPDATE`** を送信します。

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

   前述の例では、次のトリプルを SPARQL デフォルトのグラフに挿入します。`<https://test.com/s> <https://test.com/p> <https://test.com/o>`

1. 以下のように入力して、HTTP `POST` と **curl** コマンドを使用して SPARQL **`QUERY`** を送信します。

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

   前述の例では、10 の制限がある `?s ?p ?o` クエリを使用して、グラフのトリプル (主語 - 述語 - 目的語) のうち最大 10 個を返します。その他の対象にクエリを実行するには、別の SPARQL クエリで置き換えます。
**注記**  
`SELECT` および `ASK` クエリの場合、レスポンスのデフォルトの MIME タイプは `application/sparql-results+json` です。  
`CONSTRUCT` および `DESCRIBE` クエリの場合、レスポンスのデフォルトの MIME タイプは `application/n-quads` です。  
すべての使用可能な MIME タイプのリストについては、「[SPARQL HTTP API](sparql-api-reference.md)」を参照してください。