

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

# SPARQL UPDATE LOAD を使用して Neptune にデータをインポートする
<a name="sparql-api-reference-update-load"></a>

SPARQL UPDATE LOAD コマンドの構文は、[SPARQL 1.1 アップデートの推奨事項](https://www.w3.org/TR/sparql11-update/#load)に記載されています。

```
LOAD SILENT (URL of data to be loaded) INTO GRAPH (named graph into which to load the data)
```
+ **`SILENT`** — (*オプション*) 処理中にエラーが発生した場合でも、オペレーションは成功を返します。

  これは、単一のトランザクションに `"LOAD ...; LOAD ...; UNLOAD ...; LOAD ...;"` のような複数のステートメントが含まれている場合に便利です。また、リモートデータの一部が処理できない場合でも、トランザクションを完了させる必要があります。
+ *ロードするデータの URL* — (*必須*) グラフにロードするデータを含むリモートデータファイルを指定します。

  リモートファイルには、次のいずれかの拡張子を指定する必要があります。
  + NTriples 用 `.nt`。
  + NQuads 用 `.nq`。
  + Trig 用 `.trig`。
  + RDF/XML 用 `.rdf`。
  + Turtle 用 `.ttl`。
  + N3 用 `.n3`。
  + JSON-LD 用 `.jsonld`。
+ **`INTO GRAPH`***(データをロードする名前付きグラフ)* — (*オプション*) データをロードするグラフを指定します。

  Neptune はすべてのトリプルを名前が付いたグラフに関連付けます。フォールバック名前付きグラフ URI、 `http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph`などを使用して、デフォルトの名前付きグラフを指定できます。次のようになります。

  ```
  INTO GRAPH <http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph>
  ```

**注記**  
大量のデータをロードする必要がある場合は、UPDATE LOAD ではなく Neptune バルクローダーを使用することをお勧めします。バルクローダーについては、[Amazon Neptune 一括ローダーを使用したデータの取り込み](bulk-load.md)を参照してください。

`SPARQL UPDATE LOAD` を使用して、 Amazon S3 から直接データをロードすることも、セルフホストウェブサーバーから取得したファイルからデータをロードすることもできます。ロードするリソースは Neptune サーバーと同じリージョンに存在し、リソースのエンドポイントは VPC でホワイトリストに登録されている必要があります。Amazon S3 エンドポイントを作成する方法については、[Amazon S3 VPC エンドポイントの作成](bulk-load-data.md#bulk-load-prereqs-s3) を参照してください。

すべての`SPARQL UPDATE LOAD` URI は `https://` で始まる必要があります。これには Amazon S3 URL が含まれます。

バルクローダーとは対照的に、`SPARQL UPDATE LOAD` への呼び出しは完全にトランザクション型です。

**SPARQL UPDATE LOAD を使用して Amazon S3 から Neptune にファイルを直接ロードする**

Neptune では、SPARQL UPDATE LOAD を使用するときに Amazon S3 に IAM ロールを渡すことはできないため、問題の Amazon S3 バケットはパブリックであるか、LOAD クエリで[署名付き Amazon S3 URL](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html)を使用する必要があります。

Amazon S3 ファイルの署名付き URL を生成するには、次のような AWS CLI コマンドを使用できます。

```
aws s3 presign --expires-in (number of seconds) s3://(bucket name)/(path to file of data to load)
```

次に、結果の署名付き URL を `LOAD` コマンドで使えます。

```
curl https://(a Neptune endpoint URL):8182/sparql \
  --data-urlencode 'update=load (pre-signed URL of the remote Amazon S3 file of data to be loaded) \
                           into graph (named graph)'
```

詳細については、「[リクエストの認証: クエリパラメータの使用](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html)」を参照してください。[Boto3 のドキュメント](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-presigned-urls.html)に、Python スクリプトを使用して署名付き URL を生成する方法が記載されています。

また、ロードするファイルのコンテンツタイプも正しく設定する必要があります。

1. 次のように `-metadata` パラメータを使用してファイルを Amazon S3 にアップロードするときにファイルのコンテンツタイプを設定します。

   ```
   aws s3 cp test.nt s3://bucket-name/my-plain-text-input/test.nt --metadata Content-Type=text/plain
   aws s3 cp test.rdf s3://bucket-name/my-rdf-input/test.rdf --metadata Content-Type=application/rdf+xml
   ```

1. メディアタイプの情報が実際に存在することを確認してください。以下を実行します:

   ```
   curl -v bucket-name/folder-name
   ```

   このコマンドの出力には、ファイルをアップロードするときに設定したメディアタイプ情報が表示されます。

1. その後、`SPARQL UPDATE LOAD` コマンドを使用してこれらのファイルを Neptune にインポートできます。

   ```
   curl https://your-neptune-endpoint:port/sparql \
     -d "update=LOAD <https://s3.amazonaws.com/bucket-name/my-rdf-input/test.rdf>"
   ```

上記の手順は、パブリック バケット、または LOAD クエリで [署名付き Amazon S3 URL ](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html)を使用してアクセスするバケットに対してのみ機能します。

 以下に示すように、プライベート Amazon S3 バケットからロードするようにウェブプロキシサーバーを設定することもできます。

**ウェブサーバーを使用して SPARQL UPDATE LOAD でファイルを Neptune にロードする**

1. Neptune とロードするファイルをホストしている VPC 内で実行されているマシンにウェブサーバーをインストールします。たとえば、Amazon Linux を使用している場合は、次のように Apache をインストールします。

   ```
   sudo yum install httpd mod_ssl
   sudo /usr/sbin/apachectl start
   ```

1. ロードしようとしている RDF ファイルコンテンツの MIME タイプを定義します。SPARQL はウェブサーバーから送信された `Content-type` ヘッダーを使用してコンテンツの入力形式を決定するため、ウェブサーバーに関連する MIME タイプを定義する必要があります。

   たとえば、ファイル形式を識別するために次のファイル拡張子を使用するとします。
   + NTriples 用 `.nt`。
   + NQuads 用 `.nq`。
   + Trig 用 `.trig`。
   + RDF/XML 用 `.rdf`。
   + Turtle 用 `.ttl`。
   + N3 用 `.n3`。
   + JSON-LD 用 `.jsonld`。

   ウェブサーバーとして Apache 2 を使用している場合は、ファイル `/etc/mime.types` を編集して次のタイプを追加します。

   ```
    text/plain nt
    application/n-quads nq
    application/trig trig
    application/rdf+xml rdf
    application/x-turtle ttl
    text/rdf+n3 n3
    application/ld+json jsonld
   ```

1. MIME タイプマッピングが機能することを確認します。ウェブサーバーを起動して実行し、選択した形式で RDFファイルをホストしたら、ローカルホストからウェブサーバーにリクエストを送信して設定をテストできます。

   たとえば、次のようなリクエストを送信します。

   ```
   curl -v http://localhost:80/test.rdf
   ```

   `curl` からの詳細な出力には、このような行が表示されるはずです。

   ```
   Content-Type: application/rdf+xml
   ```

   これは、コンテンツタイプマッピングが正常に定義されたことを示しています。

1. これで、SPARQL UPDATE コマンドを使用してデータをロードする準備が整いました。

   ```
   curl https://your-neptune-endpoint:port/sparql \
       -d "update=LOAD <http://web_server_private_ip:80/test.rdf>"
   ```

**注記**  
`SPARQL UPDATE LOAD` を使用すると、ロードされるソースファイルが大きい場合にウェブサーバーでタイムアウトが発生する可能性があります。Neptune は、ストリーミング時と、サーバーで設定したタイムアウトよりも時間がかかる大きなファイルでは、ファイルデータを処理します。これにより、サーバーが接続を閉じることがあります。その場合、Neptune がストリームで予期しない EOF を検出すると、次のエラーメッセージが表示されることがあります。  

```
{
  "detailedMessage":"Invalid syntax in the specified file",
  "code":"InvalidParameterException"
}
```
このメッセージが表示され、ソースファイルに無効な構文が含まれていると思われる場合は、ウェブサーバーのタイムアウト設定を大きくしてみてください。さらに、サーバーでデバッグログを有効にし、タイムアウトを探すことで、問題を診断することもできます。