[431] コレクションは、資源の集合体を表します。 HTTP 自体の用語ではありませんが、 IETF の HTTP 関連各仕様でよく使われる概念です。
[8] コレクションは、 子供の資源への参照の包含子としても機能する資源です >>7。
[9] コレクションとは、パスセグメントと資源との写像の集合を含む資源であって、 WebDAV 仕様書の要件に従うものです >>7, >>11。
[12] HTTPメソッドのいくつかはコレクションにのみ適用されますが、 いくつかはコレクションに含まれている資源の一部または全部にも適用されます。 範囲が明らかでない時には、適用対象となる深さを 0 (コレクションのみ)、 1 (コレクションの内部メンバーまで)、無限大 (コレクションのメンバーすべて) と選択できます。 >>11
[23] 慣習により、鯖は、末尾に /
のない名前でコレクションが参照された際には、
/
があったものとして扱っても構いません。その場合、
応答には /
で終わる URL を指定した
Content-Location:
ヘッダーを含めるべきです。
コレクションを参照する URL を生成するときには、
/
を含めるべきです。 >>11
[24] コレクションの URL は /
で終わるべきです >>29。
クライアントはコレクション名としては /
があるものを用いるべきです。そうしない場合リダイレクトに対処する必要があります。
>>11
... を含みます。その他に、GET
で返される
payload body などの状態も持つことができます。 >>11
[15] 特性は、コレクション以外の資源の特性と同様のものです >>11。
[14] あるパスセグメントとある資源の写像があるコレクションに含まれている時、 その資源はコレクションに含まれている >>11 (内部メンバーである >>7) といいます。
[16] コレクションは、あるパスセグメントに関する写像を高々1つだけ含むことができます。 複数のパスセグメントから同じ資源への写像を持つこともできます。 >>11
[19] WebDAV に適合する資源にパスセグメントを足すと別の WebDAV に適合する資源となるなら、前者の資源は後者の資源を含んだコレクションでなければなりません >>11。
[20] 例えば http://example.com/foo/
と http://example.com/foo/bar
が共に WebDAV 資源なら、 http://example.com/foo/
はコレクションで、
bar
から http://example.com/foo/bar
への写像を含んでいなければなりません。
[21] WebDAV に適合する資源にパスセグメントを足した URL で表される資源は、必ずしも WebDAV に適合する資源でなくても構いません。 その場合、前者の資源はコレクションとして後者の資源を含んでも構いませんが、含まなくても構いません >>11。
[26] 例えば http://example.com/foo/index.html
が自動生成されるなら、
これは http://example.com/foo/
に含まれないかもしれません。
[22] WebDAV に適合する資源を内部メンバーとして含まない WebDAV に適合する資源は、コレクションである必要はありません。 >>11
[27] WebDAV に適合する資源を含む上位の階層が WebDAV に適合する資源であるとは限りません。クライアントはそのような場合にも対応できなければなりません >>11。
[28] http://example.com/foo/bar
が WebDAV に適合する資源であっても、
http://example.com/foo/
はそうでないかもしれません。
[10] 次の各項も参照してください。
collection
要素 (WebDAV)[31] DAV:
名前空間の
collection
要素は、
当該資源がコレクションであることを表します >>30。
[32] コレクションの DAV:resourcetype
特性は、
この要素を含まなければなりません >>30, >>34。
[33] この要素は通常は空要素ですが、 拡張により定義された子要素を使うこともできます >>30。
[35] DAV:resourcetype
特性が
collection
要素を含むならコレクション、
含まないならコレクションではない資源として
(他の要素に関わらず) 扱うべきです >>34。
Collection - A resource that contains a set of URIs, termed member URIs, which identify member resources and meets the requirements in section 5 of this specification.
Member 資源を識別する member URI という URI の集合を含み、 この仕様書 (RFC 2518) の5章の用件に合致する資源。 (RFC2518)
GET
[424] 集成資源は、エントリーが集成中の成員の IRI を含むようなAtomフィード文書の形の表現を提供しなければなりません。
POST
[5] 資源を作成するには、集成の URI に成員の表現を
POST
します。
AtomPub
[420] AtomPub では1つの資源の複数の表現を作成する方法を規定していません。 AtomPub
[4] 仕様書:
[211] 要求本体は、 Atomエントリーであっても、なくても構いません。
(エントリー資源も媒体資源も POST
できます。)
AtomPub
[419] クライアントは実体が Atomエントリーであることを表すために媒体型
application/atom+xml
または
application/atom+xml;type=entry
を用いることができます。
AtomPub
[208] 201
応答符号は、成員の作成に成功したことを示します。
その場合、応答本体を返すべきであり、返す場合は作成された資源を表す
Atomエントリー文書でなければなりません。
鯖は POST
されたエントリーを自由に変更して構いませんから、
クライアントと鯖が新たに作られたエントリーを共有する意味で有用です。
AtomPub
[209] 成員資源が作成された場合、その成員エントリーURI
を集成の応答の
Location:
頭欄に含まなければなりません。
AtomPub
[210] 要求が Atomエントリー文書を含んでいる場合で、
それに対する応答が Content-Location:
頭欄を含み、
それが Location:
頭欄と文字レベルで一致する場合は、
クライアントは応答実体が新しく作られたエントリーの完全な表現であると解釈してかまいません。
そうでない場合、クライアントは応答実体が作成された資源の完全な表現であると解釈してはなりません。
AtomPub
POST /edit/ HTTP/1.1 Host: example.org User-Agent: Thingio/1.0 Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Type: application/atom+xml;type=entry Content-Length: nnn Slug: First Post <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom"> <title>Atom-Powered Robots Run Amok</title> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <author><name>John Doe</name></author> <content>Some text.</content> </entry>
HTTP/1.1 201 Created Date: Fri, 7 Oct 2005 17:17:11 GMT Content-Length: nnn Content-Type: application/atom+xml;type=entry;charset="utf-8" Location: http://example.org/edit/first-post.atom ETag: "c180de84f991g8" <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom"> <title>Atom-Powered Robots Run Amok</title> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <author><name>John Doe</name></author> <content>Some text.</content> <link rel="edit" href="http://example.org/edit/first-post.atom"/> </entry>
この例では提出されたエントリーに鯖によって編集用の URL を表す
atom:link
要素が加えられています。
Content-Location:
欄は含まれていませんから、
この応答実体が実際に作成された資源の表現そのものと完全に同一かどうかは不明です。
[3]
Atom 集成に非 Atomエントリー表現が
POST
により提出されると、鯖は、
要求実体に対応する媒体資源と、
媒体資源についてのメタデータと媒体資源の IRI
を含む媒体リンク・エントリーの2つの資源を作らなければなりません。
媒体リンク・エントリーは Atomエントリーとして表現され、
集成中に現れることになります。
AtomPub
[212] 集成は、 POST
された実体が認められない、
あるいは未対応の媒体型である場合、 415
状態符号の応答を返して構いません。
鯖はサービス文書の app:accept
要素を使って受け入れる媒体型を示すことができます。
AtomPub
[417] 作成に成功した場合、応答は Location:
頭欄に媒体リンク・エントリーの
URI を含めなければなりません。
AtomPub
[6] 媒体リンク・エントリーは、媒体資源IRI を含んだ、リンク関係が edit-media
である atom:link
要素を含むべきです。
媒体リンク・エントリーは、 src
属性を持った
atom:content
要素を含まなければなりません。
その src
属性の値が新たに作られた媒体資源の IRI
です。その IRI は媒体資源IRI と同じであっても構いませんし、
異なっていても構いません。 (例えば、src
の資源は静的なもの、媒体資源IRI の資源は動的なものとしても構いません。)
AtomPub
[418] 鯖は媒体リンク・エントリーの作成時に
atom:summary
、atom:id
、
atom:author
、atom:title
のような必須の要素を適当な情報源から得られた情報によって補っても構いません。
鯖はこれら鯖が選んだ値をクライアントが変更することを認めないかもしれません。
AtomPub
POST /edit/ HTTP/1.1 Host: media.example.org Content-Type: image/png Slug: The Beach Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Length: nnn ...binary data...
鯖は要求実体を新たに作成した媒体資源の表現とし、
新たに媒体リンク・エントリーを作成します。
成功した場合、 201
応答を返します。
HTTP/1.1 201 Created Date: Fri, 7 Oct 2005 17:17:11 GMT Content-Length: nnn Content-Type: application/atom+xml;type=entry;charset="utf-8" Location: http://example.org/media/edit/the_beach.atom <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom"> <title>The Beach</title> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2005-10-07T17:17:08Z</updated> <author><name>Daffy</name></author> <summary type="text" /> <content type="image/png" src="http://media.example.org/the_beach.png"/> <link rel="edit-media" href="http://media.example.org/edit/the_beach.png" /> <link rel="edit" href="http://example.org/media/edit/the_beach.atom" /> </entry>
Location:
で示されているのが作成された媒体リンク・エントリーの URL
です。
edit-media
としてリンクされているのが作成された媒体資源の URL です。
新しい PNG 画像に更新する場合は後者に POST
します。
PUT /edit/the_beach.png HTTP/1.1 Host: media.example.org Content-Type: image/png Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Length: nnn ...binary data...
HTTP/1.1 200 Ok Date: Fri, 8 Oct 2006 17:17:11 GMT
また、先程の前者の URL を使って、クライアントは媒体リンク・エントリーを得ることができます。
GET /media/edit/the_beach.atom HTTP/1.1 Host: example.org Authorization: Basic ZGFmZnk6c2VjZXJldA==
応答は
HTTP/1.1 200 Ok Date: Fri, 7 Oct 2005 17:18:11 GMT Content-Length: nnn Content-Type: application/atom+xml;type=entry;charset="utf-8" ETag: "c181bb840673b5" <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom"> <title>The Beach</title> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2005-10-07T17:17:08Z</updated> <author><name>Daffy</name></author> <summary type="text" /> <content type="image/png" src="http://media.example.org/the_beach.png"/> <link rel="edit-media" href="http://media.example.org/edit/the_beach.png" /> <link rel="edit" href="http://example.org/media/edit/the_beach.atom" /> </entry>
メタデータを更新するには、この URL に PUT
します。
PUT /media/edit/the_beach.atom HTTP/1.1 Host: example.org Authorization: Basic ZGFmZnk6c2VjZXJldA== Content-Type: application/atom+xml;type=entry Content-Length: nnn If-Match: "c181bb840673b5" <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom"> <title>The Beach</title> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2005-10-07T17:17:08Z</updated> <author><name>Daffy</name></author> <summary type="text"> A nice sunset picture over the water. </summary> <content type="image/png" src="http://media.example.org/the_beach.png"/> <link rel="edit-media" href="http://media.example.org/edit/the_beach.png" /> <link rel="edit" href="http://example.org/media/edit/the_beach.atom" /> </entry>
この例では atom:summary
が変更されています。
成功した場合は 200
応答が返されます。
HTTP/1.1 200 Ok Date: Fri, 7 Oct 2005 17:19:11 GMT Content-Length: 0
[421] Atomエントリー以外の Atom文書 (Atomフィードなど)
が POST
された場合の結果は未定義です。
AtomPub
[423] 多分、鯖は PUT
されたエントリーがおかしなことを言っていないかチェックする必要がありますね。
媒体資源が他の鯖にあることになっているとか、
媒体リンク・エントリーが元の媒体資源とは別のものを指すことになっているとか。
app:collection
要素 (AtomPub)[202] AtomPub の app:collection
要素は、
集成を説明します AtomPub。
collection
app:workspace
の子要素として、
atom:feed
の子要素として、
atom:source
の子要素としてatom:title
& app:accept
* &
app:categories
*href
仕様書:
[203] この要素は丁度1つの atom:title
要素を含まなければなりません
AtomPub。
[204] app:accept
子要素の順序は意味を持ちません。
AtomPub
[206] この要素は atom:workspace
要素の子要素として、
作業空間に含まれる集成の説明のために使うことができます。
[207] この要素は Atomフィード文書の
atom:feed
要素や atom:source
要素の子要素として使うことができます。新しいエントリーを追加するとそのフィードに現れるような集成を表します。
AtomPub
collection
(Web Linking)[427] Web Linking のリンク関係型 collection
は、
対象資源が文脈資源をメンバーとして含むコレクションであることを表します >>426。
Link: <...>; rel="collection"; title="Return to Product Group X"
[429] Web Linking は HTTP などで用いられるものですが、 RFC 6573 にはなぜか関係がないはずの HTML で使った例 >>426 が載っています:
<a href="..." rel="collection">View other widgets</a> <a href="..." rel="collection">View all discontinued items</a>
[430] 自身がコレクションでもあり、また他のコレクションにも含まれる場合、
item
と併用することができます >>426。
Link: <...>; rel="collection item"; title="A Review of Issac Asimov's Collected Works - Vol. I"