メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

プレフィックスと区切り記号によるキーの階層的なリスト

プレフィックスと区切り記号のパラメーターを使用すると、リストオペレーションによって返される結果の種類が制限されます。プレフィックスを指定すると、そのプレフィックスで始まるキーだけが返されます。区切り記号を使用すると、共通のプレフィックスを持つすべてのキーが 1 つの集約されたリスト結果にロールアップされます。

プレフィックスと区切り記号のパラメーターの目的は、キーを階層的に構成および参照できるようにすることです。そのためには、まずバケットで使用する区切り記号を選択します。スラッシュ(/)など、キーの名前には使われないような記号を使用します。次に、階層に含まれるすべてのレベルを連結し、各レベルを区切り記号で区切ることで、キーの名前を構成します。

例えば、都市に関する情報を格納するとしたら、大陸、国、州または県の順に情報を整理するのが自然でしょう。通常、都市名に句読点が含まれることはないので、区切り記号としてスラッシュ(/)を選択できます。以下の例ではスラッシュ(/)区切り記号を使用しています。

  • Europe/France/Aquitaine/Bordeaux

  • North America/Canada/Quebec/Montreal

  • 北米/米国/ワシントン州/ベルビュー

  • 北米/米国/ワシントン州/シアトル

世界中の全都市のデータをこの方法で格納した場合、階層のないフラットなキーネームスペースは管理しにくくなります。リストオペレーションで PrefixDelimiter を使用することで、データをリストするために作成した階層を利用できます。例えば、米国のすべての州をリストするには、Delimiter='/' および Prefix='/North America/USA/' と設定します。データが存在するカナダのすべての州をリストするには、Delimiter='/' および Prefix='North America/Canada/' と設定します。

リストリクエストで区切り記号を使用すると、1 レベルの階層だけを参照でき、それより深いレベルで入れ子にされている (おそらく数百万もの) キーはスキップおよび集約されます。例えば、以下のキーを含むバケット(ExampleBucket)があるとします。

sample.jpg

photos/2006/January/sample.jpg

photos/2006/February/sample2.jpg

photos/2006/February/sample3.jpg

photos/2006/February/sample4.jpg

このサンプルバケットはルートレベルに sample.jpg オブジェクトだけを持ちます。バケット内のルートレベルオブジェクトだけをリストするには、バケットに対する GET リクエストを「/」の区切り文字と共に送信します。Amazon S3 からのレスポンスでは sample.jpg オブジェクトキーが返されます。このキーには「/」の区切り文字が含まれていないからです。その他すべてのキーには区切り文字が含まれます。Amazon S3 によってこれらのキーがグループ化され、特定のプレフィックス値を持つ 1 つの CommonPrefixes 要素が返されます。この場合のプレフィックス値は photos/ であり、これはキーの先頭から、指定した区切り文字の最初の出現箇所までのサブ文字列です。

Copy
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>ExampleBucket</Name> <Prefix></Prefix> <Marker></Marker> <MaxKeys>1000</MaxKeys> <Delimiter>/</Delimiter> <IsTruncated>false</IsTruncated> <Contents> <Key>sample.jpg</Key> <LastModified>2011-07-24T19:39:30.000Z</LastModified> <ETag>&quot;d1a7fb5eab1c16cb4f7cf341cf188c3d&quot;</ETag> <Size>6</Size> <Owner> <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID> <DisplayName>displayname</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> <CommonPrefixes> <Prefix>photos/</Prefix> </CommonPrefixes> </ListBucketResult>